diff --git a/.wiki/concepts/meeting-room-architecture.md b/.wiki/concepts/meeting-room-architecture.md index 18279e5..650aacb 100644 --- a/.wiki/concepts/meeting-room-architecture.md +++ b/.wiki/concepts/meeting-room-architecture.md @@ -3,131 +3,83 @@ date: 2026-05-05 source: .brainstorm/meeting-room-redesign.md status: promoted type: room-meta +amended: 2026-05-08 (split-rewrite — runtime only, boss-зона выделена в .workshop/.wiki/concepts/workshop-architecture.md) --- -# Meeting-Room Architecture — promoted spec +# Meeting-Room Architecture — promoted spec (runtime-only post-split) -> Промочено 2026-05-05 из `.brainstorm/meeting-room-redesign.md`. Spec, который комната провалидировала на самой себе: первый прогон скила `meeting-room-promote-brainstorm` сделан именно над этим файлом. Implementation plan архивирован отдельно — `.archive/2026-05-05-meeting-room-redesign-plan.md`. +> Промочено 2026-05-05 из `.brainstorm/meeting-room-redesign.md`. Spec, который комната провалидировала на самой себе: первый прогон скила `meeting-room-promote-brainstorm` сделан над этим файлом. Implementation plan архивирован отдельно — `.archive/2026-05-05-meeting-room-redesign-plan.md`. +> +> **2026-05-08 split-rewrite:** комната разделена на multi-agent runtime (`.meeting-room/`, эта зона) и single-agent boss-zone (`.workshop/`). Из текущего документа удалены boss-секции (`.brainstorm/`, `.archive/`, `promote-brainstorm`-скил, single-agent CSO в lifecycle, room-meta concepts) — они переехали в `.workshop/.wiki/concepts/workshop-architecture.md`. Полная исходная версия доступна в git-истории (см. commit перед 2026-05-08). Мотивация и протокол split'а: `.workshop/.wiki/concepts/meeting-room-split.md` (после step #12 миграции). ## 1. Контекст -`.meeting-room/` сейчас объявлена транзитной зоной (`README.md`: «❌ NO `.tasks`/`.wiki` внутри»). На практике: +`.meeting-room/` — multi-agent runtime для срежиссированных круглых столов: тематических совещаний с ролями (analyst, skeptic, idea_generator, moderator …), сценарием и транскриптом. Не код-проект. -- В `.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` для связи с глобальным скоупом. +Зона выделена под темы, которые выигрывают от **многопозиционного спора** (architect vs implementer vs PM, или иные оппозиции). Single-agent + user брэйнсторм без режиссуры — другой режим, живёт в `.workshop/`. Дистилляция транскрипт → концепт — отдельный явный handoff в `.workshop/`. ## 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` | +| 1 | Wiki/Tasks семантика | локальный `.wiki/` есть (room-meta), локальный `.tasks/` нет (запрещён §3 в `CLAUDE.md`) | +| 2 | Folder-миграция | Karpathy-канон: всё «сырое» в `.wiki/raw/`, скилы — в `~/projects/claude-skills/` | +| 3 | Skills v1 | `meeting-room-start-meeting`, `meeting-room-register-persona` (boss-скил `workshop-promote-brainstorm` выделен в workshop-зону) | +| 4 | Persona sync | писать в `entities/persons/` имеет право только `register-persona`; `config/config.yaml` — SoT | +| 5 | Project-discipline | master-only ✅, push-by-permission ✅, semver — N/A, локальные tasks — N/A (запрет §3) | ## 3. Целевая структура ``` .meeting-room/ -├── CLAUDE.md ← корневой контракт работы в комнате (см. §6) -├── README.md ← обновлённый, ссылка на CLAUDE.md и .wiki/ +├── CLAUDE.md корневой контракт зоны +├── README.md │ -├── .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/.md runtime: frontmatter сценариев multi-agent +├── config/config.yaml runtime: реестр persona (SoT) │ -├── 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/ Karpathy-canonical, room-meta only + ├── CLAUDE.md wiki-схема + ├── index.md + ├── overview.md + ├── log.md append-only хроника + ├── raw/ + │ ├── README.md + │ └── transcripts/-.md immutable: транскрипты совещаний + ├── entities/ + │ ├── persons/.md карточки персон (генерируются) + │ └── projects/.md pointer-карточки целевых проектов + └── concepts/.md room-meta: методология, ретро runtime'а ``` -**Различие `.wiki/raw/` ↔ `.brainstorm/`:** raw — immutable, append-only, сырое. `.brainstorm/` — рабочий, редактируемый, чистится промоушеном. +**Boss-артефакты (`.brainstorm/`, `.archive/`, дистилляция, методология одиночного мышления) — в `.workshop/`, не здесь.** -**Различие `.wiki/concepts/` ↔ `~/projects/.wiki/concepts/`:** локальный — только про **то, как комната работает**. Глобал — доменное содержимое, рождённое в комнате. - -## 4. Lifecycle +## 4. Lifecycle (runtime-only) ``` PRE-MEETING - user clip → .wiki/raw/research/-.md - user writes → scenarios/.md (frontmatter: name, participants, problem) + user clip → .meeting-room/.wiki/raw/research/-.md + (если research-материал, релевантный совещанию) + user writes → scenarios/.md (frontmatter: name, participants, problem, max_rounds) MEETING - start-meeting → создаёт .wiki/raw/transcripts/-.md (skeleton) - создаёт .brainstorm/.md (shell) - логирует в .wiki/log.md + meeting-room- → создаёт .wiki/raw/transcripts/-.md (skeleton) + start-meeting логирует в .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 +POST-MEETING (handoff в .workshop/) + user явно: «дистиллируй транскрипт » + → boss создаёт .workshop/.brainstorm/-distill.md + → workshop-promote-brainstorm дальше ``` +**Без автоматического hop'а в workshop.** Транскрипт остаётся как primary артефакт runtime'а; распаковка в концепт — явный шаг человека. + ## 5. Skills v1 -Каждый скил живёт в `.claude/skills/meeting-room//SKILL.md`. Триггер-фразы — в frontmatter `description`, чтобы автодиспетчер их подхватывал. +Скилы живут в `~/projects/claude-skills/skills/`, не локально. Триггер-фразы — в SKILL.md frontmatter. -### 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` +### 5.1 `meeting-room-start-meeting` **Триггеры:** «запусти совещание ``», «start meeting ``», «новое совещание ``». @@ -135,97 +87,59 @@ POST-MEETING **Шаги:** 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. +2. Валидация: `name`, `problem` непустые; все `participants` — роли в `config/config.yaml`; `max_rounds` целое (если есть). +3. ` = YYYY-MM-DD`. +4. Создать `.wiki/raw/transcripts/-.md` (frontmatter: `date`, `scenario`, `participants`, `problem`). +5. Дописать в `.wiki/log.md`: ` started ({participants})`. +6. Вернуть пользователю созданный путь и подсказку, как запустить multi-agent runner. **Failure modes:** - Frontmatter невалидный → перечислить ошибки, ничего не создавать. -- `.brainstorm/.md` уже есть → спросить: продолжить (append-skip) или прервать. +- `.wiki/raw/transcripts/-.md` уже есть → спросить: продолжить (append-skip) или прервать. -### 5.3 `meeting-room:register-persona` +### 5.2 `meeting-room-register-persona` **Триггеры:** «добавь персону», «новый агент в комнату», «register persona ``». **Интерактивный сбор полей:** - `role-id` (snake_case, уникальный) -- `name` (display) -- `model`, `provider`, `temperature`, `tools`, `system_prompt` +- `name`, `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`. +2. Обновить `config.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 ` (он определит, что роль уже есть, и пере-сгенерирует). +**Sync-правило:** все автоматические записи в `entities/persons/` идут только через этот скил. Ручные правки разрешены только в `config.yaml`; для пере-генерации карточки — снова `register-persona `. ## 6. Корневой `CLAUDE.md` -Содержание (outline): +Полный текст — см. `.meeting-room/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`. +1. Идентичность: «multi-agent runtime для круглых столов, не код-проект». +2. Семантика артефактов (таблица). +3. Жёсткие правила: доменное содержимое — в global wiki через `projects-meta`, локальный `.wiki/concepts/` — только room-meta, локальный `.tasks/` запрещён, `entities/persons/` пишет только `register-persona`, domain-промоушен с импл-тасками авто-создаёт review-чекпоинт (но сам промоушен теперь — workshop'а, не отсюда). +4. Триггеры скилов v1 (только `start-meeting`, `register-persona`). +5. Override `project-discipline`. +6. Persona registry: SoT — `config/config.yaml`. ## 7. `.wiki/CLAUDE.md` (схема) -Karpathy-канон от `setup-wiki` + meeting-room-специфика: +Karpathy-канон + 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]`. +- `entities/projects/.md` — pointer-карточка к проекту (минимум: путь, краткая роль в контексте комнаты, ссылки на встречи). +- `concepts/.md` — room-meta runtime'а (методология совещаний, ретро). Frontmatter: `date`, `source`, `status`, `type: room-meta`. +- `raw/research/-.md` — внешний clipping, frontmatter: `date`, `source` (URL), `topic`. +- `raw/transcripts/-.md` — транскрипт встречи, frontmatter: `date`, `scenario`, `participants`, `problem`. +- `log.md` — append-only, ` [details]`. -## 8. Migration plan +## 8. Handoff с `.workshop/` -### 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`. +См. `.workshop/.wiki/concepts/workshop-architecture.md` §8. Кратко: транскрипт в `.meeting-room/.wiki/raw/transcripts/` → boss создаёт дистилляционный буфер в `.workshop/.brainstorm/-distill.md` → `workshop-promote-brainstorm` → нужный target. Никакой автоматизации, явный шаг человека. ## 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`). +- **Что писать в `entities/projects/.md`** — формат карточки утрясём после первой реальной встречи (сейчас нет данных). +- **Регистрация `.meeting-room` в `mcp__projects-meta`** — после split'а возможно понадобится для cross-project aggregation сценариев. Open вопрос из split-плана. diff --git a/.wiki/log.md b/.wiki/log.md index b348644..0895706 100644 --- a/.wiki/log.md +++ b/.wiki/log.md @@ -32,3 +32,5 @@ Events: `started`, `promoted`, `registered`, `archived`. 2026-05-07 promoted tdd-criteria → claude-skills/.wiki/concepts/tdd-criteria-design.md (commits a03d2804+2ad6f4ce+5fb648d4); tasks created: claude-skills#tdd-criteria-skill-write (ready), claude-skills#tdd-criteria-hermes-mapping (blocked), claude-skills#tdd-criteria-build-install (blocked), claude-skills#tdd-criteria-review (blocked, umbrella per §5) 2026-05-07 archived tdd-criteria → .archive/2026-05-07-tdd-criteria.md 2026-05-07 amended tdd-criteria post-promotion: anti-loophole rule 4 (test-immutability + [test-modify: was X; is Y] marker + separate-commit-from-impl) added; user surfaced symmetric vandalism risk on tests after initial promotion. Patches landed: claude-skills#tdd-criteria-skill-write description updated (commit b7819b17), claude-skills#tdd-criteria-precommit-hook task created (commit d440bb52). Design-doc amendment NOT applied directly (knowledge_ingest is create-only — overwrite blocked); amendment text embedded in skill-write task description for impl session to apply via direct git edit. +2026-05-08 split meeting-room into multi-agent runtime (this zone) + .workshop/ boss-zone; remote workshop repo created at git.kzntsv.site/OpeItcLoc03/workshop.git +2026-05-08 amended meeting-room-architecture.md: split-rewrite (runtime-only); boss sections moved to .workshop/.wiki/concepts/workshop-architecture.md