From c53ed66ba5516964d685342f5e92c39ebfa7cc36 Mon Sep 17 00:00:00 2001 From: vitya Date: Mon, 24 Aug 2026 17:19:28 +0300 Subject: [PATCH] =?UTF-8?q?fix(skills):=20repatriate=20workshop-promote-br?= =?UTF-8?q?ainstorm=20source=20(was=20orphan,=20only=20in=20~/.agents/skil?= =?UTF-8?q?ls);=20session-health=20v0.1.1=20=E2=80=94=20handoff=20is=20map?= =?UTF-8?q?pa=20entity,=20not=20.tasks/NEXT=5FSESSION.md=20(#983)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/session-health.skill | Bin 3416 -> 3416 bytes dist/workshop-promote-brainstorm.skill | Bin 0 -> 9442 bytes skills/session-health/SKILL.md | 8 +- skills/workshop-promote-brainstorm/SKILL.md | 432 ++++++++++++++++++++ 4 files changed, 436 insertions(+), 4 deletions(-) create mode 100644 dist/workshop-promote-brainstorm.skill create mode 100644 skills/workshop-promote-brainstorm/SKILL.md diff --git a/dist/session-health.skill b/dist/session-health.skill index 334bcd4abd924732640252de54ee3e63a891d8ab..2a58725abfdbf27d2c47c30b6be583fd2d22d984 100644 GIT binary patch delta 3363 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 delta 3363 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 literal 0 HcmV?d00001 diff --git a/skills/session-health/SKILL.md b/skills/session-health/SKILL.md index c5ee333..bc4855d 100644 --- a/skills/session-health/SKILL.md +++ b/skills/session-health/SKILL.md @@ -1,7 +1,7 @@ --- name: session-health author: ours -version: 0.1.0 +version: 0.1.1 description: > Реагировать на предупреждения session-health поллера pi (сообщение «[session-health warn/propose/refuse] ...» с цифрами контекста) ИЛИ на @@ -44,7 +44,7 @@ description: > | Уровень | % эффективного окна | Действие | |---|---|---| | `warn` | 70% | Планируй сворачивание: завершай текущую единицу работы, не начинай новых крупных. | -| `propose` | 85% | **Предложи closing ritual** (скил session-handoff): handoff-write в `.tasks/NEXT_SESSION.md` + сводка; рекомендация, не обязаловка. | +| `propose` | 85% | **Предложи closing ritual** (скил session-handoff): handoff-write (mappa handoff-сущность) + сводка; рекомендация, не обязаловка. | | `refuse` | 100% | **Отказ от новой работы.** Только завершение: closing ritual и сворачивание. | Числа по умолчанию (deepseek-v4-flash, эффективное 400K): warn 280K / propose @@ -62,7 +62,7 @@ description: > 4. **propose** — предложи closing ritual: - Это **предложение** оператору, не принуждение: «рекомендую завершить, контекст 85%+; закругляемся?» Оператор может продолжить — тогда работай дальше, но помни что контекст некомфортный (будь короче, не тяни лишние чтения). - - Handoff-write в `.tasks/NEXT_SESSION.md` (скил `session-handoff`) — **только после явного согласия оператора** на сворачивание. Без согласия — не пиши. + - Handoff-write через скил `session-handoff` (mappa handoff-сущность) — **только после явного согласия оператора** на сворачивание. Без согласия — не пиши. - Опционально (если оператор согласен и есть кандидаты): предложи wiki-ingest сессионного знания и закрытия тасок с доски — тоже как предложения, не мутации. 5. **refuse** — жёсткий отказ: @@ -80,7 +80,7 @@ description: > ## Side effects -- При propose/refuse — пишется `.tasks/NEXT_SESSION.md` (handoff) и предлагаются wiki-ingest / закрытие тасок. +- При propose/refuse — пишется handoff-сущность mappa (скил session-handoff) и предлагаются wiki-ingest / закрытие тасок. - Отказ от новой работы (refuse) может расстроить оператора — объясни почему, предложи альтернативу (новая сессия). ## What NOT to do diff --git a/skills/workshop-promote-brainstorm/SKILL.md b/skills/workshop-promote-brainstorm/SKILL.md new file mode 100644 index 0000000..d7cc3a3 --- /dev/null +++ b/skills/workshop-promote-brainstorm/SKILL.md @@ -0,0 +1,432 @@ +--- +name: workshop-promote-brainstorm +author: ours +version: 1.1.0 +description: > + Finalize a matured brainstorm buffer on the boss's desk + (~/projects/.workshop/.brainstorm/): ask routing (workshop-meta → local + .wiki/concepts/, domain → target project wiki via knowledge_ingest, skill → + claude-skills skeleton), extract action-items into target .tasks, create + pointers + review umbrella for impl tasks, archive the buffer. + Location-agnostic: fires from ANY folder; all paths resolve to + ~/projects/.workshop/ regardless of CWD. Triggers (user): «промоутни + брейнсторм», «finalize », «выкати в вики», «promote ». +--- + +# workshop-promote-brainstorm + +Финализирует созревший брейнсторм-буфер на столе босса (`~/projects/.workshop/`). Три ветки маршрутизации: + +> **Location-agnostic.** Скил триггерится из любой папки — босс-штормы +> происходят где угодно, запись живёт на столе. Все относительные пути ниже +> (`.brainstorm/`, `.archive/`, `.wiki/`, `index.md`) разрешаются относительно +> `~/projects/.workshop/` **независимо от CWD**; git-команды явно указывают +> `-C ~/projects/.workshop`. + +- **workshop-meta** → локальный `.wiki/concepts/` (методология самой зоны). +- **domain** → глобал через `mcp__projects-meta__knowledge_ingest` в `~/projects//.wiki/`. +- **skill** → `~/projects/claude-skills/skills//SKILL.md` (только шапка + пустой каркас тела, локальный коммит без push/install/build-hermes). + +Буфер уезжает в `.archive/`. Action-items уходят тасками в target-проект. **Всегда, при любом маршруте, в воркшоп-вики остаётся summary-страница.** + +## When to use + +- «промоутни брейнсторм», «finalize », «выкати в вики», «promote ». +- Пользователь явно ссылается на `.workshop/.brainstorm/.md` как на готовый к промоушену. + +## Inputs + +- Путь `.brainstorm/.md` или просто ``. +- Для skill-ветки дополнительно: `` нового скила (если не указан — спросить, предложить производное от topic). + +## Decision flow + +``` +.brainstorm/.md + │ + ▼ + read + summarize (1–2 paragraphs) + │ + ▼ + ask: workshop-meta or domain or skill? + │ │ │ + │ ▼ ▼ + │ ask: target proj ask: + check + │ │ ~/projects/claude-skills/ + │ ▼ skills// NOT exists + │ knowledge_ingest │ + │ │ ▼ + │ │ dialog: description (trigger contract) + │ │ │ + │ │ ▼ + │ │ preview + confirm + │ │ │ + │ │ ▼ + ▼ │ mkdir + Write SKILL.md +write to │ (header + empty 6-section skeleton) +.wiki/concepts │ │ + │ │ ▼ + │ │ git add + commit in claude-skills/ + │ │ (local, no push, no install.sh, no build-hermes) + │ │ │ + └──────────────┴──────────────┘ + │ + ▼ + parse action-items + (for skill: prepend 3 baselines) + │ + ▼ + for each: mcp__projects-meta__tasks_create + │ + ▼ + if domain && N≥1: tasks_create [-review] (blocked-by impl) + if skill: tasks_create [-review] (blocked-by impl, behavioral smoke-test) + │ + ▼ + Write .wiki/concepts/.md ← ВСЕГДА, любой маршрут + (summary: решения, куда промочено, задачи, ссылки) + │ + ▼ + git -C ~/projects/.workshop mv .brainstorm/.md .archive/-.md + │ + ▼ + append to .wiki/log.md +``` + +## Steps + +1. **Прочитать `.brainstorm/.md`.** Показать summary (≤2 абзаца). + +2. **Спросить тип:** + - **workshop-meta** — методология самой workshop-зоны: ретро дистилляции, паттерны, апгрейды скилов зоны. + - **domain** — доменное содержимое для какого-то целевого проекта. + - **skill** — методология общего назначения, оформляется как скил в `~/projects/claude-skills/`. + +3. **Если domain:** + - Спросить целевой проект (имя папки в `~/projects/`). + - Валидация: вызвать `mcp__projects-meta__meta_status`, убедиться что проект известен; иначе — abort с сообщением «зарегистрируй проект через setup-projects-meta». + +4. **Если skill:** + - Спросить `` нового скила (если не указан) — валидный slug (`[a-z0-9-]+`). + - Валидация: `~/projects/claude-skills/skills//` НЕ должна существовать. Если существует — **abort** с сообщением «скил `` уже существует, обновляйся обычным маршрутом в `claude-skills/`, этот скил не для апдейтов». + - Валидация: `~/projects/claude-skills/` сам репозиторий существует. Если нет — abort с сообщением «клонируй claude-skills/ через update-claude-skills или вручную». + +5. **Парсинг action-items:** + - regex по строкам вида `- [ ] ...`, `- [ ]`, секции после `## Следующие шаги`/`## TODO`/`## Next steps`/`## Action items`. + - Показать список, дать редактировать/удалять/добавлять. + - Если 0 action-items — продолжить, не блокировать. + +6. **Промоушен контента:** + + - **workshop-meta:** `Write` → `.wiki/concepts/.md` с frontmatter: + + ```yaml + --- + date: + source: .brainstorm/.md + status: promoted + type: workshop-meta + --- + ``` + + Тело — содержимое буфера (можно слегка причесать заголовки, секции типа TODO убрать — они уже сепарированы в action-items). + + - **domain:** `mcp__projects-meta__knowledge_ingest` с параметрами: + - `project: ` + - `path: concepts/.md` (внутри target wiki) + - `content: <тело буфера с frontmatter>` + + Если `knowledge_ingest` падает → abort до tasks_create и до `git mv`. Сообщить пользователю. + + - **skill:** двухпроходной. + + **Проход первый (этот скил):** + + 1. **Диалог по `description`** — поведенческий контракт активации скила. Показать пользователю summary буфера и спросить: + - На каких триггер-фразах скил должен активироваться? (минимум 2-3, лучше — пары русский/английский) + - Что скил делает в одном предложении? + - Когда скил **не должен** активироваться (антипаттерны)? + + Из ответов собрать `description` строкой ~200-400 символов в стиле существующих скилов (см. `~/projects/claude-skills/skills/*/SKILL.md` для примеров). + + 2. **Preview + confirm** (обязательно): + ``` + Писать в: ~/projects/claude-skills/skills//SKILL.md + Frontmatter: name=, version=0.1.0, description=<...> + Body: пустой каркас с заголовками + When to use / Inputs / Steps / Failure modes / Side effects / What NOT to do + Коммит: feat(skills): add v0.1.0 (promoted from .workshop/.brainstorm/.md) + Без: install.sh, push, build-hermes (это в созданных тасках) + ОК? + ``` + + 3. После confirm: + - `mkdir -p ~/projects/claude-skills/skills//` + - `Write` файла `~/projects/claude-skills/skills//SKILL.md`: + + ```markdown + --- + name: + version: 0.1.0 + description: <вписанный пользователем триггер-контракт> + --- + + # + + <одно-два предложения что скил делает — из диалога> + + ## When to use + + <пусто, дописывается во втором проходе> + + ## Inputs + + <пусто> + + ## Steps + + <пусто> + + ## Failure modes + + <пусто> + + ## Side effects + + <пусто> + + ## What NOT to do + + <пусто> + ``` + + - В `~/projects/claude-skills/`: `git -C ~/projects/claude-skills add skills//SKILL.md && git -C ~/projects/claude-skills commit -m "feat(skills): add v0.1.0 (promoted from ~/projects/.workshop/.brainstorm/.md)"`. + - **STOP.** Не запускать `install.sh`. Не делать `git push`. Не править `hermes/mapping.yaml`. Это всё уйдёт тасками на шаге 7. + + **Проход второй** — пользователь явно зовёт «доведём ``» в этой же или следующей сессии. Источник лежит в `.archive/-.md`, тело каркаса дописывается глазами. Вне scope этого скила. + +7. **Создание тасок:** + + - **domain (mandatory pre-impl) — `[-pointers]`:** **первой** создать таску, заполняющую `.wiki/CLAUDE.md` Domain conventions у target-проекта пойнтерами на спецификацию. Без неё импл-таски будут подняты со stub'ом в Domain conventions, и следующий агент попадёт в дыру: dense `where_stopped` one-liner + пустой stub = угадывание порогов / таксономий / pipeline-этапов. Параметры: + + - `target_project: ` + - `slug: -pointers` + - `status: ready` + - `description:` шаблон ниже + - `next_action:` готовый блок текста для копирования в `.wiki/CLAUDE.md` (шаблон ниже) + + Description-шаблон: + + ``` + Bootstrap-pointers для design . Pre-fills target's `.wiki/CLAUDE.md` + Domain conventions ссылками на спецификацию. Дизайн не лежит в этом репо — + только pointer-stub. Без этой таски следующий агент попадёт в дыру: + where_stopped one-liner + пустой Domain conventions stub = угадывание + порогов / таксономий / pipeline-этапов вместо чтения готовых решений. + + **Кто делает:** любой следующий агент в этом проекте. Это первая по + приоритету таска промоушена — все остальные импл-таски ссылаются на + pointers через .wiki/CLAUDE.md. + ``` + + Next-action шаблон (pre-filled, копировать дословно — подменив `` и ``): + + ``` + В `.wiki/CLAUDE.md` секции "Domain conventions" вставить блок (или заменить + дефолтный setup-wiki stub): + + ### Mandatory: read design context before implementation + + Before picking up any task in `.tasks/`, load the full design context. It + does **not** live in this repo — only pointers do. Sources, in order: + + 1. **Global wiki design (canonical):** `mcp__projects-meta__knowledge_get` + с `slug = "concepts/"`. Architecture decisions, contracts, scope. + 2. **Brainstorm process trace (rationale):** + `~/projects/.workshop/.archive/-.md`. + Why each decision was made, what was rejected and why, anti-patterns. + 3. **Local `overview.md`** — thin summary of (1), used as quick orientation + only — never as the source of truth. + + Do **not** invent thresholds, taxonomies, container topology, or pipeline + stages from task `where_stopped` lines alone — those are pointers, not + specifications. + + --- + + Закоммитить: `wiki(claude): add design-context pointers for `. + ``` + + Конкретные значения, которые промоутер должен подставить **заранее** в + текст next_action перед `tasks_create`: + + - `` — тема промоушена (тот же slug, что используется в `concepts/.md` и в `.archive/-.md`). + - `` — сегодняшняя дата (та же, что в шаге 9 архивации). + + Если `tasks_create` для `-pointers` упала → **abort** до content-тасок и до review. Без pointers оставшиеся таски бесполезны: импл-агент будет угадывать. Сообщить пользователю, буфер оставить на месте. + + - **workshop-meta / domain (content):** для каждого action-item: + - `mcp__projects-meta__tasks_create` с `project: ` (для domain) или с `project: ` (для workshop-meta — спросить пользователя если неоднозначно). + - Title — первая строка action-item; description — остальное. + + - **skill:** **всегда** добавляются три baseline-таски в `project: claude-skills`: + - `[-install]` — запустить `install.sh` в `~/projects/claude-skills/`, проверить что скил активируется в новой сессии, сделать `/reload-plugins`. + - `[-hermes-mapping]` — добавить запись в `~/projects/claude-skills/hermes/mapping.yaml`. Режим: `auto` если скил чисто стилевой / response-style, `pending` если скил трогает инструменты или окружение (требует отдельного аудита). + - `[-test-trigger]` — прогнать триггер-фразы из `description` на тестовом буфере: убедиться что активируется на своих фразах И не активируется на 2-3 близких чужих (false-positive check). + + Плюс content-таски из самого буфера (если были) — также в `project: claude-skills`, slug-prefix `-`. + + - Если N-я таска упала — продолжить остальные, в конце сообщить какие созданы / какие нет. + - Запомнить slug'и созданных импл-тасок для шага 8. + +8. **Review-чекпоинт.** Создаётся всегда для skill-промоушена; для domain-промоушена — только если N≥1 импл-тасок; для workshop-meta или N=0 (domain) — skip с пометкой в логе. + + - **domain (N≥1):** + - `mcp__projects-meta__tasks_create`: + - `target_project: ` + - `slug: -review` + - `status: blocked` + - `blocker:` `«bootstrap: -pointers; impl-tasks: <номера #n через запятую>»` — блокеры по номерам (номер = машинный ключ; слаги оставить в скобках для читаемости). + - `description:` шаблон ниже. + - `next_action:` «Дождаться 🟢 у всех blocker-тасок (включая `-pointers` — без него pointers в `.wiki/CLAUDE.md` не залиты, и review будет читать stub). Прочитать спецификацию (см. путь в description). Для каждой импл-таски: `git show `, прогнать тесты в её scope'е, сверить с acceptance criteria. Findings → новые follow-up tasks через `mcp__projects-meta__tasks_create`.» + + Description-шаблон (domain): + + ``` + Code-review checkpoint для брейнсторма (промоушен ). + + **Спецификация:** <путь к промоушенному design-документу — concepts/.md в target-wiki>. + **Pre-impl bootstrap:** `-pointers` (заполнил `.wiki/CLAUDE.md` Domain conventions — без него review бы читал stub). + **Импл-таски (review против их acceptance criteria):** <номера #n из шага 7, слаги в скобках>. + + **Кто делает:** **не имплементер.** Следующая сессия в этом проекте (другая модель / другой день / другой агент) поднимает таску с чистым контекстом. «Я только что это написал» bias = главный риск. + + **Чек-лист ревью:** + - Прочитать спецификацию (acceptance criteria каждой импл-таски). + - `git log --oneline` shipped-коммитов (по slug или scope в commit-message). + - Для каждой импл-таски: прогнать соответствующие тесты, реально проверить что они доходят до своих веток (не coverage-illusion). + - Сверить дизайн-decisions со shipped-кодом (signature, params, error-paths, безопасность). + - Findings — отдельные follow-up tasks (`--fix` или подобное) через `tasks_create`. + + **Закрытие:** только когда все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note. + ``` + + - **skill:** + - `mcp__projects-meta__tasks_create`: + - `target_project: claude-skills` + - `slug: -review` + - `status: blocked` + - `blocker:` `«impl-tasks: -install, -hermes-mapping, -test-trigger[, content-impls если были]»` — номера `#n` из шага 7 (слаги в скобках для читаемости). + - `description:` шаблон ниже. + - `next_action:` «Дождаться 🟢 у baseline-тасок. Прогнать поведенческий smoke-test (см. чек-лист в description). Findings → follow-up tasks через `tasks_create`.» + + Description-шаблон (skill): + + ``` + Skill-review checkpoint для (промоушен ). + + **Источник дизайна:** .workshop/.archive/-.md. + **Импл-таски:** -install, -hermes-mapping, -test-trigger[, content-impls] — номера #n из шага 7. + + **Кто делает:** **не имплементер.** Другая сессия / другой день / другой агент. Identity-not-location: ревьюер работает в любой папке, где есть доступ к файлам (см. `.workshop/.wiki/concepts/workshop-architecture.md` §5.1). + + **Поведенческий smoke-test (это и есть acceptance):** + - Скил активируется в чистой сессии на каждой триггер-фразе из `description` (русский И английский варианты). + - Скил **не** активируется на 2-3 близких но не своих фразах из соседних доменов (false-positive check). + - Каждый шаг секции `Steps` отрабатывает на тестовом буфере без ошибок. + - `Failure modes` уводят в abort, не в частичный успех с грязным состоянием. + - `What NOT to do` соответствует реальности — нет дыры между правилом и реализацией. + + Findings — обычные follow-up tasks (`--fix` или подобное) через `tasks_create` в `claude-skills`. + + **Закрытие:** только когда все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note. + + **NB по семверу:** `version: 0.1.0` записан промоутером. Дальнейшие инкременты — ответственность владельца `claude-skills/`, **не** этого скила и не ревьюера. Если ревью требует правок — правит владелец, бампит он же. + ``` + + - Если `tasks_create` review-таски упала — сообщить пользователю, **продолжить** к шагу 9 (архивация буфера). Review-таску можно создать вручную позже из `.archive/-.md`. + +9. **Workshop-wiki summary (обязательно для всех маршрутов):** + + `Write` → `.wiki/concepts/.md` с frontmatter: + + ```yaml + --- + date: + source: .brainstorm/.md → .archive/-.md + status: promoted + type: workshop-meta + --- + ``` + + Содержание (≤60 строк): + - **Что решили** — ключевые решения раундов (не пересказ, а outcomes). + - **Куда промочено** — полный путь: target-wiki / claude-skills / local concepts. + - **Задачи** — перечень slug'ов, созданных в шаге 7. + - **Ссылки** — архив буфера + связанные концепты в workshop-вики + глобальная вики. + + Для **workshop-meta**: summary — сокращение полного контента (который уже в `.wiki/concepts/.md` шага 6); если шаг 6 уже записал туда полный файл — шаг 9 его дополняет секцией «Куда промочено / Задачи» или пропускается (не дублировать). + + Затем обновить `index.md` — добавить строку в нужную секцию. + + Если `Write` упал → сообщить, **не блокировать** архивацию (summary менее критична чем content-промоушен). + +10. **Архивация:** + + ```bash + git -C ~/projects/.workshop mv .brainstorm/.md .archive/-.md + ``` + + **Только** если шаги 6 и 7 прошли (или прошли с допустимым partial — пользователь подтвердил). Иначе — оставить буфер на месте, чтобы можно было ретраиить. + +11. **Лог:** дописать в `.wiki/log.md`: + + ``` + promoted [created N tasks in ] + ``` + + Для skill — `` = `claude-skills/skills//SKILL.md (skeleton)`. + +12. **Финальный отчёт пользователю:** + - Куда промочено (полный путь). + - Какие таски созданы (id, title, проект). + - Куда уехал исходник. + - **Для skill:** напомнить что нужен второй проход «доведём ``» для дописывания тела каркаса. + +## Failure modes + +- `.brainstorm/.md` отсутствует → abort. +- `mcp__projects-meta` недоступен → abort до записей. +- Целевой проект (для domain) не найден в `meta_status` → abort. +- `knowledge_ingest` упал → abort до `tasks_create` и `git mv`. Буфер остаётся. +- **domain:** `tasks_create` для `[-pointers]` упал → **abort** до content-тасок и до review-таски. Без pointers оставшиеся таски бесполезны (агент будет угадывать). Сообщить пользователю; буфер оставить на месте для retry. +- `tasks_create` упал на N-й content-таске → продолжить остальные. Сообщить partial. **Не делать** `git mv` без подтверждения пользователя. +- `tasks_create` упал на review-таске (шаг 8) → не блокировать; перейти к архивации, сообщить пользователю чтобы создал вручную из `.archive/`. +- **Skill:** `~/projects/claude-skills/` не существует → abort с сообщением «клонируй через update-claude-skills или вручную». +- **Skill:** `~/projects/claude-skills/skills//` уже существует → abort с сообщением «скил уже существует, обновляйся обычным маршрутом в `claude-skills/`». +- **Skill:** пользователь не подтвердил preview перед записью → abort, состояние не меняется. +- **Skill:** локальный `git commit` в `claude-skills/` упал (например, не настроен user.email) → файл остаётся, сообщить пользователю что коммит нужно сделать руками; **не** делать `git mv` буфера до подтверждения. + +## Side effects + +- **Всегда (любой маршрут):** создаёт summary-страницу `.wiki/concepts/.md` в `.workshop/` + добавляет строку в `index.md`. +- **workshop-meta:** summary IS контент (шаг 6 записывает полное тело; шаг 9 дополняет секцию «задачи/ссылки» или пропускается если уже полный). +- **domain:** создаёт запись в target-wiki через MCP (`mcp__projects-meta__knowledge_ingest`). +- **domain:** создаёт также **mandatory pre-impl** таску `[-pointers]` в target — pre-filled блок текста для `.wiki/CLAUDE.md` Domain conventions (ссылки на global wiki slug + workshop archive trace + local overview.md). Без неё последующий импл-агент попадает в дыру: where_stopped one-liner + пустой Domain conventions stub. +- **skill:** создаёт `~/projects/claude-skills/skills//SKILL.md` — **только шапка + пустой каркас**. Локальный коммит в `claude-skills/`. **Без** установки, push, или build-hermes — это всё в созданных baseline-тасках. +- Создаёт N тасок в target `.tasks/` через MCP. +- Для domain (N≥1) или skill: создаёт зонтичную review-таску (status=blocked, blocker=impl-slugs; для domain — также включает `-pointers`) в том же target. +- Перемещает `.brainstorm/.md` → `.archive/-.md`. +- Аппендит строку в `.wiki/log.md`. +- **Семвер скилов:** при target=skill промоутер записывает `version: 0.1.0` в шапку. Дальнейшие инкременты — ответственность владельца `claude-skills/`, **не** этого скила. При попытке промоушена в существующий скил — abort (см. Failure modes). + +## What NOT to do + +- Не писать доменное содержимое в локальный `.wiki/concepts/` (правило #1 из `.workshop/CLAUDE.md`). Summary-страница шага 9 — это trace/навигация, не domain-контент. +- Не пропускать шаг 9 (workshop-wiki summary) — именно так следующая сессия узнаёт что буфер был и куда ушёл. +- Не делать `git mv` буфера до успеха promotion+tasks. +- Не удалять буфер вместо `git mv` — теряется история. +- **Skill:** не пытаться автоматически переформатировать тело буфера в каркас `Steps`/`Failure modes`/etc. — это поведенческий контракт, не косметика. Каркас остаётся пустым; тело дописывается во втором проходе глазами. +- **Skill:** не запускать `install.sh`. Не делать `git push` в `claude-skills/`. Не править `hermes/mapping.yaml`. Не запускать `build-hermes.py`. Это работа baseline-тасок, не промоутера. +- **Skill:** не бампить `version` после первой записи (это работа владельца `claude-skills/`). +- **Skill:** не промоутить в существующий скил (см. Failure modes — abort). +- **Skill:** не пропускать обязательный preview + confirm перед `Write` — действие выходит за пределы мастерской, изменяет соседний репозиторий.