diff --git a/.tasks/2026-08-24-01061-mappa-delegation.md b/.tasks/2026-08-24-01061-mappa-delegation.md index 28fdcb1..a2187fb 100644 --- a/.tasks/2026-08-24-01061-mappa-delegation.md +++ b/.tasks/2026-08-24-01061-mappa-delegation.md @@ -17,4 +17,13 @@ Rewrite delegate-task → **mappa-delegation** (редизайн mappa-skill-sui ## Completed steps +- [x] skills/mappa-delegation/SKILL.md v1.0.0 — rewrite delegate-task v0.5.1 (цикл: pre-flight gate → шаблон → preview → confirm → covering-письмо → review-umbrella → downstream) +- [x] Старый skills/delegate-task/ удалён (поглощён; имя — триггер-синоним в description) +- [x] Suite-ссылки: using-tasks→mappa-task-work, inter-session-messaging→mappa-messaging, using-wiki→mappa-knowledge; нота лизинговой модели #1054 (create-без-лиза — опционально, контракт работает на текущих тулах) +- [x] lint clean (67 skills, 0 violations); build.sh → dist/mappa-delegation.skill (старый .skill удалён); install.sh → dual; старый удалён из живых диров +- [x] GREEN micro-test: свежий pi -p на «создать задачу на агента… common» → активация mappa-delegation, обязательная пара tasks_create + covering-письмо (адрес из адресной книги, [event: created]), review-umbrella с наследованием weight + ## Notes + +- RED-базис: тело унаследовано из delegate-task v0.5.1 (прошёл ревью + smoke); дельта = rename, suite-ссылки, цикл-фрейминг, нота #1054. Полный behavioral smoke — за #1065. +- Поглощает delegate-task без потери контента (все шаги 1–7 сохранены, включая weight-наследование review и downstream-правило task+letter). diff --git a/dist/delegate-task.skill b/dist/delegate-task.skill deleted file mode 100644 index b27f40a..0000000 Binary files a/dist/delegate-task.skill and /dev/null differ diff --git a/dist/mappa-delegation.skill b/dist/mappa-delegation.skill new file mode 100644 index 0000000..430e60a Binary files /dev/null and b/dist/mappa-delegation.skill differ diff --git a/skills/delegate-task/SKILL.md b/skills/mappa-delegation/SKILL.md similarity index 76% rename from skills/delegate-task/SKILL.md rename to skills/mappa-delegation/SKILL.md index c3b3713..8824dc7 100644 --- a/skills/delegate-task/SKILL.md +++ b/skills/mappa-delegation/SKILL.md @@ -1,32 +1,36 @@ --- -name: delegate-task +name: mappa-delegation author: ours -version: 0.5.1 +version: 1.0.0 description: > - Use when delegating a task to another agent or project via - mcp__projects-meta__tasks_create. Every cross-project delegation is a - pair: tasks_create + covering letter to the recipient's inbox (event: - created) — a task on the board does not ping a live session. Triggers: + Цикл делегирования задачи другому агенту/проекту: pre-flight gate → + шаблон тела → dry-run preview → confirm → covering-письмо в инбокс + получателя → парная review-таска для impl. Каждая кросс-проектная делегация + — пара: tasks_create + письмо (event: created) — таска на борде не пингует + живую сессию. Старое имя — триггер-синоним: delegate-task. Триггеры: «делегировать таску», «delegate task», «создать задачу на агента», - «поставить задачу агенту», «tasks_create для». Does NOT apply to - self-assigned tasks on your own board («создать задачу себе», «task for - myself», «поставить себе задачу» → using-tasks), to work you do yourself, - or to workshop-internal tasks. + «поставить задачу агенту», «tasks_create для». НЕ применимо: self-assigned + таски на своей доске («создать задачу себе» → mappa-task-work), работа + своими руками, workshop-внутренние таски. --- -# delegate-task +# mappa-delegation -Унифицированный формат постановки задач на агентов через `mcp__projects-meta__tasks_create`. Обеспечивает что каждая делегированная задача содержит: обязательные скилы (императивный invoke), pre-flight разрешения, steering-loop поля (notify/weight/allow_upgrade). +Унифицированный **цикл постановки задач на агентов**: от pre-flight гейта до +covering-письма получателю. Гарантирует, что каждая делегированная задача +содержит: обязательные скилы (императивный invoke), pre-flight разрешения, +steering-loop поля (notify/weight), парную review-таску для impl — и что +получатель реально узнаёт о задаче (письмо, не только борд). ## When to use -Перед каждым вызовом `mcp__projects-meta__tasks_create` для другого проекта или агента. +Перед каждым вызовом `tasks_create` для другого проекта или агента. **Активируется:** «делегировать таску», «delegate task», «создать задачу на агента», «поставить задачу агенту», «tasks_create для». **Не применяется:** - Работа которую выполняешь сам в текущей сессии. -- Self-assigned таски на своей доске («создать задачу себе», «task for myself», «поставить себе задачу») → `using-tasks`, не делегирование. Дизамбигуатор: «на агента»/«агенту»/«в проект X» = делегирование; «себе»/«myself» = своя доска. +- Self-assigned таски на своей доске («создать задачу себе», «task for myself», «поставить себе задачу») → `mappa-task-work`, не делегирование. Дизамбигуатор: «на агента»/«агенту»/«в проект X» = делегирование; «себе»/«myself» = своя доска. - Workshop-internal таски (`.workshop/.tasks/` — workshop-meta, не делегирование). - `tasks_create` с `target=agenda` (cross-project agenda — не делегирование агенту). @@ -37,11 +41,16 @@ description: > - Краткое описание задачи (цель + acceptance criteria) - `weight` — `cheap-ok | needs-claude | needs-human` - `notify` — slug проекта-комиссионера (кому писать inbox при close/park) -- `allow_upgrade` — `true/false` (опционально; разрешить ли fallback на tier выше если нет matching backend) -Номер задаче присваивает сервер (`tasks_create` из счётчика `OpeItcLoc03/agenda/task-counter`) — постановщик номер не придумывает и не резервирует. Возвращённый `#n` из preview/confirm — машинный ключ задачи: им ссылаются блокеры, письма, decision-trail. +Номер задаче присваивает сервер (`tasks_create` из счётчика agenda/task-counter) — постановщик номер не придумывает и не резервирует. Возвращённый `#n` из preview/confirm — машинный ключ задачи: им ссылаются блокеры, письма, decision-trail. -## Steps +> **Лизинговая модель (#1054).** Мутации тасок гейтятся лизом проекта +> (`mcp__mappa__task_claim_next` → token для `task_create`; file channel — +> sha-CAS через Gitea). `#1054 lease-model-generalization` (create-без-лиза как +> принцип, claim на таску) — **опционально**: контракт этого скила работает на +> текущих тулах; перейти на create-без-лиза, когда #1054 имплементится. + +## Steps (цикл) ### 1. Pre-flight gate (6 вопросов пользователю) @@ -55,7 +64,7 @@ description: > 3. **Контекстные скилы сверх дефолтов?** — предложить по содержанию задачи (например `claude-api` для работы с Anthropic SDK, `frontend-design` для UI, `using-interns` если интерны разрешены), пользователь утверждает. 4. **notify — кому докладывать о завершении/затыке?** (slug проекта; обычно `.workshop` или `OpeItcLoc03/workshop`) 5. **Session-break после этой задачи?** — нужен ли разрыв сессии после её закрытия (domain-switch, milestone, heavy infra)? - - Если **да** → проставить `session_break` в теле задачи (см. шаблон): `true` или строка-hint с названием следующего трека. `using-tasks` остановится после close и предложит завершить сессию, не клеймя следующую задачу. + - Если **да** → проставить `session_break` в теле задачи (см. шаблон): `true` или строка-hint с названием следующего трека. `mappa-task-work` остановится после close и предложит завершить сессию, не клеймя следующую задачу. - Если **нет** → поле не добавлять (дефолт — агент продолжает `claim-next`). ### 2. Составить тело задачи по шаблону @@ -70,9 +79,9 @@ description: > ## Обязательные скилы — вызвать до начала работы - invoke `tdd-criteria` — до написания кода -- invoke `using-tasks` — для управления статусом задачи +- invoke `mappa-task-work` — для управления статусом задачи - invoke `project-discipline` — дисциплина коммитов/пушей -- invoke `using-wiki` после закрытия — заингесть .wiki/concepts/.md +- invoke `mappa-knowledge` после закрытия — заингесть .wiki/concepts/.md [если кросс-проектная: - invoke `using-projects-meta` — cross-project tasks/wiki] [контекстные скилы из шага 1.3] @@ -81,7 +90,7 @@ description: > **weight:** cheap-ok | needs-claude | needs-human **notify:** [**allow_upgrade:** true/false] -[**session_break:** true | "<следующий трек / hint>"] # optional — using-tasks остановится после close, не клеймит следующую задачу +[**session_break:** true | "<следующий трек / hint>"] # optional — mappa-task-work остановится после close, не клеймит следующую задачу ``` **Когда ставить `session_break`** (опционально; по умолчанию НЕ ставить — это маркер реальной границы, не дефолт). Три случая: @@ -90,7 +99,7 @@ description: > 2. **Milestone-задача** — последняя в группе sub-tasks одной фичи. 3. **Тяжёлая инфра-задача** — shared checkout, migrations, deploy — где разумно остановиться и проверить состояние. -Значение: `true` (следующий трек = «см. STATUS.md») либо строка-hint с названием следующего трека. Потребитель — `using-tasks` v1.2.0+ (Task completion step 6): после close печатает `🔚 SESSION BOUNDARY …` и останавливается, не клеймя следующую задачу. Дизайн: `.wiki/concepts/delegate-task-session-break.md`. +Значение: `true` (следующий трек = «см. STATUS.md») либо строка-hint с названием следующего трека. Потребитель — `mappa-task-work`: после close печатает `🔚 SESSION BOUNDARY …` и останавливается, не клеймя следующую задачу. Дизайн: `.wiki/concepts/delegate-task-session-break.md`. **Этапные цепочки (staged breakdown):** если решение бьётся на этапы (1 → 1b → 3), создавай каждый этап отдельной таской со `status: blocked` + @@ -112,8 +121,8 @@ description: > ### 5. Сопроводительное письмо — обязательно при кросс-проектной делегации После создания **каждая кросс-проектная делегация** дублируется письмом в -инбокс получателя (канон — `inter-session-messaging` v2: канал Mappa, адрес -из адресной книги `~/projects/.wiki/concepts/projects-address-book.md`): +инбокс получателя (канон — `mappa-messaging`: канал Mappa, адрес из адресной +книги `~/projects/.wiki/concepts/projects-address-book.md`): ``` mcp__mappa__inbox_send( @@ -168,8 +177,9 @@ task» — общий случай (шаг 7 — его частность дл ## Side effects -- Создаёт таску в target-проекте через `mcp__projects-meta__tasks_create` (Gitea commit). +- Создаёт таску в target-проекте через `tasks_create` (file channel — Gitea commit; service channel — mappa-сущность под лизом). - Опционально создаёт парную review-таску (status=blocked). +- Covering-письмо в инбокс получателя (кросс-проектная делегация). ## What NOT to do @@ -181,7 +191,7 @@ task» — общий случай (шаг 7 — его частность дл - Не создавать review-таску без `weight` — reconciler/поллер её пропустит. Наследовать от impl, флор `needs-claude` (см. Step 6). - Не назначать `weight: cheap-ok` для задач где дисциплина критична (review, security, schema migration) — слабые модели могут игнорировать invoke-инструкции. - Не назначать `weight: needs-claude` или `cheap-ok` задачам, меняющим критическую инфраструктуру (поллер, MCP серверы, deploy, CI/CD) — только `needs-human`. -- Не ставить `session_break` рутинно на каждую задачу — это маркер реальной границы (domain-switch / milestone / heavy infra), не дефолт; иначе `using-tasks` рвёт сессию после каждого close. +- Не ставить `session_break` рутинно на каждую задачу — это маркер реальной границы (domain-switch / milestone / heavy infra), не дефолт; иначе `mappa-task-work` рвёт сессию после каждого close. - **Не создавать задачи из дизайна/решения без `**Спека:**`-ссылки** — импл-агент угадывает пороги/скоуп вместо чтения дизайна. - **Не создавать несколько тасок в один репо параллельно** — sha-lock @@ -191,3 +201,10 @@ task» — общий случай (шаг 7 — его частность дл живую сессию не пингует — task без letter остаётся незамеченной до поллера/руки. - **Не поручать агенту создать downstream-таску для живой сессии без парного inbox-письма** (см. Step 7). `tasks_create` в чужой борд живую сессию не пингует — ТЗ обязано требовать И таску, И письмо, иначе downstream-таска висит незамеченной. + +## Reference + +- Письма: `mappa-messaging` (канон inbox_send, адресная книга). +- Задачи/борд: `mappa-task-work`. +- Знание: `mappa-knowledge` (wiki после закрытия). +- Промоушен: `mappa-brainstorm-promote` (review-umbrella через него же).