Общее Flutter-приложение Space: общение и управление независимыми серверами в одном интерфейсе.
- Установщики и релизы.
- Руководство приложения.
- Домашний сервер — «Выйти в эфир».
- Перенос пространства на другой компьютер.
- Полный перенос всего устройства из настроек.
- Большие архивы Android: потоки, отмена и сохранность копии.
- v0.8.0: реализация, результаты и границы проверок.
- Восстановление полного устройства на чистой установке.
- Полный и ограниченный режимы сопряжения: полномочия и выбор пространств.
- Зашифрованный каталог пространств, настроек и подписок.
- Копии на сервере пространства: угрозы и восстановление.
- Передача каталога при сопряжении: модель угроз, Noise/Snow и правила подтверждения.
- Аварийное восстановление каталога: SIGKILL, холодный запуск и журнал.
- macOS: системный login Keychain, сохранение ключей и аварийная проверка.
- Перенос отдельного домашнего пространства и рабочего состояния MLS.
- Диск, резервные копии и безопасная очистка.
- Управление сервером.
- Голосовые комнаты и настройки звука.
- Профиль участника пространства.
- Лента публикаций.
- Непрочитанное в ленте и результаты выпуска.
- Поиск внутри форума и ленты.
- Общий поиск пространства.
- Социальная лента: ответы, репосты и цитирование — выпущено со схемой 40.
- Подписки на участников и персональная лента — выпущено в v0.7.29 / runtime v0.7.23, схема 41.
- Ограниченный Markdown и проверка отображения.
- Экспорт собственного содержимого в JSON.
- Markdown, экспорт и подписки: результаты совместимого выпуска.
- Сводка: требует внимания и новое в сообществах.
- Совместимый выпуск поиска и сводки.
- Реакции, избранное и результаты совместимого выпуска.
- Общий поиск и социальная лента: результаты выпуска.
- Сервер и runtime.
- Протокол, архитектура и промосайт.
Исходный этап P0 завершён: отчёт и сырые результаты CI, TODO. Для повторения памяти Flutter/runtime предназначен plugin-memory-baseline.yml; для двух нативных голосовых клиентов с ненулевым виртуальным аудио, TURN TCP и восстановлением — plugin-voice-linux.yml. Физическая акустика и внешний NAT этим стендом не проверяются. Начат P1, контракты и прототипы расширений. Изолированный рендерер client/lib/ui/extensions_p1.dart поддерживает section/text/button, переводы, fallback и команды через Cubit; в навигацию рабочего приложения пока не включён. Проверки запускаются через plugin-p1.yml. Добавлен постоянный локальный реестр клиентских расширений: журнал снимков, проверка ревизии/поколения и восстановление после завершения процесса. Отдельный workflow plugin-p1-local-registry.yml проверяет Linux, Windows и macOS; локальный хост жизненного цикла связывает реестр с переходами, сессиями и разрешениями. Добавлена связь локальной сессии с событиями Flutter и завершением приложения. Подключены пароль локального профиля и окно разблокировки на Cubit. Нативная приёмка профиля проверяет системное хранилище и повторный вход после перезапуска. В хост P1 добавлены выбор папки, перечисление файлов и чтение с отзывом доступа. В разделе «Мой доступ и устройства» доступен экран выдачи разрешения на каталог. Приёмка первого запуска Windows проверяет разблокировку профиля без предварительного сворачивания окна. Установщику предстоит регистрировать хосты установленных экземпляров и поставлять файловый процесс.
Добавлен единый внутренний Runtime и сквозной демонстрационный путь: экспериментальный dispatcher → изолированный WASM → Flutter, с проверкой прав и восстановлением после отказа. Стенд запускается через space-app/plugin-p1-demo.yml; рабочая навигация ещё не подключена. Подготовлены protobuf/Connect bindings для следующего среза с сессиями и ACL ядра; приложение пока не использует этот новый RPC. Серверный прототип мутаций сохраняет результат команды для повторов; блокировки связанных строк, конкурентный отзыв полномочий и восстановление после SIGKILL/потери ответа проверены в серверном CI. Добавлен внутренний серверный прототип доставки outbox с безопасными повторами; клиентская подписка и рабочая рассылка ещё не подключены. Согласованное восстановление серверного состояния расширений проверено на трёх ОС; форматы копий сохранены. Конкурентные изменения прав и истечение доступа перед commit проверены в CI; длительная смешанная нагрузка остаётся открытой. Совместная авария сервера и WASM worker и восстановление до/после commit проверены в Linux CI. Отказ PostgreSQL и неопределённый COMMIT проверены с ограниченными повторами той же команды; рабочая политика повторов клиента ещё не подключена.
Конечные критерии закрытия P1 — E01–E07 отделяют контракты и прототипы от рабочей интеграции P2/P3. Все семь условий пока открыты; общий бюджет macOS и платформенная приёмка остаются обязательными. Закрытие P1 не означает готовность 0.9.0. Подготовлен кандидат правил ошибок и повторов с общей политикой Go/Dart; автоматическая отправка повторов рабочего клиента не подключена. Добавлена сверка квитанции через отдельный RPC; отсутствие результата не разрешает повторное исполнение. Подготовлено хранение ключа после удаления старого ответа; обслуживание прототипа не включено в рабочем сервере. Добавлен барьер истории после восстановления старой копии: прежний запрос нельзя перепривязать автоматически; клиентский исполнитель ещё не подключён.
Спецификация системы плагинов Space описывает будущие серверные WASM-пакеты и переход Чатов, Комнат, Обсуждений и Ленты. Со стороны приложения планируются реестр разделов, декларативные страницы, настраиваемые элементы «Обзора» и управление расширениями. Ключи MLS, криптография и работа с аудиоустройствами остаются в доверенном клиенте. Загрузка произвольного Dart-кода, клиентский WASM и веб-приложения расширений не входят в первый этап.
Схемы архитектуры приложения и сервера показывают путь вызова расширения, состав «Обзора» и установку из Git. Отдельно отмечены проверенные прототипы P1 и оставшаяся работа; целевая схема не означает готовность рабочего продукта.
Добавлен прототип короткого окна повторов и клиентского исполнителя: неизменный снимок команды, отмена и сверка после повторного открытия. Рабочая интеграция и полная платформенная приёмка клиентского журнала остаются открытыми.
Аварийное восстановление клиентского журнала на Linux проверяет системное хранилище, SIGKILL, новую сессию того же пользователя и текущие ACL. Остальные платформы и пользовательский интерфейс восстановления требуют отдельной приёмки.
Совместная проверка клиента и неопределённого COMMIT связывает системный журнал с аварией PostgreSQL: после холодного запуска команда только сверяется. Границы и результаты приёмки приведены в отчёте.
Кандидат жизненного цикла установки задаёт включение, выключение, обновление, карантин и удаление кода с сохранением данных. Изолированный координатор проверяет допуск и отмену вызовов; рабочая интеграция остаётся открытой.
Lifecycle с сессиями/ACL ядра и COMMIT добавляет управляемый допуск, отмену и аудит владельца. Продолжение — постоянный реестр и восстановление после перезапуска. Добавлен постоянный аудит переходов владельца и ядра. На трёх ОС проверено архивное восстановление реестра и аудита. Проверен перенос ZIP между Linux, Windows и macOS во всех шести направлениях; исправлена несовместимость сжатия Windows-дампов. Добавлен публичный API реестра и аудита P1 через gRPC/Connect с проверкой владельца, сессий и ACL. Рабочее подключение API, обновление пакетов и миграции остаются открытыми.
План обновления P1 связывает пакеты, шаги миграции, разрешения и конкретную резервную копию. Добавлены постоянный журнал и восстановление подготовки миграции. В GitHub CI проверены изолированная WASM-миграция и атомарная публикация первого обновления; границы прототипа и результаты приёмки указаны в отчёте. Продолжение: последовательные обновления и история пакетов и схем, включая восстановление второго обновления после сбоев. Архивное восстановление истории и перенос ZIP между ОС описаны отдельным отчётом. Несколько экземпляров и согласованное обновление: общий план установки, отдельные данные и курсоры, атомарная публикация и восстановление после сбоев.
Рекомендуемый порядок: 0.8.0 — сопряжение и зашифрованные резервные копии, затем 0.9 — основа расширений, 0.10 — Обсуждения и Лента, 0.11 — Чаты и Комнаты, 1.0 — стабильное ядро и API. В v0.8.0 реализованы экраны сопряжения на Cubit/Freezed и QR, полный/ограниченный режимы, каталог с ревизиями настроек, переносимым профилем голоса и зашифрованной передачей через Snow/Noise. Копии хранятся на одном выбранном сервере пространства с подтверждением и безопасной очисткой старых версий; отдельные службы не нужны. Текущая схема — 46, манифесты каталога — v4/v5 с чтением прежних версий. Общие TODO и milestones и обзор проверок содержат оставшуюся приёмку. Номера runtime независимы; публичная система расширений в этот выпуск не входит.
Опубликован клиент v0.8.1+61 с закреплённым runtime v0.8.0: схема PostgreSQL 46, голосовой профиль 3. Новые установки получают исправление экспорта и восстановления между дисками Windows. Обновление уже установленного сервера подтверждает владелец; перед ним сохраните резервную копию пространства. Релизный CI и проверка публичных файлов, подписи Android и встроенного каталога успешны. Изменения, границы восстановления.
В main подготовлено исправление macOS для сборок без Apple-подписи: системный login Keychain вместо недоступного Data Protection Keychain (ошибка −34018). Аварийный CI и правила сохранения ключей подтверждены; опубликованный v0.8.1 ещё не содержит это исправление.
Результаты выпуска отметок чтения: CI, опубликованные установщики и контрольные суммы. Предыдущие пары: поиск и сводка v0.7.20 / v0.7.16, первый срез ленты v0.7.19 / v0.7.15.
На сайте можно выбрать светлую или тёмную тему снимков. Основные экраны промогалереи можно воспроизвести в обеих темах: задайте SPACE_SITE_GALLERY_OUTPUT и запустите из client flutter test test/site_gallery_test.dart. Это снимки полного SpaceShell с демонстрационной сессией, полученные widget-тестами.
Android: установите Space-android.apk из выпуска. Мобильное приложение
подключается к пространствам по ссылке или QR (камера либо изображение),
поддерживает чат и управление. Создание домашнего сервера доступно только
на Windows, macOS и Linux. Обновления Android устанавливаются новым APK,
подписанным тем же ключом.
При открытии приложения показывается общая сводка по сохранённым серверам. У каждого сервера — отдельная вкладка-иконка слева, свой список каналов, права и сессия. Dashboard суммирует доступные каналы и непрочитанные; переключение сохраняет черновики и соединения других пространств.
Снимок Flutter-виджетов v0.2.2 с двумя демонстрационными серверами, обновлён 14 октября 2026 года. Все десять экранов. Вложения доступны в чатах начиная с v0.3.0. Лента и медиа остаются будущими этапами; форум доступен с v0.7.13; снимок отражает прежнюю версию интерфейса.
Чат, автоматическое обновление каналов и прав, непрочитанные сообщения, настройки, каналы/ACL, участники, приглашения, устройства, recovery-карточки и сопряжение. Локализация: русский, упрощённый китайский и английский для оболочки, обзора, поиска, личных настроек, основных элементов подключения, чата и домашнего запуска; настройки сервера, назначение владельца и выдача разрешения устройству также переведены. Каналы и редактор прав также переведены; смена языка сохраняет несохранённые названия и ACL. Участники, роли и блокировка также переведены; смена языка сохраняет поиск и несохранённые изменения. Приглашения также переведены: создание, срок, число использований, копирование и отзыв. Устройства, разрешения и отзыв доступа также переведены. Общие формы восстановления, сопряжения, смены ключа и QR-камеры также переведены. Сообщения операций и подтверждения восстановления, сопряжения и смены ключа также переведены. Низкоуровневые ошибки криптографии, запуска и сервера пока требуют отдельного перевода.
«Выйти в эфир» устанавливает проверенный runtime из space-server, создаёт собственную PostgreSQL и сертификат для статического IPv4, назначает владельца локально и открывает управление в этом же приложении. После запуска кнопка становится «Отключиться». Повторный запуск использует тот же сервер и данные. Для друзей нужен проброс TCP 8443 и разрешение брандмауэра.
Оболочка по согласованному концепту: кнопки пространств без фоновой панели, скруглённый слева список каналов с прямым стыком чата, компактная карточка справа и входящие/исходящие пузырьки. Снимок получен из настоящих Flutter-виджетов с демонстрационными данными, а не из работающего сообщества. Палитры, логотип и локальные шрифты сохранены. Снимок иллюстрирует интерфейс с демонстрационным разговором.
Flutter 3.47.8 и входящий в него Dart 3.13.7 (Flutter закреплён в CI). Используем свежие стабильные совместимые версии; результаты обновления и ограничения зависимостей. Из каталога client:
flutter pub get
dart run build_runner build
flutter run -d windows
flutter analyze --no-pub
flutter test --no-pubОбщие пакеты находятся в packages/. Исходники сервера здесь не дублируются. Протокол лежит в space-protocol; сгенерированные Dart bindings сохраняются в client/lib/src/generated. Из корня этого репозитория генерация: buf generate ../space-protocol/protocol/proto --template client/buf.gen.yaml.
Состояние приложения организовано через BLoC/Cubit; в текущих исходниках 14 моделей состояний генерируются Freezed, включая ленту, её черновики и управление. Правила читаемости и проверки, аудит и результаты рефакторинга от 23 октября.
В клиенте v0.7.16 и runtime v0.7.13 добавлены жалобы на темы и ответы, очередь модерации и решения с причиной и аудитом. Данные заявителя не возвращаются модераторам; сервер проверяет права и ограничивает повторные жалобы. Возможности и ограничения, 15 снимков полного работающего приложения.
В клиенте v0.7.19 каталог «Эфира» закрепляет опубликованный runtime v0.7.15 для Windows x64, Linux x64 и macOS arm64. Архивы, дескрипторы, размеры и SHA-256 полностью проверены. Сначала обновите клиент, сохраните резервную копию пространства и ключей MLS, затем примените обновление сервера. Схема PostgreSQL — 31, голосовой профиль — 3; бинарный откат к схеме 30 требует восстановления копии. Форум и лента доступны серверу без MLS/E2EE; уже скачанные копии не отзываются.
Первый срез ленты milestone «Сообщества» опубликован в паре v0.7.19 / v0.7.15: хронология, комментарии, вложения, раздельные права, жалобы и модерация (core.feed.v1, схема 31). Описание первого среза, снимки Windows-приложения. Последующие выпуски добавили поиск, уведомления, профиль участника, реакции, избранное и социальную ленту. Подписки, персональная лента, ограниченный Markdown и экспорт собственного содержимого выпущены в v0.7.29 и сохранены в v0.8.0. Android на физическом устройстве не проверяется по решению пользователя. Развитие аудита блокировок, несколько коллекций внутри одного канала и оставшаяся ручная приёмка сохраняются в TODO. Выпуск v0.8.0 не закрывает незавершённые критерии «Сообществ» автоматически.
Результаты проверки форума на Windows и воспроизводимый стенд tools/check_forum_windows.ps1. Для ленты используется параметр -Scenario feed; контракт и правила доступа — ADR-046.
В боковой панели — чаты, комнаты и обсуждения с едиными отступами и подстройкой длинных заголовков. Управление пространством, избранное и файлы находятся в «Обзоре». Плавные переходы сохраняют черновики и учитывают системное отключение анимаций. Поле ответа общее с чатом: эмодзи, вложения и отправка; подсказка «Что у вас нового?» убрана.
| Система | Скачать последнюю версию |
|---|---|
| Windows 10/11 x64 | Установщик EXE |
| macOS Apple Silicon | Образ DMG |
| Linux x64 | Установщик RUN |
| Android | Подписанный APK |
SHA-256 установщиков. Ссылки автоматически ведут на последний публичный выпуск. Отдельная подпись манифеста настольного обновления не используется; загрузка проверяется по размеру и SHA-256. Android APK подписывается ключом выпуска, и обновление требует сохранения этой подписи. В установленной Windows-копии приложение запускает установщик и перезапускается после обновления. Как обновить, как восстановить домашний сервер.
В срезе v0.7.13 локально прошли 777 Flutter-тестов (19 штатных пропусков), анализ клиента и пакета управления, проверка COG ≤ 15, Windows Debug и hot reload. Стенд с 32 настоящими WebRTC-соединениями проверил все 992 направления RTP, отказ лишнему участнику и повторное использование места. Это не приёмка разговора 32 людей на реальных устройствах через интернет. Аппаратные проверки голоса и их границы.
Для v0.7.16 локально прошли 795 Flutter-тестов (21 штатный пропуск), анализ и проверка COG ≤15. После закрепления runtime прошли ещё пять тестов каталога, установки и перезапуска. Полный Go-прогон с PostgreSQL, права и scope, жалобы, решения, аудит, защита файлов, гонки и миграция 29→30 прошли. Windows Debug запущен с настоящим сервером и двумя участниками; подготовлены 15 снимков полной оболочки. Релизные CI и установка опубликованного runtime на трёх ОС подтверждены выше.
Тег vX.Y.Z запускает проверки и сборку Windows Setup, macOS DMG, Linux RUN и подписанного Android APK. CI публикует выпуск только после успешных сборок и проверок; описание берётся из одноимённого раздела Changelog.md, вместе с установщиками публикуется SHA-256. Подробности.
Windows прошла нативные стенды аудио и переподключения. Ручные акустика, физические клавиши/гарнитуры, публичный TURN/TLS, перенос на чистую ОС и приёмка на реальном оборудовании macOS/Linux ещё не завершены; Android 10 проверен на Honor PCT-L29 вместе с Windows через TURN TCP, включая фон и восстановление. Android 12+/14+, Bluetooth и длительная нагрузка ещё требуют проверки. Эти ограничения не закрываются зелёным CI: открытая матрица Р1–Р12. DMG пока без подписи Apple и notarization. Звук доступен runtime и не является MLS/E2EE; экспериментальные ограничения MLS сохраняются.
Вложения до пяти файлов по 20 МиБ, независимая политика файлов и квоты каждого сервера, а также уникальное имя участника доступны начиная с v0.3.0. Для клиента v0.7.19 используйте runtime v0.7.15 со схемой 31; прежняя рекомендация runtime v0.3.0 относится к историческому выпуску.
Резервные копии по расписанию и настройки хранения.
Форум в v0.7.16 / runtime v0.7.13: темы, ответы и серверная модерация.
Выпуск v0.7.16 добавляет жалобы, очередь и решения модератора с причиной и аудитом. Требуется runtime v0.7.13 со схемой 30 / core.forum.reports.v1. Сценарий и ограничения, полное приложение.
Клиентские WASM-расширения и пример «Игры»: целевая установка из Git в работающее приложение, локальные данные и разрешения устройства. Статус — проектирование; клиентский хост и CI-приёмка ещё предстоят.

