From 205ba78cf9dcda9dbac6038998c78608fa1931d9 Mon Sep 17 00:00:00 2001 From: vitya Date: Tue, 5 May 2026 14:26:12 +0300 Subject: [PATCH] Draft meeting-room redesign implementation plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 12-task plan across 3 phases (bootstrap → skills → e2e validation). Pairs with spec at .brainstorm/meeting-room-redesign.md (commit 243c045). Both files archive together in Task 11 after self-promotion. Co-Authored-By: Claude Opus 4.7 (1M context) --- .brainstorm/meeting-room-redesign-plan.md | 1250 +++++++++++++++++++++ 1 file changed, 1250 insertions(+) create mode 100644 .brainstorm/meeting-room-redesign-plan.md diff --git a/.brainstorm/meeting-room-redesign-plan.md b/.brainstorm/meeting-room-redesign-plan.md new file mode 100644 index 0000000..a140266 --- /dev/null +++ b/.brainstorm/meeting-room-redesign-plan.md @@ -0,0 +1,1250 @@ +# Meeting-Room Redesign Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Превратить `.meeting-room/` из плоской транзитной зоны в Karpathy-style workspace с локальной `.wiki/` для room-meta, тремя локальными скилами (`promote-brainstorm`, `start-meeting`, `register-persona`) и связкой с глобальной wiki/tasks через `projects-meta`. + +**Architecture:** Реализуем строго по spec'у `.brainstorm/meeting-room-redesign.md` (вариант B + миграция 1 + lifecycle C+ii). Сначала каркас (структура `.wiki/` + корневой `CLAUDE.md` + миграция существующих папок), потом три скила, в конце — два self-promotion прогона: `modulair-rag.md` и сам spec этого редизайна, чтобы провалидировать систему на её же артефактах. + +**Tech Stack:** Markdown (Karpathy LLM Wiki), YAML (frontmatter и `config.yaml`), Claude Code skills (`.claude/skills//SKILL.md`), MCP `projects-meta` для cross-project ingest и tasks_create, git с master-only. + +**Spec reference:** `.brainstorm/meeting-room-redesign.md` (commit `243c045`). + +--- + +## File Structure + +**Создаются:** + +| Путь | Назначение | +|---|---| +| `CLAUDE.md` | Корневой контракт работы в комнате (semантика, триггеры скилов, override discipline) | +| `.wiki/CLAUDE.md` | Karpathy-схема локальной вики, frontmatter-требования | +| `.wiki/index.md` | Навигация | +| `.wiki/overview.md` | High-level описание комнаты | +| `.wiki/log.md` | Append-only хронологический лог: meetings, promotions, persona changes | +| `.wiki/raw/README.md` | Описание raw-зоны | +| `.wiki/raw/research/.gitkeep` | Пустой каталог под clippings | +| `.wiki/raw/transcripts/.gitkeep` | Пустой каталог под транскрипты совещаний | +| `.wiki/entities/persons/.gitkeep` | Пустой каталог (заполнится Task 9) | +| `.wiki/entities/projects/.gitkeep` | Пустой каталог | +| `.wiki/concepts/.gitkeep` | Пустой каталог (заполнится Tasks 11–12) | +| `.wiki/packages/.gitkeep` | Пустой каталог | +| `.wiki/sources/.gitkeep` | Пустой каталог | +| `.claude/skills/meeting-room-register-persona/SKILL.md` | Скил v1 #3 | +| `.claude/skills/meeting-room-start-meeting/SKILL.md` | Скил v1 #2 | +| `.claude/skills/meeting-room-promote-brainstorm/SKILL.md` | Скил v1 #1 | + +**Перемещаются (`git mv`):** + +| Откуда | Куда | +|---|---| +| `source/2026-05-03-modulair.md` | `.wiki/raw/research/2026-05-03-modulair.md` | +| `source/2026-05-03-code-review.md` | `.wiki/raw/research/2026-05-03-code-review.md` | + +**Удаляются (опустевшие после миграции):** + +| Путь | Причина | +|---|---| +| `source/` | Опустошён, заменён на `.wiki/raw/research/` | +| `sessions/` | Был пуст, заменён на `.wiki/raw/transcripts/` | + +**Изменяются:** + +| Путь | Что меняется | +|---|---| +| `README.md` | Удалить правило «❌ NO `.wiki` внутри», добавить ссылки на `CLAUDE.md`, `.wiki/index.md` и три скила | + +**Создаются скилами в Phase 3 (а не плановыми тасками):** + +| Путь | Создатель | +|---|---| +| `.wiki/entities/persons/{analyst,idea_generator,moderator,skeptic}.md` | Task 9 — `register-persona` ×4 | +| `.wiki/concepts/modulair-rag-brainstorm-trace.md` | Task 11 — `promote-brainstorm` | +| `.archive/2026-05-05-modulair-rag.md` | Task 11 — `promote-brainstorm` | +| `.wiki/concepts/meeting-room-architecture.md` | Task 12 — `promote-brainstorm` | +| `.archive/2026-05-05-meeting-room-redesign.md` | Task 12 — `promote-brainstorm` (плюс `meeting-room-redesign-plan.md`) | + +--- + +## Phase 1: Bootstrap structure + +### Task 1: Initialize `.wiki/` Karpathy skeleton + +**Files:** +- Create: `.wiki/CLAUDE.md` +- Create: `.wiki/index.md` +- Create: `.wiki/overview.md` +- Create: `.wiki/log.md` +- Create: `.wiki/raw/README.md` +- Create: `.wiki/raw/research/.gitkeep` +- Create: `.wiki/raw/transcripts/.gitkeep` +- Create: `.wiki/entities/persons/.gitkeep` +- Create: `.wiki/entities/projects/.gitkeep` +- Create: `.wiki/concepts/.gitkeep` +- Create: `.wiki/packages/.gitkeep` +- Create: `.wiki/sources/.gitkeep` + +- [ ] **Step 1: Create directory tree with `.gitkeep` placeholders** + +```bash +cd C:/Users/vitya/projects/.meeting-room +mkdir -p .wiki/raw/research .wiki/raw/transcripts \ + .wiki/entities/persons .wiki/entities/projects \ + .wiki/concepts .wiki/packages .wiki/sources +touch .wiki/raw/research/.gitkeep .wiki/raw/transcripts/.gitkeep \ + .wiki/entities/persons/.gitkeep .wiki/entities/projects/.gitkeep \ + .wiki/concepts/.gitkeep .wiki/packages/.gitkeep .wiki/sources/.gitkeep +``` + +- [ ] **Step 2: Write `.wiki/CLAUDE.md`** (схема вики, meeting-room-специфика) + +```markdown +# .wiki — Schema (room-meta only) + +Эта `.wiki/` — локальная и узко-доменная: **только знание о том, как работает meeting-room**. Доменное содержимое из совещаний промочивается в глобальную вики через `mcp__projects-meta__knowledge_ingest`, не сюда. + +## Layout (Karpathy LLM Wiki canonical) + +- `index.md` — навигация +- `overview.md` — что такое meeting-room на одной странице +- `log.md` — append-only хронологический лог: ` [details]` +- `raw/research/-.md` — внешние clippings, immutable +- `raw/transcripts/-.md` — транскрипты совещаний, immutable +- `entities/persons/.md` — карточки persona (генерируются скилом `meeting-room-register-persona` из `config/config.yaml`) +- `entities/projects/.md` — pointer-карточки целевых проектов +- `concepts/.md` — room-meta: методология, ретроспективы, паттерны фасилитации +- `packages/.md` — инструменты комнаты (runner, framework, schema) +- `sources/.md` — внешняя литература + +## Frontmatter requirements + +**`entities/persons/<role-id>.md`:** + +```yaml +--- +role-id: analyst +model: glm-5.1 +provider: ollama_cloud +source: config/config.yaml +--- +``` + +**`raw/research/<date>-<topic>.md`:** + +```yaml +--- +date: 2026-05-03 +source: <URL> +topic: <topic> +--- +``` + +**`raw/transcripts/<date>-<topic>.md`:** + +```yaml +--- +date: 2026-05-03 +scenario: scenarios/<topic>.md +participants: [moderator, skeptic, idea_generator, analyst] +problem: <one-line> +--- +``` + +**`concepts/<topic>.md`:** + +```yaml +--- +date: 2026-05-05 +source: .brainstorm/<topic>.md +status: promoted +type: room-meta +--- +``` + +## Hard rules + +1. **Никакого доменного содержимого** в `concepts/`. Если контент пригодился бы в чужом проекте — он не room-meta, а domain → `mcp__projects-meta__knowledge_ingest` в целевой проект. +2. `raw/` immutable: append-only, не редактируем после фиксации. +3. `entities/persons/` пишет **только** скил `meeting-room-register-persona`. Source-of-truth — `config/config.yaml`. +4. `log.md` append-only, формат строки: `<YYYY-MM-DD> <event> <topic> [details]`. Никаких удалений. +``` + +- [ ] **Step 3: Write `.wiki/index.md`** + +```markdown +# Meeting-Room Wiki — index + +> Knowledge about how this meeting-room itself works. Domain content lives in `~/projects/.wiki/`. + +## Navigation + +- [Overview](overview.md) — что такое meeting-room +- [Log](log.md) — хронология встреч, промоушенов, изменений persona +- [Schema](CLAUDE.md) — раскладка и frontmatter-требования + +## Sections + +- [Personas](entities/persons/) — карточки ролей (генерируются из `config/config.yaml`) +- [Projects](entities/projects/) — pointer-карточки целевых проектов +- [Concepts](concepts/) — методология, ретро, паттерны +- [Raw research](raw/research/) — clippings и внешние транскрипты +- [Raw transcripts](raw/transcripts/) — транскрипты совещаний +- [Packages](packages/) — инструменты комнаты +- [Sources](sources/) — внешняя литература +``` + +- [ ] **Step 4: Write `.wiki/overview.md`** + +```markdown +# Meeting-Room — overview + +`.meeting-room/` — кросс-проектное рабочее пространство для брейнштормов и круглых столов. Не код-проект. + +## Зачем + +Место, где агенты из разных проектов пересекаются ради задач, которые не помещаются в один backlog. Брейнсторм-зона: артефакты вызревают здесь и потом промочиваются — либо в локальный `.wiki/concepts/` (если это знание про саму комнату), либо в глобальную вики и `.tasks/` целевого проекта (если доменное). + +## Что внутри + +- `scenarios/` — frontmatter-сценарии для запуска multi-agent совещания +- `config/config.yaml` — реестр persona (рантайм-конфиг) +- `.brainstorm/` — рабочий буфер: черновики, single-agent capture +- `.archive/` — буфер после промоушена +- `.wiki/` — Karpathy-style room-meta wiki (этот раздел) + +## Как пользоваться + +См. корневой `CLAUDE.md` — там семантика и триггер-фразы скилов. +``` + +- [ ] **Step 5: Write `.wiki/log.md`** + +```markdown +# Log + +Append-only. Format: `<YYYY-MM-DD> <event> <topic> [details]`. + +Events: `started`, `promoted`, `registered`, `archived`. + +--- + +2026-05-05 bootstrapped meeting-room redesign (initial .wiki/ skeleton) +``` + +- [ ] **Step 6: Write `.wiki/raw/README.md`** + +```markdown +# raw/ + +Immutable, append-only. Никаких редактур после фиксации. + +- `research/` — внешние clippings, pre-loaded материалы перед совещанием. +- `transcripts/` — транскрипты прошедших совещаний. + +При промоушене `concepts/<topic>.md` ссылается сюда через frontmatter `source:`. +``` + +- [ ] **Step 7: Verify structure** + +```bash +cd C:/Users/vitya/projects/.meeting-room +ls -la .wiki/ +ls -la .wiki/raw/ .wiki/entities/ .wiki/concepts/ .wiki/packages/ .wiki/sources/ +``` + +Expected: семь подпапок (`raw/`, `entities/`, `concepts/`, `packages/`, `sources/`) + четыре файла (`CLAUDE.md`, `index.md`, `overview.md`, `log.md`). + +- [ ] **Step 8: Commit** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add .wiki/ +git commit -m "$(cat <<'EOF' +Add .wiki/ Karpathy skeleton + +Local room-meta wiki: index, overview, log, schema (CLAUDE.md), and empty +raw/entities/concepts/packages/sources subtrees with .gitkeep placeholders. + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +--- + +### Task 2: Write root `CLAUDE.md` + +**Files:** +- Create: `CLAUDE.md` + +- [ ] **Step 1: Write `CLAUDE.md`** + +```markdown +# .meeting-room — workspace contract + +`.meeting-room/` — brainstorm-зона для кросс-проектных совещаний. **Не код-проект.** + +## Семантика артефактов + +| Папка | Что | +|---|---| +| `scenarios/` | runtime: сценарии запуска multi-agent совещания (frontmatter: `name`, `participants`, `problem`, `max_rounds`) | +| `config/config.yaml` | runtime: реестр persona (single source of truth) | +| `.brainstorm/<topic>.md` | рабочий буфер до промоушена | +| `.archive/<date>-<topic>.md` | post-promotion: исходник из `.brainstorm/` | +| `.wiki/raw/research/` | immutable: внешние clippings (бывший `source/`) | +| `.wiki/raw/transcripts/` | immutable: транскрипты совещаний (бывший `sessions/`) | +| `.wiki/entities/persons/` | карточки persona, генерируются из `config.yaml` | +| `.wiki/concepts/` | room-meta: методология, ретро, паттерны | + +**Перед предложением tooling/архитектуры — прочитать `.wiki/raw/research/` для текущего топика.** Это закрепляет урок из `feedback_read_source_transcripts.md` (память). + +## Жёсткие правила + +1. **Доменное содержимое никогда не оседает в локальном `.wiki/`** — всегда в глобал через `mcp__projects-meta__knowledge_ingest` в `~/projects/<proj>/.wiki/`. +2. **Локальный `.wiki/concepts/` — только room-meta** (про саму комнату). +3. **Локальные `.tasks/` не создавать** — экшены идут в `.tasks/` целевого проекта через `mcp__projects-meta__tasks_create`. +4. **`entities/persons/` пишет только скил `meeting-room-register-persona`.** SoT — `config/config.yaml`. + +## Триггеры скилов v1 + +| Скил | Триггер-фразы | +|---|---| +| `meeting-room-promote-brainstorm` | «промоутни брейнсторм», «finalize `<topic>`», «выкати в вики», «promote `<topic>`» | +| `meeting-room-start-meeting` | «запусти совещание `<topic>`», «start meeting `<scenario>`», «новое совещание `<topic>`» | +| `meeting-room-register-persona` | «добавь персону», «новый агент в комнату», «register persona `<role>`» | + +## Override `project-discipline` + +В этой комнате применяются: + +- ✅ master-only (никаких feature-веток) +- ✅ commit freely / push by permission + +**Не применяются:** + +- ❌ semver-bump — нет versioned-артефактов (`SKILL.md` без version в frontmatter, нет `package.json`/`pyproject.toml`) +- ❌ локальный `.tasks/` — запрещён правилом §3 выше + +## Persona registry + +SoT — `config/config.yaml`. Карточки `.wiki/entities/persons/<role-id>.md` — производные. Ручные правки разрешены **только** в `config.yaml`. Регенерация карточки — снова `meeting-room-register-persona <role-id>`. + +## Pointers + +- Schema локальной вики: `.wiki/CLAUDE.md` +- Текущий redesign-spec (до self-promotion): `.brainstorm/meeting-room-redesign.md` +- После self-promotion: `.wiki/concepts/meeting-room-architecture.md` +``` + +- [ ] **Step 2: Verify** + +```bash +cd C:/Users/vitya/projects/.meeting-room +test -f CLAUDE.md && wc -l CLAUDE.md +``` + +Expected: `CLAUDE.md` существует, ~50 строк. + +- [ ] **Step 3: Commit** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add CLAUDE.md +git commit -m "$(cat <<'EOF' +Add root CLAUDE.md (workspace contract) + +Codifies B+1+C+ii: domain content always to global via projects-meta, local +.wiki/ is room-meta only, no local .tasks. Lists v1 skill triggers and +project-discipline overrides (semver and local-tasks both N/A here). + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +--- + +### Task 3: Migrate `source/` → `.wiki/raw/research/` + +**Files:** +- Move: `source/2026-05-03-modulair.md` → `.wiki/raw/research/2026-05-03-modulair.md` +- Move: `source/2026-05-03-code-review.md` → `.wiki/raw/research/2026-05-03-code-review.md` +- Delete: `source/` (опустевший) +- Delete: `sessions/` (был пуст) + +- [ ] **Step 1: Stage source/ first (currently untracked → нужно сначала git add)** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add source/2026-05-03-modulair.md source/2026-05-03-code-review.md +git status --short +``` + +Expected: оба файла отображаются как `A` (staged for add). + +- [ ] **Step 2: Commit them in source/ first (чтобы git mv был чистым переносом, а не add+remove)** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git commit -m "$(cat <<'EOF' +Track existing source/ research clippings + +Pre-migration commit so the next 'git mv' to .wiki/raw/research/ shows as a +rename, not delete+add. + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +- [ ] **Step 3: Move both files** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git mv 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 status --short +``` + +Expected: два `R` (renames), `source/` опустеет. + +- [ ] **Step 4: Remove empty source/ and sessions/ directories** + +```bash +cd C:/Users/vitya/projects/.meeting-room +rmdir source sessions +ls -la | grep -E "^d.*(source|sessions)" || echo "removed" +``` + +Expected: `removed`. + +- [ ] **Step 5: Commit migration** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git commit -m "$(cat <<'EOF' +Migrate source/ to .wiki/raw/research/ and drop empty sessions/ + +Per redesign §3, all immutable raw material lives under .wiki/raw/. research/ +holds pre-meeting clippings (was source/). transcripts/ will hold meeting +transcripts (sessions/ removed; was always empty). + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +- [ ] **Step 6: Verify** + +```bash +cd C:/Users/vitya/projects/.meeting-room +ls .wiki/raw/research/ +test ! -d source && test ! -d sessions && echo "ok" +``` + +Expected: два markdown-файла внутри `.wiki/raw/research/`, `source/` и `sessions/` отсутствуют. + +--- + +### Task 4: Update `README.md` + +**Files:** +- Modify: `README.md` + +- [ ] **Step 1: Rewrite `README.md`** + +```markdown +# .meeting-room — Shared Workspace + +> Кросс-проектные брейнстормы и круглые столы агентов. Brainstorm-зона: room-meta лежит локально в `.wiki/`, доменное промочивается в глобальную вики и `.tasks/` целевого проекта через `projects-meta`. + +## Quickstart + +- Прочитать `CLAUDE.md` — workspace contract (семантика, правила, триггеры скилов). +- Прочитать `.wiki/index.md` — навигация по локальной вики. +- Сценарии для multi-agent совещаний — в `scenarios/`. +- Реестр persona — в `config/config.yaml` (карточки в `.wiki/entities/persons/` генерируются скилом). + +## Skills v1 + +- `meeting-room-promote-brainstorm` — `.brainstorm/<topic>.md` → либо локальный `.wiki/concepts/`, либо глобальная вики; action-items → `.tasks/` целевого проекта; исходник → `.archive/`. +- `meeting-room-start-meeting` — валидирует `scenarios/<topic>.md`, заводит skeleton-транскрипт и буфер. +- `meeting-room-register-persona` — добавляет роль в `config.yaml` и генерирует карточку в `.wiki/entities/persons/`. + +## Folder map + +``` +.meeting-room/ +├── CLAUDE.md ← workspace contract +├── README.md ← этот файл +├── .wiki/ ← Karpathy room-meta wiki +├── scenarios/ ← runtime: сценарии запуска +├── config/ ← runtime: реестр persona +├── .brainstorm/ ← рабочий буфер +├── .archive/ ← post-promotion +└── .claude/skills/ ← локальные скилы +``` + +## Persona Registry + +Твой доверенный агент для `.brainstorm/`: +- **Role:** Chief Strategy Officer (CSO) +- **Job:** Обстучать идеи перед линейной реализацией. +``` + +- [ ] **Step 2: Verify** + +```bash +cd C:/Users/vitya/projects/.meeting-room +grep -F "❌ NO" README.md && echo "FAIL: still has obsolete rule" || echo "ok: obsolete rule removed" +grep -F ".wiki/" README.md | head -3 +``` + +Expected: `ok: obsolete rule removed`, плюс минимум 3 ссылки на `.wiki/`. + +- [ ] **Step 3: Commit** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add README.md +git commit -m "$(cat <<'EOF' +Update README for redesign + +Drop obsolete '❌ NO .wiki/.tasks внутри' rule (we now have local .wiki/ for +room-meta per spec). Point readers at CLAUDE.md and .wiki/index.md, list +v1 skills, redraw folder map. + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +--- + +## Phase 2: Skills + +### Task 5: Skill `meeting-room-register-persona` + +**Files:** +- Create: `.claude/skills/meeting-room-register-persona/SKILL.md` + +- [ ] **Step 1: Write `SKILL.md`** + +```markdown +--- +name: meeting-room-register-persona +description: Use when user says "добавь персону", "новый агент в комнату", "register persona <role>", or wants to register a new persona for multi-agent meetings in .meeting-room. Updates config/config.yaml (single source of truth) AND generates .wiki/entities/persons/<role-id>.md. Only this skill writes to entities/persons/. +--- + +# meeting-room-register-persona + +Регистрирует новую persona-роль в meeting-room: пишет в `config/config.yaml` (рантайм SoT) и генерирует карточку в `.wiki/entities/persons/<role-id>.md`. + +## When to use + +- Пользователь говорит «добавь персону», «новый агент в комнату», «register persona <role>». +- Пользователь вручную поправил `config/config.yaml` и хочет регенерировать карточку — тоже сюда. + +## Inputs (collect interactively) + +| Поле | Тип | Пример | +|---|---|---| +| `role-id` | snake_case, уникален в `config.yaml#roles` | `analyst` | +| `name` | display name | `Analyst` | +| `model` | строка | `glm-5.1` | +| `provider` | ключ из `config.yaml#providers` | `ollama_cloud` | +| `temperature` | число 0–1.5 | `0.5` | +| `tools` | строка-категория | `discussion` / `web` / `none` | +| `system_prompt` | многострочный текст | … | + +Если данные уже есть в `config.yaml` (регенерация карточки) — не спрашивать, читать оттуда. + +## Steps + +1. **Прочитать `config/config.yaml`.** Если `roles.<role-id>` уже существует: + - Если поля совпадают со словами пользователя — это регенерация, идти к шагу 4. + - Иначе спросить: **overwrite** / **abort** / **новый id**. +2. **Записать в `config.yaml`** под ключом `roles.<role-id>` со всеми полями. + - Использовать YAML-парсер с round-trip (`ruamel.yaml` для Python, или ручной insert по структуре). **Не** перезаписывать файл `yaml.dump`-ом без round-trip — порвёт комментарии и порядок ключей. +3. **Сгенерировать `.wiki/entities/persons/<role-id>.md`:** + + ```markdown + --- + role-id: <role-id> + model: <model> + provider: <provider> + source: config/config.yaml + --- + + # <name> + + **Model:** <model> (<provider>), temperature <temperature> + **Tools:** <tools> + + ## System prompt + + <первые 500 символов system_prompt>... + + ## Source of truth + + Полное определение — в `config/config.yaml#roles.<role-id>`. Эта карточка генерируется скилом `meeting-room-register-persona`; не редактировать вручную. + ``` + +4. **Дописать в `.wiki/log.md`:** + + ``` + <YYYY-MM-DD> registered <role-id> + ``` + +5. **Сообщить пользователю** созданные/обновлённые пути. + +## Failure modes + +- `config/config.yaml` отсутствует или невалидный YAML → abort, перечислить ошибки парсинга. +- Конфликт `role-id` без выбора пользователя → abort. +- Запись в `config.yaml` упала → abort до записи карточки (single-direction failure). + +## Side effects + +- Изменяет `config/config.yaml`. +- Создаёт/обновляет `.wiki/entities/persons/<role-id>.md`. +- Аппендит строку в `.wiki/log.md`. + +## What NOT to do + +- Не пиши в `entities/persons/` ничего, кроме как через эту последовательность. +- Не редактируй `config.yaml` без round-trip парсера. +- Не удаляй существующие роли без явной команды пользователя. +``` + +- [ ] **Step 2: Verify SKILL.md frontmatter** + +```bash +cd C:/Users/vitya/projects/.meeting-room +head -5 .claude/skills/meeting-room-register-persona/SKILL.md +``` + +Expected: `---`, `name: meeting-room-register-persona`, `description: Use when user says ...`, `---`. + +- [ ] **Step 3: Commit** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add .claude/skills/meeting-room-register-persona/SKILL.md +git commit -m "$(cat <<'EOF' +Add skill: meeting-room-register-persona + +Registers a persona in config/config.yaml (SoT) and generates the +.wiki/entities/persons/<role-id>.md card. Round-trip YAML edit, append-only +log. Only writer of entities/persons/. + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +--- + +### Task 6: Skill `meeting-room-start-meeting` + +**Files:** +- Create: `.claude/skills/meeting-room-start-meeting/SKILL.md` + +- [ ] **Step 1: Write `SKILL.md`** + +```markdown +--- +name: meeting-room-start-meeting +description: Use when user says "запусти совещание <topic>", "start meeting <scenario>", "новое совещание <topic>", or wants to begin a multi-agent meeting from a scenarios/<topic>.md file in .meeting-room. Validates scenario frontmatter, creates skeleton transcript at .wiki/raw/transcripts/<date>-<topic>.md, opens working buffer at .brainstorm/<topic>.md, logs to .wiki/log.md. +--- + +# meeting-room-start-meeting + +Запускает совещание из `scenarios/<topic>.md`: валидирует frontmatter, создаёт skeleton-транскрипт в `.wiki/raw/transcripts/`, заводит рабочий буфер в `.brainstorm/`, логирует в `.wiki/log.md`. + +## When to use + +- Пользователь говорит «запусти совещание <topic>», «start meeting <scenario>», «новое совещание <topic>». +- Пользователь указал scenario-файл и хочет подготовить артефакты под него. + +## Inputs + +- Путь `scenarios/<topic>.md` или просто `<topic>` (тогда искать `scenarios/<topic>.md`). + +## Steps + +1. **Прочитать `scenarios/<topic>.md`.** Распарсить YAML frontmatter. +2. **Валидация:** + - `name`, `problem` непустые; + - `participants` — список, все элементы существуют как ключи `roles.*` в `config/config.yaml`; + - `max_rounds` — целое (если присутствует). + - При ошибке — перечислить, не создавать ничего. +3. **Сегодняшняя дата** → `<date> = YYYY-MM-DD` (UTC локального компа). +4. **Создать `.wiki/raw/transcripts/<date>-<topic>.md`** (skeleton): + + ```markdown + --- + date: <date> + scenario: scenarios/<topic>.md + participants: [<participant1>, <participant2>, ...] + problem: | + <первая строка problem из scenario> + --- + + # <name> — transcript <date> + + <!-- runner будет дописывать сюда. Append-only после первой записи. --> + ``` + +5. **Создать `.brainstorm/<topic>.md`** (если ещё нет): + + ```markdown + # <name> — working buffer + + - **Scenario:** [scenarios/<topic>.md](../scenarios/<topic>.md) + - **Transcript:** [.wiki/raw/transcripts/<date>-<topic>.md](../.wiki/raw/transcripts/<date>-<topic>.md) + - **Started:** <date> + + ## Заметки + + <!-- здесь черновик. Промочится скилом meeting-room-promote-brainstorm. --> + ``` + + Если файл уже существует — спросить: **append-skip**, **overwrite**, **abort**. + +6. **Дописать в `.wiki/log.md`:** + + ``` + <date> started <topic> ([<participants comma-sep>]) + ``` + +7. **Вернуть пользователю:** созданные пути и подсказку — как запустить runner (на сегодня запуск runner'а вне scope, скил готовит только артефакты). + +## Failure modes + +- `scenarios/<topic>.md` отсутствует → abort. +- Frontmatter невалидный → перечислить ошибки, ничего не создавать. +- Participant отсутствует в `config/config.yaml#roles` → abort с указанием отсутствующих ролей. +- `.brainstorm/<topic>.md` уже есть и пользователь выбрал abort → exit без записи в `raw/transcripts/`. + +## Side effects + +- Создаёт `.wiki/raw/transcripts/<date>-<topic>.md`. +- Создаёт `.brainstorm/<topic>.md` (или модифицирует с разрешения). +- Аппендит строку в `.wiki/log.md`. + +## What NOT to do + +- Не запускать runner — это вне scope скила. +- Не редактировать `scenarios/<topic>.md`. +- Не пытаться угадать `participants` если их нет в `config.yaml`. +``` + +- [ ] **Step 2: Verify** + +```bash +cd C:/Users/vitya/projects/.meeting-room +head -5 .claude/skills/meeting-room-start-meeting/SKILL.md +``` + +Expected: frontmatter с `name: meeting-room-start-meeting`. + +- [ ] **Step 3: Commit** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add .claude/skills/meeting-room-start-meeting/SKILL.md +git commit -m "$(cat <<'EOF' +Add skill: meeting-room-start-meeting + +Validates scenarios/<topic>.md frontmatter against config.yaml roles, creates +skeleton transcript and working buffer, appends to log. Runner invocation is +out of scope (skill prepares artifacts only). + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +--- + +### Task 7: Skill `meeting-room-promote-brainstorm` + +**Files:** +- Create: `.claude/skills/meeting-room-promote-brainstorm/SKILL.md` + +- [ ] **Step 1: Write `SKILL.md`** + +```markdown +--- +name: meeting-room-promote-brainstorm +description: Use when user says "промоутни брейнсторм", "finalize <topic>", "выкати в вики", "promote <topic>", or wants to finalize a .brainstorm/<topic>.md buffer. Asks routing (room-meta vs domain), writes to local .wiki/concepts/ OR ingests into target project's wiki via mcp__projects-meta__knowledge_ingest, extracts action-items into target project's .tasks via mcp__projects-meta__tasks_create, archives buffer to .archive/<date>-<topic>.md. +--- + +# meeting-room-promote-brainstorm + +Финализирует созревший брейнсторм-буфер. По правилу C+ii из spec'а: room-meta → локальный `.wiki/concepts/`, domain → глобал через `projects-meta`; буфер уезжает в `.archive/`. + +## When to use + +- «промоутни брейнсторм», «finalize <topic>», «выкати в вики», «promote <topic>». +- Пользователь явно ссылается на `.brainstorm/<topic>.md` как на готовый к промоушену. + +## Inputs + +- Путь `.brainstorm/<topic>.md` или просто `<topic>`. + +## Decision flow + +``` +.brainstorm/<topic>.md + │ + ▼ + read + summarize (1–2 paragraphs) + │ + ▼ +ask: room-meta or domain? + │ │ + │ ▼ + │ ask: target project (validate ~/projects/<proj>/ exists) + │ │ + ▼ ▼ +write to ingest via +.wiki/concepts mcp__projects-meta__knowledge_ingest + │ │ + └──────┬───────┘ + ▼ + parse action-items, show, allow edit + │ + ▼ + for each: mcp__projects-meta__tasks_create + │ + ▼ + git mv .brainstorm/<topic>.md .archive/<date>-<topic>.md + │ + ▼ + append to .wiki/log.md +``` + +## Steps + +1. **Прочитать `.brainstorm/<topic>.md`.** Показать summary (≤2 абзаца). +2. **Спросить тип:** room-meta (методология самой комнаты) или domain (доменное содержимое для какого-то целевого проекта)? +3. **Если domain:** + - Спросить целевой проект (имя папки в `~/projects/`). + - Валидация: вызвать `mcp__projects-meta__meta_status`, убедиться что проект известен; иначе — abort с сообщением «зарегистрируй проект через setup-projects-meta». +4. **Парсинг action-items:** + - regex по строкам вида `- [ ] ...`, `- [ ]`, секции после `## Следующие шаги`/`## TODO`/`## Next steps`/`## Action items`. + - Показать список, дать редактировать/удалять/добавлять. + - Если 0 action-items — продолжить, не блокировать. +5. **Промоушен контента:** + - **room-meta:** `Write` → `.wiki/concepts/<topic>.md` с frontmatter: + + ```yaml + --- + date: <YYYY-MM-DD> + source: .brainstorm/<topic>.md + status: promoted + type: room-meta + --- + ``` + + Тело — содержимое буфера (можно слегка причесать заголовки, секции типа TODO убрать — они уже сепарированы в action-items). + + - **domain:** `mcp__projects-meta__knowledge_ingest` с параметрами: + - `project: <target>` + - `path: concepts/<topic>.md` (внутри target wiki) + - `content: <тело буфера с frontmatter>` + + Если `knowledge_ingest` падает → abort до tasks_create и до `git mv`. Сообщить пользователю. + +6. **Создание тасок:** для каждого action-item: + - `mcp__projects-meta__tasks_create` с `project: <target>` (для domain) или с `project: <inferred-from-buffer>` (для room-meta это может быть `meeting-room` или конкретный проект упомянутый в action-item — спросить пользователя если неоднозначно). + - Title — первая строка action-item; description — остальное. + - Если N-я таска упала — продолжить остальные, в конце сообщить какие созданы / какие нет. +7. **Архивация:** + + ```bash + git mv .brainstorm/<topic>.md .archive/<YYYY-MM-DD>-<topic>.md + ``` + + **Только** если шаги 5 и 6 прошли (или прошли с допустимым partial — пользователь подтвердил). Иначе — оставить буфер на месте, чтобы можно было ретраиить. + +8. **Лог:** дописать в `.wiki/log.md`: + + ``` + <date> promoted <topic> → <destination> [created N tasks in <proj>] + ``` + +9. **Финальный отчёт пользователю:** + - Куда промочено (полный путь). + - Какие таски созданы (id, title, проект). + - Куда уехал исходник. + +## Failure modes + +- `.brainstorm/<topic>.md` отсутствует → abort. +- `mcp__projects-meta` недоступен → abort до записей. +- Целевой проект (для domain) не найден в `meta_status` → abort. +- `knowledge_ingest` упал → abort до `tasks_create` и `git mv`. Буфер остаётся. +- `tasks_create` упал на N-й таске → продолжить остальные. Сообщить partial. **Не делать** `git mv` без подтверждения пользователя. + +## Side effects + +- room-meta: создаёт `.wiki/concepts/<topic>.md`. +- domain: создаёт запись в target wiki через MCP. +- Создаёт N тасок в target `.tasks/` через MCP. +- Перемещает `.brainstorm/<topic>.md` → `.archive/<date>-<topic>.md`. +- Аппендит строку в `.wiki/log.md`. + +## What NOT to do + +- Не писать доменное содержимое в локальный `.wiki/concepts/` (правило #1 из root `CLAUDE.md`). +- Не создавать локальный `.tasks/` (правило #3). +- Не делать `git mv` буфера до успеха ingest+tasks. +- Не удалять буфер вместо `git mv` — теряется история. +``` + +- [ ] **Step 2: Verify** + +```bash +cd C:/Users/vitya/projects/.meeting-room +head -5 .claude/skills/meeting-room-promote-brainstorm/SKILL.md +grep -c "mcp__projects-meta" .claude/skills/meeting-room-promote-brainstorm/SKILL.md +``` + +Expected: frontmatter; ≥3 упоминания `mcp__projects-meta`. + +- [ ] **Step 3: Commit** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add .claude/skills/meeting-room-promote-brainstorm/SKILL.md +git commit -m "$(cat <<'EOF' +Add skill: meeting-room-promote-brainstorm + +Closes the lifecycle loop: routes .brainstorm/<topic>.md to either local +.wiki/concepts/ (room-meta) or global wiki via projects-meta (domain), +extracts action-items into target project's .tasks, archives buffer. +Atomic-ish ordering: ingest → tasks → mv. Failure leaves buffer for retry. + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +--- + +## Phase 3: End-to-end validation + +### Task 8: Generate persona cards via `register-persona` ×4 + +**Files:** +- Create: `.wiki/entities/persons/analyst.md` +- Create: `.wiki/entities/persons/idea_generator.md` +- Create: `.wiki/entities/persons/moderator.md` +- Create: `.wiki/entities/persons/skeptic.md` +- Modify: `.wiki/log.md` (append 4 entries) + +- [ ] **Step 1: Invoke skill for `analyst`** + +В сессии: «register persona analyst» (или эквивалент). Скил прочитает существующее `roles.analyst` в `config/config.yaml`, спросит подтверждение и сгенерирует карточку. + +Expected file `.wiki/entities/persons/analyst.md` со frontmatter: +- `role-id: analyst` +- `model: glm-5.1` +- `provider: ollama_cloud` +- `source: config/config.yaml` + +- [ ] **Step 2: Invoke skill for `idea_generator`** + +«register persona idea_generator». Expected: +- `model: deepseek-v4-flash` +- `provider: ollama_cloud` + +- [ ] **Step 3: Invoke skill for `moderator`** + +«register persona moderator». Expected: +- `model: glm-5.1` +- `provider: ollama_cloud` + +- [ ] **Step 4: Invoke skill for `skeptic`** + +«register persona skeptic». Expected: +- `model: qwen3.5:397b` +- `provider: ollama_cloud` + +- [ ] **Step 5: Verify** + +```bash +cd C:/Users/vitya/projects/.meeting-room +ls .wiki/entities/persons/ | grep -v gitkeep +tail -5 .wiki/log.md +``` + +Expected: четыре `.md`-файла. В `log.md` — четыре строки `<date> registered <role-id>`. + +- [ ] **Step 6: Commit** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add .wiki/entities/persons/ .wiki/log.md config/ +git commit -m "$(cat <<'EOF' +Generate persona cards from config.yaml (analyst/idea_generator/moderator/skeptic) + +First end-to-end exercise of meeting-room-register-persona. Cards link back +to config/config.yaml as SoT. + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +--- + +### Task 9: Smoke-test `start-meeting` on existing `scenarios/modulair.md` + +**Files (created/modified by skill):** +- Create: `.wiki/raw/transcripts/<today>-modulair.md` (skeleton — затем удалим, т.к. этот scenario — артефакт прошлого, не текущая встреча) +- (НЕ модифицируем `.brainstorm/modulair-rag.md` — он будет обработан в Task 10) + +**Цель:** проверить, что валидатор frontmatter работает на реальном сценарии и skeleton-файл генерируется в правильном формате. Это smoke-test, не запуск настоящей встречи. + +- [ ] **Step 1: Запустить `meeting-room-start-meeting` на `scenarios/modulair.md`** + +В сессии: «start meeting scenarios/modulair.md». + +Expected: +- Frontmatter валидный (4 participants, problem непустой, max_rounds=6). +- Создан `.wiki/raw/transcripts/<today>-modulair.md`. +- Скил не должен пытаться создать `.brainstorm/modulair.md` overwriting `.brainstorm/modulair-rag.md` — другой topic-name. Если скил предложит создать `.brainstorm/modulair.md` — отказаться (smoke-test only) либо принять (он просто будет shell-файл). + +- [ ] **Step 2: Удалить smoke-test артефакты** + +```bash +cd C:/Users/vitya/projects/.meeting-room +rm -f .wiki/raw/transcripts/*-modulair.md +rm -f .brainstorm/modulair.md # если был создан +# log.md строку оставить — append-only +``` + +- [ ] **Step 3: Verify** + +```bash +cd C:/Users/vitya/projects/.meeting-room +ls .wiki/raw/transcripts/ | grep -v gitkeep || echo "empty (ok)" +ls .brainstorm/ | grep -F modulair.md && echo "FAIL: leftover" || echo "ok" +tail -3 .wiki/log.md +``` + +Expected: transcripts/ пуст (только .gitkeep), `.brainstorm/modulair.md` отсутствует, в log.md одна запись `started modulair`. + +- [ ] **Step 4: Commit (только log)** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add .wiki/log.md +git commit -m "$(cat <<'EOF' +Smoke-test meeting-room-start-meeting on scenarios/modulair.md + +Validates frontmatter parser and skeleton generation. Transcript skeleton +removed afterward — this scenario was a past artifact, not a live meeting. +Log entry kept (append-only). + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +--- + +### Task 10: First real `promote-brainstorm` — `modulair-rag.md` + +**Files (created/moved by skill):** +- Create: `.wiki/concepts/modulair-rag-brainstorm-trace.md` +- Move: `.brainstorm/modulair-rag.md` → `.archive/2026-05-05-modulair-rag.md` +- Modify: `.wiki/log.md` (append) + +**Контекст:** доменный design уже промочен в `~/projects/.wiki/concepts/modulair-rag-design.md` (упомянуто в шапке самого файла). То, что осталось — process trace: «как развивался брейнсторм, какие развилки выбрали, что отвергнуто и почему». Это **room-meta**. + +- [ ] **Step 1: Stage `.brainstorm/modulair-rag.md` (currently untracked)** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add .brainstorm/modulair-rag.md +git commit -m "$(cat <<'EOF' +Track existing modulair-rag brainstorm capture + +Pre-promotion commit so the next 'git mv' to .archive/ shows as a rename. + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +- [ ] **Step 2: Запустить `meeting-room-promote-brainstorm` на `.brainstorm/modulair-rag.md`** + +В сессии: «промоутни брейнсторм modulair-rag». + +Ответы пользователя: +- Тип: **room-meta** (process trace, не доменное). +- Имя файла промо: `modulair-rag-brainstorm-trace.md` (предлагается; если скил иначе — поправить). +- Action-items: те, что уже в §«Следующие шаги» исходника (3 пункта). Из них: + 1. «Брейнсторм per остальным 5 sub-projects» — таска в проект `meeting-room` (или явно отказаться, если `meeting-room` ещё не зарегистрирован в `projects-meta`). + 2. «Поднять структуру modulair-rag» — таска в проект `modulair-rag`, если он зарегистрирован, иначе пропустить. + 3. «Заведение golden-set» — таска в проект `modulair-rag`. + + Если ни один из проектов не виден `projects-meta` — пропустить tasks_create целиком, продолжить только промоушен контента. + +- [ ] **Step 3: Verify side effects** + +```bash +cd C:/Users/vitya/projects/.meeting-room +test -f .wiki/concepts/modulair-rag-brainstorm-trace.md && echo "concept ok" +test -f .archive/2026-05-05-modulair-rag.md && echo "archive ok" +test ! -f .brainstorm/modulair-rag.md && echo "buffer cleared" +tail -3 .wiki/log.md +``` + +Expected: `concept ok`, `archive ok`, `buffer cleared`, последняя запись лога — `2026-05-05 promoted modulair-rag → .wiki/concepts/modulair-rag-brainstorm-trace.md ...`. + +- [ ] **Step 4: Commit** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add .wiki/concepts/modulair-rag-brainstorm-trace.md \ + .archive/ \ + .wiki/log.md +git status --short # must show .brainstorm/modulair-rag.md as 'D' or part of rename +git commit -m "$(cat <<'EOF' +Promote modulair-rag brainstorm trace to .wiki/concepts/ + +First real run of meeting-room-promote-brainstorm. Process trace classified +as room-meta (domain design already lives in ~/projects/.wiki/). Buffer +archived as 2026-05-05-modulair-rag.md. + +Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> +EOF +)" +``` + +--- + +### Task 11: Self-promotion — `meeting-room-redesign.md` + `meeting-room-redesign-plan.md` + +**Files (created/moved by skill):** +- Create: `.wiki/concepts/meeting-room-architecture.md` (промо spec'а; план реализации в него либо вшивается приложением, либо архивируется отдельно) +- Move: `.brainstorm/meeting-room-redesign.md` → `.archive/2026-05-05-meeting-room-redesign.md` +- Move: `.brainstorm/meeting-room-redesign-plan.md` → `.archive/2026-05-05-meeting-room-redesign-plan.md` +- Modify: `.wiki/log.md` (append) + +- [ ] **Step 1: Запустить `meeting-room-promote-brainstorm` на `.brainstorm/meeting-room-redesign.md`** + +В сессии: «промоутни брейнсторм meeting-room-redesign». + +Ответы пользователя: +- Тип: **room-meta**. +- Имя файла промо: `meeting-room-architecture.md`. +- Action-items: пусто (план уже исполнен — это тоже сигнал, что промоушен закрывает цикл). Если скил предложит — отвергнуть. + +- [ ] **Step 2: Архивировать план отдельно** + +`meeting-room-redesign-plan.md` — это implementation plan, не methodology spec. Не нужно его повторно ингестить в `concepts/`. Просто переместить в `.archive/`: + +```bash +cd C:/Users/vitya/projects/.meeting-room +git mv .brainstorm/meeting-room-redesign-plan.md .archive/2026-05-05-meeting-room-redesign-plan.md +``` + +- [ ] **Step 3: Verify** + +```bash +cd C:/Users/vitya/projects/.meeting-room +test -f .wiki/concepts/meeting-room-architecture.md && echo "concept ok" +test -f .archive/2026-05-05-meeting-room-redesign.md && echo "spec archived" +test -f .archive/2026-05-05-meeting-room-redesign-plan.md && echo "plan archived" +ls .brainstorm/ | grep -v gitkeep | wc -l +``` + +Expected: первые три проверки — ok; в `.brainstorm/` остались только `.gitkeep` или вообще ноль файлов (буфер чист). + +- [ ] **Step 4: Commit** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git add .wiki/concepts/meeting-room-architecture.md .archive/ .wiki/log.md .brainstorm/ +git commit -m "$(cat <<'EOF' +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> +EOF +)" +``` + +--- + +### Task 12: Final state validation + +- [ ] **Step 1: Folder layout matches spec §3** + +```bash +cd C:/Users/vitya/projects/.meeting-room +tree -L 3 -a -I '.git|.gitkeep' || ls -laR .wiki .claude/skills +``` + +Expected: видна иерархия из spec §3, без `source/`, без `sessions/`, с `.wiki/concepts/` содержащим 2 файла (`modulair-rag-brainstorm-trace.md`, `meeting-room-architecture.md`), с `.wiki/entities/persons/` содержащим 4 карточки, с `.archive/` содержащим 3 файла. + +- [ ] **Step 2: All commits clean, на master, не запушены** + +```bash +cd C:/Users/vitya/projects/.meeting-room +git status +git log --oneline -20 +git rev-list --count origin/master..HEAD 2>/dev/null || echo "no upstream tracking — ok per project-discipline" +``` + +Expected: working tree clean; все коммиты на master; ветка опережает origin (если upstream есть) — не пушим без явного разрешения. + +- [ ] **Step 3: Skills загружены и видны** + +В сессии Claude Code сделать `/skills` или эквивалент. Expected: три скила `meeting-room-*` видны. + +- [ ] **Step 4: Memory todo может быть закрыт** + +Открытый todo `project_extend_discipline_for_meeting_room.md` в `MEMORY.md` — корневой `CLAUDE.md` теперь явно overrides `project-discipline` для этой комнаты. Memory можно обновить статусом «закрыт через локальный CLAUDE.md». Это вне scope plan'а — пометить пользователю. + +--- + +## Self-Review + +**Spec coverage:** + +- §3 (Целевая структура) → Tasks 1, 3. +- §4 (Lifecycle) → описывается, реализуется через скилы Tasks 5–7. +- §5.1 (`promote-brainstorm`) → Task 7 (write), Tasks 10–11 (test). +- §5.2 (`start-meeting`) → Task 6 (write), Task 9 (smoke-test). +- §5.3 (`register-persona`) → Task 5 (write), Task 8 (test ×4). +- §6 (root `CLAUDE.md`) → Task 2. +- §7 (`.wiki/CLAUDE.md`) → Task 1, Step 2. +- §8.1 (миграция папок) → Tasks 3, 4. +- §8.2 (`modulair-rag.md`) → Task 10. +- §8.3 (self-promotion spec) → Task 11. +- §9 (открытые вопросы) — informational, не требует таски. + +Покрытие полное. + +**Placeholder scan:** В планe нет TBD/TODO/«implement later». Каждый шаг содержит либо конкретный код/файл, либо проверяемую команду, либо явные ответы для интерактивного скила. + +**Type consistency:** +- `role-id` (snake_case) используется единообразно во всех скилах и frontmatter. +- Имена скилов: `meeting-room-{promote-brainstorm,start-meeting,register-persona}` — везде с дефисом, без двоеточия (двоеточие — это plugin-namespace, не для project-skill). +- `<date>` формат `YYYY-MM-DD` единый. +- `mcp__projects-meta__{knowledge_ingest,tasks_create,meta_status}` — единое написание. + +Проблем не найдено.