docs(skills): конвенция реф-формата (#1028) в messaging/knowledge — полные имена task:/wiki:/inbox:, слаг-first, wiki:NNNN единый; using-wiki: схема AGENTS (canon) + CLAUDE (pointer) (#1032); [skip-tdd: visual]

This commit is contained in:
2026-08-24 22:27:32 +03:00
parent 1e3fa36d4c
commit 0c97ed973a
6 changed files with 42 additions and 25 deletions

Binary file not shown.

Binary file not shown.

BIN
dist/using-wiki.skill vendored

Binary file not shown.

View File

@@ -1,10 +1,10 @@
--- ---
name: inter-session-messaging name: inter-session-messaging
author: ours author: ours
version: 2.1.0 version: 2.2.0
description: > description: >
Как писать и принимать межсессионные письма через Mappa (`inbox.send` / Как писать и принимать межсессионные письма через Mappa (`inbox.send` /
`inbox.monitor` / `entity.get`, письма — сущности `i:N`, карв-аут без лиза). `inbox.monitor` / `entity.get`, письма — сущности `inbox:N`, карв-аут без лиза).
Один источник правды по канону отправки: адрес = имя папки проекта как есть Один источник правды по канону отправки: адрес = имя папки проекта как есть
(из адресной книги `concepts/projects-address-book.md` в shared wiki; проект (из адресной книги `concepts/projects-address-book.md` в shared wiki; проект
должен существовать в Mappa), `from` = своё имя папки, никогда не писать себе. должен существовать в Mappa), `from` = своё имя папки, никогда не писать себе.
@@ -22,7 +22,7 @@ description: >
и какая политика действует на содержание (peer ≠ authority). и какая политика действует на содержание (peer ≠ authority).
Канал — Mappa (`mcp__mappa__*`), НЕ файлы. Письмо — сущность типа `inbox` Канал — Mappa (`mcp__mappa__*`), НЕ файлы. Письмо — сущность типа `inbox`
(`i:N`), живёт в сервисе, доставка и чтение — карв-аут (не требуют лиза (`inbox:N`), живёт в сервисе, доставка и чтение — карв-аут (не требуют лиза
проекта, решение 19). Файловый канал `.agents/inbox/` выпилен (флип решения 15). проекта, решение 19). Файловый канал `.agents/inbox/` выпилен (флип решения 15).
Три секции — SEND (механика), RECEIVE (обработка входящего), POLICY (дисциплина). Три секции — SEND (механика), RECEIVE (обработка входящего), POLICY (дисциплина).
@@ -63,9 +63,18 @@ mcp__mappa__inbox_send(
выдуманным `from` нельзя ответить. выдуманным `from` нельзя ответить.
- Ответ на письмо: `inbox_send(project=<from полученного>, from=<своя папка>)`. - Ответ на письмо: `inbox_send(project=<from полученного>, from=<своя папка>)`.
В `subject` — префикс `Re: `, в теле первая строка — ссылка на исходное В `subject` — префикс `Re: `, в теле первая строка — ссылка на исходное
письмо (`i:<номер>` или его subject). Поля `in_reply_to`/`event` в Mappa нет — письмо (`inbox:<номер>` или его subject). Поля `in_reply_to`/`event` в Mappa нет —
вместо них subject-префиксы `Re:` и `[event: closed]` при lifecycle-письмах. вместо них subject-префиксы `Re:` и `[event: closed]` при lifecycle-письмах.
### Реф-формат (#1028): слаг/имя первым, полное имя рефа как якорь
Конвенция на прозу и ссылки: **имя/слаг первым, реф как якорь** — «письмо
`i:2046`» → «письмо про деплой (inbox:2046)», «таска `session-live-ingest-impl`
(task:1022)». Рефы писать **полными именами**: `task:`/`wiki:`/`inbox:`/`session:`/
`handoff:`/`storm:`/`repo:`/`commit:`/`project:` (короткие `t:`/`w:`/`i:`/…
парсер принимает, но писать полные). Вики-реф единый `wiki:NNNN` для всех
бакетов (подтип — в слаге: `wiki:2604` = concepts/session-live-ingest).
### Ссылки на задачи — по номеру (формат v2) ### Ссылки на задачи — по номеру (формат v2)
Ссылка на задачу в письме — **по глобальному номеру**: `#452` (формат v2, Ссылка на задачу в письме — **по глобальному номеру**: `#452` (формат v2,

View File

@@ -1,7 +1,7 @@
--- ---
name: using-wiki-graph name: using-wiki-graph
author: ours author: ours
version: 1.0.0 version: 1.1.0
description: > description: >
Use when a question is RELATIONAL about a wiki or any entities in Mappa — Use when a question is RELATIONAL about a wiki or any entities in Mappa —
«что связывает X и Y», «как связаны», «путь между X и Y», «what connects X «что связывает X и Y», «как связаны», «путь между X и Y», «what connects X
@@ -12,7 +12,8 @@ description: >
[[refs]] в body → рёбра). Guarded failure-mode: на реляционные вопросы агент [[refs]] в body → рёбра). Guarded failure-mode: на реляционные вопросы агент
читает одну страницу и ОСТАНАВЛИВАЕТСЯ, никогда не ходит по многохоповым читает одну страницу и ОСТАНАВЛИВАЕТСЯ, никогда не ходит по многохоповым
цепочкам сам. Адресация — internal id (из wiki_get/entity_search); ответы цепочкам сам. Адресация — internal id (из wiki_get/entity_search); ответы
несут per-type refs (t:N/i:N/w:N, решение 20/#1037). Read-only, без лиза несут per-type refs полными именами (task:N/inbox:N/wiki:N, решение 20/#1037,
конвенция #1028). Read-only, без лиза
(карв-аут, решение 19). Skip для одно-страничных контентных вопросов. (карв-аут, решение 19). Skip для одно-страничных контентных вопросов.
--- ---
@@ -51,8 +52,8 @@ wiki-страницы или любые сущности mappa (таски, пи
1. `mcp__mappa__wiki_get(project, slug)` (или `entity_search(q, type='wiki')`) — 1. `mcp__mappa__wiki_get(project, slug)` (или `entity_search(q, type='wiki')`) —
из ответа бери `id` (последнее поле; публичные `ref`/`num` — для показа). из ответа бери `id` (последнее поле; публичные `ref`/`num` — для показа).
2. Передавай `id` в graph-тулы. 2. Передавай `id` в graph-тулы.
3. Ответы graph несут `ref` (t:N/i:N/w:N) на узлах и рёбрах (`from_ref`/`to_ref`) 3. Ответы graph несут `ref` (task:N/inbox:N/wiki:N — полные имена, #1028) на
— реферируй по ним в ответе, не по id. узлах и рёбрах (`from_ref`/`to_ref`) — реферируй по ним в ответе, не по id.
## Steps ## Steps

View File

@@ -1,7 +1,7 @@
--- ---
name: using-wiki name: using-wiki
author: ours author: ours
version: 2.1.0 version: 2.2.0
description: > description: >
Policy skill for working with the project wiki in Mappa (Karpathy LLM Wiki Policy skill for working with the project wiki in Mappa (Karpathy LLM Wiki
pattern, channel = mappa-сущности, решения 14/15 спеки mappa). Use when the pattern, channel = mappa-сущности, решения 14/15 спеки mappa). Use when the
@@ -9,7 +9,8 @@ description: >
says «use project wiki», «обнови вики», «проверь вики», «запроси вики», says «use project wiki», «обнови вики», «проверь вики», «запроси вики»,
«заингесть», «query the wiki». Also use when modifying any wiki page — the «заингесть», «query the wiki». Also use when modifying any wiki page — the
workflow and formats below are mandatory, and project-specific conventions live workflow and formats below are mandatory, and project-specific conventions live
in the `CLAUDE` wiki-сущности проекта. Wiki = сущности `type=wiki` в сервисе in the `AGENTS` wiki-сущности проекта (legacy — `CLAUDE`-указатель). Wiki =
сущности `type=wiki` в сервисе
(чтение — карв-аут лиза; запись — под лизом проекта, решение 19). Файлового (чтение — карв-аут лиза; запись — под лизом проекта, решение 19). Файлового
`.wiki/` больше нет; `setup-wiki` умер (нечего настраивать). `.wiki/` больше нет; `setup-wiki` умер (нечего настраивать).
--- ---
@@ -26,8 +27,8 @@ description: >
## Prerequisites ## Prerequisites
Wiki проекта = сущности в сервисе Mappa (HTTP-ядро, MCP-адаптер `mcp__mappa__*`). Wiki проекта = сущности в сервисе Mappa (HTTP-ядро, MCP-адаптер `mcp__mappa__*`).
Слаг страницы = путь от корня вики без расширения (`index`, `log`, `CLAUDE`, Слаг страницы = путь от корня вики без расширения (`index`, `log`, `AGENTS`,
`concepts/foo`, `entities/bar`, `packages/baz`, `sources/doc`, `overview`). `CLAUDE`, `concepts/foo`, `entities/bar`, `packages/baz`, `sources/doc`, `overview`).
Body = frontmatter + markdown как есть (content-модель сохраняется, решение 2). Body = frontmatter + markdown как есть (content-модель сохраняется, решение 2).
Проектная вики (scope=project) читается/пишется с параметром проекта; Проектная вики (scope=project) читается/пишется с параметром проекта;
@@ -36,7 +37,7 @@ Body = frontmatter + markdown как есть (content-модель сохран
Файловый `.wiki/` в репозиториях — легаси: источник истины — сервис. Файловый `.wiki/` в репозиториях — легаси: источник истины — сервис.
Если вики проекта пуста (нет сущностей) — **ничего настраивать не надо** Если вики проекта пуста (нет сущностей) — **ничего настраивать не надо**
(setup-wiki умер): первый ingest сам создаёт `CLAUDE` (+ опционально `index`); (setup-wiki умер): первый ingest сам создаёт `AGENTS` (+ `CLAUDE`-указатель);
оп-лог вести не нужно — сервис пишет его в таблицу `logs` автоматически оп-лог вести не нужно — сервис пишет его в таблицу `logs` автоматически
(решение 12, ратификация 2026-08-24). (решение 12, ратификация 2026-08-24).
@@ -56,11 +57,13 @@ Body = frontmatter + markdown как есть (content-модель сохран
закрыть вручную нечем (кроме `admin_release_lease` для залипших) — пиши, закрыть вручную нечем (кроме `admin_release_lease` для залипших) — пиши,
затем отпусти (не держи лиз на время чтения/размышлений). затем отпусти (не держи лиз на время чтения/размышлений).
**Рефы и id (#1037).** Публичная поверхность несёт per-type реф первым полем: **Рефы и id (#1037/#1028).** Публичная поверхность несёт per-type реф первым полем:
`ref: "w:3"` (тип+номер, решение 20), `num` следом, глобальный `id` — internal `ref: "wiki:3"` (полное имя типа + номер, решение 20, конвенция #1028), `num`
(последним полем). Для `wiki.update` нужен internal `id` — бери его из ответа следом, глобальный `id` — internal (последним полем). Для `wiki.update` нужен
`wiki_get`/`entity_search`. В тексте страниц ссылайся викилинками по слагу internal `id` — бери его из ответа `wiki_get`/`entity_search`. В тексте страниц
(`[[concepts/foo]]`, решение 4) или per-type рефами (`[[i:N]]`/`[[t:N]]`). ссылайся викилинками по слагу (`[[concepts/foo]]`, решение 4) или per-type
рефами полными именами (`[[inbox:N]]`/`[[task:N]]`). В прозе — слаг/имя первым,
реф как якорь: «спека `concepts/session-live-ingest` (wiki:2604)».
## Три слоя (не смешивать) ## Три слоя (не смешивать)
@@ -68,18 +71,21 @@ Body = frontmatter + markdown как есть (content-модель сохран
редактируй (единственное исключение — блок-цитата `> Status` по явной редактируй (единственное исключение — блок-цитата `> Status` по явной
просьбе пользователя). просьбе пользователя).
2. **Вики** — все остальные страницы (entities/concepts/packages/…). 2. **Вики** — все остальные страницы (entities/concepts/packages/…).
3. **Схема** — сущность `CLAUDE` (slug `CLAUDE`). Конвенции проекта. Читай её 3. **Схема** — сущности `AGENTS` (канон, slug `AGENTS`) + `CLAUDE` (legacy-
первой; она перекрывает этот скил при конфликте. указатель «Canon is AGENTS»). Конвенции проекта. Читай `AGENTS` первой; она
перекрывает этот скил при конфликте.
## Первый шаг любой операции ## Первый шаг любой операции
1. `mcp__mappa__wiki_get(project, 'CLAUDE')` — если есть, читай (схема). 1. `mcp__mappa__wiki_get(project, 'AGENTS')` — если есть, читай (канон; если
нет — `wiki_get(project, 'CLAUDE')`, легаси-указатель).
2. `mcp__mappa__wiki_get(project, 'index')` — каталог, найди нужные страницы. 2. `mcp__mappa__wiki_get(project, 'index')` — каталог, найди нужные страницы.
3. Только потом действуй. 3. Только потом действуй.
Если `CLAUDE` нет — вики либо новая, либо неухоженная: не импровизируй Если `AGENTS`/`CLAUDE` нет — вики либо новая, либо неухоженная: не
структуру, создай `CLAUDE` при первом ingest (см. ниже). Каталог — через импровизируй структуру, создай `AGENTS` (+ `CLAUDE`-указатель) при первом
`entity_search` (решение 1); `index`-страница опциональна (для ориентации). ingest (см. ниже). Каталог — через `entity_search` (решение 1); `index`-страница
опциональна (для ориентации).
## Три операции ## Три операции
@@ -97,6 +103,7 @@ Body = frontmatter + markdown как есть (content-модель сохран
5. Обнови `index` (каталог: одна строка на страницу) — опционально; каталог 5. Обнови `index` (каталог: одна строка на страницу) — опционально; каталог
по умолчанию — `entity_search` (решение 1). по умолчанию — `entity_search` (решение 1).
6. Отчитайся пользователю: что создано, что обновлено, какие противоречия. 6. Отчитайся пользователю: что создано, что обновлено, какие противоречия.
Первый ingest новой вики: создай `AGENTS` (канон) + `CLAUDE` (указатель).
**Оп-лог — автоматический.** Каждая write-операция уже пишется сервисом в **Оп-лог — автоматический.** Каждая write-операция уже пишется сервисом в
таблицу `logs` (component=тип сущности, message=slug+operation; смотреть — таблицу `logs` (component=тип сущности, message=slug+operation; смотреть —
@@ -180,7 +187,7 @@ level/since/component/entity, retention 14d). Ручную `log`-страниц
| Ingest одного документа | `sources/<slug>` (новая) + 315 entities/concepts/packages (+ опционально `index`) | | Ingest одного документа | `sources/<slug>` (новая) + 315 entities/concepts/packages (+ опционально `index`) |
| Query | (чтение) + возможно новая страница | | Query | (чтение) + возможно новая страница |
| Lint | (чтение) | | Lint | (чтение) |
| Новая вики проекта | первый ingest создаёт `CLAUDE` (+ опционально `index`); оп-лог — автоматический | | Новая вики проекта | первый ingest создаёт `AGENTS` + `CLAUDE`-указатель; оп-лог — автоматический |
## Частые ошибки ## Частые ошибки