docs(canon): ре-прогон канон-блока на mappa-setup@0.2.8 (task:3030) + refresh .mappa/share
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Runbook — inbox
|
||||
summary: Почта проекта в mappa: чтение (inbox_monitor), отметка прочитанным, отправка (inbox_send), политика (письмо = предложение, не authority). Контракт каналов Г2. Источник: brainstorm:173.
|
||||
summary: Почта проекта в mappa: чтение (inbox_monitor), отметка прочитанным, отправка (inbox_send), политика (письмо = предложение, не authority), порядок закрытия треда, self-raise. Контракт каналов Г2. Источник: brainstorm:173.
|
||||
type: runbook
|
||||
tags: [mappa, runbook, inbox, agent]
|
||||
---
|
||||
@@ -22,5 +22,21 @@ tags: [mappa, runbook, inbox, agent]
|
||||
- Мультиадресат: recipients[] — доп. адресаты.
|
||||
- Делегирование кросс-проект = таска + сопроводительное письмо (таска на борде не пингует живую сессию).
|
||||
|
||||
## Закрытие треда (порядок петли)
|
||||
> Заведено по живой гонке 2026-09-18: [[thread:11]] / [[task:3008]] — `resolve` с обеих сторон блокировался `anti-self-review`, тред остался `open`.
|
||||
|
||||
- **`resolve` ДО ответа в тред.** Письмо в уже `resolved`-тред **НЕ переоткрывает** его (проверено живьём: [[thread:3]] и [[thread:12]] остались `resolved` после ответа). Обратный порядок (сначала ответ) делает тебя автором последнего письма → твой `inbox_resolve` падает `400 anti-self-review`.
|
||||
- **`requester` = автор последнего письма.** Ему запрещены `resolve` и `ack` — закрывает другая сторона.
|
||||
- **Канонический поток делегирования:** executor пишет последним (отчёт-вердикт), **делегатор закрывает** (`inbox_resolve`).
|
||||
- **`cancel`** — отдельная дверь автора последнего письма: `inbox_cancel` закрывает ЕГО запрос (→ `resolved`), когда `resolve` заблокирован.
|
||||
- **Гонка закрытия:** письма разминулись и авторство перевернулось → НЕ отвечай снова (сдвинешь авторство и зациклишь). Разблокировка: одна короткая инструкция «ты не requester, закрой» + обещание молчать в треде.
|
||||
- **`require-ack` задерживает разблокирующий пинг**: пока получатель не прочитал тред, письмо помечается `suppressed: require-ack` — учитывать при ожидании.
|
||||
|
||||
## Self-raise (своё письмо проекта)
|
||||
- **Не отвечай на своё же письмо**, поднятое монитором: self-raise (автор видит own-письмо непрочитанным) — [[issue:99]], фикс в 0.64.8 ([[release:18]]).
|
||||
- Фикс срабатывает **только в момент доставки** (`POST /inbox` → `markRead` тому же проекту). **Исторический self-хвост не чистится автоматически** — у проекта, который много пишет себе (агент-зона `.admin`: отчёты о деплоях уходят и в `mappa`, и в `.admin`), в инбоксе могут висеть сотни «непрочитанных» self-писем (живой замер: `unread_count 468`). **Это старый хвост, а не непрочитанная работа.**
|
||||
- Разовый бэкфилл — [[task:3011]] (`POST /inbox/backfill-self-read {project}`, идемпотентный, per-project).
|
||||
- Правило «свой отправитель»: `from == <имя проекта>` или `agent:<имя проекта>` (`isSelfSenderLetter`, `server/src/inbox-policy.ts`); мультиадресат метится per читателя-проекта (письмо `from: .admin` → для `.admin` self, для `mappa` — чужое).
|
||||
|
||||
## Связано
|
||||
[[runbooks/index]] · [[canon/gates]] (Г2) · [[runbooks/tasks]] · [[runbooks/session]] (raise на старте) · brainstorm:173 · requirements:23
|
||||
[[runbooks/index]] · [[canon/gates]] (Г2) · [[runbooks/tasks]] · [[runbooks/session]] (raise на старте) · brainstorm:173 · requirements:23 · issue:99 (self-raise) · task:3011 (бэкфилл self-хвоста)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Runbooks — каталог сущностей mappa
|
||||
summary: Каталог сущностей mappa (тип → тулы → runbook). Единая карта «что существует и как с этим работать» для агента. Обновлять при добавлении новых типов. Источник: brainstorm:173.
|
||||
summary: Каталог сущностей mappa (тип → тулы → runbook). Единая карта «что существует и как с этим работать» для агента. 21 сущность покрыта runbook'ами (2026-09-18: +thread). Обновлять при добавлении новых типов. Источник: brainstorm:173.
|
||||
type: runbook
|
||||
tags: [mappa, runbooks, entities, agent]
|
||||
---
|
||||
@@ -8,37 +8,35 @@ tags: [mappa, runbooks, entities, agent]
|
||||
|
||||
Карта «тип → MCP-тулы → процедура». Runbook — агентский слой «как сделать X» (по запросу). Справочные описания тулов — в MCP-поверхности/docs; здесь маршрутизация.
|
||||
|
||||
## Основные (есть runbook)
|
||||
## Сущности (есть runbook)
|
||||
| Тип | Что это | Тул-поверхность | Процедура |
|
||||
|---|---|---|---|
|
||||
| task | таска на доске | task_list/get/create/update/close, comment_* | [[runbooks/tasks]] |
|
||||
| wiki | страница вики (project/shared/private) | wiki_get/search/create/update, entity_* | [[runbooks/wiki]] |
|
||||
| inbox | почта проекта | inbox_monitor/send/mark_read | [[runbooks/inbox]] |
|
||||
| inbox | почта проекта — **канал** | inbox_monitor/send/mark_read | [[runbooks/inbox]] |
|
||||
| **thread** | тред-разговор — **сущность** (тема); канал — inbox | `/threads?persona=`, `GET /thread/<ref>?actor=`, inbox_ack/resolve/cancel, catch_stuck_threads | **[[runbooks/threads]]** |
|
||||
| session/handoff | сессии live-ingest, handoff | session_*, handoff_write | [[runbooks/session]] |
|
||||
| поиск/граф | найти/связать | search/entity_search/wiki_search, graph_* | [[runbooks/search]] |
|
||||
|
||||
## Остальные типы (справка: MCP-описания + docs; наполнение runbooks — post-pilot, task:2071)
|
||||
| Тип | Тул-поверхность | Цикл |
|
||||
|---|---|---|
|
||||
| brainstorm | brainstorm_create/update/promote | шторм-буфер → промоут (wiki+archive) |
|
||||
| issue | issue_create/get/list/update, mark_duplicate, add_addresses | репорт bug/feature/question/incident |
|
||||
| requirements | requirements_create/get/list/update/add_addresses | спека-контракт «что должно быть» (status: draft→approved→implemented→verified) |
|
||||
| plan | plan_create/get/list/update/add_addresses | этапы/фазы планирования |
|
||||
| comment | comment_create/list | короткий след на таске (Г2: не носитель вердиктов) |
|
||||
| tag | tag_create/list/get/apply | метки, scope=project |
|
||||
| attachment | attachment_create/get/list/delete | вложения (url/blob) к task/wiki/brainstorm/session |
|
||||
| release | release_create/list/get/close | версии + fixed_in-рёбра (деплой-гейт через .admin) |
|
||||
| agent/operator | agent_*, operator_* | реестры субъектов |
|
||||
| repo/commit | git_index_* | git-индекс (поиск кода через mappa, волна brainstorm:171) |
|
||||
| project | projects_list/register/resolve/create_repo/owners | реестр проектов (канон = папка) |
|
||||
| skill | skill_list/get/create/update/delete | каталог скилов сервера |
|
||||
| entity-слой | entity_get/search/move/versions/diff/restore/transform | общий слой сущностей |
|
||||
| sched/telemetry | scheduler_*, telemetry_* | расписания, метрики (зона админа) |
|
||||
| issue | репорт bug/feature/question/incident | issue_create/get/list/update, add_addresses, mark_duplicate | [[runbooks/issue]] |
|
||||
| **intent** | SDKЛ-намерение («что и зачем», без техники) | **intent_create/get/list/update/add_addresses/promote** | **[[runbooks/intent]]** |
|
||||
| requirements | спека-контракт «что должно быть» | requirements_create/get/list/update/add_addresses | [[runbooks/requirements]] |
|
||||
| plan | этапы/фазы планирования | plan_create/get/list/update/add_addresses | [[runbooks/plan]] |
|
||||
| comment | короткий след на таске (Г2: не носитель вердиктов) | comment_create/list | [[runbooks/comment]] |
|
||||
| tag | метки, scope=project | tag_create/list/get/apply | [[runbooks/tag]] |
|
||||
| attachment | вложения (url/blob) к task/wiki/brainstorm/session | attachment_create/get/list/delete | [[runbooks/attachment]] |
|
||||
| release | версии + fixed_in-рёбра (деплой-гейт через .admin) | release_create/list/get/close | [[runbooks/release]] |
|
||||
| brainstorm | шторм-буфер → промоут (wiki+archive) | brainstorm_create/update/promote | [[runbooks/brainstorm]] |
|
||||
| agent/operator | реестры субъектов | agent_*, operator_* | [[runbooks/agent-operator]] |
|
||||
| repo/commit | git-индекс (поиск кода через mappa) | git_index_*, code_* | [[runbooks/repo-commit]] |
|
||||
| project | реестр проектов (канон = папка) | projects_list/register/resolve/create_repo/owners | [[runbooks/project]] |
|
||||
| skill | каталог скилов сервера | skill_list/get/create/update/delete | [[runbooks/skill]] |
|
||||
| entity-слой | общий слой сущностей | entity_get/search/move/versions/diff/restore/transform | [[runbooks/entity]] |
|
||||
| sched/telemetry | расписания, метрики (зона админа) | scheduler_*, telemetry_* | [[runbooks/sched-telemetry]] |
|
||||
|
||||
## Правила каталога
|
||||
- Каталог — единая карта. **При добавлении нового типа сущности** (напр. requirements/plan 2026-08-28) — расширение этого каталога обязательным шагом в постановке серверной таски (конвенция).
|
||||
- Каталог — единая карта. **При добавлении нового типа сущности** — расширение этого каталога обязательным шагом в постановке серверной таски (конвенция).
|
||||
- Slug'и: `runbooks/<тип>` (kebab, латиница).
|
||||
- Связь: [[canon/index]] (гейты) · [[canon/gates]] · [[docs/index]] (wiki:3341, ответы человеку) · [[mappa-wiki-topology]] (wiki:3378)
|
||||
|
||||
## Связано
|
||||
[[canon/index]] · [[canon/gates]] · [[runbooks/tasks]] · [[runbooks/wiki]] · [[runbooks/inbox]] · [[runbooks/session]] · [[runbooks/search]] · brainstorm:173 · requirements:23
|
||||
[[canon/index]] · [[canon/gates]] · [[runbooks/tasks]] · [[runbooks/wiki]] · [[runbooks/inbox]] · [[runbooks/threads]] · [[runbooks/session]] · [[runbooks/search]] · [[runbooks/issue]] · [[runbooks/intent]] · brainstorm:173 · requirements:23
|
||||
|
||||
@@ -1,36 +1,47 @@
|
||||
---
|
||||
title: Runbook — search и graph
|
||||
summary: Поиск в mappa: карточный search/entity_search/wiki_search (без тел), правила К1–К4 (поиск до угадывания), граф (path/neighbors/backlinks/stats) для реляционных вопросов. Источник: brainstorm:173.
|
||||
title: Runbook — search/граф и общая память
|
||||
summary: Поиск в mappa: карточный search/entity_search/wiki_search (без тел), правила К1–К4 (поиск до угадывания), скоуп-резолюция project/shared, анти-паттерн wiki_get(slug) на shared-слое, граф (backlinks/neighbors/path) для реляционных вопросов, mode='recall' (общая память: поиск → граф-кластер, depth/related).
|
||||
type: runbook
|
||||
tags: [mappa, runbook, search, graph, agent]
|
||||
tags: [mappa, runbook, search, agent, memory]
|
||||
---
|
||||
# Runbook: search / graph
|
||||
# runbooks/search — как искать в mappa
|
||||
|
||||
## Карточный поиск (без полных тел)
|
||||
- `search(q, types?, scope?, project?, tags?, sort?)` — по всем типам.
|
||||
- `entity_search(q, type, scope?, project?)` — по типу (напр. type=task/wiki/brainstorm).
|
||||
- `wiki_search(q, scope, project)` — только вики (карточки с summary).
|
||||
- Результат — pointer-карточки {ref, type, project, slug, snippet, related}; полное тело — entity_get/wiki_get. Не тащить тела в контекст поиском.
|
||||
Процедура «найти сущность/страницу, не угадывая» + «восстановить контекст/память». Канон-контекст: [[canon/gates]] Г3 (поиск до угадывания). Обновляется при изменениях поиска.
|
||||
|
||||
## К1–К4: поиск ДО угадывания (Г3)
|
||||
1. **Не угадывать slug/роут по названию темы.** Неизвестный slug → search/wiki_search сначала → wiki_get по найденному. Пустой поиск → спросить человека (страницы может не быть).
|
||||
2. **Скоуп**: project-страница через wiki_get без project = 404; не знаешь проект → search(scope='all') → project из карточки.
|
||||
3. **Префиксы каталога**: concepts/, canon/, methodology/, runbooks/, docs/ — не перебирать, искать.
|
||||
4. **Адресация**: num | type:N | uuid; не route-guessing; internal/registry id ≠ public ref.
|
||||
## 1. Поиск до угадывания (К1–К4)
|
||||
- Не знаешь ref/существование → `entity_search(q)` / `wiki_search(q)` (карточки: ref/type/project/slug/snippet). Никогда не «угадывать» slug/номер.
|
||||
- Скоупы: `project=X` (жёсткий) | `shared` | `all` (boost текущего). Результат карточки несёт project — переключайся по нему.
|
||||
- Префиксы каталога: слаги живут под `canon/`, `methodology/`, `runbooks/`, `concepts/`, `docs/` — не перебирать префиксы, искать.
|
||||
- Тип-фильтры: `types=[task|wiki|inbox|brainstorm|…]` — сузить до нужного.
|
||||
- Карточка найдена → полное тело: `entity_get(ref, full=true)` (не «собрать по кусочкам»).
|
||||
|
||||
## Граф (реляционные вопросы — НЕ чтением)
|
||||
| Вопрос | Тул |
|
||||
|---|---|
|
||||
| «что связывает X и Y» / путь | graph_path(from, to) |
|
||||
| соседи / исходящие | graph_neighbors(id) |
|
||||
| кто ссылается / backlinks | graph_backlinks(id) |
|
||||
| здоровье (сироты/битые) | graph_stats() + graph_backlinks |
|
||||
| дерево parent_of | graph_tree(root) |
|
||||
## 2. Скоуп-резолюция (project vs shared)
|
||||
- `wiki_get(slug)` без project = shared-скоуп. Для проектной страницы — `wiki_get(project, slug)`.
|
||||
- Одна и та же тема может жить в shared (канон/методология/рунбуки) И в проекте (спека/ретро) — сначала search, потом читать правильный скоуп.
|
||||
|
||||
Precondition: граф реально связан (graph_stats: edges≈0 → пусто, отвечай чтением). Пустой path = связи нет — так и сказать, не выдумывать цепочку по текстовой близости.
|
||||
## 3. Анти-паттерн: wiki_get(slug) для shared-слоя (после task:2073)
|
||||
> **Анти-паттерн:** `wiki_get(slug)` для shared-канона/рунбуков (`canon/*`, `methodology/*`, `runbooks/*`) мис-резолвится → 404 или чужая страница. Если увидел 404/не-тот контент — это shared-слой → переключись на `entity_search(scope='shared')` → `entity_get(ref, full=true)`. Не повторяй `wiki_get(slug)` (21.7% ошибок на /wiki/:slug по телеметрии, дайджест 2069).
|
||||
|
||||
## Рост графа (запись рёбер)
|
||||
Рёбра создаются при записи refs (`[[...]]`) в теле. Канон рефов: [[wiki:slug]] по слагу, [[task:N]]/[[brainstorm:N]] по рефу; без плейсхолдеров/диапазонов/кириллицы/алиасов. Сироты/битые в своих страницах — чинить (Д2/Д3).
|
||||
## 4. Граф (когда «кто ссылается / связь»)
|
||||
- «Кто ссылается на X» → `graph_backlinks(ref)`; «куда ведёт X» → `graph_neighbors(ref)`; «связь X–Y» → `graph_path(from, to)`.
|
||||
|
||||
## Связано
|
||||
[[runbooks/index]] · [[canon/gates]] (Г3) · [[runbooks/wiki]] · brainstorm:173 · [[concepts/telemetry]] (wiki:3256, 404-класс)
|
||||
## 5. Общая память — `mode='recall'` (поиск → граф-кластер)
|
||||
|
||||
> **Это и есть «общая память» mappa** (intent:4, task:2570). Агент получает память **запросом**, а не подсовыванием.
|
||||
|
||||
- **Когда:** хочешь не «найти страницу по названию», а **восстановить контекст** вокруг темы: поиск-кластер сущностей и связей между ними. `search(q, mode='recall', scope=…)`.
|
||||
- **Что вернёт:** карточки кластера с полем **`depth`** (0 = сид, 1 = сосед, 2–3 = дальше по рёбрам; relevance затухает `1/(1+depth)`) и **`related[]`** (внутрикластерные связи). Лимит ~50.
|
||||
- **Пайплайн (память как восстановление):**
|
||||
1. `search(q, mode='recall')` → кластер (сиды + depth + related);
|
||||
2. выбрать 1–3 ядра; `entity_get(ref, full=true)` → полное тело;
|
||||
3. `graph_neighbors`/`graph_backlinks` → развернуть вглубь по рёбрам;
|
||||
4. `graph_path(A, B)` → связать два полюса.
|
||||
- **Без `mode='recall'`** — обычный карточный поиск (регресс-контракт, depth нет). Ищешь `mode='recall'` тогда, когда ответ — это «связка сущностей», а не «одна страница».
|
||||
- **Опора качества:** recall опирается на FTS-safe (task:2572) + тег-канал (task:2573) для релевантности — если сырой ввод/спецсимволы ломают поиск, используй чистый запрос.
|
||||
|
||||
## 6. Handoff как снимок памяти (после task:2571)
|
||||
- `handoff_write(project, session_id, status, summary, open_treks?, ask_user?, guards?, recent_commits?)` — писать можно **в любой момент сессии** (reactive-чекпоинт), не только в closing ritual.
|
||||
- Рёбра `handoff → session (in_session) / project (belongs_to) / task` материализуются при write → **handoff не сирота**.
|
||||
- **Восстановление после разрыва:** `search(type='handoff', project=X, limit=1, sort=recency)` → последний → `entity_get(handoff:N, full=true)` → снимок: что сделано / что открыто. Канон-контекст: [[canon/gates]] Г3/Г9.
|
||||
|
||||
**Связи:** [[runbooks/index]] · [[canon/gates]] · [[canon/index]] · [[runbooks/session]] · [[task:2073]] · [[task:2570]] · [[task:2571]] · [[intent:4]] · [[requirements:32]] · [[concepts/memdb-recall-search-patterns]] (wiki:3395)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Runbook — session
|
||||
summary: Сессии и handoff в mappa: live-ingest (session_upsert/heartbeat), ритуал старта (orient: pull → handoff → inbox → liveness), ритуал финиша (closing: handoff-write). Источник: brainstorm:173.
|
||||
summary: Сессии и handoff в mappa: live-ingest (session_upsert/heartbeat), ритуал старта (orient: pull → handoff → inbox → liveness), ритуал финиша (closing: handoff-write), ветки на диск (git worktree). Источник: brainstorm:173.
|
||||
type: runbook
|
||||
tags: [mappa, runbook, session, handoff, agent]
|
||||
---
|
||||
@@ -18,9 +18,20 @@ tags: [mappa, runbook, session, handoff, agent]
|
||||
- Claim-гейт (repo,branch): `session_hold(repo, branch)` — свободно → работай; чужой клейм → НИЧЕГО не делать, сообщить человеку «кто держит», ждать (ревок — только оператор).
|
||||
- Stale-active (обрыв) → crash-detect: сказать человеку, предложить (игнор/напоминание письмом/продолжить).
|
||||
|
||||
## Ветки на диск (git worktree)
|
||||
- **Ветка = рабочее дерево (папка).** Одна ветка — одно извлечение; одну ветку нельзя выкатить в двух worktree одновременно (`fatal: already checked out`).
|
||||
- **Параллельные ветки** → отдельные рабочие деревья:
|
||||
```bash
|
||||
git worktree add C:/Users/vitya/projects/.worktrees/mappa-<slug> worker/<slug>
|
||||
git worktree list # карта: folder → branch → commit
|
||||
git worktree remove C:/Users/vitya/projects/.worktrees/mappa-<slug>
|
||||
```
|
||||
- **Что на диске:** у worktree `.git` — это ФАЙЛ (`gitdir: <главный-репо>/.git/worktrees/<имя>`), не папка. Объекты/refs — ОБЩИЕ (главный `.git/objects`, у нас 51M); per-worktree — только HEAD/index/refs/logs в `<главный>/.git/worktrees/<имя>/`; `commondir` → на общий пул.
|
||||
- **Имя папки ≠ маппинг проекта.** Клиент мапит `project=basename(folder)`: для параллельных кластеров либо слать явный `project="mappa"`, либо класть worktree под именем, не ломающим project-резолв. Каждый worktree = отдельная связка сессии (`sourceRef`/folder) → разные ветки = разные клеймы `(repo,branch)` → 409 нет.
|
||||
|
||||
## Ритуал финиша (closing)
|
||||
- `handoff_write(project, session_id, status, summary, open_treks, ask_user, guards, recent_commits)` — по решению человека (не авто-sweep).
|
||||
- PROPOSE wiki-ingest (важное знание → вики) + PROPOSE закрытия тасок. Мутации — после подтверждения.
|
||||
|
||||
## Связано
|
||||
[[runbooks/index]] · [[runbooks/inbox]] · [[runbooks/tasks]] · [[canon/gates]] · контракт wiki:2660 · [[concepts/session-live-ingest]] (wiki:2604) · brainstorm:173
|
||||
[[runbooks/index]] · [[runbooks/inbox]] · [[runbooks/tasks]] · [[canon/gates]] · контракт wiki:2660 · [[concepts/session-live-ingest]] (wiki:2604) · [[methodology/kzntsv/index]] (wiki:3404) · brainstorm:173
|
||||
|
||||
@@ -1,34 +1,28 @@
|
||||
---
|
||||
title: Runbook — tasks
|
||||
summary: Как работать с тасками mappa: ориентация, выбор (priority/due), взятие (status+owner), исполнение, закрытие, review-связка, comment. Контракт: wiki:2660 (interactive). Источник: brainstorm:173.
|
||||
summary: Как работать с тасками mappa: ориентация (task_list/board_digest), взятие (status+owner, version+409), ведение (comment-след, blocked_by), optimistic-конфликт 409→retry, закрытие с Review-методом. Контракт: wiki:2660.
|
||||
type: runbook
|
||||
tags: [mappa, runbook, tasks, agent]
|
||||
tags: [mappa, runbook, task, agent]
|
||||
---
|
||||
# Runbook: tasks
|
||||
# runbooks/tasks — как работать с тасками
|
||||
|
||||
Цикл работы с таской: ориентация → выбор → взятие → исполнение → закрытие.
|
||||
Процедура «взять → вести → закрыть таску». Канон-контекст: [[canon/gates]] Г2 (каналы), Г4 (адресация). Обновляется при изменениях.
|
||||
|
||||
## Ориентация / выбор
|
||||
- Доска проекта: `task_list(project, parent='root')` (корни) или `board_digest(project)` (счётчики+overdue+blocked). Кросс-проектно: `board_digest()` без project.
|
||||
- Выбор по приоритету/дедлайну. Priority — территория человека: агент ставит P0–P2/deadline только при создании, дефолт P1. Overdue → notify (admin_overdue_scan), авто-бамп запрещён.
|
||||
- Таска без `**Review:**` в описании — не принимается к работе (вернуть постановщику, правило 14).
|
||||
## 1. Ориентация / выбор
|
||||
- Доска: `task_list(project, status=…)` (компакт: ref/status/priority/title) или `board_digest(project)` (счётчики + overdue/blocked).
|
||||
- Взять: `task_get(ref)` → свежая `version` → `task_update(status='active', owner=<identity>, version)` — CAS; конфликт → 409 (см. п.3).
|
||||
- Owner — только реально работающий; не брать чужую active-таску.
|
||||
|
||||
## Взятие (interactive contract, wiki:2660)
|
||||
`task_update(project, id, status='active', owner=<себя>, version=<из task_get>)` — одной мутацией (status→active + owner). Версия — optimistic concurrency: конфликт → 409 → re-GET → retry.
|
||||
## 2. Ведение
|
||||
- `comment_create` — короткий след «где остановился» (не носитель вердиктов — они письмами, канон Г2).
|
||||
- blocked_by: `edge_create(from, to, blocked_by)` / снять `edge_delete` (парные review-таски).
|
||||
- Пауза/переключение: `task_update(status='paused'|'ready', reason)`.
|
||||
|
||||
## Исполнение
|
||||
- Работаешь по критериям приёмки из описания; след «где остановился/что попробовал» — comment_create (короткий), вердикты/отчёты — письмом (Г2).
|
||||
- Смена фокуса → status=paused/ready с reason (не бросать в active).
|
||||
## 3. Optimistic-конфликт (version+409 → retry)
|
||||
> **Optimistic-конфликт:** update/close идут с `version` (из `task.get`) → конфликт → **409** → перечитай `task.get` свежим → retry с новой `version`. НЕ работай со stale-version (виден по POST /session 14.7%, POST /requirements/update 23.1% — телеметрия, дайджест 2069).
|
||||
|
||||
## Закрытие (handover)
|
||||
- Перед close: проверить покрытие критериев + метод ревью из описания выполнен (`subagent` прогнан / `next-session` review-таска существует / `none` обоснован).
|
||||
- `task_close(project, id, version)` → status=done.
|
||||
- Review-связка: импл-таска → парная `<slug>-review` (blocked, blocker=impl) ИЛИ зонтик на кластер (не BOTH). Ревьюер — следующая сессия, НЕ имплементер. Вердикт ревью — письмом полностью.
|
||||
## 4. Закрытие
|
||||
- `task_close(ref, version)`: критерии приёмки выполнены И review-метод из `**Review:**` поля исполнен (правило 14: subagent прогнан / next-session review-таска существует / none обоснован).
|
||||
- done → парная review-таска разблокируется (если была).
|
||||
|
||||
## Создание таски (для босса/делегирования)
|
||||
`task_create(project, slug, title, description, status='ready', priority=P1, session_id)`. Номер — только из ответа. Делегирование кросс-проект = пара: таска + сопроводительное письмо (inbox_send) — таска на борде не пингует живую сессию.
|
||||
- Зависимости: `edge_create(from, to, 'blocked_by')` (task→task, цикл → 422).
|
||||
- Импл-таска обязана нести `**Review:**` (subagent | next-session | none).
|
||||
|
||||
## Связано
|
||||
[[runbooks/index]] · [[canon/gates]] (Г2 каналы) · [[runbooks/inbox]] · контракт wiki:2660 · brainstorm:173 · requirements:23
|
||||
**Связи:** [[runbooks/index]] · [[canon/gates]] · [[canon/index]]
|
||||
|
||||
@@ -25,4 +25,4 @@ tags: [mappa, runbook, wiki, agent]
|
||||
Прочитать источник → извлечь сущности/концепты → summaries/<slug> (иммутабельно) → затронутые страницы create/update → отчёт. Один ингест может трогать 10–15 страниц — нормально. Сырой контент в summaries не дампить (только summary + raw_path).
|
||||
|
||||
## Связано
|
||||
[[runbooks/index]] · [[canon/gates]] (Г1/Г3/Г8) · [[runbooks/search]] · контракт wiki:2660 · [[concepts/wiki-ingest-convention]] (wiki:3312) · brainstorm:173
|
||||
[[runbooks/index]] · [[canon/gates]] (Г1/Г3/Г8) · [[runbooks/search]] · контракт wiki:2660 · [[concepts/wiki-ingest-convention]] (wiki:3312) · brainstorm:173
|
||||
|
||||
Reference in New Issue
Block a user