17 KiB
name, author, version, description
| name | author | version | description |
|---|---|---|---|
| mappa-brainstorm-promote | ours | 1.6.0 | 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 <topic>», «выкати в вики», «promote <topic>». |
mappa-brainstorm-promote
Финализация созревшего брейнсторм-буфера, который живёт как mappa-сущность
типа brainstorm (status=buffer). Это общий механизм mappa — ровно как
task.create или wiki.create: буфер существует в mappa, скил доводит его до
конца (промоут контента в вики + action-items тасками). Никакой
workshop-специфики: скил триггерится из любой папки, работает с brainstorm-
сущностями любого проекта.
Процедура линейная (от чтения буфера до промоута и тасок), не цикл: запускается
явно на финальном буфере и доводит его до конца. В форкфлоу встаёт между
работой (mappa-task-work) и финишем (mappa-closing-ritual).
Промоут контента — всегда через mcp__mappa__brainstorm_promote:
атомарно создаёт wiki-страницу (slug из буфера, body сохраняется) в проекте из
вызова и переводит буфер в archive (номер/slug стабильны, решение 20; рёбра
parent_of, событие brainstorm.promoted). Никаких файловых каналов. Action-items
уходят тасками в target-проект через mcp__mappa__task_create (карв-аут без
лиза, #1054; последовательно, не батчем).
When to use
- «промоутни брейнсторм», «finalize », «выкати в вики», «promote ».
- Пользователь ссылается на brainstorm-сущность (brainstorm:N) или на тему буфера, который созрел и готов к промоушену.
Inputs
- Brainstorm-реф
brainstorm:Nили<topic>(slug/тема буфера) + project (если буфер не в текущем проекте — спросить). - Для skill-ветки дополнительно:
<name>нового скила (если не указан — спросить, предложить производное от topic).
Decision flow
brainstorm-сущность в mappa (type=brainstorm, status=buffer)
│
▼
find + read (entity_search type=brainstorm → entity_get полный body)
│
▼
ask: target project (куда промоутить)
│
├── обычный проект → brainstorm_promote(project=<target>)
│ → 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
-
Найти буфер в mappa.
mcp__mappa__entity_search(type='brainstorm', project=<проект>, q=<topic>)→ в результатах brainstorm:N + internal id. Прочитать полный буфер:mcp__mappa__entity_get(id=<internal id>)— тело = running record (frontmatter + раунды).Если буфера нет в mappa — создать brainstorm-сущность через
mcp__mappa__brainstorm_create(или HTTPPOST /entitiestype=brainstorm, контракт решения 7/#1054). Не изобретать файловые буферы. -
Показать summary буфера (≤2 абзаца).
-
Спросить target-проект — куда промоутить контент. По умолчанию — проект, где буфер живёт (брейншторм ведут там, где тема релевантна). Проверить, что проект существует в mappa:
mcp__mappa__entity_searchtype=project (илиmcp__mappa__entity_searchс q=<имя проекта>). Если нет — abort с сообщением. -
Если target = skill (пользователь хочет оформить как скил):
- Спросить
<name>нового скила (если не указан) — валидный slug ([a-z0-9-]+). - Валидация (порядок важен): сначала проверить, что
~/projects/skills/сам репозиторий существует. Если нет — abort с сообщением «клонируй skills через update-skills или вручную». - Затем:
~/projects/skills/skills/<name>/НЕ должна существовать. Если существует — abort с сообщением «скил<name>уже существует, обновляйся обычным маршрутом в~/projects/skills/, этот скил не для апдейтов». - Двухпроходной каркас: диалог по
description(триггер-контракт активации: минимум 2-3 фразы, пары русский/английский; что делает; антипаттерны) → preview + confirm →Writeкаркаса (шапка + 6 пустых секций) → локальныйgit commitв~/projects/skills/. Без install.sh, push, build-hermes — это в baseline-тасках шага 7. Тело каркаса дописывается вторым проходом глазами (вне scope этого скила).
- Спросить
-
Промоут контента (всегда через
brainstorm_promote, решение 7):mcp__mappa__brainstorm_promote(project=<target>, brainstorm_id=<internal id>)- Атомарно: buffer → wiki-страница (slug из буфера, body сохраняется, рёбра
parent_of buffer→wiki и refs→buffer) + буфер →
archive+ значимое событиеbrainstorm.promoted. - Frontmatter-summary (wiki:2661): убедиться, что в теле буфера есть
summary:одной строкой в frontmatter — карточкиwiki.searchчитают его. Если нет — дописать черезmcp__mappa__brainstorm_update(PATCH /brainstorm/:id, title/body/status, optimistic version+409) перед промоутом. - Повторный промоут архивированного буфера → ошибка (one-shot, идемпотентно
через статус). Сверить
brainstorm_id(internal) из шага 1. - Если
brainstorm_promoteупал (конфликт версии, 409) → retry со свежим internal id; при стабильном отказе — abort до создания тасок.
- Атомарно: buffer → wiki-страница (slug из буфера, body сохраняется, рёбра
parent_of buffer→wiki и refs→buffer) + буфер →
-
Парсинг action-items: regex по строкам вида
- [ ] ...в теле буфера, секции после## Следующие шаги/## TODO/## Next steps/## Action items. Показать список, дать редактировать/удалять/добавлять. Если 0 action-items — продолжить, не блокировать. -
Создание тасок:
NB: таски создавать ПОСЛЕДОВАТЕЛЬНО, не батчем. Один
task_create→ дождаться ответа → следующий.- Обычный target: для каждого action-item —
mcp__mappa__task_create(project=<target>, slug=<kebab>, title, description, status='ready'). Create — карв-аут, лиз не нужен (wiki:2660/#1054). Описание импл-таски ссылается на спеку (wiki:NNNN из шага 5). - Skill: три baseline-таски в
project='skills':[<name>-install]— запуститьinstall.shв~/projects/skills/, проверить активацию в новой сессии.[<name>-hermes-mapping]— запись в~/projects/skills/hermes/mapping.yaml(режимautoдля стилевых,pendingесли трогает тулы/окружение).[<name>-test-trigger]— прогнать триггер-фразы из description: активируется на своих, не активируется на 2-3 близких чужих. Плюс content-таски из буфера (если были) — тоже вproject='skills', slug-prefix<name>-.
- Если N-я таска упала — продолжить остальные, в конце сообщить какие созданы / какие нет. Запомнить slug'и для review-umbrella.
- Обычный target: для каждого action-item —
-
Review-umbrella (для target с импл-тасками и для skill — всегда):
mcp__mappa__task_create(project=<target>, slug=<topic>-review, status='blocked', blocker=<номера импл-тасок через запятую>, description=<чек-лист>)- Кто делает: не имплементер. Следующая сессия в этом проекте (другая модель / другой день / другой агент) с чистым контекстом. «Я только что это написал» bias = главный риск.
- Чек-лист: прочитать спеку (wiki:NNNN из шага 5),
git logshipped-коммитов, для каждой импл-таски прогнать тесты и сверить с acceptance criteria, findings → follow-up tasks черезtask_create. - Закрытие: все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note.
- Если review-таска упала — сообщить, продолжить к шагу 9 (промоут уже сделан, буфер в archive).
-
Covering-письмо в инбокс цели (канон mappa-delegation). Таска на борде не пингует живую сессию, письмо = пинг + контекст:
mcp__mappa__inbox_send(project=<target>, from=<своя папка>, subject='Промоушен <topic>: таски <#N…>', body=<перечень + wiki:NNNN спека>) -
Финальный отчёт пользователю:
- Куда промочено:
wiki:NNNN(спека в вики target). - Архив:
brainstorm:N(status=archive, номер стабилен). - Какие таски созданы (ref, title, проект).
- Для skill: напомнить про второй проход «доведём
<name>».
- Куда промочено:
Failure modes
- Буфер не найден в mappa (нет brainstorm-сущности) → abort, сообщить: создать
через
brainstorm_create(шаг 1) или HTTP POST /entities. entity_search/entity_getупал (API-ошибка, не пустой результат) → abort с текстом ошибки; не создавать буфер по догадке.- Target-проект не существует в mappa → abort до промоута.
brainstorm_promoteупал (409 версия / стабильный отказ) → retry со свежим internal id; при повторном отказе — abort до создания тасок. Буфер остаётся в buffer — ретраится позже.- Буфер уже
archive(повторный вызов) → abort: промоут one-shot, идемпотентность через статус (решение 7). task_createупал на N-й content-таске → продолжить остальные, сообщить partial. Промоут уже сделан — буфер не откатывается.task_createreview-umbrella упал → не блокировать, сообщить пользователю (создать вручную из шага 8).inbox_send(covering-письмо) упал → промоут и таски не откатываются; сообщить пользователю, письмо можно отправить позже (промоут уже виден в графе/инбоксе цели).- Skill:
~/projects/skills/не существует → abort. - Skill:
~/projects/skills/skills/<name>/уже существует → abort. - Skill: пользователь не подтвердил preview → abort, состояние не меняется.
- Skill: локальный
git commitв~/projects/skills/упал → файл остаётся, сообщить что коммит нужно сделать руками; промоут буфера не блокируется.
Side effects
- Всегда:
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/<name>/SKILL.md(только шапка + пустой 6-секционный каркас) + локальный коммит в~/projects/skills/. Без install.sh, push, build-hermes — это в baseline-тасках. - Создаёт N тасок в target через
mcp__mappa__task_create(карв-аут). - Создаёт review-umbrella таску (status=blocked, blocker=impl#).
- Отправляет covering-письмо в инбокс target.
What NOT to do
- Не использовать файловые каналы — буфер живёт в mappa brainstorm-сущности,
никаких
.brainstorm//.archive/записей. - Не использовать
mcp__projects-meta__tasks_create/knowledge_ingest/knowledge_promote— файловые каналы выпилены. Таски —mcp__mappa__task_create, вики —brainstorm_promote(контент) +wiki_create/wiki_update(доп. страницы). - Не делать
git mvбуфера в архив — промоут архивирует сам. - Не удалять буфер вместо промоута — теряется граф-история (parent_of, refs).
- Не батчить
task_create(гонка; инцидент 2026-08-24: 6/7 упали) — только последовательно. - Не забывать covering-письмо — таска на борде не пингует живую сессию.
- Skill: не переформатировать тело буфера в каркас автоматически — тело дописывается вторым проходом глазами.
- Skill: не запускать
install.sh, не делать push, не правитьhermes/mapping.yaml— это baseline-таски. - Skill: не промоутить в существующий скил (abort).