From 243c0451707425c599f6673847a140cfac54469e Mon Sep 17 00:00:00 2001 From: vitya Date: Tue, 5 May 2026 14:10:45 +0300 Subject: [PATCH] Draft meeting-room redesign spec B+1+C+ii: local .wiki/ for room-meta only, Karpathy folder layout, no local .tasks (action items go to target projects via projects-meta), buffers move to .archive/ after promotion. Skills v1: promote-brainstorm, start-meeting, register-persona. Spec promotes itself once the system is in place. Co-Authored-By: Claude Opus 4.7 (1M context) --- .brainstorm/meeting-room-redesign.md | 230 +++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 .brainstorm/meeting-room-redesign.md diff --git a/.brainstorm/meeting-room-redesign.md b/.brainstorm/meeting-room-redesign.md new file mode 100644 index 0000000..25113db --- /dev/null +++ b/.brainstorm/meeting-room-redesign.md @@ -0,0 +1,230 @@ +--- +date: 2026-05-05 +topic: meeting-room-redesign +status: draft +type: room-meta +promotes_to: .wiki/concepts/meeting-room-architecture.md +--- + +# Meeting-Room Redesign — design spec + +## 1. Контекст + +`.meeting-room/` сейчас объявлена транзитной зоной (`README.md`: «❌ NO `.tasks`/`.wiki` внутри»). На практике: + +- В `.brainstorm/modulair-rag.md` уже копится содержательный артефакт прошедшей сессии — ему некуда уехать кроме `.archive/` или ручного копирования в глобал. +- Реестр персон (`config/config.yaml`) — операционный конфиг без человекочитаемого вики-слоя. +- Два типа сырья (pre-loaded research в `source/` и транскрипты в `sessions/`) разнесены по плоским папкам без общей семантики. +- В памяти `MEMORY.md` есть открытый todo `project_extend_discipline_for_meeting_room.md` — `project-discipline` молчит про brainstorm-workspace. + +Цель редизайна — достроить комнату как **«микро-проект про методологию совещаний»** без превращения её в полноценный проект с локальным backlog. Опереться на Karpathy LLM Wiki pattern для структуры знаний и на `projects-meta` для связи с глобальным скоупом. + +## 2. Принятые решения + +| # | Развилка | Решение | +|---|---|---| +| 1 | Wiki/Tasks семантика | **B**: локальный `.wiki/` есть, локальных `.tasks/` нет | +| 2 | Folder-миграция | **1 (чистый Karpathy)**: всё «сырое» централизовано в `.wiki/raw/` | +| 3 | Промоушен | **C**: локальный `.wiki/concepts/` зарезервирован под room-meta; доменное идёт сразу в глобал, без hop | +| 4 | Судьба буфера после промоушена | **(ii)**: `.brainstorm/.md` → `.archive/-.md` | +| 5 | Skill v1 | `promote-brainstorm`, `start-meeting`, `register-persona` | +| 6 | Persona sync | **α**: писать в обе стороны имеет право только `register-persona`; `config.yaml` — SoT | +| 7 | Project-discipline | master-only ✅, push-by-permission ✅, semver — N/A, локальные tasks — N/A | +| 8 | Spec этого редизайна | живёт здесь, после сборки промоутим своей же системой в `.wiki/concepts/meeting-room-architecture.md` | + +## 3. Целевая структура + +``` +.meeting-room/ +├── CLAUDE.md ← корневой контракт работы в комнате (см. §6) +├── README.md ← обновлённый, ссылка на CLAUDE.md и .wiki/ +│ +├── .wiki/ ← Karpathy-canonical, room-meta only +│ ├── CLAUDE.md ← вики-схема (см. §7) +│ ├── index.md ← навигация +│ ├── overview.md ← что такое meeting-room +│ ├── log.md ← хронологический лог: meetings, promotions, persona changes +│ ├── raw/ +│ │ ├── README.md +│ │ ├── research/ ← бывший source/: pre-loaded clippings, транскрипты внешних чатов +│ │ └── transcripts/ ← бывший sessions/: транскрипты прошедших совещаний +│ ├── entities/ +│ │ ├── persons/ ← карточки persona (генерируются из config.yaml) +│ │ └── projects/ ← pointer-карточки для целевых проектов (modulair-rag, books, …) +│ ├── concepts/ ← room-meta: методология, ретроспективы, паттерны +│ ├── packages/ ← инструменты комнаты (runner, framework, schema) +│ └── sources/ ← внешняя литература (Karpathy gist, фасилитация, multi-agent) +│ +├── scenarios/ ← runtime: frontmatter-сценарии для запуска multi-agent +├── config/ ← runtime: config.yaml — single source of truth для persona +├── .brainstorm/ ← рабочий буфер: черновики, single-agent capture +├── .archive/ ← post-promotion: исходники из .brainstorm/, старые сценарии +└── .claude/ ← локальные скилы и settings.local.json + └── skills/ + ├── meeting-room/ + │ ├── promote-brainstorm/SKILL.md + │ ├── start-meeting/SKILL.md + │ └── register-persona/SKILL.md +``` + +**Различие `.wiki/raw/` ↔ `.brainstorm/`:** raw — immutable, append-only, сырое. `.brainstorm/` — рабочий, редактируемый, чистится промоушеном. + +**Различие `.wiki/concepts/` ↔ `~/projects/.wiki/concepts/`:** локальный — только про **то, как комната работает**. Глобал — доменное содержимое, рождённое в комнате. + +## 4. Lifecycle + +``` +PRE-MEETING + user clip → .wiki/raw/research/-.md + user writes → scenarios/.md (frontmatter: name, participants, problem) + +MEETING + start-meeting → создаёт .wiki/raw/transcripts/-.md (skeleton) + создаёт .brainstorm/.md (shell) + логирует в .wiki/log.md + multi-agent run → дописывает транскрипт в .wiki/raw/transcripts/-.md + single-agent CSO → ведёт активный диалог в .brainstorm/.md + +POST-MEETING + promote-brainstorm → парсит .brainstorm/.md + спрашивает: room-meta или domain? + room-meta → .wiki/concepts/.md + domain → ~/projects//.wiki/concepts/.md + via mcp__projects-meta__knowledge_ingest + парсит action-items, создаёт в .tasks/ target-проекта + via mcp__projects-meta__tasks_create + git mv .brainstorm/.md → .archive/-.md + логирует в .wiki/log.md +``` + +## 5. Skills v1 + +Каждый скил живёт в `.claude/skills/meeting-room//SKILL.md`. Триггер-фразы — в frontmatter `description`, чтобы автодиспетчер их подхватывал. + +### 5.1 `meeting-room:promote-brainstorm` + +**Триггеры:** «промоутни брейнсторм», «finalize ``», «выкати в вики», «promote ``». + +**Аргумент:** путь к файлу `.brainstorm/.md` или topic-name. + +**Интерактивные шаги:** +1. Прочитать файл, показать summary (1–2 абзаца). +2. Спросить: **room-meta** или **domain**? +3. Если domain — спросить целевой проект; валидация `~/projects//` существует и виден `projects-meta`. +4. Распарсить action-items (checkbox `- [ ]`, секции «TODO», «следующие шаги», «next steps»). Показать список, дать отредактировать. + +**Действия (в порядке, atomic-ish):** +1. **Промоушен контента:** + - room-meta: `Write` → `.wiki/concepts/.md` с frontmatter (`date`, `source: .brainstorm/.md`, `status: promoted`). + - domain: `mcp__projects-meta__knowledge_ingest` с target-проектом и контентом. +2. **Создание тасок:** для каждого action-item — `mcp__projects-meta__tasks_create` с target-проектом, title, description. +3. **Архивация:** `git mv .brainstorm/.md .archive/-.md`. +4. **Лог:** дописать строку в `.wiki/log.md`: ` promoted ; created N tasks in `. + +**Failure modes:** +- Целевой проект не найден / `projects-meta` недоступен → abort до любых записей. +- Промоушен прошёл, `tasks_create` упал на N-м экшене → продолжить, в логе зафиксировать частичный успех; `.brainstorm/` **не** перемещать пока пользователь не подтвердит. +- Файла `.brainstorm/.md` нет → abort, ничего не делать. + +### 5.2 `meeting-room:start-meeting` + +**Триггеры:** «запусти совещание ``», «start meeting ``», «новое совещание ``». + +**Аргумент:** путь `scenarios/.md` или topic-name. + +**Шаги:** +1. Прочитать `scenarios/.md`, распарсить YAML frontmatter. +2. Валидация: + - `name`, `problem` непустые; + - все `participants` присутствуют как роли в `config/config.yaml`; + - `max_rounds` — целое (если есть). +3. Сегодняшняя дата → ` = YYYY-MM-DD`. +4. Создать `.wiki/raw/transcripts/-.md` со скелетом (frontmatter: `date`, `scenario: scenarios/.md`, `participants`, `problem`). +5. Создать `.brainstorm/.md` со skeleton (заголовок, ссылки на сценарий и транскрипт). +6. Дописать в `.wiki/log.md`: ` started ({participants})`. +7. Вернуть пользователю созданные пути и подсказку, как запустить multi-agent runner. + +**Failure modes:** +- Frontmatter невалидный → перечислить ошибки, ничего не создавать. +- `.brainstorm/.md` уже есть → спросить: продолжить (append-skip) или прервать. + +### 5.3 `meeting-room:register-persona` + +**Триггеры:** «добавь персону», «новый агент в комнату», «register persona ``». + +**Интерактивный сбор полей:** +- `role-id` (snake_case, уникальный) +- `name` (display) +- `model`, `provider`, `temperature`, `tools`, `system_prompt` + +**Шаги:** +1. Прочитать `config/config.yaml`. Если `roles.` существует — спросить: overwrite, abort, новый id. +2. Обновить `config.yaml`, **сохраняя YAML-форматирование** (использовать YAML-парсер с round-trip — иначе комментарии и порядок ключей побьются). +3. Сгенерировать `.wiki/entities/persons/.md` с frontmatter (`role-id`, `model`, `provider`, `source: config/config.yaml`) и body — summary поведения роли, цитата `system_prompt`, ссылка на `config.yaml`. +4. Дописать в `.wiki/log.md`: ` registered persona `. + +**Sync-правило (α):** все автоматические записи в `entities/persons/` идут только через этот скил. Ручные правки разрешены только в `config.yaml`; для пере-генерации карточки — снова `register-persona ` (он определит, что роль уже есть, и пере-сгенерирует). + +## 6. Корневой `CLAUDE.md` + +Содержание (outline): + +1. **Идентичность:** «Это `.meeting-room` — workspace для кросс-проектных брейнштормов и круглых столов. Не код-проект.» +2. **Семантика артефактов** (короткая шпаргалка из §3 + §4). +3. **Жёсткие правила:** + - Доменное содержимое **никогда** не оседает в локальном `.wiki/` — всегда в глобал через `projects-meta`. + - Локальный `.wiki/` — только room-meta (методология, persona-карточки, лог встреч, ретро). + - Локальные `.tasks/` **не создавать** — экшены идут в `.tasks/` целевого проекта через `projects-meta__tasks_create`. + - Перед любым предложением tooling/архитектуры — прочитать `.wiki/raw/research/` для текущего топика (закрепляет `feedback_read_source_transcripts.md` из памяти). +4. **Триггеры скилов v1:** перечень фраз → скил. +5. **Override `project-discipline`:** + - master-only ✅ + - commit freely / push by permission ✅ + - semver-bump — N/A (нет versioned-артефактов в комнате) + - локальные `.tasks/` — N/A (запрещены §6.3) +6. **Persona registry:** SoT — `config/config.yaml`. Карточки `.wiki/entities/persons/` — производное, пишется только скилом `register-persona`. + +## 7. `.wiki/CLAUDE.md` (схема) + +Karpathy-канон от `setup-wiki` + meeting-room-специфика: + +- `entities/persons/.md` — frontmatter обязателен (`role-id`, `model`, `provider`, `source`); body — summary и цитата system_prompt. +- `entities/projects/.md` — pointer-карточка к глобальному проекту (минимум: путь, краткая роль в контексте комнаты, ссылки на встречи где он фигурировал). +- `concepts/.md` — room-meta: методология, ретро. Frontmatter: `date`, `source: .brainstorm/.md` (или `.archive/...`). +- `raw/research/-.md` — внешний clipping. Frontmatter: `date`, `source` (URL), `topic`. +- `raw/transcripts/-.md` — транскрипт встречи. Frontmatter: `date`, `scenario`, `participants`. +- `log.md` — append-only, формат: ` [details]`. + +## 8. Migration plan + +### 8.1 Существующие папки + +| Источник | Назначение | Способ | +|---|---|---| +| `source/2026-05-03-modulair.md` | `.wiki/raw/research/2026-05-03-modulair.md` | `git mv` | +| `source/2026-05-03-code-review.md` | `.wiki/raw/research/2026-05-03-code-review.md` | `git mv` | +| `sessions/` (пусто) | `.wiki/raw/transcripts/` (пусто) | создать новую | +| `.archive/` (пусто) | остаётся `.archive/` | без изменений | +| `scenarios/` | остаётся `scenarios/` | без изменений | +| `config/` | остаётся `config/` | без изменений | +| `.brainstorm/modulair-rag.md` | особый кейс — см. §8.2 | через `promote-brainstorm` (первый прогон) | +| `README.md` | обновить: ссылки на `CLAUDE.md`, `.wiki/`, удалить устаревшее правило «❌ NO `.wiki` внутри» | edit | + +### 8.2 `modulair-rag.md` — особый кейс + +Содержимое — process trace прошедшей single-agent сессии. Финальный design уже лежит в `~/projects/.wiki/concepts/modulair-rag-design.md` (упомянут в шапке самого файла). То есть **доменный layer уже промочен**, что осталось в `.brainstorm/` — это методологический след: «как развивался брейнсторм, какие развилки выбрали, что отвергнуто и почему». + +Это room-meta. Назначение при промоушене — `.wiki/concepts/modulair-rag-brainstorm-trace.md` (или похожее имя). Тасок не порождает (всё доменное уже зафиксировано). Исходник → `.archive/2026-05-05-modulair-rag.md`. + +Использовать как первый end-to-end тест `promote-brainstorm`. + +### 8.3 Spec этого редизайна + +После сборки структуры и v1-скилов — прогнать `meeting-room:promote-brainstorm` на самом этом файле. Назначение: `.wiki/concepts/meeting-room-architecture.md`. Тасок не порождает (план реализации идёт через `writing-plans` отдельно). Исходник → `.archive/2026-05-05-meeting-room-redesign.md`. + +## 9. Открытые вопросы (не блокируют реализацию) + +- **Имя файла промо для `modulair-rag.md`** — `modulair-rag-brainstorm-trace.md` рабочая идея, финальное при первом прогоне. +- **Парсер action-items в `promote-brainstorm`** — начнём с regex по `- [ ]` и явным секциям; LLM-парсер только если regex окажется недостаточным. +- **Что писать в `entities/projects/.md`** — формат карточки утрясём после первой реальной встречи post-redesign (сейчас нет данных). +- **Расширение `project-discipline` для brainstorm-workspaces** — после стабилизации этой комнаты подать как PR в сам `project-discipline` (закрытие memory-todo `project_extend_discipline_for_meeting_room.md`).