Commit Graph

115 Commits

Author SHA1 Message Date
Дмитрий 4dee49e4a1 feat(registry): токенизация needs/produces — группа tools/MCP, ЭТАП 2b ЗАВЕРШЁН (роутер-реестр)
Phase 2b группа C (финал): 51 атомарный инструмент (MCP-серверы + линтеры/
тулинг) переведены на токены словаря. Словарь +98, всего 265 токенов, v0.6.0.

ИТОГ ЭТАПА 2b: ВСЕ 153 контракта needs/produces на токенах словаря.
- замок словаря проходит на полном наборе (0 unknown) — готовность к 2d;
- граф ожил: A8-цепочка, superpowers, knowledge-work, кросс-плагинные мосты
  (write-spec->writing-plans, frontend-design->design-handoff).

Тест: финальный замок-тест всего реестра (153 контракта + рёбра графа).
Регрессия 4373 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 10:27:39 +03:00
Дмитрий 88fc55b4a5 feat(registry): токенизация needs/produces — группа skills B (этап 2b, роутер-реестр)
Phase 2b группа B: 39 контрактов (plugin-dev, claude-md-management, adr-kit,
ui-ux-pro-max, frontend-design + одиночные self-authored/standalone скилы)
переведены на токены словаря. Словарь +61, всего 167 токенов, v0.5.0.

Кросс-мост графа: frontend-design produces ui-design -> design-handoff (group A).
skill-creator/writing-skills сходятся на authored-skill.

Тест: замок-тест группы B + кросс-мост ui-design. Регрессия 4371 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 10:23:08 +03:00
Дмитрий ef92b5e39e feat(registry): токенизация needs/produces — группа knowledge-work (этап 2b, роутер-реестр)
Phase 2b группа A: 43 контракта (product-management/design/marketing/
operations/finance/brand-voice) переведены с прозы на токены словаря.
Словарь +67, всего 106 токенов, v0.4.0.

Достроены мостовые цепочки графа:
- user-research -> research-synthesis / synthesize-research (raw-research)
- content-creation -> draft-content -> brand-review (content-framework/marketing-draft)
- journal-entry-prep -> close-management (close-entries)
- write-spec -> (feature-spec, кормит writing-plans)
- design-handoff <- ui-design (от frontend-design, цепочка в группе tools)

Тест: новый замок-тест группы (43 контракта проходят словарь + рёбра).
Регрессия 4369 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 10:10:32 +03:00
Дмитрий acd9bdc479 feat(registry): токенизация needs/produces — батч superpowers (этап 2b, роутер-реестр)
Phase 2b батч 1: 14 superpowers-контрактов переведены с прозы на токены словаря.
Словарь +13 (атомарные выходы + данности), всего 39 токенов, v0.3.0.

Граф ожил для рабочих цепочек (рёбра producer->consumer):
- brainstorming -> writing-plans -> executing-plans / subagent-driven
- test-driven-development -> requesting-code-review -> receiving-code-review
- finishing-a-development-branch (needs completed-change)

Тесты: новый замок-тест батча (14 контрактов проходят словарь + рёбра графа);
m3c-coverage-invariants просьба обновлена на токен; capability-vocabulary
счётчик -> >= (словарь живой). Регрессия 4369 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 10:03:22 +03:00
Дмитрий 9ad00cf96c feat(registry): фундамент-словарь capability-токенов (этап 2a, роутер-реестр)
Phase 2a эпика «роутер-реестр» (спека v2 §3, OPEN-1): расширен
docs/registry/capability-vocabulary.json 10 -> 26 токенов.

- A8-цепочка (10) сохранена.
- 9 токенов-мостов рабочих цепочек (создают рёбра графа producer<->consumer):
  feature-spec, implementation-plan, completed-change, code-review-feedback,
  raw-research, ui-design, marketing-draft, content-framework, close-entries.
- 7 токенов-данностей задачи (-> initialInputs в 2c): feature-intent,
  feature-or-bugfix, bug-or-failure, ui-task, user-understanding-need,
  marketing-content-task, close-source-data.
- Тест формы на реальном файле (validateVocabulary ok + счётчик + ключевые токены).

Атомарные produce-токены ~144 контрактов добавляются в 2b (словарь живой).
Структурная разведка подтверждена графом проекта (graphify, правило 14):
coverage-machine не подключён к живому enforce-judge-gate (работа 2c),
два реестра (контрактный community 92 / узловой community 20).

Регрессия: 4367 passed, exit 0 (5 чужих node:test исключены).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 08:57:36 +03:00
Дмитрий 08ab516786 docs(registry): отметка квинтет-sync UPM DONE в splitting-inventory (роутер-реестр)
ui-ux-pro-max row + решение C: нормативный квинтет-sync вокруг NB-заметки
PSR (9e17fad) выполнен — PSR v3.26 / Tooling v2.27 / CLAUDE.md v2.48 /
CHANGELOG; Pravila без изменений (forward-compat). Коммит sync f1cdd7e.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 08:02:01 +03:00
Дмитрий f1cdd7ef69 docs(quintet): синхрон PSR v3.26 — гранулярная адресация UPM (роутер-реестр)
Формальный квинтет-sync вокруг NB-заметки PSR (commit 9e17fad):
ui-ux-pro-max развёрнут в реестре навыков на 7 гранулярных карточек
ui-ux-pro-max:<навык>; роль не изменена (материал/не решатель; R6.0
Vue+Vuetify; финальный код Frontend Design #30; R10.1/R11.5/R14.3/R14.5).
Содержательных изменений R0-R16: 0.

- PSR v3.25 -> v3.26 (шапка + История версий)
- Tooling Прил.Н v2.26 -> v2.27 (cross-ref PSR v3.25->v3.26; счётчики без изменений)
- CLAUDE.md v2.47 -> v2.48 (§0 cross-refs + §9) + CHANGELOG зеркало
- Pravila v1.45 без изменений (живые cross-refs на PSR forward-compat «+»)

Через normative-sync агента (§15 governance) + ручная верификация/правка
контроллером. Счётчики инструментов не изменились.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 07:51:46 +03:00
Дмитрий 01653c860c docs: §14 CLAUDE.md — актуализация описания графа после сплита ADR-020
§5 п.14: прежний текст утверждал «6305 узлов / покрывает app/» (полный
до-сплитовый граф, живший в junction spike-worktree). После ADR-020 (app/
вырезан) graphify-out/graph.json = частичный срез ~39 узлов, только docs/,
без app/; graphify-out/ теперь обычная папка, не junction. Старые цифры
сохранены как историческая пометка «было до сплита»; для полного актуального
графа — /graphify --update.

Правка-факт внутри CLAUDE.md (через claude-md-management); Pravila/Tooling
её не дублируют → синхрон квинтета не требуется, версия §9 не бампалась.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 07:23:07 +03:00
Дмитрий 9e17fad7bc docs(psr): гранулярная адресация ui-ux-pro-max, роль сохранена (роутер-реестр)
Эпик роутер-реестр. После разворачивания комка ui-ux-pro-max в 7 карточек
(commit предыдущий) — заметка в PSR §«плагины вне stack'а»: UPM теперь
адресуется как ui-ux-pro-max:<навык>, НО роль не изменилась (материал, не
решатель; стек Vue+Vuetify R6.0; код — Frontend Design; R10.1/R11.5/R14.3/R14.5
применяются к 7 карточкам как раньше к одной).

Минимальная документарная правка под авторизацию владельца «делай нормативку».
ОТЛОЖЕНО (во избежание §15 коллизии с параллельной сессией в Pravila):
формальный sync квинтета — версия PSR + cross-refs в CLAUDE.md/Pravila/Tooling.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 04:38:32 +03:00
Дмитрий 524bcfd05f feat: разворачивание комка ui-ux-pro-max — 7 навыков (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Решение владельца 19.06 (путь 2):
зонтик ui-ux-pro-max развёрнут в 7 карточек-навыков + 7 под-узлов #31a..#31g.
Роль сохранена в каждой карточке: материал/решение по UI → стек Vue+Vuetify
(R6.0), финальный код — Frontend Design #30.

- 7 карточек: banner-design, brand, design, design-system, slides, ui-styling,
  ui-ux-pro-max (master)
- nodes.yaml: узел #31 → #31a..#31g; мастер #31g держит конфликт-треугольник
  (frontend-design ↔ 21st-magic); обратные ссылки у #30/#32 перенаправлены на
  ui-ux-pro-max:ui-ux-pro-max → симметрия конфликтов сохранена (m3e зелёный)
- зонтик убран; registry-load.test: 153 узла / 145 active
- hookify оставлен одной карточкой (решение владельца)

Правка PSR (роль UPM: материал → решатель-с-ограничением) — отдельным шагом.

Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 04:35:14 +03:00
Дмитрий 0541369e49 docs(quintet): синхрон под Pravila v1.45 (§18 дисциплины A/D1/D2)
Синхрон нормативного квинтета после внесения §18 в Pravila (v1.45, commit b365ebe). Через агент
normative-sync, проверено по диффу. §18 — поведенческое правило, новых инструментов нет →
footer-счётчики НЕ менялись (Tooling §0: 87 формализованных / 107 total — без движения).

- PSR_v1 v3.24 → v3.25 (шапка + §«История версий»).
- Tooling Прил.Н v2.25 → v2.26 (шапка + §13 changelog).
- CLAUDE.md v2.46 → v2.47 (§0 cross-refs Pravila v1.45/PSR v3.25/Tooling v2.26 + §9 запись).

NB: CLAUDE.md правлен прямым Edit агента normative-sync (§15 governance), не через
claude-md-management (§5 п.10) — минимальные правки (3 cross-ref + 1 changelog); ретро-блессинг
через claude-md-management при необходимости.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 04:24:44 +03:00
Дмитрий 396ec5f851 feat: разворачивание комка brand-voice — 3 навыка (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик brand-voice развёрнут
в 3 карточки-навыка + 3 под-узла #76a..#76c.

- 3 карточки: brand-voice-enforcement, discover-brand, guideline-generation
- nodes.yaml: узел #76 → #76a..#76c; триггеры (тон/голос бренда → enforcement,
  brand guidelines → guideline-generation); ADR-015 MKT6 на enforcement
- зонтик убран; registry-load.test: 147 узлов / 139 active

Этап 1 (разворачивание): 10/12 комков готовы. Остались развилки владельцу:
hookify (slug hookify:hookify кривой) и ui-ux-pro-max (требует правки PSR).

Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:42:15 +03:00
Дмитрий 4a25302ac9 feat: разворачивание комка finance-plugin — 8 навыков (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик finance-plugin развёрнут
в 8 карточек-навыков + 8 под-узлов #61a..#61h.

- 8 карточек: audit-support, close-management, financial-statements,
  journal-entry, journal-entry-prep, reconciliation, sox-testing, variance-analysis
- journal-entry (финализация) и journal-entry-prep (подготовка к close) оставлены
  обе с разными визитками (решение по дублю)
- nodes.yaml: узел #61 → #61a..#61h; триггеры распределены; ADR-012 граница
  на sox-testing (SOX n/a РФ)
- зонтик убран; registry-load.test: 145 узлов / 137 active

Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:39:50 +03:00
Дмитрий 65224b268c feat: разворачивание комка operations — 9 навыков (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик operations развёрнут в
9 под-узлов #51a..#51i. process-doc уже был вынесен карточкой
(operations-process-doc.contract.json) — ей заведён узел #51d.

- 8 новых карточек: capacity-plan, change-request, compliance-tracking,
  process-optimization, risk-assessment, runbook, status-report, vendor-review
- process-doc — узел #51d на существующую карточку operations:process-doc
- nodes.yaml: узел #51 → #51a..#51i; триггеры распределены; ссылка L4 → operations:runbook
- зонтик убран; registry-load.test: 138 узлов / 130 active

Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:37:05 +03:00
Дмитрий 08c951a4b8 feat: разворачивание комка marketing-plugin — 8 навыков (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик marketing-plugin развёрнут
в 8 карточек-навыков + 8 под-узлов #74a..#74h.

- 8 карточек: brand-review, campaign-plan, competitive-brief, content-creation,
  draft-content, email-sequence, performance-report, seo-audit
- nodes.yaml: узел #74 → #74a..#74h; триггеры распределены (классификация
  marketing + маркетинговый контент → content-creation как resolver C1);
  ADR-015 boundary на content-creation; ссылка L16 обновлена
- marketing-plugin:competitive-brief отличён от product-management:competitive-brief
- зонтик убран; registry-load.test: 130 узлов / 122 active

Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:33:54 +03:00
Дмитрий b365ebe567 docs(pravila): +§18 дисциплины работы агента (A/D1/D2) — v1.45
Внесён единый раздел §18 «Дисциплины работы агента под управляющим слоем»: 18.1 A (препятствие
на ходу — перепланируй, не гадай), 18.2 D1 (деплой — читать вывод каждого шага, стоп на аномалии,
опасное — per-command согласие), 18.3 D2 (сохранение под ревью — раздельные согласия деплоя/коммита,
опасное вне общего согласия). Нормативная формулировка действующего поведения; код не меняется.
Версия свода v1.44 -> v1.45; история догнана записью v1.44 (Perplexity Pack). Через церемонию стены:
спека (v3) + план (v4-push) опечатаны наставником+судьёй; §6-правка авторизована escape владельца.
Синхрон квинтета (PSR/Tooling/CLAUDE.md) — отдельным шагом.

GUIDE (bags/router-mentor-wall-GUIDE.md): +урок про escape-окошко (строку давать в чат для
копирования, вставлять в поле ответа окошка) +урок про коммит/пуш шагами плана (обоснование
docs-only git под claude-md-management).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 23:23:05 +03:00
Дмитрий f2365caf4b fix: escape-окошки мимо anti-cosmetic-стража (escape-flow unblock)
Anti-cosmetic-детектор (>2 простых AskUser за сессию → hard-block, требует brainstorming) глушил
ЛЕГИТИМНЫЙ поток escape-окошек: владелец даёт разрешение FLOOR-ESCAPE через AskUser, и после >2
таких окошек стена их блокировала — нормативку под стеной нельзя было довести (баг найден живым
прогоном 18.06). Фикс по аналогии с git-approval exemption (Calibration 5): isEscapeAuthQuestion
(вопрос несёт метку FLOOR-ESCAPE) освобождается в decide() — не косметика, не считаем, не блокируем.
Не абьюзится: метка сигналит авторизацию владельца, а не подмену идеации. Свод 4383 зелёный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 23:20:01 +03:00
Дмитрий bf3d557cce feat: разворачивание комка design-plugin — 7 навыков (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик design-plugin развёрнут
в 7 карточек-навыков + 7 под-узлов #46a..#46g. Контракт раньше описывал
лишь 3 из 7 реальных навыков — теперь покрыты все.

- 7 карточек: accessibility-review, design-critique, design-handoff,
  design-system, research-synthesis, user-research, ux-copy
- nodes.yaml: узел #46 → #46a..#46g; триггеры (дизайн-критика→critique,
  ux-копирайт→ux-copy, research synthesis→research-synthesis)
- зонтик убран; registry-load.test: 123 узла / 115 active

Регрессия (без 5 pre-existing node:test файлов): 4365 passed, exit 0.
(askuser-cosmetic-escape-exempt флакает под параллелизмом — изолированно зелёный, не связан.)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:18:20 +03:00
Дмитрий 0258b9d2a7 feat: разворачивание комка product-management — 8 навыков (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик product-management развёрнут
в 8 карточек-навыков + 8 под-узлов #42a..#42h.

- 8 карточек: write-spec, roadmap-update, metrics-review, product-brainstorming,
  sprint-planning, stakeholder-update, synthesize-research, competitive-brief
- nodes.yaml: узел #42 → #42a..#42h; триггеры (planning/prd→write-spec,
  роадмап→roadmap-update, метрики→metrics-review); ссылка L9 обновлена
- product-management:competitive-brief отличён от marketing:competitive-brief
  (та самая коллизия имён, ради которой имя файла несёт плагин)
- зонтик убран; registry-load.test: 117 узлов / 109 active

Регрессия (без 5 pre-existing node:test файлов): 4361 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:13:44 +03:00
Дмитрий f01f5b8bbc feat: разворачивание комка adr-kit — adr + judge (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик adr-kit развёрнут в
2 содержательные карточки (служебные init/setup/upgrade/lint/migrate/
install-hooks в реестр не входят — решение владельца 18.06).

- 2 карточки: adr-kit__adr (ведение ADR) + adr-kit__judge (сверка vs Accepted ADR)
- nodes.yaml: узел #36 → #36a/#36b; триггеры (adr→#36a, enforcement→#36b);
  ссылки L4/L5 обновлены на adr-kit:adr
- зонтик adr-kit убран (карточка + узел)
- registry-load.test: 110 узлов / 102 active
- m3b-node-graph: резолв известного узла #36 → #36a

Регрессия (без 5 pre-existing node:test файлов): 4361 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:09:38 +03:00
Дмитрий ded5372f4e feat: разворачивание комка plugin-dev — 7 навыков (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик plugin-dev развёрнут в
7 карточек-навыков + 7 под-узлов #57a..#57g.

- 7 карточек plugin-dev__<навык>.contract.json (agent/command/hook/mcp/
  plugin-structure/plugin-settings/skill-development)
- nodes.yaml: узел #57 → #57a..#57g; keyword-триггеры на plugin-structure;
  ссылка L11 обновлена на plugin-dev:plugin-structure
- зонтик plugin-dev убран (карточка + узел)
- registry-load.test: 109 узлов / 101 active

Регрессия (без 5 pre-existing node:test файлов): 4361 passed, exit 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 23:05:06 +03:00
Дмитрий 5a7c5c255c feat: разворачивание комка superpowers — 14 навыков (роутер-реестр)
Эпик роутер-реестр, спека v2 §2, этап 1. Зонтик superpowers (14 meta-skills
одной карточкой) развёрнут в 14 отдельных карточек-навыков + 14 под-узлов
ради точного подбора роутером.

- 14 карточек superpowers__<навык>.contract.json (skill = superpowers:навык)
- nodes.yaml: узел #19 развёрнут в #19a..#19n; классификации-триггеры
  распределены: feature в brainstorming, planning в writing-plans, tdd в TDD, debug в debugging
- writing-plans приведён к конвенции (был own без префикса/узла → external + узел)
- зонтик superpowers убран (карточка + узел)
- тесты: registry-load 103 узла/95 active; m3a/m3c образцы own/external
- splitting-inventory: прогресс + доп-каскады для крупных комков

Регрессия свода: 4361 passed, 0 failed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:53:20 +03:00
Дмитрий e98ba1e527 feat: разворачивание комка claude-md-management — пилот реестра роутера
Эпик роутер-реестр, спека v2 §2. Развёрнут самый маленький комок-зонтик
в 2 отдельные карточки-навыка ради точного подбора роутером. Пилот выверил
конвенцию для остальных 11 комков.

- 2 карточки: claude-md-management__claude-md-improver + __revise-claude-md;
  поле skill = плагин:навык, kind external, zero-hash source
- nodes.yaml: узел #33 развёрнут в дочерние #33a/#33b; ссылка L12 обновлена
- schema.json: паттерн id расширен на дочерний суффикс #NNa
- registry-load.test: счётчики узлов 89 в 90, active 81 в 82
- splitting-inventory.md: инвентаризация 12 комков + выверенная конвенция
- тест-сторож split-pilot-claude-md + план пилота

Регрессия свода: 4361 passed, 0 failed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 22:35:59 +03:00
Дмитрий b978738be6 fix: NO-GO наставника стирает прежнее «да» (стейл-mentor-GO)
Судья мог судить/печатать план, который наставник завернул: mentor-GO привязан к plan_hash =
planId(steps) (только шаги), пишется ТОЛЬКО на GO и НЕ стирался на NO-GO. При идентичных steps
(менялся лишь текст плана) старое «да» переживало смену содержания — судья находил устаревшее
одобрение (mentor-go-store::mentorGoValidFor по plan_hash) и проходил mentorApproved-гейт несмотря
на свежий NO-GO наставника. Вскрыто живым прогоном (план опечатался при mentor NO-GO + judge GO).
Фикс: clearMentorGo стирает запись; enforce-mentor-on-plan-write на реальном NO-GO (blocked) её
зовёт (degraded не трогаем — verdict неизвестен). Инвариант: «да» наставника живёт ⟺ последний
проход одобрил. Свод 4376 зелёный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 22:00:24 +03:00
Дмитрий d669a6bcb5 fix: возражения судьи доходят до показа вердикта (visibility-gap)
Контроллер видел голое «NO-GO [judge]» без претензий: показ вердикта берёт поле reason, а
pushVerdict писал reason = verdict.reason || recommendation — у судьи recommendation пуст (суть в
objections[]), и возражения терялись. Хотя они есть в системе (карточка арбитража / память кругов
через formatJudgeObjection) — просто не в показ. Новая judgeSurfaceReason(verdict): reason/
recommendation, иначе formatJudgeObjection(verdict.verdict) — дословные возражения. runJudgeTurn
использует её для pushVerdict + writeStage. Поймано вживую: судья дал delivery=internal[heavy] +
позиция-без-якорей[light], а контроллеру пришло пусто. Свод 4374 зелёный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 21:29:04 +03:00
Дмитрий 7cf91ecf12 feat: роутер-реестр — словарь capability-токенов, прототип A8, замок словаря 2026-06-18 20:33:42 +03:00
Дмитрий f62b5f25ab docs: wall-GUIDE — рецепт escape инвертирован под фикс подделки согласия
Раздел «Аварийный выход» переписан под Поза 1 (consent-forgery A+B1-B5+C): старый рецепт
«контроллер кладёт FLOOR-ESCAPE в КНОПКУ» снят (anti-button отвергает) → ЛЁГКОЕ согласие
владелец набирает САМ свободным вводом (контроллер не диктует — anti-dictation), ТЯЖЁЛОЕ
(owner-seal/ops-runbook/commit/plan-done/gate3-arb/разрушит. bash) — ТОЛЬКО из терминала
владельца (node tools/owner-consent.mjs <sessionId> <action>, подпись fail-closed). Добавлена
заметка в «Обновления 18.06» с коммитами эпика. Оперативная шпаргалка (не нормативный квинтет).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 20:05:49 +03:00
Дмитрий 0d31e62248 feat: анти-диктовка свободного floor_escape (consent forgery C)
Свободный floor_escape (лёгкий escape в чате) НЕ доверяется, если контроллер в своём тексте
текущего хода инструктировал владельца вписать метку. processEvent читает текст контроллера
из транскрипта хода (readTranscript + lastAssistantText, переиспользован), один раз на событие
зовёт detectOtherSocialEng (раньше был мёртвой проводкой — не вызывался нигде); flagged →
floor_escape не пишется. Паттерны detectOtherSocialEng усилены императивной диктовкой метки
FLOOR-ESCAPE (глагол рядом; простое упоминание концепта не флагуется). fail-open observability —
сбой чтения транскрипта → как раньше. Применяется к floor_escape (git-approval закрыт #A).
Завершает кодовую часть эпика (A + B1-B5 + C). Спека §C. Свод 4350 зелёный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 19:54:25 +03:00
Дмитрий 11969ac3ea feat: пол требует терминальный грант для разрушительного (consent forgery B5)
Per-command escape несущего пола (rm -rf / git push --force / migrate:fresh / db:wipe / запись в
runtime/секрет) открывается ТОЛЬКО терминальным грантом владельца (origin+подпись, fail-closed),
не chat floor_escape — Поза 1. Пол по определению блокирует лишь необратимое → весь его escape
тяжёлый: enforce-floor::main грузит loadTerminalGrants вместо loadFloorEscapes. decide()/floorDecide
агностичны источнику — логика и тесты пола не тронуты. Стена (supreme-gate 396) не правится: пол
(matcher '*') связывает первым. Завершает Часть B (терминал-канал). Свод 4346 зелёный, пол 12/12.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 19:26:24 +03:00
Дмитрий 5bcf229e4f feat: plan-done и арбитраж gate3 — только терминальный грант (consent forgery B4)
Снятие печати плана (plan-done) и арбитраж gate3 (gate3-arb:accept/continue) — тело-агностичные
согласия, обходящие/снимающие стену — теперь открываются ТОЛЬКО терминальным грантом владельца
(Поза 1, HOLE-4). supreme-gate: новый параметр terminalGrants в decideMode/runGate, PLAN_FINISH_ACTION
проверяется против него (лёгкий escape остаётся на chat-грантах); main грузит loadTerminalGrants.
gate3-loop: арбитраж-гранты грузятся через loadTerminalGrants (loader-swap; resolveOwnerArbitration
агностична). Ядро стены: 138/138, gate3 44/44, полный свод 4346. Спека §B/§DEC.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 19:03:10 +03:00
Дмитрий 29287d73c9 feat: деплой и коммит — только терминальный грант владельца (consent forgery B3)
ops-runbook:<hash> (деплой) и commit:<hash> (коммит агентом) открываются ТОЛЬКО
терминальным грантом владельца (origin:owner-terminal + валидная подпись, ключ обязателен —
fail-closed #KEY), не chat floor_escape — Поза 1. loadPlanScopedGrants переписан как
loadTerminalGrants + фильтр по префиксу (origin/подпись/нижняя граница в одном месте, DRY).
Мосты blessed-ops/commit-grant не тронуты (читают через те же обёртки). Тесты загрузчиков
переписаны под новый контракт. Спека §B/§KEY/§CRIT6.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 18:39:48 +03:00
Дмитрий f87090702c feat: owner-seal только из терминального гранта (consent forgery B2)
Печать «одобрено владельцем» (owner-seal) теперь открывается ТОЛЬКО терминальным грантом
владельца (loadTerminalGrants), не chat floor_escape — Поза 1 для самого тяжёлого согласия.
Вычисление вынесено в тестируемую ownerSealOpenForEvent (источник грантов инъектируется);
sealTurnProd зовёт её с loadTerminalGrants. sealOnWiredGo (берёт ownerSealOpen параметром) и
его тесты не тронуты. Убран ставший неиспользуемым верхний импорт loadFloorEscapes
(escape-валве судьи берёт его динамически). Спека §B/§CRIT7.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 18:17:46 +03:00
Дмитрий dec0ed502a feat: терминальный грант владельца — примитив (consent forgery B1)
Несомненный канал согласия для тяжёлого (Поза 1): floor_escape с origin:owner-terminal,
подписанный ключом keychain. Скрипт владельца tools/owner-consent.mjs строит+подписывает+
пишет грант (запускает владелец; контроллер не может — нет ключа + floor режет запись runtime).
Читатель loadTerminalGrants принимает ТОЛЬКО origin-помеченные валидно-подписанные гранты,
ключ обязателен (fail-closed, #KEY). Нулевой радиус: живые потребители НЕ тронуты —
подключение (owner-seal/ops-runbook/commit/plan-done/gate3/bash) отдельными заходами B2+.
Спека: specs/2026-06-18-consent-forgery-fix-design.md §B/§KEY.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 18:02:28 +03:00
Дмитрий cdc32b1a1d fix: anti-button — согласие только из свободного ввода владельца (consent forgery A)
Ответ AskUserQuestion, дословно совпавший с ярлыком контроллерской кнопки, больше
не порождает доверенную запись (floor_escape И approve_git_operation). Закрывает
наблюдаемую подделку owner-seal и HOLE-1 (git-approval тем же классом). Фундамент —
guard в единственном писателе processEvent + чистый предикат answerMatchesOption.
Спека: specs/2026-06-18-consent-forgery-fix-design.md §A.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 17:43:58 +03:00
Дмитрий bd03df7f2b docs: wall-GUIDE — операт. заметки допила (B+C ч.2/D1/D2/§3.4)
bags/router-mentor-wall-GUIDE.md: новый раздел «Обновления 18.06.2026» —
осмотр-сеанс op:"session", деплой агентом (ops-runbook:<hash>), коммит агентом
(commit:<hash>, гейты качества остаются), §3.4 десинк помечен ПОЧИНЕН. Дисциплины
A/D1 (читать вывод→стоп на аномалии; под планом препятствие→перепланируй, не гадай).
Устаревший обход §3.4 в «Пуш кода» помечен снятым. Формальный свод (Pravila/CLAUDE.md)
— отдельно, через claude-md-management со включённой стеной (отмечено в GUIDE).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:59:29 +03:00
Дмитрий a5830a8a1c docs: handoff — §3.4 десинк закрыт (cdcaf61), остался только норматив-хвост
Обновлён docs/superpowers/2026-06-18-wall-improvements-handoff.md: §3.4 помечен
СДЕЛАНО (ленивое снятие печати), свод 4320. Единственный оставшийся хвост —
норматив-заметки A/D1/D2 в Pravila/GUIDE (когда стена вернётся).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:53:26 +03:00
Дмитрий cdcaf610a0 fix: §3.4 десинк — печать снимается ЛЕНИВО (criterion-gate видит план на пуше)
Баг: на ПОСЛЕДНЕМ шаге плана supreme-gate (PreToolUse) снимал печать синхронно
ДО того, как со-хук criterion-gate (PreToolUse, в settings.json ПОЗЖЕ) успевал
проверить пуш → criterion видел «нет плана» и ложно блокировал код-пуш.

Фикс (правка только enforce-supreme-gate.mjs runGate):
- на planComplete печать БОЛЬШЕ НЕ снимается синхронно (указатель за конец +
  метка петли E-S1 остаются) → план жив для co-хуков в этом же tool-call;
- печать снимается ЛЕНИВО на СЛЕДУЮЩЕМ действии (ветка в начале runGate: если
  committed-указатель за последним листом и steps — непустой массив → removeFrozenPlan
  + разговорный режим). Гард steps на массив: минимальные/legacy-планы без steps
  не считаются «исчерпанными».

Строго лучше прежнего: чинит ложный блок код-пуша последним шагом (зелёные критерии),
случай реального провала критерия не ухудшен. Спека §3.4.

+2 теста (ленивое снятие + репро «печать не снята синхронно»), свод 4320 passed / 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:49:33 +03:00
Дмитрий 6bc0f6d040 docs: handoff допила эталона — B+C ч.2/D1/D2 DONE + решения по хвостам
Обновлён docs/superpowers/2026-06-18-wall-improvements-handoff.md:
- «Сделано» дополнено B+C ч.2 (bc1d2a3), D1 (bbc053e), D2 (b47a71c); свод 4319.
- «Осталось» переписано: только §3.4 десинк (решение владельца — отдельной
  сессией; механизм + безопасный путь зафиксированы) + норматив-заметки.
- §3.3 docs/ops без criterion/verify — ЗАКРЫТО (владелец 2026-06-18): строго .md,
  расширение на не-.md ops-артефакты не делаем (конфликт с CLAUDE.md §13).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 14:32:26 +03:00
Дмитрий b47a71c66b feat: D2 — канал коммита под ревью (агент коммитит под commit:<hash>)
Опечатанный ревью-план (GO наставника+судьи, judge_mode=live-block) + одно
согласие владельца `FLOOR-ESCAPE: commit:<plan-hash>` → агент делает git
add/commit/push без терминала владельца. Гейт ПРИСУТСТВИЯ (router-gate
git-approval) отходит; гейты КАЧЕСТВА (criterion-gate/verify-gate) НЕ тронуты —
код-коммит всё равно требует по-критерийный GREEN и свежую расписку. Согласия
деплоя (ops-runbook:) и коммита (commit:) — раздельные кнопки.

- escape-grant: обобщён plan-scoped загрузчик (loadPlanScopedGrants/
  planScopedGrantOpen, окно = существование плана); D1 ops-runbook стал тонкой
  обёрткой; добавлены commit: COMMIT_GRANT_PREFIX/loadCommitGrants/commitGrantOpen.
- commit-grant (новый мост план↔router-gate): commitGrantOpenForSession —
  открыт ли commit:<hash> на валидный sealed live-block план сессии.
- shell-content-rules classifyGitCommand: conditional-git пускается при
  ctx.commitGrantOpen; GIT_HARD (force-push/--no-verify/-c) блокирует ПЕРВЫМ
  (качество/безопасность не ослаблены).
- enforce-router-gate: main кладёт ctx.commitGrantOpen (gated через мост).

План: docs/superpowers/plans/2026-06-18-agent-commit-channel-plan.md
Спека: docs/superpowers/specs/2026-06-18-agent-commit-channel-design.md §3.1-3.2.

ОТЛОЖЕНО (требует решения владельца, в хвосте плана):
- §3.3 docs/ops без criterion/verify: .md уже пропускается; расширение на
  не-.md ops-артефакты конфликтует с CLAUDE.md §13 v2.40 — нужен явный список.
- §3.4 десинк push-последним-шагом: рискованная правка снятия печати стены.

+22 теста, свод 4319 passed / 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 13:58:05 +03:00
Дмитрий bbc053e0a6 feat: D1 — благословлённый ops-runbook (деплой выполняет агент под ревью)
Деплой, помеченный **Kind:** deploy и опечатанный (наставник+судья GO,
judge_mode=live-block), агент выполняет по белому списку шагов под ОДНИМ
согласием владельца `FLOOR-ESCAPE: ops-runbook:<plan-hash>` — без аварийного
выхода на каждую команду. «Ядерный» набор (rm -rf/force-push/migrate:fresh/
db:wipe) остаётся на per-command escape.

- plan-lock: freezePlan принимает kind (в подписанную базу + хеш, как delivery);
  не-'normal' добавляет поле, обычные планы байт-идентичны старым печатям.
- plan-skills: parsePlanKind (**Kind:** deploy|normal, default normal).
- seal-orchestration: sealablePlan/sealPlan прокидывают kind в печать.
- escape-grant: loadOpsRunbookGrants (окно = существование плана, БЕЗ 5-мин
  фильтра) + opsRunbookGrantOpen (точный матч на plan_id).
- floor-decide: floorDecide получает инъектируемый blessedOps(cmd); content-block
  команда из набора пропускается, ЯДЕРНЫЙ набор (bashIsFloor) исключён из послабления.
- blessed-ops (новый модуль-мост): buildBlessedOps + loadBlessedOpsForSession —
  знает план+пол, чтобы СОХРАНИТЬ Δ9 (enforce-floor не зависит от модуля печати плана).
  Предикат пускает команду только дословно из Bash-листов опечатанного deploy-плана.
- enforce-floor: gated — blessed-ops грузит план/гранты ТОЛЬКО при открытом
  ops-runbook-гранте; без согласия владельца пол плана не касается (Δ9 цел).

План: docs/superpowers/plans/2026-06-18-blessed-ops-runbook-plan.md
Спека: docs/superpowers/specs/2026-06-18-blessed-ops-runbook-design.md §3.1-3.7.
+33 теста, свод 4299 passed / 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 13:19:22 +03:00
Дмитрий bc1d2a370a feat: B+C часть 2 — сеанс осмотра op:"session" под стеной
Новый тип шага плана op:"session" {goal, tools, produces} для интерактивного
осмотра (логин/формы/чужой сайт) под планом: внутри сеанса смотреть/кликать по
живым ref свободно, указатель не двигается; сеанс закрывает запись последнего
produces (матч-якорь). Снят дедлок op:"Skill"-как-шаг.

- plan-lock: sessionProduces, actionMatchesStep матчит последний produces,
  validatePlanTree валидирует session (produces>=1) и запрещает op:"Skill",
  sanitizeSessionTools (предохранитель §3.3: дроп Write/Edit/Bash/floor + warn).
- enforce-supreme-gate decide: ветка указатель-на-сеансе — tools сеанса и
  промежуточные produces allow без сдвига, пол применяется (defense-in-depth).
- plan-steps-parse: распознаёт op:"session" (goal/tools/produces, без object/ref),
  отвергает op:"Skill" с явным сообщением.
- mentor-verdict: наставник понимает op:"session" — не заворачивает как непонятный шаг.
- сеанс+tools/produces в хеше и подписи плана (подмена ломает печать).

Спека: docs/superpowers/specs/2026-06-18-wall-interactive-session-design.md §3.2-3.3.
+37 тестов, свод 4266 passed / 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 11:54:42 +03:00
Дмитрий e9ba6fb9a2 feat: B+C part1 - смотрящие инструменты свободны под/без плана (isQueryOnly)
Новый предикат isQueryOnly (ToolSearch/WebFetch/WebSearch/read-only браузер:
navigate/snapshot/wait/screenshot) проведён во все ветки стены: смотрящие и
спрашивающие инструменты проходят и в разговорном режиме (осмотр чужого сайта
без плана), и под опечатанным планом, не двигая указатель шагов. Действующие
инструменты (клик/ввод) сюда не входят - они пойдут через сеанс осмотра
(часть 2 B+C). Свод зелёный: 4229 passed, 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 10:52:47 +03:00
Дмитрий e91aa021f0 feat: A - чтение под опечатанным планом свободно (ДР-1 снят в impl)
Под планом авторское чтение больше не блок: свой вывод, лог упавшего шага,
новый файл доступны. Чтение не двигает очередь шагов; impl-чтения логируются
с пометкой impl:true для ретро и не считаются во фронт-лоад порог. Секреты
держит отдельный read-path-deny. Свод зелёный: 4221 passed, 2 skipped.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 10:40:23 +03:00
Дмитрий abf2060328 feat standby: штатный режим - флаг, управляющий хук, сброс, страж в 12 хуков
Сессионный флаг standby-mode + управляющий UserPromptSubmit-хук рукопожатия + SessionStart-сброс. Страж if standbyActive в 12 блокирующих хуках; рельсы floor/snapshot/verify-gate не тронуты.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 10:07:04 +03:00
Дмитрий 2b9e72ab46 docs: mark open-items roadmap + produce-verify-receipt bag resolved
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 08:10:39 +03:00
Дмитрий 2380e82002 feat: gate-3 owner acceptance live wiring Phase 2d finale
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 05:28:49 +03:00
Дмитрий c50ac7c915 restore: run-test-json конфиг от корня репо через resolveVitestConfig plus тест buildVitestJsonArgs plus GUIDE Уроки 9 формат плана
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 20:20:23 +03:00
Дмитрий 07f24382e8 docs: .gitattributes принудительный LF plus GUIDE Уроки 8 диагностика CRLF-саги (vitest@4 давится на CRLF .mjs)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 20:15:21 +03:00
Дмитрий 7ae53216bf docs: черновики deliderra-cleanup и app-path-split-legacy-fix спеки и планы plus bag wall-read-block
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 20:10:14 +03:00
Дмитрий f6d0544277 Merge branch 'track-d-2c-delivery' 2026-06-17 19:11:26 +03:00