feat(mappa-delegation): rewrite delegate-task → mappa-delegation v1.0.0 (cycle pre-flight→letter→review-umbrella, suite refs, #1054 note, old name = trigger synonym) [skip-tdd: visual]
This commit is contained in:
@@ -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).
|
||||
|
||||
BIN
dist/delegate-task.skill
vendored
BIN
dist/delegate-task.skill
vendored
Binary file not shown.
BIN
dist/mappa-delegation.skill
vendored
Normal file
BIN
dist/mappa-delegation.skill
vendored
Normal file
Binary file not shown.
@@ -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/<slug>.md
|
||||
- invoke `mappa-knowledge` после закрытия — заингесть .wiki/concepts/<slug>.md
|
||||
[если кросс-проектная: - invoke `using-projects-meta` — cross-project tasks/wiki]
|
||||
[контекстные скилы из шага 1.3]
|
||||
|
||||
@@ -81,7 +90,7 @@ description: >
|
||||
**weight:** cheap-ok | needs-claude | needs-human
|
||||
**notify:** <commissioning-project-slug>
|
||||
[**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 через него же).
|
||||
Reference in New Issue
Block a user