--- date: 2026-05-05 source: .brainstorm/meeting-room-redesign.md status: promoted type: room-meta --- # Meeting-Room Architecture — promoted spec > Промочено 2026-05-05 из `.brainstorm/meeting-room-redesign.md`. Spec, который комната провалидировала на самой себе: первый прогон скила `meeting-room-promote-brainstorm` сделан именно над этим файлом. Implementation plan архивирован отдельно — `.archive/2026-05-05-meeting-room-redesign-plan.md`. ## 1. Контекст `.meeting-room/` сейчас объявлена транзитной зоной (`README.md`: «❌ NO `.tasks`/`.wiki` внутри»). На практике: - В `.brainstorm/modulair-rag.md` уже копится содержательный артефакт прошедшей сессии — ему некуда уехать кроме `.archive/` или ручного копирования в глобал. - Реестр персон (`config/config.yaml`) — операционный конфиг без человекочитаемого вики-слоя. - Два типа сырья (pre-loaded research в `source/` и транскрипты в `sessions/`) разнесены по плоским папкам без общей семантики. - В памяти `MEMORY.md` есть открытый todo `project_extend_discipline_for_meeting_room.md` — `project-discipline` молчит про brainstorm-workspace. Цель редизайна — достроить комнату как **«микро-проект про методологию совещаний»** без превращения её в полноценный проект с локальным backlog. Опереться на Karpathy LLM Wiki pattern для структуры знаний и на `projects-meta` для связи с глобальным скоупом. ## 2. Принятые решения | # | Развилка | Решение | |---|---|---| | 1 | Wiki/Tasks семантика | **B**: локальный `.wiki/` есть, локальных `.tasks/` нет | | 2 | Folder-миграция | **1 (чистый Karpathy)**: всё «сырое» централизовано в `.wiki/raw/` | | 3 | Промоушен | **C**: локальный `.wiki/concepts/` зарезервирован под room-meta; доменное идёт сразу в глобал, без hop | | 4 | Судьба буфера после промоушена | **(ii)**: `.brainstorm/.md` → `.archive/-.md` | | 5 | Skill v1 | `promote-brainstorm`, `start-meeting`, `register-persona` | | 6 | Persona sync | **α**: писать в обе стороны имеет право только `register-persona`; `config.yaml` — SoT | | 7 | Project-discipline | master-only ✅, push-by-permission ✅, semver — N/A, локальные tasks — N/A | | 8 | Spec этого редизайна | живёт здесь, после сборки промоутим своей же системой в `.wiki/concepts/meeting-room-architecture.md` | ## 3. Целевая структура ``` .meeting-room/ ├── CLAUDE.md ← корневой контракт работы в комнате (см. §6) ├── README.md ← обновлённый, ссылка на CLAUDE.md и .wiki/ │ ├── .wiki/ ← Karpathy-canonical, room-meta only │ ├── CLAUDE.md ← вики-схема (см. §7) │ ├── index.md ← навигация │ ├── overview.md ← что такое meeting-room │ ├── log.md ← хронологический лог: meetings, promotions, persona changes │ ├── raw/ │ │ ├── README.md │ │ ├── research/ ← бывший source/: pre-loaded clippings, транскрипты внешних чатов │ │ └── transcripts/ ← бывший sessions/: транскрипты прошедших совещаний │ ├── entities/ │ │ ├── persons/ ← карточки persona (генерируются из config.yaml) │ │ └── projects/ ← pointer-карточки для целевых проектов (modulair-rag, books, …) │ ├── concepts/ ← room-meta: методология, ретроспективы, паттерны │ ├── packages/ ← инструменты комнаты (runner, framework, schema) │ └── sources/ ← внешняя литература (Karpathy gist, фасилитация, multi-agent) │ ├── scenarios/ ← runtime: frontmatter-сценарии для запуска multi-agent ├── config/ ← runtime: config.yaml — single source of truth для persona ├── .brainstorm/ ← рабочий буфер: черновики, single-agent capture ├── .archive/ ← post-promotion: исходники из .brainstorm/, старые сценарии └── .claude/ ← локальные скилы и settings.local.json └── skills/ ├── meeting-room/ │ ├── promote-brainstorm/SKILL.md │ ├── start-meeting/SKILL.md │ └── register-persona/SKILL.md ``` **Различие `.wiki/raw/` ↔ `.brainstorm/`:** raw — immutable, append-only, сырое. `.brainstorm/` — рабочий, редактируемый, чистится промоушеном. **Различие `.wiki/concepts/` ↔ `~/projects/.wiki/concepts/`:** локальный — только про **то, как комната работает**. Глобал — доменное содержимое, рождённое в комнате. ## 4. Lifecycle ``` PRE-MEETING user clip → .wiki/raw/research/-.md user writes → scenarios/.md (frontmatter: name, participants, problem) MEETING start-meeting → создаёт .wiki/raw/transcripts/-.md (skeleton) создаёт .brainstorm/.md (shell) логирует в .wiki/log.md multi-agent run → дописывает транскрипт в .wiki/raw/transcripts/-.md single-agent CSO → ведёт активный диалог в .brainstorm/.md POST-MEETING promote-brainstorm → парсит .brainstorm/.md спрашивает: room-meta или domain? room-meta → .wiki/concepts/.md domain → ~/projects//.wiki/concepts/.md via mcp__projects-meta__knowledge_ingest парсит action-items, создаёт в .tasks/ target-проекта via mcp__projects-meta__tasks_create git mv .brainstorm/.md → .archive/-.md логирует в .wiki/log.md ``` ## 5. Skills v1 Каждый скил живёт в `.claude/skills/meeting-room//SKILL.md`. Триггер-фразы — в frontmatter `description`, чтобы автодиспетчер их подхватывал. ### 5.1 `meeting-room:promote-brainstorm` **Триггеры:** «промоутни брейнсторм», «finalize ``», «выкати в вики», «promote ``». **Аргумент:** путь к файлу `.brainstorm/.md` или topic-name. **Интерактивные шаги:** 1. Прочитать файл, показать summary (1–2 абзаца). 2. Спросить: **room-meta** или **domain**? 3. Если domain — спросить целевой проект; валидация `~/projects//` существует и виден `projects-meta`. 4. Распарсить action-items (checkbox `- [ ]`, секции «TODO», «следующие шаги», «next steps»). Показать список, дать отредактировать. **Действия (в порядке, atomic-ish):** 1. **Промоушен контента:** - room-meta: `Write` → `.wiki/concepts/.md` с frontmatter (`date`, `source: .brainstorm/.md`, `status: promoted`). - domain: `mcp__projects-meta__knowledge_ingest` с target-проектом и контентом. 2. **Создание тасок:** для каждого action-item — `mcp__projects-meta__tasks_create` с target-проектом, title, description. 3. **Архивация:** `git mv .brainstorm/.md .archive/-.md`. 4. **Лог:** дописать строку в `.wiki/log.md`: ` promoted ; created N tasks in `. **Failure modes:** - Целевой проект не найден / `projects-meta` недоступен → abort до любых записей. - Промоушен прошёл, `tasks_create` упал на N-м экшене → продолжить, в логе зафиксировать частичный успех; `.brainstorm/` **не** перемещать пока пользователь не подтвердит. - Файла `.brainstorm/.md` нет → abort, ничего не делать. ### 5.2 `meeting-room:start-meeting` **Триггеры:** «запусти совещание ``», «start meeting ``», «новое совещание ``». **Аргумент:** путь `scenarios/.md` или topic-name. **Шаги:** 1. Прочитать `scenarios/.md`, распарсить YAML frontmatter. 2. Валидация: - `name`, `problem` непустые; - все `participants` присутствуют как роли в `config/config.yaml`; - `max_rounds` — целое (если есть). 3. Сегодняшняя дата → ` = YYYY-MM-DD`. 4. Создать `.wiki/raw/transcripts/-.md` со скелетом (frontmatter: `date`, `scenario: scenarios/.md`, `participants`, `problem`). 5. Создать `.brainstorm/.md` со skeleton (заголовок, ссылки на сценарий и транскрипт). 6. Дописать в `.wiki/log.md`: ` started ({participants})`. 7. Вернуть пользователю созданные пути и подсказку, как запустить multi-agent runner. **Failure modes:** - Frontmatter невалидный → перечислить ошибки, ничего не создавать. - `.brainstorm/.md` уже есть → спросить: продолжить (append-skip) или прервать. ### 5.3 `meeting-room:register-persona` **Триггеры:** «добавь персону», «новый агент в комнату», «register persona ``». **Интерактивный сбор полей:** - `role-id` (snake_case, уникальный) - `name` (display) - `model`, `provider`, `temperature`, `tools`, `system_prompt` **Шаги:** 1. Прочитать `config/config.yaml`. Если `roles.` существует — спросить: overwrite, abort, новый id. 2. Обновить `config.yaml`, **сохраняя YAML-форматирование** (использовать YAML-парсер с round-trip — иначе комментарии и порядок ключей побьются). 3. Сгенерировать `.wiki/entities/persons/.md` с frontmatter (`role-id`, `model`, `provider`, `source: config/config.yaml`) и body — summary поведения роли, цитата `system_prompt`, ссылка на `config.yaml`. 4. Дописать в `.wiki/log.md`: ` registered persona `. **Sync-правило (α):** все автоматические записи в `entities/persons/` идут только через этот скил. Ручные правки разрешены только в `config.yaml`; для пере-генерации карточки — снова `register-persona ` (он определит, что роль уже есть, и пере-сгенерирует). ## 6. Корневой `CLAUDE.md` Содержание (outline): 1. **Идентичность:** «Это `.meeting-room` — workspace для кросс-проектных брейнштормов и круглых столов. Не код-проект.» 2. **Семантика артефактов** (короткая шпаргалка из §3 + §4). 3. **Жёсткие правила:** - Доменное содержимое **никогда** не оседает в локальном `.wiki/` — всегда в глобал через `projects-meta`. - Локальный `.wiki/` — только room-meta (методология, persona-карточки, лог встреч, ретро). - Локальные `.tasks/` **не создавать** — экшены идут в `.tasks/` целевого проекта через `projects-meta__tasks_create`. - Перед любым предложением tooling/архитектуры — прочитать `.wiki/raw/research/` для текущего топика (закрепляет `feedback_read_source_transcripts.md` из памяти). 4. **Триггеры скилов v1:** перечень фраз → скил. 5. **Override `project-discipline`:** - master-only ✅ - commit freely / push by permission ✅ - semver-bump — N/A (нет versioned-артефактов в комнате) - локальные `.tasks/` — N/A (запрещены §6.3) 6. **Persona registry:** SoT — `config/config.yaml`. Карточки `.wiki/entities/persons/` — производное, пишется только скилом `register-persona`. ## 7. `.wiki/CLAUDE.md` (схема) Karpathy-канон от `setup-wiki` + meeting-room-специфика: - `entities/persons/.md` — frontmatter обязателен (`role-id`, `model`, `provider`, `source`); body — summary и цитата system_prompt. - `entities/projects/.md` — pointer-карточка к глобальному проекту (минимум: путь, краткая роль в контексте комнаты, ссылки на встречи где он фигурировал). - `concepts/.md` — room-meta: методология, ретро. Frontmatter: `date`, `source: .brainstorm/.md` (или `.archive/...`). - `raw/research/-.md` — внешний clipping. Frontmatter: `date`, `source` (URL), `topic`. - `raw/transcripts/-.md` — транскрипт встречи. Frontmatter: `date`, `scenario`, `participants`. - `log.md` — append-only, формат: ` [details]`. ## 8. Migration plan ### 8.1 Существующие папки | Источник | Назначение | Способ | |---|---|---| | `source/2026-05-03-modulair.md` | `.wiki/raw/research/2026-05-03-modulair.md` | `git mv` | | `source/2026-05-03-code-review.md` | `.wiki/raw/research/2026-05-03-code-review.md` | `git mv` | | `sessions/` (пусто) | `.wiki/raw/transcripts/` (пусто) | создать новую | | `.archive/` (пусто) | остаётся `.archive/` | без изменений | | `scenarios/` | остаётся `scenarios/` | без изменений | | `config/` | остаётся `config/` | без изменений | | `.brainstorm/modulair-rag.md` | особый кейс — см. §8.2 | через `promote-brainstorm` (первый прогон) | | `README.md` | обновить: ссылки на `CLAUDE.md`, `.wiki/`, удалить устаревшее правило «❌ NO `.wiki` внутри» | edit | ### 8.2 `modulair-rag.md` — особый кейс Содержимое — process trace прошедшей single-agent сессии. Финальный design уже лежит в `~/projects/.wiki/concepts/modulair-rag-design.md` (упомянут в шапке самого файла). То есть **доменный layer уже промочен**, что осталось в `.brainstorm/` — это методологический след: «как развивался брейнсторм, какие развилки выбрали, что отвергнуто и почему». Это room-meta. Назначение при промоушене — `.wiki/concepts/modulair-rag-brainstorm-trace.md` (или похожее имя). Тасок не порождает (всё доменное уже зафиксировано). Исходник → `.archive/2026-05-05-modulair-rag.md`. Использовать как первый end-to-end тест `promote-brainstorm`. ### 8.3 Spec этого редизайна После сборки структуры и v1-скилов — прогнать `meeting-room:promote-brainstorm` на самом этом файле. Назначение: `.wiki/concepts/meeting-room-architecture.md`. Тасок не порождает (план реализации идёт через `writing-plans` отдельно). Исходник → `.archive/2026-05-05-meeting-room-redesign.md`. ## 9. Открытые вопросы (не блокируют реализацию) - **Имя файла промо для `modulair-rag.md`** — `modulair-rag-brainstorm-trace.md` рабочая идея, финальное при первом прогоне. - **Парсер action-items в `promote-brainstorm`** — начнём с regex по `- [ ]` и явным секциям; LLM-парсер только если regex окажется недостаточным. - **Что писать в `entities/projects/.md`** — формат карточки утрясём после первой реальной встречи post-redesign (сейчас нет данных). - **Расширение `project-discipline` для brainstorm-workspaces** — после стабилизации этой комнаты подать как PR в сам `project-discipline` (закрытие memory-todo `project_extend_discipline_for_meeting_room.md`).