Опубликован runtime v0.7.18, совместимый с клиентом v0.7.23. Go 1.27.3, PostgreSQL 17.11; миграции схемы 33→34→35, голосовой профиль 3 сохранён. Структурированные упоминания форума, ленты и обычных чатов, непросмотренные упоминания и ответы в персональной сводке. Изменения, отчёт совместимого выпуска.
Релизный CI прошёл на Windows x64, Linux x64 и macOS arm64: TLS, обновление с сохранением данных, перенос, восстановление MLS и проверка гонок. Все три runtime-архива, три JSON-дескриптора и SHA256SUMS.txt скачаны полностью; размеры, SHA-256 и CRC проверены, во всех архивах подтверждена схема 35. Выпуск Latest, без draft и prerelease. Настоящий опубликованный Linux-установщик v0.7.18 прошёл проверку скачивания, SHA-256, PostgreSQL, TLS pin, настройки владельца и штатной остановки. Совместимость с опубликованным клиентом v0.7.23 подтверждена его полным релизным CI.
Перед обновлением сохраните резервную копию пространства и ключей MLS. Установленные данные не заменяются комплектом runtime.
Runtime v0.7.15 включает FeedService, capability core.feed.v1 и миграцию 31: отдельные права публикации и комментирования, файлы, жалобы и атомарную модерацию. Для ленты требуется клиент v0.7.19, закрепляющий этот runtime. Результаты совместимого выпуска, возможности и результаты проверки, контракт ADR-046.
Runtime v0.7.16 включает CommunitySearchService, capability core.community.search.v1 и миграцию 31→32. Поиск тем, ответов, публикаций и комментариев ограничен выбранным разделом и повторно проверяет серверные права на каждой странице. Контракт ADR-047, поведение клиента.
В runtime v0.7.17 добавлены core.feed.read.v1 и миграция 32→33: персональные монотонные отметки публикаций и комментариев ленты, общие для устройств principal. Списки и сводка учитывают только видимое непрочитанное; каждый запрос проверяет доступ. Контракт ADR-049, поведение и проверки клиента.
В v0.7.16 также входит персональная сводка CommunityOverviewService с capability core.community.overview.v1: свежие темы и публикации, непрочитанные ответы в собственных темах и число жалоб для модератора. Каждый запрос проверяет доступ к выбранному разделу. Новая миграция сверх схемы 32 не требуется. Контракт ADR-048, поведение сводки.
Предыдущий runtime v0.7.10: форум с темами, ответами, серверной модерацией и вложениями до пяти файлов по 20 МиБ. Схема PostgreSQL 27; требуется клиент v0.7.13. Перед миграцией сохраните резервную копию. Форум не использует MLS/E2EE.
В runtime v0.7.10 голосовые комнаты поддерживают настраиваемый лимит от 2 до 32 участников (по умолчанию 8) на компьютерах и Android: схема 27, голосовой профиль 3, WebRTC/Opus, STUN/TURN и временный доступ к ретранслятору. Для изменения лимита и форума обновите клиент до v0.7.13. Для Android используйте клиент v0.7.10; рамки речи доступны начиная с v0.7.9: сервер передаёт стабильное audio_slot, а клиент связывает его с аудиодорожкой. Старые клиенты подключаются только при лимите 8. Уменьшение лимита не отключает активных участников. Вложения выключены по умолчанию только в новых пространствах; миграция сохраняет прежние значения. Настройка своего TURN для интернета и CGNAT.
Запуск с нуля одной командой (приложение и runtime v0.3.5): инструкция для Linux-сервера и первого входа с телефона.
curl -fsSL https://raw.githubusercontent.com/space-protocol-project/space-server/v0.3.5/packaging/install.sh | shПервый вошедший по одноразовой ссылке из терминала становится владельцем.
Для постоянной работы на VPS с systemd используйте новый установщик:
curl -fsSL https://raw.githubusercontent.com/space-protocol-project/space-server/main/packaging/install.sh | sh -s -- --serviceОн запускает сервер от текущего пользователя, включает запуск при загрузке и сохраняет данные после выхода из SSH. Если не хватает прав на linger, установщик покажет команду sudo loginctl enable-linger "$USER"; выполните её один раз и повторите установку. Root для самого сервера не используется. Этот режим совместим с runtime v0.3.3 и новее.
Управление: systemctl --user status space-server, systemctl --user restart space-server, systemctl --user stop space-server. Журнал: journalctl --user -u space-server -n 50. Подробности, отключение автозапуска и путь к одноразовой ссылке — в инструкции.
Владелец может назначать несколько администраторов. Нужны обычный пользователь Linux x64, curl/unzip/sha256sum и открытый TCP 8443. Требуются приложение и runtime v0.3.3 или новее.
Домашний runtime v0.2.4 поддерживает перенос пространства через приложение:
инструкция экспорта и импорта.
Для остановленной домашней установки CLI предоставляет -home-export,
-home-import, -home-import-to и необязательный -public-ip нового компьютера.
Импорт создаёт новый каталог и не заменяет существующие данные. Ключ владельца
восстанавливается отдельно от архива сервера.
В исходниках следующего выпуска добавлена проверка готового архива:
space-server -home-verify-export /path/to/space.zip
Команда не запускает сервер или PostgreSQL, не распаковывает файлы и не меняет
действующее пространство. Она проверяет состав ZIP, ограничения размеров,
версию схемы, CRC и SHA-256 файлов и возвращает JSON с server ID, схемой,
количеством файлов и суммарным размером после распаковки. Ключи, конфигурация
и тексты сообщений в отчёт не включаются. Возможность объявляется в
-runtime-info как portableInspectionVersion: 1.
Успешная проверка означает целостность и совместимость формата с этим runtime,
но не подлинность источника и не доказанное восстановление базы. Для приёмки
резервной копии по-прежнему нужен импорт в отдельное окружение и проверка
сообщений и файлов. Это проверка переносимого ZIP; физические копии
-home-backup имеют другой формат. Команда доступна с v0.4.3; v0.4.2 её не содержит.
Сервер Space и домашний runtime. Один и тот же Go-сервер предоставляет discovery, gRPC/HTTP API, PostgreSQL, чат, каналы и ACL, участников, приглашения, устройства, recovery и сопряжение.
- Общее Flutter-приложение.
- Протокол и архитектура.
- Домашний запуск из приложения.
- Выпуски сервера и runtime.
Сервер — сама программа. Домашний runtime — комплект этой программы с PostgreSQL для автоматической установки и запуска кнопкой «Выйти в эфир» в Space. Отдельной серверной реализации или браузерной админки нет. Повторный запуск сохраняет прежнюю базу, server ID, сертификат, владельца и участников; «Отключиться» останавливает процессы с сохранением данных.
В готовящемся выпуске доступна диагностика без запуска базы: space-server doctor -home-data 'C:\Space\data'. Для проверки из другой сети укажите -endpoint, -fingerprint и -server-id из команды, скопированной в «Эфире». Подробности и ограничения: диагностика сети. Локальный успех не подтверждает внешнюю доступность; doctor доступен в runtime v0.3.3 и новее.
Нужны Go 1.27.2+ и отдельная PostgreSQL. Из корня этого репозитория:
$env:SPACE_DATABASE_URL = 'postgres://space:YOUR_PASSWORD@127.0.0.1:5432/space?sslmode=disable'
go run ./cmd/space-serverОбычный режим использует loopback HTTP 127.0.0.1:8080 и gRPC 127.0.0.1:9090. Изменение портов: -http и -grpc. Временный режим -demo не предназначен для настоящего домашнего пространства.
Домашний режим использует -home-data, -home-runtime, -public-ip, -https и -managed; приложение задаёт их автоматически. По умолчанию HTTPS и HTTP/2 gRPC используют TCP 8443. PostgreSQL и внутренние входы остаются на loopback. Сертификат самоподписанный, его отпечаток закрепляется в приложении и передаётся в ссылке приглашения. Публичный вход закрыт до локального назначения владельца.
Миграции встроены в бинарник и проверяются по checksum. Разделение репозиториев не изменяет SQL-миграции, формат базы или identity сервера. Не удаляйте кластер для обновления бинарника.
Предыдущий выпуск — runtime v0.7.10, схема PostgreSQL 27 и голосовой профиль 3: темы, ответы, вложения и серверная модерация форума; голосовые комнаты на 2–32 участника. Релизный CI полностью успешен на Windows/macOS/Linux, включая TLS-вход, обновление с сохранением данных, перенос, старые архивы и восстановление MLS с тремя устройствами и зашифрованным файлом. Go-тесты с PostgreSQL и проверкой гонок, анализ безопасности, совместимость клиента и системное хранилище Windows прошли. Три runtime-архива, три JSON-дескриптора и SHA256SUMS.txt полностью скачаны: размеры и SHA-256 совпадают с GitHub API и контрольными суммами. Выпуск Latest, не draft и не prerelease.
В клиенте v0.7.19 каталог закреплён на runtime v0.7.15. Сначала обновите клиент, сохраните резервную копию пространства и ключей MLS, затем примените обновление runtime в «Эфире». Прежние комнаты сохраняют лимит 8. Изменённый лимит требует обновления приложений всех участников. Акустическая приёмка 32 людей, длительная нагрузка на реальных устройствах и публичный TURN остаются отдельными проверками.
Новые каталоги копий и восстановления защищены до записи данных: Windows — владелец процесса и SYSTEM, Unix — 0700. Права уже созданных копий автоматически не изменяются. Контрольные суммы архивов доступны в SHA256SUMS.txt.
go test ./... и go vet ./... выполняются из корня. Полные PostgreSQL и сквозные Flutter/Go/WebCrypto-проверки выполняются в CI. Flutter берётся из space-app; локальный Docker для этой работы не запускается. Обновление Go и зависимостей, локальные проверки сервера и runtime.
Теги vX.Y.Z собирают Windows x64, macOS arm64 и Linux x64, проверяют перезапуск и приглашённого участника через TLS, затем публикуют архивы и SHA-256. Описание берётся из соответствующего раздела Changelog.md. Тег и описание проверяются до сборки. Без полного успешного CI публикации нет. Файлы сначала загружаются в черновик; повторный запуск продолжает его, а уже опубликованный выпуск не перезаписывает. Обычный тег создаёт релиз, суффикс версии — prerelease. Обычные и ручные сборки сохраняют артефакты.
Контракт .proto находится в space-protocol. Go bindings коммитятся в gen/. Из этого репозитория генерация выполняется buf generate ../space-protocol/protocol/proto --template buf.gen.yaml с установленными генераторами, версии — в руководстве генерации протокола.
Проект экспериментальный. Интернет-доступ через домашний роутер, установка и защищённое хранилище macOS/Linux, аварийное завершение, резервные копии и смена публичного IP требуют отдельных проверок или следующих этапов.
Сервер сохраняет время Content.created_at_unix_ms. Миграция 010 сохраняет неизвестное время старой истории; создание, повтор, история и события возвращают одно сохранённое значение. CI 38167063307 подтвердил PostgreSQL и совместимость Dart/Go для 55a6a53. Ранее опубликованные выпуски не заменяются.
Все 39 RPC доступны на маршрутах /space.v1.…/…; discovery объявляет connect_endpoint: "/". Connect включён постоянно. Основной Flutter-клиент, управление, recovery и pairing используют Connect с Protobuf; диагностические сценарии также проверяют JSON.
HTTP-авторизация выполняется до декодирования тела. Запросы передаются внутреннему gRPC-сервису с общей проверкой токенов, подписей и прав; это внутренняя реализация, не запасной транспорт Flutter-клиента. Публичный HTTPS больше не направляет внешние gRPC-запросы в этот сервис. Размер тела и распакованного запроса ограничен 16 КиБ; отмена Connect-потока отменяет upstream, запись имеет возобновляемый таймаут 20 секунд.
Генерация: buf generate ../space-protocol/protocol/proto --template buf.connect.gen.yaml. Connect-Go/генератор закреплены на 1.21.1. Flutter проверяет точный TLS-отпечаток и срок сертификата до отправки запроса. Для нового клиента нужен Connect-runtime; прежние серверы не поддерживаются и не вызывают автоматический fallback.
- Перенесите готовые пункты из
Unreleasedв раздел## vX.Y.Zв Changelog.md. - Закоммитьте изменения и отправьте main.
- Создайте и отправьте тег в этом репозитории, например:
git tag -a v0.3.0 -m "Space Server v0.3.0"
git push origin v0.3.0Workflow home-runtime.yml проверит сервер, соберёт архивы и дескрипторы для трёх платформ и опубликует GitHub Release с описанием и SHA256SUMS.txt. Версии приложения и сервера независимы. После серверного выпуска закрепите стабильный runtime в space-app через packaging/pin-home-runtime.py, затем выпускайте приложение. Предварительные серверные теги пока не поддержаны механизмом закрепления runtime основного приложения.
Форум в runtime v0.7.11 / клиенте v0.7.14: схема 28, core.forum.v1, core.forum.attachments.v1 и core.forum.navigation.v1, отдельный ForumService через gRPC и Connect. Темы и ответы используют ACL раздела; закрытие требует read/manage и запрещает новые ответы на сервере. Контракт и решение.