Files
discussions/.brainstorm/meeting-room-redesign-plan.md
vitya 205ba78cf9 Draft meeting-room redesign implementation plan
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) <noreply@anthropic.com>
2026-05-05 14:26:12 +03:00

52 KiB
Raw Blame History

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/<name>/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 1112)
.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

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-специфика)
# .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 хронологический лог: `<YYYY-MM-DD> <event-type> <topic> [details]`
- `raw/research/<date>-<topic>.md` — внешние clippings, immutable
- `raw/transcripts/<date>-<topic>.md` — транскрипты совещаний, immutable
- `entities/persons/<role-id>.md` — карточки persona (генерируются скилом `meeting-room-register-persona` из `config/config.yaml`)
- `entities/projects/<proj>.md` — pointer-карточки целевых проектов
- `concepts/<topic>.md` — room-meta: методология, ретроспективы, паттерны фасилитации
- `packages/<tool>.md` — инструменты комнаты (runner, framework, schema)
- `sources/<title>.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:

---
date: 2026-05-03
source: <URL>
topic: <topic>
---

raw/transcripts/<date>-<topic>.md:

---
date: 2026-05-03
scenario: scenarios/<topic>.md
participants: [moderator, skeptic, idea_generator, analyst]
problem: <one-line>
---

concepts/<topic>.md:

---
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
# 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
# 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
# raw/

Immutable, append-only. Никаких редактур после фиксации.

- `research/` — внешние clippings, pre-loaded материалы перед совещанием.
- `transcripts/` — транскрипты прошедших совещаний.

При промоушене `concepts/<topic>.md` ссылается сюда через frontmatter `source:`.
  • Step 7: Verify structure
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
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

# .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
cd C:/Users/vitya/projects/.meeting-room
test -f CLAUDE.md && wc -l CLAUDE.md

Expected: CLAUDE.md существует, ~50 строк.

  • Step 3: Commit
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)

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)
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
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
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
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
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

# .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
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
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

---
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` | число 01.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`; не редактировать вручную.
  1. Дописать в .wiki/log.md:

    <YYYY-MM-DD> registered <role-id>
    
  2. Сообщить пользователю созданные/обновлённые пути.

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
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

---
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 после первой записи. -->
  1. Создать .brainstorm/<topic>.md (если ещё нет):

    # <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.

  2. Дописать в .wiki/log.md:

    <date> started <topic> ([<participants comma-sep>])
    
  3. Вернуть пользователю: созданные пути и подсказку — как запустить 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
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

---
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/.md │ ▼ read + summarize (12 paragraphs) │ ▼ ask: room-meta or domain? │ │ │ ▼ │ ask: target project (validate ~/projects// 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/.md .archive/-.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 — пользователь подтвердил). Иначе — оставить буфер на месте, чтобы можно было ретраиить.

  1. Лог: дописать в .wiki/log.md:

    <date> promoted <topic> → <destination> [created N tasks in <proj>]
    
  2. Финальный отчёт пользователю:

    • Куда промочено (полный путь).
    • Какие таски созданы (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
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

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
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 артефакты

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
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)
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-brainstormmodulair-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)
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

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
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/:

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
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
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
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, не запушены
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 57.
  • §5.1 (promote-brainstorm) → Task 7 (write), Tasks 1011 (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} — единое написание.

Проблем не найдено.