Files
discussions/.wiki/concepts/meeting-room-architecture.md
vitya 091b5f2d02 Self-promote redesign spec; archive implementation plan
Final closure: redesign spec lives at .wiki/concepts/meeting-room-architecture.md;
both spec and plan archived under .archive/2026-05-05-*. Buffer .brainstorm/
back to empty. System bootstrapped on its own artifacts.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 14:41:56 +03:00

232 lines
18 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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/<topic>.md``.archive/<date>-<topic>.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/<date>-<topic>.md
user writes → scenarios/<topic>.md (frontmatter: name, participants, problem)
MEETING
start-meeting <s> → создаёт .wiki/raw/transcripts/<date>-<topic>.md (skeleton)
создаёт .brainstorm/<topic>.md (shell)
логирует в .wiki/log.md
multi-agent run → дописывает транскрипт в .wiki/raw/transcripts/<date>-<topic>.md
single-agent CSO → ведёт активный диалог в .brainstorm/<topic>.md
POST-MEETING
promote-brainstorm → парсит .brainstorm/<topic>.md
спрашивает: room-meta или domain?
room-meta → .wiki/concepts/<topic>.md
domain → ~/projects/<proj>/.wiki/concepts/<topic>.md
via mcp__projects-meta__knowledge_ingest
парсит action-items, создаёт в .tasks/ target-проекта
via mcp__projects-meta__tasks_create
git mv .brainstorm/<topic>.md → .archive/<date>-<topic>.md
логирует в .wiki/log.md
```
## 5. Skills v1
Каждый скил живёт в `.claude/skills/meeting-room/<name>/SKILL.md`. Триггер-фразы — в frontmatter `description`, чтобы автодиспетчер их подхватывал.
### 5.1 `meeting-room:promote-brainstorm`
**Триггеры:** «промоутни брейнсторм», «finalize `<topic>`», «выкати в вики», «promote `<topic>`».
**Аргумент:** путь к файлу `.brainstorm/<topic>.md` или topic-name.
**Интерактивные шаги:**
1. Прочитать файл, показать summary (12 абзаца).
2. Спросить: **room-meta** или **domain**?
3. Если domain — спросить целевой проект; валидация `~/projects/<proj>/` существует и виден `projects-meta`.
4. Распарсить action-items (checkbox `- [ ]`, секции «TODO», «следующие шаги», «next steps»). Показать список, дать отредактировать.
**Действия (в порядке, atomic-ish):**
1. **Промоушен контента:**
- room-meta: `Write``.wiki/concepts/<topic>.md` с frontmatter (`date`, `source: .brainstorm/<topic>.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/<topic>.md .archive/<YYYY-MM-DD>-<topic>.md`.
4. **Лог:** дописать строку в `.wiki/log.md`: `<date> promoted <topic> → <destination>; created N tasks in <proj>`.
**Failure modes:**
- Целевой проект не найден / `projects-meta` недоступен → abort до любых записей.
- Промоушен прошёл, `tasks_create` упал на N-м экшене → продолжить, в логе зафиксировать частичный успех; `.brainstorm/` **не** перемещать пока пользователь не подтвердит.
- Файла `.brainstorm/<topic>.md` нет → abort, ничего не делать.
### 5.2 `meeting-room:start-meeting`
**Триггеры:** «запусти совещание `<topic>`», «start meeting `<scenario>`», «новое совещание `<topic>`».
**Аргумент:** путь `scenarios/<topic>.md` или topic-name.
**Шаги:**
1. Прочитать `scenarios/<topic>.md`, распарсить YAML frontmatter.
2. Валидация:
- `name`, `problem` непустые;
- все `participants` присутствуют как роли в `config/config.yaml`;
- `max_rounds` — целое (если есть).
3. Сегодняшняя дата → `<date> = YYYY-MM-DD`.
4. Создать `.wiki/raw/transcripts/<date>-<topic>.md` со скелетом (frontmatter: `date`, `scenario: scenarios/<topic>.md`, `participants`, `problem`).
5. Создать `.brainstorm/<topic>.md` со skeleton (заголовок, ссылки на сценарий и транскрипт).
6. Дописать в `.wiki/log.md`: `<date> started <topic> ({participants})`.
7. Вернуть пользователю созданные пути и подсказку, как запустить multi-agent runner.
**Failure modes:**
- Frontmatter невалидный → перечислить ошибки, ничего не создавать.
- `.brainstorm/<topic>.md` уже есть → спросить: продолжить (append-skip) или прервать.
### 5.3 `meeting-room:register-persona`
**Триггеры:** «добавь персону», «новый агент в комнату», «register persona `<role>`».
**Интерактивный сбор полей:**
- `role-id` (snake_case, уникальный)
- `name` (display)
- `model`, `provider`, `temperature`, `tools`, `system_prompt`
**Шаги:**
1. Прочитать `config/config.yaml`. Если `roles.<role-id>` существует — спросить: overwrite, abort, новый id.
2. Обновить `config.yaml`, **сохраняя YAML-форматирование** (использовать YAML-парсер с round-trip — иначе комментарии и порядок ключей побьются).
3. Сгенерировать `.wiki/entities/persons/<role-id>.md` с frontmatter (`role-id`, `model`, `provider`, `source: config/config.yaml`) и body — summary поведения роли, цитата `system_prompt`, ссылка на `config.yaml`.
4. Дописать в `.wiki/log.md`: `<date> registered persona <role-id>`.
**Sync-правило (α):** все автоматические записи в `entities/persons/` идут только через этот скил. Ручные правки разрешены только в `config.yaml`; для пере-генерации карточки — снова `register-persona <role>` (он определит, что роль уже есть, и пере-сгенерирует).
## 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/<role-id>.md` — frontmatter обязателен (`role-id`, `model`, `provider`, `source`); body — summary и цитата system_prompt.
- `entities/projects/<proj>.md` — pointer-карточка к глобальному проекту (минимум: путь, краткая роль в контексте комнаты, ссылки на встречи где он фигурировал).
- `concepts/<topic>.md` — room-meta: методология, ретро. Frontmatter: `date`, `source: .brainstorm/<topic>.md` (или `.archive/...`).
- `raw/research/<date>-<topic>.md` — внешний clipping. Frontmatter: `date`, `source` (URL), `topic`.
- `raw/transcripts/<date>-<topic>.md` — транскрипт встречи. Frontmatter: `date`, `scenario`, `participants`.
- `log.md` — append-only, формат: `<date> <event-type> <topic> [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/<proj>.md`** — формат карточки утрясём после первой реальной встречи post-redesign (сейчас нет данных).
- **Расширение `project-discipline` для brainstorm-workspaces** — после стабилизации этой комнаты подать как PR в сам `project-discipline` (закрытие memory-todo `project_extend_discipline_for_meeting_room.md`).