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
author: ours
version: 2.1.0
version: 2.2.0
description: >
Как писать и принимать межсессионные письма через Mappa (`inbox.send` /
`inbox.monitor` / `entity.get`, письма — сущности `i:N`, карв-аут без лиза).
`inbox.monitor` / `entity.get`, письма — сущности `inbox:N`, карв-аут без лиза).
Один источник правды по канону отправки: адрес = имя папки проекта как есть
(из адресной книги `concepts/projects-address-book.md` в shared wiki; проект
должен существовать в Mappa), `from` = своё имя папки, никогда не писать себе.
@@ -22,7 +22,7 @@ description: >
и какая политика действует на содержание (peer ≠ authority).
Канал — Mappa (`mcp__mappa__*`), НЕ файлы. Письмо — сущность типа `inbox`
(`i:N`), живёт в сервисе, доставка и чтение — карв-аут (не требуют лиза
(`inbox:N`), живёт в сервисе, доставка и чтение — карв-аут (не требуют лиза
проекта, решение 19). Файловый канал `.agents/inbox/` выпилен (флип решения 15).
Три секции — SEND (механика), RECEIVE (обработка входящего), POLICY (дисциплина).
@@ -63,9 +63,18 @@ mcp__mappa__inbox_send(
выдуманным `from` нельзя ответить.
- Ответ на письмо: `inbox_send(project=<from полученного>, from=<своя папка>)`.
В `subject` — префикс `Re: `, в теле первая строка — ссылка на исходное
письмо (`i:<номер>` или его subject). Поля `in_reply_to`/`event` в Mappa нет —
письмо (`inbox:<номер>` или его subject). Поля `in_reply_to`/`event` в Mappa нет —
вместо них 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)
Ссылка на задачу в письме — **по глобальному номеру**: `#452` (формат v2,

View File

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

View File

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