# 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}` — единое написание. Проблем не найдено.