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

1251 lines
52 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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**
```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 хронологический лог: `<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`:**
```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` | число 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`; не редактировать вручную.
```
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 (12 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 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}` — единое написание.
Проблем не найдено.