feat(skills): сверка mappa-* скилов с деплоем — репо догнал установленные 1.2.0/1.4.0 (интерактивный контракт wiki:2660) [skip-tdd: visual]

- mappa-task-work 1.1.0→1.2.0, mappa-delegation 1.1.0→1.2.0, mappa-knowledge 1.1.0→1.2.0, mappa-messaging 1.1.0→1.2.0, mappa-brainstorm-promote 1.3.0→1.4.0, mappa-closing-ritual 1.0.0→1.2.0
- репо нёс гибрид ae45a51 (1.1.0, следы 'карв-аут лиза'); установленные (деплой, результат #1040) чище: claim/лиз выпилены, owner=персистентный assignee, живность из session владельца
- dist/*.skill пересобраны (build.ps1); установленные уже были в этом состоянии — репо стал источником правды, совпадающим с деплоем
- сверка: claim_next/claim_expires/task_heartbeat/admin_release_lease — 0 вхождений в установленных mappa-* (подтверждено и на этом хосте)
This commit is contained in:
2026-08-25 01:04:12 +03:00
parent ae45a51420
commit c213997e1d
12 changed files with 134 additions and 119 deletions

View File

@@ -1,7 +1,7 @@
---
name: mappa-knowledge
author: ours
version: 1.1.0
version: 1.2.0
description: >
Цикл работы со знаниями проекта в Mappa (Karpathy LLM Wiki, канал =
mappa-сущности): ingest → query → lint + граф-слой для
@@ -10,8 +10,8 @@ description: >
«запроси вики», «проверь вики», «use project wiki», «query the wiki»,
«что связывает X и Y», «как связаны», «путь между X и Y», «what connects
X and Y», «что ссылается на X», «backlinks of X», «сироты», «битые ссылки»,
«orphan pages». Wiki = сущности type=wiki (чтение — карв-аут лиза; запись
version+409, wiki:2660). Реляционные вопросы — через graph_* (BFS на
«orphan pages». Wiki = сущности type=wiki (чтение — карв-аут; create
карв-аут, update — version+409; контракт wiki:2660). Реляционные вопросы — через graph_* (BFS на
стороне сервиса), guarded failure-mode: одна страница и стоп, без
многохоповых цепочек чтением. Skip для одно-страничных контентных вопросов.
---
@@ -25,7 +25,8 @@ query / lint) + **граф-слой** для реляционных и стру
сущностями читают через граф (graph_*).
Канал — Mappa (`mcp__mappa__*`), НЕ файлы. Страница — сущность `type=wiki`
(`wiki:N`); чтение — карв-аут, запись — version+409 (wiki:2660).
(`wiki:N`); чтение — карв-аут; **create — карв-аут без лиза; update —
optimistic concurrency (version+409 → retry)** (контракт wiki:2660, v0.12.0).
Файлового `.wiki/` больше нет; `setup-wiki` умер (нечего настраивать).
## Когда использовать
@@ -64,19 +65,19 @@ README/ADR (не персистентная база знаний), проект
| Операция | Тул | Примечание |
|---|---|---|
| Чтение страницы | `mcp__mappa__wiki_get(project?, slug)` | чтение — карв-аут (решение 19) |
| Чтение страницы | `mcp__mappa__wiki_get(project?, slug)` | чтение — карв-аут |
| Поиск страниц | `mcp__mappa__entity_search(q, type='wiki', project?, scope?, limit)` | ILIKE по body/title |
| Создать страницу | `mcp__mappa__wiki_create(project, slug, body)` | карв-аут (wiki:2660), лиз не нужен |
| Обновить страницу | `mcp__mappa__wiki_update(project, id, title?, body?, version)` | version+409; id — internal |
| Создать страницу | `mcp__mappa__wiki_create(project, slug, body)` | **карв-аут без лиза** |
| Обновить страницу | `mcp__mappa__wiki_update(project, id, title?, body?, version)` | **version-based**: конфликт → 409 → retry со свежей version из wiki_get |
| Путь между сущностями | `mcp__mappa__graph_path({from, to})` | кратчайшая цепочка, BFS |
| Соседи / исходящие | `mcp__mappa__graph_neighbors({id})` | рёбра узла с резолвом целей |
| Входящие ссылки | `mcp__mappa__graph_backlinks({id})` | кто ссылается на узел |
| Здоровье графа | `mcp__mappa__graph_stats()` | nodes/edges/components |
**Запись — version+409 (wiki:2660 interactive contract).** `wiki_create`
карв-аут (лиз не нужен); `wiki_update` несёт `version` из последнего чтения,
конфликт → 409 → `wiki_get` заново → retry. Долгих лизов/TTL/heartbeat больше
нет — живость владельца из session live-ingest.
**Запись — карв-аут (create) / version-based (update), без лиза (interactive
contract, wiki:2660).** `wiki_create` не требует claim_token; `wiki_update`
принимает ожидаемую `version` (свежую из `wiki_get`) — конфликт → 409 →
re-GET → retry.
**Рефы и id (#1037/#1028).** Публичная поверхность несёт per-type реф полным
именем первым полем: `ref: "wiki:3"` (решение 20, конвенция #1028), `num`
@@ -97,10 +98,11 @@ per-type рефы полными именами (`[[task:N]]`/`[[inbox:N]]`).
3. Создай `sources/<slug>` — одну страницу-резюме на источник (~50150 строк;
ссылку на raw клади в frontmatter `raw_path` + `ingested:`).
4. Для каждой затронутой страницы:
- есть → обнови (`wiki_update(project, id, body, version)`). **Противоречия
помечай явно** блоком `> **Противоречие:** источник A говорит X, источник B — Y`.
- есть → обнови (`wiki_update(project, id, body, version)` — version свежая
из `wiki_get`; 409 → re-GET → retry). **Противоречия помечай явно** блоком
`> **Противоречие:** источник A говорит X, источник B — Y`.
Не затирай молча.
- нет → создай (`wiki_create`).
- нет → создай (`wiki_create`, карв-аут).
5. Обнови `index` (каталог: одна строка на страницу) — опционально; каталог
по умолчанию — `entity_search` (решение 1).
6. Отчитайся пользователю: что создано, что обновлено, какие противоречия.
@@ -113,8 +115,9 @@ per-type рефы полными именами (`[[task:N]]`/`[[inbox:N]]`).
**Один ingest может затронуть 1015 страниц. Это нормально — для того LLM и нужны.**
Порядок записи: все wiki-мутации одним циклом; `wiki_update`со свежей
`version` из чтения (409 → retry). Создание новых страниц — карв-аут.
Порядок записи: все wiki-мутации одним циклом; create — карв-аут, update — с
version (свежей из `wiki_get`); 409 → re-GET → retry. Лиз/claim для записи НЕ
нужен (wiki:2660).
### Query — вопрос по вики
@@ -231,8 +234,9 @@ level/since/component/entity, retention 14d). Ручную `log`-страниц
- **Не-ASCII слаги.** Ломают grep и кросс-платформенность. Транслитерируй.
- **Пропущенные противоречия в lint.** Ценность вики — во вскрытых напряжениях,
а не в ложном консенсусе.
- **Запись version+409 (wiki:2660).** `wiki_create` — карв-аут; `wiki_update` со свежей `version` (конфликт → 409 → retry).
- **Держать лиз на чтение/раздумья.** Лиз — на время записи. Чтение — карв-аут.
- **Запись без version (update).** `wiki_update` без свежей version
last-write-wins, риск затирания чужого; бери version из `wiki_get`, 409 → retry.
- **Держать claim на чтение/раздумья.** Claim — на время работы; чтение — карв-аут.
- **Реляционный вопрос чтением одной страницы.** Это тот самый 0%-recall
провал — зови graph_*.
- **Слаги/пути в graph-тулы.** Только internal id, и только свежие (удалённая
@@ -244,7 +248,7 @@ level/since/component/entity, retention 14d). Ручную `log`-страниц
- Реляционный вопрос → читаешь страницу вместо `graph_*`.
- Правка `sources/` или молчаливая перезапись противоречия.
- Wiki-мутация без лиза (422) или лиз держится на чтение.
- Wiki-мутация update без version (last-write-wins) или create с выдуманным claim.
- Нарративный оп-лог руками.
---