diff --git a/dist/mappa-brainstorm-promote.skill b/dist/mappa-brainstorm-promote.skill index 7d891e4..5b1d6f6 100644 Binary files a/dist/mappa-brainstorm-promote.skill and b/dist/mappa-brainstorm-promote.skill differ diff --git a/skills/mappa-brainstorm-promote/SKILL.md b/skills/mappa-brainstorm-promote/SKILL.md index b9bba63..c5b64ff 100644 --- a/skills/mappa-brainstorm-promote/SKILL.md +++ b/skills/mappa-brainstorm-promote/SKILL.md @@ -96,19 +96,21 @@ brainstorm-сущность в mappa (type=brainstorm, status=buffer) 2. **Показать summary буфера (≤2 абзаца).** 3. **Спросить target-проект** — куда промоутить контент. По умолчанию — проект, - где буфер живёт (шторм ведут там, где тема релевантна). Проверить, что проект - существует в mappa: `mcp__mappa__entity_search` type=project или - `admin_status` (список проектов). Если нет — abort с сообщением. + где буфер живёт (брейншторм ведут там, где тема релевантна). Проверить, что + проект существует в mappa: `mcp__mappa__entity_search` type=project + (или `mcp__mappa__entity_search` с q=<имя проекта>). Если нет — abort с + сообщением. 4. **Если target = skill (пользователь хочет оформить как скил):** - Спросить `` нового скила (если не указан) — валидный slug (`[a-z0-9-]+`). - - Валидация: `~/projects/skills/skills//` НЕ должна существовать. + - Валидация (порядок важен): сначала проверить, что `~/projects/skills/` + сам репозиторий существует. Если нет — **abort** с сообщением «клонируй + skills через update-skills или вручную». + - Затем: `~/projects/skills/skills//` НЕ должна существовать. Если существует — **abort** с сообщением «скил `` уже существует, обновляйся обычным маршрутом в `~/projects/skills/`, этот скил не для апдейтов». - - Валидация: `~/projects/skills/` сам репозиторий существует. Если нет — - abort с сообщением «клонируй skills через update-skills или вручную». - Двухпроходной каркас: диалог по `description` (триггер-контракт активации: минимум 2-3 фразы, пары русский/английский; что делает; антипаттерны) → preview + confirm → `Write` каркаса (шапка + 6 пустых секций) → локальный @@ -125,7 +127,8 @@ brainstorm-сущность в mappa (type=brainstorm, status=buffer) `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 со свежим @@ -189,6 +192,8 @@ brainstorm-сущность в mappa (type=brainstorm, status=buffer) - Буфер не найден в 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 до создания тасок. Буфер остаётся @@ -199,6 +204,9 @@ brainstorm-сущность в mappa (type=brainstorm, status=buffer) partial. Промоут уже сделан — буфер не откатывается. - `task_create` review-umbrella упал → не блокировать, сообщить пользователю (создать вручную из шага 8). +- `inbox_send` (covering-письмо) упал → промоут и таски не откатываются; + сообщить пользователю, письмо можно отправить позже (промоут уже виден + в графе/инбоксе цели). - **Skill:** `~/projects/skills/` не существует → abort. - **Skill:** `~/projects/skills/skills//` уже существует → abort. - **Skill:** пользователь не подтвердил preview → abort, состояние не меняется.