fix(skills): mappa-brainstorm-promote 1.6.0 — review findings (#1052): brainstorm_update для summary, порядок валидации, failure modes (entity_search/inbox_send), admin_status убран

This commit is contained in:
2026-08-25 11:05:32 +03:00
parent a1f12fcdd4
commit dc2cd0e522
2 changed files with 15 additions and 7 deletions

Binary file not shown.

View File

@@ -96,19 +96,21 @@ brainstorm-сущность в mappa (type=brainstorm, status=buffer)
2. **Показать summary буфера (≤2 абзаца).** 2. **Показать summary буфера (≤2 абзаца).**
3. **Спросить target-проект** — куда промоутить контент. По умолчанию — проект, 3. **Спросить target-проект** — куда промоутить контент. По умолчанию — проект,
где буфер живёт (шторм ведут там, где тема релевантна). Проверить, что проект где буфер живёт (брейншторм ведут там, где тема релевантна). Проверить, что
существует в mappa: `mcp__mappa__entity_search` type=project или проект существует в mappa: `mcp__mappa__entity_search` type=project
`admin_status` (список проектов). Если нет — abort с сообщением. (или `mcp__mappa__entity_search` с q=<имя проекта>). Если нет — abort с
сообщением.
4. **Если target = skill (пользователь хочет оформить как скил):** 4. **Если target = skill (пользователь хочет оформить как скил):**
- Спросить `<name>` нового скила (если не указан) — валидный slug - Спросить `<name>` нового скила (если не указан) — валидный slug
(`[a-z0-9-]+`). (`[a-z0-9-]+`).
- Валидация: `~/projects/skills/skills/<name>/` НЕ должна существовать. - Валидация (порядок важен): сначала проверить, что `~/projects/skills/`
сам репозиторий существует. Если нет — **abort** с сообщением «клонируй
skills через update-skills или вручную».
- Затем: `~/projects/skills/skills/<name>/` НЕ должна существовать.
Если существует — **abort** с сообщением «скил `<name>` уже существует, Если существует — **abort** с сообщением «скил `<name>` уже существует,
обновляйся обычным маршрутом в `~/projects/skills/`, этот скил не для обновляйся обычным маршрутом в `~/projects/skills/`, этот скил не для
апдейтов». апдейтов».
- Валидация: `~/projects/skills/` сам репозиторий существует. Если нет —
abort с сообщением «клонируй skills через update-skills или вручную».
- Двухпроходной каркас: диалог по `description` (триггер-контракт активации: - Двухпроходной каркас: диалог по `description` (триггер-контракт активации:
минимум 2-3 фразы, пары русский/английский; что делает; антипаттерны) → минимум 2-3 фразы, пары русский/английский; что делает; антипаттерны) →
preview + confirm → `Write` каркаса (шапка + 6 пустых секций) → локальный preview + confirm → `Write` каркаса (шапка + 6 пустых секций) → локальный
@@ -125,7 +127,8 @@ brainstorm-сущность в mappa (type=brainstorm, status=buffer)
`brainstorm.promoted`. `brainstorm.promoted`.
- **Frontmatter-summary (wiki:2661):** убедиться, что в теле буфера есть - **Frontmatter-summary (wiki:2661):** убедиться, что в теле буфера есть
`summary:` одной строкой в frontmatter — карточки `wiki.search` читают его. `summary:` одной строкой в frontmatter — карточки `wiki.search` читают его.
Если нет — дописать перед промоутом. Если нет — дописать через `mcp__mappa__brainstorm_update` (PATCH
/brainstorm/:id, title/body/status, optimistic version+409) перед промоутом.
- Повторный промоут архивированного буфера → ошибка (one-shot, идемпотентно - Повторный промоут архивированного буфера → ошибка (one-shot, идемпотентно
через статус). Сверить `brainstorm_id` (internal) из шага 1. через статус). Сверить `brainstorm_id` (internal) из шага 1.
- Если `brainstorm_promote` упал (конфликт версии, 409) → retry со свежим - Если `brainstorm_promote` упал (конфликт версии, 409) → retry со свежим
@@ -189,6 +192,8 @@ brainstorm-сущность в mappa (type=brainstorm, status=buffer)
- Буфер не найден в mappa (нет brainstorm-сущности) → abort, сообщить: создать - Буфер не найден в mappa (нет brainstorm-сущности) → abort, сообщить: создать
через `brainstorm_create` (шаг 1) или HTTP POST /entities. через `brainstorm_create` (шаг 1) или HTTP POST /entities.
- `entity_search`/`entity_get` упал (API-ошибка, не пустой результат) → abort
с текстом ошибки; не создавать буфер по догадке.
- Target-проект не существует в mappa → abort до промоута. - Target-проект не существует в mappa → abort до промоута.
- `brainstorm_promote` упал (409 версия / стабильный отказ) → retry со свежим - `brainstorm_promote` упал (409 версия / стабильный отказ) → retry со свежим
internal id; при повторном отказе — abort до создания тасок. Буфер остаётся internal id; при повторном отказе — abort до создания тасок. Буфер остаётся
@@ -199,6 +204,9 @@ brainstorm-сущность в mappa (type=brainstorm, status=buffer)
partial. Промоут уже сделан — буфер не откатывается. partial. Промоут уже сделан — буфер не откатывается.
- `task_create` review-umbrella упал → не блокировать, сообщить пользователю - `task_create` review-umbrella упал → не блокировать, сообщить пользователю
(создать вручную из шага 8). (создать вручную из шага 8).
- `inbox_send` (covering-письмо) упал → промоут и таски не откатываются;
сообщить пользователю, письмо можно отправить позже (промоут уже виден
в графе/инбоксе цели).
- **Skill:** `~/projects/skills/` не существует → abort. - **Skill:** `~/projects/skills/` не существует → abort.
- **Skill:** `~/projects/skills/skills/<name>/` уже существует → abort. - **Skill:** `~/projects/skills/skills/<name>/` уже существует → abort.
- **Skill:** пользователь не подтвердил preview → abort, состояние не меняется. - **Skill:** пользователь не подтвердил preview → abort, состояние не меняется.