feat(chatcoop): комнаты секретаря + синхронизация непроектных комнат в blago #34

Merged
ant merged 5 commits from feat/chatcoop-secretary-rooms into dev 2026-05-25 09:53:33 +00:00
Owner

Что

Две связанные задачи по подсистеме chatcoop (Matrix/Synapse + LiveKit + секретарь).

Задача 1 — непроектные транскрипции попадают в blago

Сейчас blago pull тянет только комнаты capital_project (findByProjectHash фильтрует по kind). Транскрипции комнат пайщиков/совета/секретаря в БД есть, но в инструмент не приходят.

  • репозиторий: findAll + findNonProjectCommunicationRooms (всё кроме capital_project)
  • inter-порт listNonProjectCommunicationRooms + query chatcoopListNonProjectCommunicationRooms
  • blago-cli: новая фаза pullNonProjectCommunicationArtifacts — переписка + транскрипции + memo в отдельную верхнюю папку rooms/<folder>/{messages,meetings}/ (системные комнаты — стабильные папки komnata-paishchikov/komnata-soveta; комнаты секретаря — slug + хвост хеша). Курсор transcriptionLastEndedExclusiveByRoom.

Задача 2 — управляемые «Комнаты секретаря»

Принцип (согласован): секретарь присутствует только в backend-созданных комнатах. Force-join в произвольную чужую комнату запрещён (Synapse общий на все кооперативы → дыра). Поэтому секретарь живёт в комнатах, созданных через интерфейс.

  • roomKind secretary; SecretaryRoomManagementService (создание public/private, всегда plaintext, force-join только секретаря, создатель — модератор; удаление = kick секретаря + дерегистрация)
  • резолвер: chatcoopListSecretaryRooms / chatcoopCreateSecretaryRoom / chatcoopRemoveSecretaryRoom, доступ chairman+member
  • matrix-api: inviteUser / kickUser
  • desktop: страница «Комнаты секретаря» на столе связи (роли chairman+member); системные/проектные комнаты read-only, комнаты секретаря — создать/удалить

Проверка

  • tsc --noEmit по components/controller — зелёный (inter пересобран).
  • blago-cli / SDK / desktop типизируются после generate-schema + generate-client + сборки SDK (новые GraphQL-операции). Локально не гонял (по правилам репо — вешает машину); прогон в CI.

Миграция БД

Поле room_kind уже varchar(32) — новое значение secretary не требует миграции схемы.

🤖 Generated with Claude Code

## Что Две связанные задачи по подсистеме chatcoop (Matrix/Synapse + LiveKit + секретарь). ### Задача 1 — непроектные транскрипции попадают в blago Сейчас `blago pull` тянет только комнаты `capital_project` (`findByProjectHash` фильтрует по kind). Транскрипции комнат пайщиков/совета/секретаря в БД есть, но в инструмент не приходят. - репозиторий: `findAll` + `findNonProjectCommunicationRooms` (всё кроме capital_project) - inter-порт `listNonProjectCommunicationRooms` + query `chatcoopListNonProjectCommunicationRooms` - blago-cli: новая фаза `pullNonProjectCommunicationArtifacts` — переписка + транскрипции + memo в отдельную верхнюю папку `rooms/<folder>/{messages,meetings}/` (системные комнаты — стабильные папки `komnata-paishchikov`/`komnata-soveta`; комнаты секретаря — slug + хвост хеша). Курсор `transcriptionLastEndedExclusiveByRoom`. ### Задача 2 — управляемые «Комнаты секретаря» Принцип (согласован): секретарь присутствует **только в backend-созданных комнатах**. Force-join в произвольную чужую комнату запрещён (Synapse общий на все кооперативы → дыра). Поэтому секретарь живёт в комнатах, созданных через интерфейс. - `roomKind` `secretary`; `SecretaryRoomManagementService` (создание public/private, всегда plaintext, force-join только секретаря, создатель — модератор; удаление = kick секретаря + дерегистрация) - резолвер: `chatcoopListSecretaryRooms` / `chatcoopCreateSecretaryRoom` / `chatcoopRemoveSecretaryRoom`, доступ chairman+member - matrix-api: `inviteUser` / `kickUser` - desktop: страница «Комнаты секретаря» на столе связи (роли chairman+member); системные/проектные комнаты read-only, комнаты секретаря — создать/удалить ## Проверка - `tsc --noEmit` по `components/controller` — зелёный (inter пересобран). - blago-cli / SDK / desktop типизируются **после** `generate-schema` + `generate-client` + сборки SDK (новые GraphQL-операции). Локально не гонял (по правилам репо — вешает машину); прогон в CI. ## Миграция БД Поле `room_kind` уже `varchar(32)` — новое значение `secretary` не требует миграции схемы. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude added 3 commits 2026-05-25 05:57:31 +00:00
Задача 1 (синхронизация в blago):
- roomKind 'secretary' в реестре управляемых Matrix-комнат
- репозиторий: findAll + findNonProjectCommunicationRooms (всё кроме capital_project)
- inter-порт listNonProjectCommunicationRooms + тип InterNonProjectCommunicationRoomRef (kind)
- query chatcoopListNonProjectCommunicationRooms (members/council/secretary) для blago-cli

Задача 2 (комнаты секретаря, backend):
- SecretaryRoomManagementService: создание комнаты (public/private, всегда plaintext,
  force-join только секретаря, создатель — модератор) и удаление (kick секретаря + дерегистрация)
- SecretaryRoomsResolver: chatcoopListSecretaryRooms / chatcoopCreateSecretaryRoom /
  chatcoopRemoveSecretaryRoom; доступ chairman+member
- matrix-api: inviteUser / kickUser
- конфиг SECRETARY_ROOM_MATRIX

Принцип: секретарь присутствует только в backend-созданных комнатах; force-join в
произвольную чужую комнату запрещён (общий Synapse на все кооперативы).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
SDK (рукописные обёртки над Zeus — затипизируются после generate-schema/client):
- queries: ListNonProjectCommunicationRooms, ListSecretaryRooms
- mutations: CreateSecretaryRoom, RemoveSecretaryRoom
- селекторы ChatcoopNonProjectCommunicationRoom / ChatcoopSecretaryRoom

blago-cli:
- pullNonProjectCommunicationArtifacts: переписка + транскрипции + memo комнат
  пайщиков/совета/секретаря в отдельную верхнюю папку rooms/<folder>/{messages,meetings}/
- курсор transcriptionLastEndedExclusiveByRoom (по matrixRoomId)
- системные комнаты — стабильные папки komnata-paishchikov / komnata-soveta;
  комнаты секретаря — slug + хвост хеша matrixRoomId

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(desktop/chatcoop): страница «Комнаты секретаря» на столе связи
Typecheck / desktop (pull_request) Failing after 7m26s
Typecheck / controller (pull_request) Failing after 6m28s
5c6062420f
- entity SecretaryRoom (api/model/store) поверх SDK chatcoopListSecretaryRooms /
  chatcoopCreateSecretaryRoom / chatcoopRemoveSecretaryRoom
- SecretaryRoomsPage: список комнат реестра (тип, наличие секретаря, шифрование),
  создание комнаты (публичная/приватная) и удаление комнат секретаря
- маршрут chatcoop-secretary-rooms, доступ роли chairman+member
- системные/проектные комнаты — read-only (удаление только у kind secretary)

Затипизируется после generate-schema/generate-client (новые SDK-операции).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
claude added 1 commit 2026-05-25 06:28:43 +00:00
chore(controller,sdk): регенерация schema.gql + zeus под комнаты секретаря
Typecheck / desktop (pull_request) Successful in 13m29s
Typecheck / controller (pull_request) Successful in 13m0s
b2c56651f9
generate-schema + generate-client после добавления резолверов SecretaryRooms и
chatcoopListNonProjectCommunicationRooms. Без этого @coopenomics/sdk:build падал
в CI на отсутствующих в zeus типах (ChatcoopSecretaryRoom / CreateSecretaryRoomInput
/ RemoveSecretaryRoomInput / ChatcoopNonProjectCommunicationRoom) — общий build-шаг
обеих джоб typecheck. Локально sdk build (prebuild tsc --noEmit) зелёный.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
claude added 1 commit 2026-05-25 06:29:10 +00:00
chore(controller): синхронизировать controller/zeus с регенерацией
Typecheck / desktop (pull_request) Successful in 13m19s
Typecheck / controller (pull_request) Successful in 12m49s
e640b6add6
generate-client пишет копию zeus и в components/controller/zeus — обновляю вместе
со schema.gql, чтобы не оставлять дрифт сгенерированных артефактов.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ant approved these changes 2026-05-25 09:53:19 +00:00
ant merged commit 3f5859eb3e into dev 2026-05-25 09:53:33 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: C9S/mono#34