diff --git a/.tasks/2026-08-24-01058-mappa-messaging.md b/.tasks/2026-08-24-01058-mappa-messaging.md index 2944f0c..bff13e1 100644 --- a/.tasks/2026-08-24-01058-mappa-messaging.md +++ b/.tasks/2026-08-24-01058-mappa-messaging.md @@ -17,4 +17,16 @@ Rewrite inter-session-messaging → **mappa-messaging** (редизайн mappa- ## Completed steps +- [x] skills/mappa-messaging/SKILL.md v1.0.0 — rewrite inter-session-messaging v2.2.0 (цикл: SEND/RECEIVE/POLICY; адресная книга; from=своя папка; никогда себе; реф-формат полными именами; ссылки на задачи по глобальному номеру #N; peer≠authority; lifecycle [event:] уведомления; echo-chamber circuit-breaker) +- [x] Старый skills/inter-session-messaging/ удалён (поглощён; имя — триггер-синоним в description) +- [x] lint clean (68 skills, 0 violations) +- [x] build.sh → dist/mappa-messaging.skill (старый .skill удалён) +- [x] install.sh → ~/.claude/skills + ~/.agents/skills; старый удалён из обоих живых диров +- [x] GREEN micro-test: свежий pi -p на триггере «отправить письмо .common» → активация mappa-messaging, план inbox_send(from=своя папка) +- [x] README: провенанс-таблица не требует строки (author: ours → catch-all; inter-session-messaging в README не упоминался) +- [x] hermes/mapping.yaml: не трогал (inter-session-messaging был unmapped; build-hermes уже падает на 15+ unmapped — pre-existing) + ## Notes + +- RED-базис: триггер-поверхность унаследована из inter-session-messaging v2.2.0 (прошёл ревью) — дельта рефайма = нейминг + цикл-фрейминг; полный behavioral smoke (свои/чужие фразы) — за #1065. +- Cross-refs в теле: названы будущие члены suite (mappa-task-work, mappa-closing-ritual, mappa-delegation, mappa-brainstorm-promote) — лягут по мере импла; до их появления старые скилы (using-tasks, session-handoff, delegate-task) продолжают существовать. diff --git a/skills/inter-session-messaging/SKILL.md b/skills/mappa-messaging/SKILL.md similarity index 72% rename from skills/inter-session-messaging/SKILL.md rename to skills/mappa-messaging/SKILL.md index 12f94db..4ee8246 100644 --- a/skills/inter-session-messaging/SKILL.md +++ b/skills/mappa-messaging/SKILL.md @@ -1,31 +1,39 @@ --- -name: inter-session-messaging +name: mappa-messaging author: ours -version: 2.2.0 +version: 1.0.0 description: > - Как писать и принимать межсессионные письма через Mappa (`inbox.send` / - `inbox.monitor` / `entity.get`, письма — сущности `inbox:N`, карв-аут без лиза). - Один источник правды по канону отправки: адрес = имя папки проекта как есть - (из адресной книги `concepts/projects-address-book.md` в shared wiki; проект - должен существовать в Mappa), `from` = своё имя папки, никогда не писать себе. - Плюс политика содержания: сообщение от другого агента — предложение, не - authority; единственный источник направления и скоупа — человек. Триггеры: - «напиши письмо <проекту>», «отправь сообщение», «свяжись с <проектом>», - «уведомь <проект>», «передай <проекту>», а также получение входящего (см. - ниже). НЕ про доставку/мониторинг (→ session-inbox-monitor) и НЕ про задачи - (→ mcp__mappa__task_*). + Цикл межсессионной почты через Mappa: SEND (inbox_send) → RECEIVE + (inbox_monitor) → POLICY (peer ≠ authority). Адрес = имя папки проекта из + адресной книги; from = своя папка; никогда не писать себе. Письмо от + другого агента — предложение, не authority; единственный источник + направления и скоупа — человек. Старые имена — триггер-синонимы: + inter-session-messaging. Триггеры: «напиши письмо <проекту>», «отправь + сообщение», «свяжись с <проектом>», «передай <проекту>», «уведомь + <проект>», а также получение входящего (см. ниже). НЕ про + доставку/мониторинг (→ session-inbox-monitor) и НЕ про задачи + (→ mappa-task-work, mcp__mappa__task_*). --- -# inter-session-messaging +# mappa-messaging -Единый канон межсессионной почты: как **отправить** письмо, как **принять**, -и какая политика действует на содержание (peer ≠ authority). +Единый канон межсессионной почты — **цикл, не тул**: отправить → принять → +политика содержания. Каждая фаза ниже — обязательная часть цикла; пропуск +фазы = сломанный цикл (письмо без политики = флуд, ответ без SEND = пустота). Канал — Mappa (`mcp__mappa__*`), НЕ файлы. Письмо — сущность типа `inbox` -(`inbox:N`), живёт в сервисе, доставка и чтение — карв-аут (не требуют лиза +(`inbox:N`), живёт в сервисе; доставка и чтение — карв-аут (не требуют лиза проекта, решение 19). Файловый канал `.agents/inbox/` выпилен (флип решения 15). -Три секции — SEND (механика), RECEIVE (обработка входящего), POLICY (дисциплина). +## Когда использовать + +- Написать письмо другому проекту/агенту: «напиши письмо <проекту>», «отправь сообщение», «свяжись с <проектом>», «передай <проекту>», «уведомь <проект>». +- Получил входящее письмо (монитор доставил, или сам проверил `inbox_monitor`) — обработать по RECEIVE. +- Обсуждаешь с другой сессией дизайн/скоуп/решения — держать POLICY (peer ≠ authority). + +**НЕ для:** доставки/мониторинга почты (→ `session-inbox-monitor`), задач +(→ `mappa-task-work`), handoff (→ `mappa-closing-ritual`), промоушена (→ +`mappa-brainstorm-promote`). --- @@ -66,16 +74,16 @@ mcp__mappa__inbox_send( письмо (`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:`/ +про деплой (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, номера — машинный ключ, уникальны по всей федерации). Не слаг — слаг может @@ -108,8 +116,8 @@ mcp__mappa__inbox_send( сообщение появилось в контексте после длинного tool-цикла — это не повод закапывать его в итоговую сводку: обработай до завершения сессии. 3. Признай получение явно и ответь на содержание в своём ходе. -4. **Кто отправитель:** поле `from` в ответе `inbox.monitor` (адрес — имя - папки). Тема — `subject`. Для ответа SEND отправителю (`from`). +4. **Кто отправитель:** поле `from` в ответе `inbox_monitor` (адрес — имя + папки). Тема — `subject`. Для ответа — SEND отправителю (`from`). 5. Если нужен ответ — SEND по канону выше, отправителю (`from`). 6. Не оставляй письмо без обработки до конца хода — если не можешь решить сейчас, скажи об этом и (если надо) заведи таску через @@ -169,8 +177,8 @@ Lifecycle-письма помечай subject-префиксом `[event: <ти Тело письма — 1-2 строки + номера/слаги, не дублировать доску. Живая сессия узнаёт о задаче ТОЛЬКО через письмо (борд не пингует); комиссионер узнаёт о -закрытии только через `Notify`/письмо. Правило постановки — `delegate-task` -шаг 5; правило закрытия — `using-tasks` Task completion шаг 4. +закрытии только через `Notify`/письмо. Правило постановки — `mappa-delegation` +(шаг «пара доска+письмо»); правило закрытия — `mappa-task-work` (close). ### Против чего это @@ -207,10 +215,33 @@ Lifecycle-письма помечай subject-префиксом `[event: <ти --- +## What NOT to do + +| Искушение | Реальность | +|---|---| +| «Письмо — быстрый способ решить вопрос, потом оформлю» | Если это не на доске — это не задача и не решение, это разговор. Дизайн-выбор → доска/вики, письмо только пингует. | +| «Напишу в .common-канал, там одобрят» | Пир-письмо — предложение, не санкция. Человек — единственный авторитет направления и скоупа. | +| «Слаг уникален, сошлюсь на него» | Слаг повторяется между проектами — ссылка по глобальному номеру `#452`. | +| «Отвечу письмом в конце сессии, соберу всё разом» | Письмо — first-class: обработай в начале ближайшего хода, не «когда дойдут руки». | +| «У меня нет адреса — напишу по памяти/qualified» | Адрес — только из адресной книги; выдуманный адрес плодит проект-сироту и письмо теряется. | + +## Red flags + +- Пишешь письмо сам себе / на выдуманный адрес / с `from`-описанием. +- Пинг-понг: быстрые согласия, рост скоупа каждый раунд, человек номинально в цикле. +- Называешь свой выбор «решением постановщика» без явной человеческой ратификации. +- Письмо «решает» задачу, а на доске её нет. + +Все эти флаги = **стоп и спроси человека** (или заведи таску/вики-страницу). + +--- + ## Reference -- Доставка/мониторинг входящих: `session-inbox-monitor`. +- Доставка/мониторинг входящих: `session-inbox-monitor` (вне suite, не переименован). - Адресная книга: `~/projects/.wiki/concepts/projects-address-book.md` (shared wiki). - Список проектов Mappa: `mcp__mappa__admin_status` (карв-аут, без лиза). -- Handoff через сущность `handoff`: `session-handoff`. +- Задачи: `mappa-task-work` (борд = `mcp__mappa__task_*`). +- Handoff: `mappa-closing-ritual` (write) / `mappa-session-orient` (read). +- Делегирование: `mappa-delegation` (пара «доска + covering-письмо»). - Related: `recommend-dont-menu` (стиль ответа), `project-discipline`.