9.8 KiB
name, author, version, description
| name | author | version | description |
|---|---|---|---|
| task-format | ours | 0.4.0 | Use when creating or editing a task so it is actually claimable and routed — not silently skipped. Primary channel: **mappa** — create via `mcp__mappa__task_create` (схема ниже), не руками. Legacy: пока файловый поллер (agents-task-runner) не переключён на mappa (#984), блоки в `.tasks/STATUS.md` обязаны совпадать со строгим форматом (шапка, поля Weight/Notify), иначе поллер молча пропускает. Triggers: «оформить таску для поллера», «формат таски», «task block format», «make a task the poller will pick up», «add Weight/Notify», poller / agent-runner not claiming a task. |
task-format
Канон создания задачи — через тул, не рукописным блоком. Поллер (автономный раннер) разбирает задачи строгими правилами; формат задаёт, какая таска будет взята, отмаршрутизирована и зарепорчена, а какая молча пропущена.
Создаёшь задачу для другого проекта/агента? См.
delegate-task— он ведёт через тул + письмо. Работа с бордом (claim/close/status) —using-tasks.
Primary: mappa task.create
Создание задач в mappa (решение 14/15: мета в сервисе) — только через
mcp__mappa__task_create, никогда руками вставляй блоки. Тул сам назначает
per-type номер (t:N, решение 20) и пишет сущность.
mcp__mappa__task_create(
project: <имя проекта>, // обязателен
slug: <kebab-case>, // обязателен, латиница
title: <одна строка>, // опционально
description: <markdown>, // тело; [[refs]] → рёбра (решение 4)
status: ready | active | paused | blocked | done, // по умолчанию ready
priority: P0 | P1 | P2, // важность; отсутствует → P1 (task-priority-due)
due: yyyy-mm-dd, // дедлайн; отсутствует = нет (task-priority-due)
claim_token: <токен лиза проекта> // мутация под лизом (решение 19)
)
**Priority/Due (task-priority-due, #1045):** задаются **только при создании**
— либо явными параметрами `priority`/`due`, либо строками в description
(`**Priority:** P0|P1|P2`, `**Due:** yyyy-mm-dd`; явные параметры переопределяют
парсинг). После создания агент приоритет и дедлайн **не меняет** — прецедент
человека структурный (update агентами отклоняется сервером). Обнаружил, что
таска на самом деле P0 → паркуй вопрос человеку, не бампай сам.
Мутация под лизом (решение 19): task_create требует claim_token
активного лиза проекта (берётся mcp__mappa__task_claim_next). Без лиза —
422 busy. (Карв-аут: чтения и инбокс-доставка лиза не требуют.)
Per-type номер (решение 20): номер — канонический машинный реф t:N
(см. ответы — поле ref). Глобальный id — internal, только для addressing
(#1037). Ссылки на задачу в тексте — [[t:N]], не #<глобальный id>.
Slug-правила: короткий, lowercase, kebab-case, латиница
(fix-nl-vds-reality-pq-dest, не Fix_this_TASK #1).
Status emoji ↔ state
| Emoji | State | Значение |
|---|---|---|
| ⚪ | ready |
единственное состояние, которое поллер берёт |
| 🔴 | active |
взято / в работе |
| 🟡 | paused |
возобновляемо |
| 🔵 | blocked |
ждёт (указать почему в description/where_stopped) |
| 🟢 | done |
закрыто |
Не путай: 🟢 — это done, не «готово».
Legacy: блок .tasks/STATUS.md (интерм до #984)
Пока файловый поллер (agents-task-runner) не переключён на mappa-лиз (#984),
блоки в .tasks/STATUS.md, создаваемые руками/миграцией, обязаны совпадать со
строгим форматом — иначе поллер молча пропускает или паркует. Это
переходный канон; новые задачи создавай через task_create.
## ⚪ [#1234 my-task-slug] — One-line description.
**Status:** ready
**Created:** 2026-08-23
**Where I stopped:** (not started)
**Next action:** First concrete step the claiming agent runs.
**Branch:** master
**Weight:** needs-claude
**Notify:** OpeItcLoc03/workshop
<!-- created-by: you@machine / from: OpeItcLoc03/workshop / 2026-08-23 -->
---
Три load-bearing правила:
- Шапка точно:
## <emoji> [#<n> <slug>] — <description>— h2, один emoji,[#<n> <slug>](глобальный номер, без ведущих нулей), разделитель—(пробел + em-dash + пробел). Несовпавшая шапка = задача не видна вообще. - Поля — строки
**Label:** value. Буллеты и проза игнорируются. **Created:** yyyy-mm-ddобязателен — пишется один раз при создании.
Номера legacy-блоков назначает сервер (tasks_create из счётчика
OpeItcLoc03/agenda/task-counter) — никогда не выдумывай номер руками.
Поля, которые поллер разбирает
| Field | Format | Meaning |
|---|---|---|
**Weight:** |
cheap-ok | needs-claude | needs-human |
Тир маршрутизации. Обязателен для авто-взятия. |
**Notify:** |
<owner>/<repo> |
Инбокс-адрес для событий close/park/delivery-failure. |
**Requirements:** |
CSV (needs-db, needs-secrets) |
Capability-гейт: агент должен держать ВСЕ. |
**Runtime allowed:** |
CSV (claude-opus) |
Runtime-whitelist. |
**Consult policy:** |
auto | human-only | strict-human |
Эскалация consult; default human-only. |
**Blocker:** |
CSV blocker-slug'ов | Только на 🔵; авто-unblock при 🟢 всех. |
**Priority:** |
P0 | P1 | P2 |
Важность (task-priority-due). Отсутствует = P1. Влияет на порядок выдачи claim_next (P0-пул первый, внутри по дедлайну). Ставится только при создании — после агенты не меняют. |
**Due:** |
yyyy-mm-dd |
Дедлайн (task-priority-due). Просроченные (due < today, ready/active) → overdue-scan уведомляет в инбокс однократно. Отсутствует = нет дедлайна. |
**Next action:** / **Where I stopped:** / **Branch:** |
free text | Резюмируемость. |
**Owner:** / **Claim token:** / **Claim expires at:** — claim-штамп, пишет и
чистит поллер. Не автори руками; залипший штамп на ⚪ блокирует поллер.
Weight — поле, решающее взятие: без **Weight:** поллер берёт задачу, не
находит тир и паркует в 🔵 (no backend for weight_tier: unknown). Обычный код
→ needs-claude; критикал-инфра (поллер, MCP-серверы, деплой, CI, git-хуки) →
needs-human (никогда не авто).
Common mistakes
| Mistake | Fix |
|---|---|
Рукописный блок вместо task_create |
Создавай через тул — номер/формат серверные. |
### Title / буллеты вместо полей |
## <emoji> [#n slug] — desc + **Field:** value. |
| 🟢 для ready | 🟢 — done. Ready — ⚪. |
Шапка [slug] без номера |
[#n slug] — номер машинный ключ. |
| Выдуманный номер | Номер — только от сервера (task_create). |
**Created:** отсутствует (legacy) |
Добавить — обязательное поле. |
Ссылка #<глобальный id> |
Ссылайся [[t:N]] (решение 20/#1037). |
Без **Weight:** (legacy) |
Ставь всегда, или задача паркуется. |
Агент бампает **Priority:**/**Due:** после создания |
Нельзя — прецедент человека структурный; ставь только при создании, иначе сервер отклоняет. |
Дефис/двоеточие вместо — в шапке |
Разделитель — пробел + em-dash + пробел. |
Verify
Задача корректна, когда: создана через task_create (или legacy-блок: шапка
## <emoji> [#n slug] — …, emoji = **Status:**, **Created:** есть, поля —
**Label:** строки, есть **Weight:** и **Notify:**); slug kebab-case;
ссылки на неё — [[t:N]].