From a1f12fcdd42e82ef1896afba39f73dffefb50e62 Mon Sep 17 00:00:00 2001 From: vitya Date: Tue, 25 Aug 2026 10:17:08 +0300 Subject: [PATCH] =?UTF-8?q?feat(skills):=20mappa-brainstorm-promote=201.6.?= =?UTF-8?q?0=20=E2=80=94=20brainstorm-=D1=81=D1=83=D1=89=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C,=20=D0=BE=D0=B1=D1=89=D0=B8=D0=B9=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=85=D0=B0=D0=BD=D0=B8=D0=B7=D0=BC=20mappa=20(=D0=B1=D0=B5?= =?UTF-8?q?=D0=B7=20workshop-=D1=81=D0=BF=D0=B5=D1=86=D0=B8=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B8=20storm-=D1=81=D0=BE=D0=BA=D1=80=D0=B0?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D0=B9)=20(#1066)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/mappa-brainstorm-promote.skill | Bin 6340 -> 5613 bytes skills/mappa-brainstorm-promote/SKILL.md | 267 ++++++++++------------- 2 files changed, 115 insertions(+), 152 deletions(-) diff --git a/dist/mappa-brainstorm-promote.skill b/dist/mappa-brainstorm-promote.skill index 6ca3d03b1ce441ac64fb7da59d34ed4e95d6fed9..7d891e42c82e98dc227f933c927da6e1552d20a5 100644 GIT binary patch delta 5562 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 I6#xJL0B-ub?EnA( delta 6315 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 hApigX000000000000000003>1w-qo3Ul;%Y004I)FvkD@ diff --git a/skills/mappa-brainstorm-promote/SKILL.md b/skills/mappa-brainstorm-promote/SKILL.md index 674f71e..b9bba63 100644 --- a/skills/mappa-brainstorm-promote/SKILL.md +++ b/skills/mappa-brainstorm-promote/SKILL.md @@ -3,45 +3,33 @@ name: mappa-brainstorm-promote author: ours version: 1.6.0 description: > - Finalize a matured brainstorm storm-entity in mappa (type=storm, in ANY - project): read buffer → route (workshop-meta → .workshop wiki; domain → - target project wiki; skill → ~/projects/skills skeleton) → promote via - mcp__mappa__storm_promote (atomic buffer → wiki-страница + archive, решение 7) - → extract action-items into target tasks (mcp__mappa__task_create, карв-аут) - → review umbrella → covering letter. Старое имя — триггер-синоним: - workshop-promote-brainstorm. Project-agnostic: storm lives where it is led, - not only in .workshop; file channels (.brainstorm/.archive) are read-only - legacy (импортированы в mappa). Triggers (user): «промоутни брейнсторм», + Finalize a matured brainstorm buffer (mappa entity type=brainstorm, status=buffer): + read buffer → choose target project → promote via mcp__mappa__brainstorm_promote + (atomic buffer → wiki-страница в target + archive, решение 7) → extract + action-items into target tasks (mcp__mappa__task_create, карв-аут) → review + umbrella → covering letter. Общий механизм mappa, как task.create/wiki.create — + никакой workshop-специфики. Старое имя — триггер-синоним: + workshop-promote-brainstorm. Triggers (user): «промоутни брейнсторм», «finalize », «выкати в вики», «promote ». --- # mappa-brainstorm-promote -Финализация созревшего шторм-буфера, который живёт **как mappa storm-сущность** -(type=storm, status=buffer) в любом проекте — **процедура** (линейная: от чтения -буфера до промоута и тасок), не цикл: запускается явно на финальном буфере и -доводит его до конца. В форкфлоу встаёт между работой (`mappa-task-work`) и -финишем (`mappa-closing-ritual`). +Финализация созревшего брейнсторм-буфера, который живёт **как mappa-сущность +типа `brainstorm`** (status=buffer). Это общий механизм mappa — ровно как +`task.create` или `wiki.create`: буфер существует в mappa, скил доводит его до +конца (промоут контента в вики + action-items тасками). Никакой +workshop-специфики: скил триггерится из любой папки, работает с brainstorm- +сущностями любого проекта. -> **Project-agnostic.** Шторм ведётся там, где его ведут, — не только в -> `.workshop/`. Скил триггерится из любой папки; буфер ищется в mappa -> (`entity_search` type=storm), а не на диске. Файловые `.brainstorm/`/ -> `.archive/` — read-only легаси: их содержимое уже импортировано в mappa -> storm-сущности (решение 15, флип), новые записи в файлы не делаются. +Процедура линейная (от чтения буфера до промоута и тасок), не цикл: запускается +явно на финальном буфере и доводит его до конца. В форкфлоу встаёт между +работой (`mappa-task-work`) и финишем (`mappa-closing-ritual`). -Три ветки маршрутизации (спросить пользователя): - -- **workshop-meta** → промоут в `.workshop`: wiki-страница в вики зоны - (методология самой зоны). -- **domain** → промоут в целевой проект: wiki-страница (спека) в его вики + - импл-таски + review-umbrella. -- **skill** → каркас скила в `~/projects/skills/skills//SKILL.md` - (только шапка + пустой каркас тела, локальный коммит без push/install). - -Промоут контента — **всегда через `mcp__mappa__storm_promote`**: атомарно -создаёт wiki-страницу (slug из шторма, body сохраняется) в проекте из вызова и -переводит шторм в `archive` (номер/slug стабильны, решение 20; рёбра parent_of, -событие `storm.promoted`). **Никаких git mv и файловых архивов.** Action-items +**Промоут контента — всегда через `mcp__mappa__brainstorm_promote`:** +атомарно создаёт wiki-страницу (slug из буфера, body сохраняется) в проекте из +вызова и переводит буфер в `archive` (номер/slug стабильны, решение 20; рёбра +parent_of, событие `brainstorm.promoted`). Никаких файловых каналов. Action-items уходят тасками в target-проект через `mcp__mappa__task_create` (карв-аут без лиза, #1054; последовательно, не батчем). @@ -49,95 +37,70 @@ description: > - «промоутни брейнсторм», «finalize », «выкати в вики», «promote ». -- Пользователь ссылается на storm-сущность (storm:N) или на тему шторма, - которая созрела и готова к промоушену. +- Пользователь ссылается на brainstorm-сущность (brainstorm:N) или на тему + буфера, который созрел и готов к промоушену. ## Inputs -- Storm-реф `storm:N` или `` (slug/тема шторма) + project (если шторм - не в текущем проекте — спросить). +- Brainstorm-реф `brainstorm:N` или `` (slug/тема буфера) + project (если + буфер не в текущем проекте — спросить). - Для skill-ветки дополнительно: `` нового скила (если не указан — спросить, предложить производное от topic). ## Decision flow ``` -storm-сущность в mappa (type=storm, status=buffer) +brainstorm-сущность в mappa (type=brainstorm, status=buffer) │ ▼ - find + read (entity_search type=storm → entity_get полный body) + find + read (entity_search type=brainstorm → entity_get полный body) │ ▼ - ask: workshop-meta or domain or skill? - │ │ │ - │ ▼ ▼ - │ ask: target proj ask: + check - │ │ ~/projects/skills/ - │ ┌─────┴─────┐ skills// NOT exists - │ ▼ ▼ │ - │ storm_promote storm_promote dialog: description (trigger contract) - │ (project=.workshop) (project=) │ - │ │ │ ▼ - │ │ │ preview + confirm - │ │ │ │ - │ │ │ ▼ - │ │ │ mkdir + Write SKILL.md - │ │ │ (header + empty 6-section skeleton) - │ │ │ │ - │ │ │ ▼ - │ │ │ git add + commit in ~/projects/skills/ - │ │ │ (local, no push, no install.sh) - │ │ │ │ - └────────┴───────────┴────────────┘ - │ - ▼ - parse action-items from storm body - │ - ▼ - for each: mcp__mappa__task_create (ПОСЛЕДОВАТЕЛЬНО, не батчем) - │ - ▼ - review-umbrella: mcp__mappa__task_create (blocked, blocker=impl#) - │ - ▼ - covering-письмо: mcp__mappa__inbox_send (канон mappa-delegation) - │ - ▼ - финальный отчёт (wiki:NNNN — спека, storm:N — архив, таски) + ask: target project (куда промоутить) + │ + ├── обычный проект → brainstorm_promote(project=) + │ → wiki-страница (спека) в вики target + │ + └── skill → dialog: description (trigger contract) + → preview + confirm + → mkdir + Write SKILL.md (каркас) в ~/projects/skills/ + → git add + commit (local, no push/install) + │ + ▼ + parse action-items from buffer body + │ + ▼ + for each: mcp__mappa__task_create (ПОСЛЕДОВАТЕЛЬНО, не батчем) + │ + ▼ + review-umbrella: mcp__mappa__task_create (blocked, blocker=impl#) + │ + ▼ + covering-письмо: mcp__mappa__inbox_send (канон mappa-delegation) + │ + ▼ + финальный отчёт (wiki:NNNN — спека, brainstorm:N — архив, таски) ``` ## Steps -1. **Найти шторм в mappa.** `mcp__mappa__entity_search(type='storm', - project=<проект>, q=)` → в результатах storm:N + **internal id**. +1. **Найти буфер в mappa.** `mcp__mappa__entity_search(type='brainstorm', + project=<проект>, q=)` → в результатах brainstorm:N + **internal id**. Прочитать полный буфер: `mcp__mappa__entity_get(id=)` — тело = - running record шторма (frontmatter + раунды). + running record (frontmatter + раунды). - - Если шторм не найден, но пользователь показывает файловый - `.workshop/.brainstorm/.md` — это легаси: он уже импортирован или - доимпортируется в mappa storm-сущность (оператор, 2026-08-25). Скил - работает с storm-сущностью; файлы не трогает. - - Если шторма нет ни в mappa, ни в файлах — создать storm-сущность: - HTTP `POST /entities` с `x-api-token: $MAPPA_API_TOKEN`, - body `{project, type:'storm', slug, status:'buffer', body}` (MCP-тула - `storm.create` пока нет — follow-up на mappa; контракт POST /entities, - решение 7/#1054). + Если буфера нет в mappa — создать brainstorm-сущность через + `mcp__mappa__brainstorm_create` (или HTTP `POST /entities` type=brainstorm, + контракт решения 7/#1054). Не изобретать файловые буферы. 2. **Показать summary буфера (≤2 абзаца).** -3. **Спросить тип:** - - **workshop-meta** — методология самой workshop-зоны: ретро дистилляции, - паттерны, апгрейды скилов зоны. - - **domain** — доменное содержимое для какого-то целевого проекта. - - **skill** — методология общего назначения, оформляется как скил в - `~/projects/skills/`. +3. **Спросить target-проект** — куда промоутить контент. По умолчанию — проект, + где буфер живёт (шторм ведут там, где тема релевантна). Проверить, что проект + существует в mappa: `mcp__mappa__entity_search` type=project или + `admin_status` (список проектов). Если нет — abort с сообщением. -4. **Если domain:** спросить целевой проект (имя папки в `~/projects/`). - Проверить, что проект существует в mappa: `mcp__mappa__entity_search` - type=project или `admin_status` (список проектов). Если нет — abort с - сообщением. - -5. **Если skill:** +4. **Если target = skill (пользователь хочет оформить как скил):** - Спросить `` нового скила (если не указан) — валидный slug (`[a-z0-9-]+`). - Валидация: `~/projects/skills/skills//` НЕ должна существовать. @@ -146,42 +109,43 @@ storm-сущность в mappa (type=storm, status=buffer) апдейтов». - Валидация: `~/projects/skills/` сам репозиторий существует. Если нет — abort с сообщением «клонируй skills через update-skills или вручную». + - Двухпроходной каркас: диалог по `description` (триггер-контракт активации: + минимум 2-3 фразы, пары русский/английский; что делает; антипаттерны) → + preview + confirm → `Write` каркаса (шапка + 6 пустых секций) → локальный + `git commit` в `~/projects/skills/`. **Без** install.sh, push, + build-hermes — это в baseline-тасках шага 7. Тело каркаса дописывается + вторым проходом глазами (вне scope этого скила). -6. **Промоут контента (всегда через `storm_promote`, решение 7):** +5. **Промоут контента (всегда через `brainstorm_promote`, решение 7):** - `mcp__mappa__storm_promote(project=, storm_id=)` + `mcp__mappa__brainstorm_promote(project=, brainstorm_id=)` - - Атомарно: buffer → wiki-страница (slug из шторма, body сохраняется, - рёбра parent_of wiki→storm и refs→storm) + шторм → `archive` + - значимое событие `storm.promoted`. - - **workshop-meta:** `project='.workshop'` → спека/концепт в вики зоны. - - **domain:** `project=` → спека в вики целевого проекта. **Frontmatter-summary - (wiki:2661):** убедиться, что в теле шторма есть `summary:` одной строкой - в frontmatter — карточки `wiki.search` читают его. Если нет — дописать - перед промоутом (через HTTP PATCH body шторма, entities.update). - - **skill:** контент шторма НЕ промоутится в вики (каркас пустой, тело - дописывается вторым проходом глазами) — но шторм всё равно архивируется - `storm_promote(project=<где шторм>)`, чтобы буфер не висел. - - Повторный промоут архивированного шторма → ошибка (one-shot, идемпотентно - через статус). Сверить `storm_id` (internal) из шага 1. - - Если `storm_promote` упал (конфликт версии, 409) → retry со свежим + - Атомарно: buffer → wiki-страница (slug из буфера, body сохраняется, рёбра + parent_of buffer→wiki и refs→buffer) + буфер → `archive` + значимое событие + `brainstorm.promoted`. + - **Frontmatter-summary (wiki:2661):** убедиться, что в теле буфера есть + `summary:` одной строкой в frontmatter — карточки `wiki.search` читают его. + Если нет — дописать перед промоутом. + - Повторный промоут архивированного буфера → ошибка (one-shot, идемпотентно + через статус). Сверить `brainstorm_id` (internal) из шага 1. + - Если `brainstorm_promote` упал (конфликт версии, 409) → retry со свежим internal id; при стабильном отказе — abort до создания тасок. -7. **Парсинг action-items:** regex по строкам вида `- [ ] ...` в теле шторма, +6. **Парсинг action-items:** regex по строкам вида `- [ ] ...` в теле буфера, секции после `## Следующие шаги`/`## TODO`/`## Next steps`/ `## Action items`. Показать список, дать редактировать/удалять/добавлять. Если 0 action-items — продолжить, не блокировать. -8. **Создание тасок:** +7. **Создание тасок:** > **NB:** таски создавать **ПОСЛЕДОВАТЕЛЬНО**, не батчем. Один > `task_create` → дождаться ответа → следующий. - - **workshop-meta / domain:** для каждого action-item — + - **Обычный target:** для каждого action-item — `mcp__mappa__task_create(project=, slug=, title, description, status='ready')`. Create — карв-аут, лиз не нужен (wiki:2660/#1054). - Описание импл-таски ссылается на спеку (wiki:NNNN из шага 6). - - **skill:** три baseline-таски в `project='skills'`: + Описание импл-таски ссылается на спеку (wiki:NNNN из шага 5). + - **Skill:** три baseline-таски в `project='skills'`: - `[-install]` — запустить `install.sh` в `~/projects/skills/`, проверить активацию в новой сессии. - `[-hermes-mapping]` — запись в `~/projects/skills/hermes/mapping.yaml` @@ -193,7 +157,7 @@ storm-сущность в mappa (type=storm, status=buffer) - Если N-я таска упала — продолжить остальные, в конце сообщить какие созданы / какие нет. Запомнить slug'и для review-umbrella. -9. **Review-umbrella (для domain с импл-тасками и для skill — всегда):** +8. **Review-umbrella (для target с импл-тасками и для skill — всегда):** `mcp__mappa__task_create(project=, slug=-review, status='blocked', blocker=<номера импл-тасок через запятую>, description=<чек-лист>)` @@ -201,56 +165,54 @@ storm-сущность в mappa (type=storm, status=buffer) - **Кто делает:** не имплементер. Следующая сессия в этом проекте (другая модель / другой день / другой агент) с чистым контекстом. «Я только что это написал» bias = главный риск. - - Чек-лист: прочитать спеку (wiki:NNNN из шага 6), `git log` shipped-коммитов, + - Чек-лист: прочитать спеку (wiki:NNNN из шага 5), `git log` shipped-коммитов, для каждой импл-таски прогнать тесты и сверить с acceptance criteria, findings → follow-up tasks через `task_create`. - Закрытие: все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note. - - Если review-таска упала — сообщить, **продолжить** к шагу 10 (промоут уже - сделан, шторм в archive). + - Если review-таска упала — сообщить, **продолжить** к шагу 9 (промоут уже + сделан, буфер в archive). -10. **Covering-письмо в инбокс цели (канон mappa-delegation).** Таска на борде - не пингует живую сессию, письмо = пинг + контекст: +9. **Covering-письмо в инбокс цели (канон mappa-delegation).** Таска на борде + не пингует живую сессию, письмо = пинг + контекст: - `mcp__mappa__inbox_send(project=, from=<своя папка>, subject='Промоушен - : таски <#N…>', body=<перечень + wiki:NNNN спека>)` + `mcp__mappa__inbox_send(project=, from=<своя папка>, subject='Промоушен + : таски <#N…>', body=<перечень + wiki:NNNN спека>)` -11. **Финальный отчёт пользователю:** +10. **Финальный отчёт пользователю:** - Куда промочено: `wiki:NNNN` (спека в вики target). - - Архив: `storm:N` (status=archive, номер стабилен). + - Архив: `brainstorm:N` (status=archive, номер стабилен). - Какие таски созданы (ref, title, проект). - **Для skill:** напомнить про второй проход «доведём ``». ## Failure modes -- Шторм не найден в mappa (нет storm-сущности и нет файлового легаси) → abort, - сообщить: создать шторм через HTTP POST /entities (шаг 1) или дождаться - импорта. -- Целевой проект (domain) не существует в mappa → abort до промоута. -- `storm_promote` упал (409 версия / стабильный отказ) → retry со свежим - internal id; при повторном отказе — abort до создания тасок. Шторм остаётся +- Буфер не найден в mappa (нет brainstorm-сущности) → abort, сообщить: создать + через `brainstorm_create` (шаг 1) или HTTP POST /entities. +- Target-проект не существует в mappa → abort до промоута. +- `brainstorm_promote` упал (409 версия / стабильный отказ) → retry со свежим + internal id; при повторном отказе — abort до создания тасок. Буфер остаётся в buffer — ретраится позже. -- Шторм уже `archive` (повторный вызов) → abort: промоут one-shot, идемпотентность - через статус (решение 7). +- Буфер уже `archive` (повторный вызов) → abort: промоут one-shot, + идемпотентность через статус (решение 7). - `task_create` упал на N-й content-таске → продолжить остальные, сообщить - partial. Промоут уже сделан — шторм не откатывается. + partial. Промоут уже сделан — буфер не откатывается. - `task_create` review-umbrella упал → не блокировать, сообщить пользователю - (создать вручную из шага 9). + (создать вручную из шага 8). - **Skill:** `~/projects/skills/` не существует → abort. - **Skill:** `~/projects/skills/skills//` уже существует → abort. - **Skill:** пользователь не подтвердил preview → abort, состояние не меняется. - **Skill:** локальный `git commit` в `~/projects/skills/` упал → файл остаётся, - сообщить что коммит нужно сделать руками; промоут шторма не блокируется. + сообщить что коммит нужно сделать руками; промоут буфера не блокируется. ## Side effects -- **Всегда:** `storm_promote` — атомарно wiki-страница в target + шторм → - `archive` + рёбра parent_of (wiki→storm, refs→storm) + событие `storm.promoted`. - Файловый `.archive/` НЕ трогается (легаси read-only). -- **workshop-meta:** wiki-страница (концепт) в вики `.workshop`. -- **domain:** спека-страница в вики целевого проекта (с frontmatter-summary, - wiki:2661) + импл-таски + review-umbrella + covering-письмо. -- **skill:** каркас `~/projects/skills/skills//SKILL.md` (только шапка + +- **Всегда:** `brainstorm_promote` — атомарно wiki-страница в target + буфер → + `archive` + рёбра parent_of (wiki→buffer, refs→buffer) + событие + `brainstorm.promoted`. +- **Обычный target:** спека-страница в вики целевого проекта (с + frontmatter-summary, wiki:2661) + импл-таски + review-umbrella + covering-письмо. +- **Skill:** каркас `~/projects/skills/skills//SKILL.md` (только шапка + пустой 6-секционный каркас) + локальный коммит в `~/projects/skills/`. **Без** install.sh, push, build-hermes — это в baseline-тасках. - Создаёт N тасок в target через `mcp__mappa__task_create` (карв-аут). @@ -259,13 +221,14 @@ storm-сущность в mappa (type=storm, status=buffer) ## What NOT to do -- **Не писать в файловые `.brainstorm/`/`.archive/`** — read-only легаси после - флипа (решение 15). Буфер живёт в mappa storm-сущности. +- **Не использовать файловые каналы** — буфер живёт в mappa brainstorm-сущности, + никаких `.brainstorm/`/`.archive/` записей. - **Не использовать `mcp__projects-meta__tasks_create` / `knowledge_ingest` / - `knowledge_promote`** — файловые каналы выпилены. Таски — `mcp__mappa__task_create`, - вики — `storm_promote` (контент) + `wiki_create`/`wiki_update` (доп. страницы). + `knowledge_promote`** — файловые каналы выпилены. Таски — + `mcp__mappa__task_create`, вики — `brainstorm_promote` (контент) + + `wiki_create`/`wiki_update` (доп. страницы). - Не делать `git mv` буфера в архив — промоут архивирует сам. -- Не удалять шторм вместо промоута — теряется граф-история (parent_of, refs). +- Не удалять буфер вместо промоута — теряется граф-история (parent_of, refs). - Не батчить `task_create` (гонка; инцидент 2026-08-24: 6/7 упали) — только последовательно. - Не забывать covering-письмо — таска на борде не пингует живую сессию.