From 0d8bda17141e7e2874c9388270e6e3da167b98f9 Mon Sep 17 00:00:00 2001 From: vitya Date: Mon, 24 Aug 2026 22:47:17 +0300 Subject: [PATCH] =?UTF-8?q?feat(mappa-delegation):=20rewrite=20delegate-ta?= =?UTF-8?q?sk=20=E2=86=92=20mappa-delegation=20v1.0.0=20(cycle=20pre-fligh?= =?UTF-8?q?t=E2=86=92letter=E2=86=92review-umbrella,=20suite=20refs,=20#10?= =?UTF-8?q?54=20note,=20old=20name=20=3D=20trigger=20synonym)=20[skip-tdd:?= =?UTF-8?q?=20visual]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .tasks/2026-08-24-01061-mappa-delegation.md | 9 +++ dist/delegate-task.skill | Bin 6157 -> 0 bytes dist/mappa-delegation.skill | Bin 0 -> 6518 bytes .../SKILL.md | 69 +++++++++++------- 4 files changed, 52 insertions(+), 26 deletions(-) delete mode 100644 dist/delegate-task.skill create mode 100644 dist/mappa-delegation.skill rename skills/{delegate-task => mappa-delegation}/SKILL.md (76%) 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 b27f40aebc06f48b9986a5fad2236d077890cbd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6157 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 X*Hl43{C^{u|1A4ow*CkG0f7GjWP_%D diff --git a/dist/mappa-delegation.skill b/dist/mappa-delegation.skill new file mode 100644 index 0000000000000000000000000000000000000000..430e60a162ded76f2962163b594eedb8ef765265 GIT binary patch literal 6518 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%0DfXO%C4Ko+f zh7as@CIQR3MxNVXY^S^4-|@t+wE zcq5M48v-|wcq}EdE)Dbs{ZBueyq%c7oWUN)Yjkf~O8Smk$8^ML6FPA8;T&L8Sd`Rj zSz2D>k72JI^V}V|rWuI3E}C^bnjY1qy}Tb2fM(z*uHZyKSk0?y`KQ}AS+W4T1x%qJ z1B3W*%jB?MrzV|DM0 zaZ`77etp68-INJCIaL1`WUQ$?j=t%2E00+wAwwxjXYx6k(5MOIATU{-m>sXBWGC|7 zLoY*fZbbIL!`f^|aa!Siwg~K5BIy>wM%h3$HZyi08tVimLSw3%g``@8_vfdx0LGOiBkq{s}∓wH8XJy>uvj*C*?ahub44&F+J@G;E^$5M{%|hy5 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 S{C5ZVPvrmeN&d?!2>%BOMP4BQ literal 0 HcmV?d00001 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 через него же).