Commit Graph

224 Commits

Author SHA1 Message Date
Дмитрий 0f781f3707 docs(m7): build-handoff #2 — состояние после фолжа разбора плана (HEAD 41c6b78b)
Готовый промт для новой сессии: подтвердить HEAD 41c6b78b, прочитать
handoff#2 + спеку §13 addendum + план Фазу 1 (Task 1.0.5-1.6), спросить
владельца, НИЧЕГО не делать самому. Заменяет handoff#1 (stale HEAD 9d6e708c).
Карта правок P-1..P-8 (план↔спека). Код НЕ строили. commit-not-push.
2026-06-08 08:24:17 +03:00
Дмитрий 41c6b78b1e docs(m7): fold plan-critique findings P-1..P-8 into plan + spec
Independent critical review of the implementation plan (audit-context ->
sharp-edges -> variant-analysis -> systematic-debugging, grounded against
real M1-M6 code). 8 findings, all code-grounded, no ghosts:

- P-1 (CRIT): content-floor "full port" was a SUBSET of BASH_HARD_BLACKLIST
  (lost #21 env-prefix / #22 --watch / #34 echo-inj / C16 2>file /
  cp-mv-chmod-chown-chgrp; cp X ~/.claude/runtime = escape-grant forge)
  -> single source matchBashHardBlacklist relocated to shell-content-rules
  (Task 1.0.5) + §12 content-floor invariant proves completeness.
- P-2 (CRIT): canonicalAction has no PowerShell branch -> every PS command
  collapses to 'write:' -> one escape unlocks ALL PS commands; Task 1.5 test
  was spuriously green (both sides equally broken) -> Task 1.2b + specificity.
- P-3 (HIGH): PS floor branch returned block:false skipping runtime/secret
  guard (command field not parsed) -> Set-Content ~/.claude/runtime forge
  -> psProtectedWrite guard (Task 1.4).
- P-4 (MED): content-block whole-string only -> bashIsContentBlock whole+per
  -segment parity with bashIsFloor (Task 1.3).
- P-5 (MED): suspicious blind to content-danger -> suspicious |= contentBlock.
- P-6 (MED): §12 CI-invariants ownerless -> assigned per phase (phase rule).
- P-7 (LOW): Phase 0 fail-CLOSE "subset" unlisted -> explicit hook list.
- P-8 (LOW): plan = detailed Phase 1 + scoped skeleton -> honest framing.

Plan: Tasks 1.0.5/1.1/1.2b/1.3/1.4/1.5/1.6 + phase-transition rule + self-review.
Spec: §5 PowerShell row, §12 M5 line, §13 addendum.
No code built. commit-not-push.
2026-06-08 08:20:40 +03:00
Дмитрий 84f19011a1 docs(m7): build-handoff в новую сессию — состояние после критразбора + плана
Готовый промт для подхвата: HEAD 9d6e708c, дизайн закрыт + критразбор/поправки
(661083b3) + план (9d6e708c). Next = сборка Фазы 1 (content-floor) инлайн TDD
по команде владельца. Квирки (vitest/git/junction/escape/грязь дерева) + жёсткие
правила (commit-not-push, субагенты запрещены, ничего не делать самому).
2026-06-08 07:56:45 +03:00
Дмитрий 9d6e708c5c docs(m7): план реализации — мастер (фазы 0-8) + Фаза 1 (content-floor) детально
writing-plans по поправленной спеке М7. Scope-check: 9 подсистем →
dependency-ordered фазы 0-8. Фаза 1 (content-floor V1/V1-PS — критический
корень переезда, §10 запрещает увольнять router-gate до неё) в полной
bite-sized TDD-детализации (Task 1.0-1.6 с кодом); фазы 0,2-8 scoped,
разворачиваются в bite-sized при подходе. Self-review: spec coverage полон,
type-consistency проверена. Исполнение — инлайн (субагенты запрещены владельцем).
2026-06-08 07:53:03 +03:00
Дмитрий 3d4293c211 docs(m7): дизайн Машины 7 — растворение зоопарка + непробиваемая дисциплина + полный переезд М1–М6
Design-doc (12 секций + само-аудит) + DONE-handoff дизайн-фазы.
Цепочка: audit-context-building + sharp-edges + variant-analysis + brainstorming.
Карта обходов дисциплины (6 классов + корень enforce-hook-helpers:7) → поглощение
в М1–М6 по 6 правилам (fail-CLOSE / PreToolUse / журнал-факт / escape-only / манифест / громко).
3 куска М7: зоопарк+дисциплина / normative-канал (карта свободно, закон — escape) / доска «кто на посту».
Реализация НЕ начата — ждёт ревью владельца → writing-plans. commit-not-push.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-08 07:06:00 +03:00
Дмитрий 015daac52e docs(m6): DONE-handoff промт-блок — sync HEAD ba071aee + планка 2843+2 после пост-аудит фиксов
Промт для новой сессии теперь указывает актуальный HEAD и регрессионную планку; детали 4 фиксов — в разделе «Пост-аудит правки» + памяти.
2026-06-07 19:49:28 +03:00
Дмитрий ba071aeed4 docs(m6): DONE-handoff — пост-аудит правки FIX-1..4 + DOC-1 (escape не сквозной через зоопарк)
Зафиксированы 4 аудит-фикса и caveat DOC-1: escape чтут только стена М2/пол М5/egress; router-gate / runtime-write-deny / судья М4 escape не знают → реальные разрушительные не пройдут до М7 (растворение зоопарка). Ожидаемо по §7.
2026-06-07 19:43:18 +03:00
Дмитрий 64d6135e74 docs(router-mentor): M6 DONE-handoff — промт для новой сессии (пуш/активация/М7) 2026-06-07 19:14:43 +03:00
Дмитрий 8a44009b3d docs(router-mentor): M6 build-handoff — промт для сессии реализации
Готовый промт для новой сессии: дерево/ветка, состояние (дизайн+план+аудит закрыты,
HEAD f304a101, регрессия 2789+2 skip, не запушено), что строим (escape сквозной
override + авто-снимок), порядок пакетов 1-9+4b, HARD-RULE скилов (executing-plans
инлайн, audit-context перед патчами, TDD, review, verification, regression),
жёсткие правила (commit-not-push), квирки (vitest/git-PowerShell/гейт/git restore не
в whitelist/tdd-gate/память-два-охранника/судья-нейтрально/coverage-verify/baseline 2789),
аудит уже сделан (G-1 α / G-2 / G-5 / G-6 / G-8 — не повторять), старт с Пакета 1.

Только handoff-артефакт, кода нет. Без push (commit-not-push).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 18:33:14 +03:00
Дмитрий f304a10141 docs(router-mentor): M6 аудит плана — G-1 α (escape сквозь стену М2) + G-2/G-5/G-6/G-8
Аудит плана реализации (writing-plans self-review + audit-context-building сквозь
М1–М5 + sharp-edges). Главная находка G-1: верховная стена М2 (enforce-supreme-gate
Δ7 + разговорный режим) блокирует разрушительное/мутаторы независимо от пола → floor_escape
(только пол) был no-op сквозь стену. Вариант α (решение владельца): escape — сквозной
override, чтимый стеной (allow без продвижения указателя), полом, egress.

Спек: §3 +enforce-supreme-gate, §4 блок G-1 (сквозной escape) + G-5/G-6/G-8, §9 +патч,
§11 аудит-таблица. План: новый Пакет 4b (стена М2, TDD), Пакет 4 +G-2 (переписать блок
двери) +G-5 (точный токен) +G-6 (запрет override), активация +supreme-gate, self-review.

Проверено ОК: экспорты совпадают, М1/М3/М4 не ломаются, общий канал askuser-decisions
фильтр по type. Только дизайн-артефакты, кода нет. Без push (commit-not-push).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 18:18:59 +03:00
Дмитрий 8d0ef38831 docs(router-mentor): M6 implementation plan — escape + auto-snapshot (TDD пакеты 1-9)
План реализации Машины 6 по спеку 2026-06-07-router-mentor-machine-6-design.md.
9 пакетов, bite-sized TDD (RED→GREEN→commit), весь код в шагах, конвенции
(vitest абс-команда / commit через PowerShell / TDD-гейт / audit-context перед патчами).

Пакеты: 1 escape-grant ядро · 2 toFloorEscapeRecord · 3 писатель floor_escape ·
4 пол escape во всех ветках · 5 floor-escape-consume (one-shot, PostToolUse) ·
6 egress-escape · 7 snapshot-decide · 8 enforce-snapshot · 9 интеграция+регрессия.

NB: Пакет 5 вводит модуль floor-escape-consume, которого нет в инвентаре §9 спека —
операционализация одноразовости «погашение после исполнения»; отмечено в self-review,
к согласованию на ревью плана. Планка регрессии ≥ 2789 passed + 2 skip.

Только план-артефакт, кода нет. Без push (commit-not-push).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 17:57:01 +03:00
Дмитрий 08cb5a90c7 docs(m6): handoff в новую сессию — М5 закрыта+переаудичена, М6 = новая фаза дизайна
Готовый промт: дерево/состояние (HEAD e3a1c84e, аудит М5 F-1/F-3/F-6 + F-2 память + F-4=C,
регрессия 2789+2 skip, не запушено) + шов М5<->М6 (spec §5 экспорт) + scope М6 (spec §6 YAGNI:
авто-снимок / портативный normative-канал / escape / растворение старых хуков; доска = М7) +
HARD-RULE скилов (brainstorming->writing-plans, инлайн, без суб-агентов) + квирки (vitest/git/
гейт/tdd/запись-в-память-два-охранника/судья-нейтральные-слова/baseline 2789) + хвосты М5.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 16:48:45 +03:00
Дмитрий aa7b949495 docs(m5): handoff session-final — Машина 5 закрыта, финализация + продолжение эпика
Готовый промт для новой сессии: дерево + состояние (Пакеты 5-8 закрыты, 14 коммитов
478a9fd8..a0a73d8d, регрессия 2788+2skip, не запушено) + что осталось (finishing-branch под
«пуш» / память direct:memory-sync / активация владельцем) + HARD-RULE алгоритма скилов (запрет
нарушения, суб-агенты запрещены) + квирки (vitest/git/гейт/tdd-хуки/baseline 2788).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 15:35:17 +03:00
Дмитрий 29339ba542 docs(m5): handoff в новую сессию после Пакетов 1-2
Готовый промт-эстафета для продолжения Машины 5 с Пакета 3: дерево (worktree+ветка),
источники (spec §3/§10 + план R1 + этот handoff), план использования скилов с
HARD-запретом на нарушение алгоритма (audit-context только 4/5/7; net-new 3/6/8 skip;
TDD RED-first; focus-линза; systematic-debugging на непредвиденный красный; инлайн без
суб-агентов; commit-not-push), квирки (vitest absolute / git PowerShell / tdd-real-test-
verifier не принимает it.each + coverage-ссылка в Edit), состояние (Пакет 1 af3e11b6 +
Пакет 2 2cb3da88, baseline 2649+2), вскрытые аудитом расхождения план↔код (writer
unsigned / F5 мнимая / force-push door мут / router-gate default-deny).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 11:49:37 +03:00
Дмитрий c6f672d784 docs(m5): handoff-промт для переезда в новую сессию
Готовый промт: дерево (worktree+ветка), источники (spec §3/§10 +
план R1), план использования скилов с hard-запретом на нарушение
алгоритма (audit-context-building только 1/2/4/5/7; TDD RED-first;
focus-линза; systematic-debugging на непредвиденный красный; инлайн
без суб-агентов; commit-not-push), квирки окружения, старт с Пакета 1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 10:57:32 +03:00
Дмитрий 56db2b9bb0 docs(m5): план R1 — 7 правок факт-аудита по реальному коду
F1 (+format в suspicious — терял rewire detectHighRisk),
F2 (длинно-флаговый rm --recursive --force теперь floor),
F3 (Step 1.7 — только строка router-engine:21),
F4 (удалить router-engine:12 DESTRUCTIVE_RE — иначе Δ9-б падёт),
F5 (floor читает одобрение read-only, не consume — гонка с
existing enforce-branch-switch),
§2-точность (floor инспектирует и Write file_path),
скил-правки (audit-context-building не на net-new 3/6;
+systematic-debugging; линзы focus+по риску).

Все находки проверены по коду M1-M5 (3 разных DESTRUCTIVE_RE,
6 файлов хуков Пакета 7 подтверждены). Без призраков.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 10:53:24 +03:00
Дмитрий cfd4637fc4 docs(m5): план реализации — 8 пакетов TDD + цепочка скилов
Master-план М5: фундамент (Пакет 1 classifyDestructive двухуровневый)
расписан бит-сайз с реальным кодом; пакеты 2-8 — задачи+критерии+
линзы (бит-сайз just-in-time, RED-first — без пред-написания призраков).
Покрывает §3 блоки + §10 амендмент (Δ1-9, N1, N5). Self-review поймал
GAP по Δ3 reconcile → добавлен Пакет 8. Инлайн-исполнение (без суб-
агентов), commit-not-push, node-whitelist как отдельный risk-пакет 4.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 10:39:35 +03:00
Дмитрий d9a0cd01f9 docs(m4): Machine 4 judge — implementation record (4-A..4-G) 2026-06-06 04:36:38 +03:00
Дмитрий 7ee388a061 fix(m3): закрытие находок аудита — гард R4 + терминатор + footguns; F2/F3 как честный остаток 2026-06-05 17:32:45 +03:00
Дмитрий 11024823c4 feat(m3): граф зависимостей решений (#2) + дисциплина доменного навыка (#3) 2026-06-05 17:10:21 +03:00
Дмитрий ed720d11e4 feat(m3): разговорная фаза 2026-06-05 — вход роутера + контроль + выходная верность + честные контракты 2026-06-05 14:52:45 +03:00
Дмитрий c717ac8241 docs(router-mentor): conversational-phase router design (M3) + K7 pre-mortem contract (M4) + P16-e revision
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 10:39:24 +03:00
Дмитрий 1ef68c1dbe docs: реестр — R-19/R-28/R-31 закрыты, исправлено 13, кодовых задач в открытых нет 2026-06-05 06:25:05 +03:00
Дмитрий 1267bfe267 docs: реестр — R-27 закрыт (указатель ↔ план), исправлено 10, открытых багов кода нет 2026-06-05 04:22:11 +03:00
Дмитрий ee22c64d9e docs: единый реестр замечаний по реинжинирингу мозга v2 (R-01..R-31) 2026-06-05 04:18:07 +03:00
Дмитрий 87a2eb96f9 docs(m2): аудит Машины 2 — куча (T1-T9 хвосты + F1-F3 замечания + фикс-сет) 2026-06-05 04:03:03 +03:00
Дмитрий 8b76b107c4 docs(m4): K6 анти-откат high-water-mark — несрываемый контракт судьи (B3 переадресован M2→M4) 2026-06-05 03:59:19 +03:00
Дмитрий 9cb56e4eb5 docs(m1): аудит Машины 1 — хвосты (A1-A4) + замечания (B1-B4) + фикс-сет 2026-06-05 03:40:13 +03:00
Дмитрий 72dbd67d11 docs(m3): итоговая сводка отложенного по Машине 3 (9 пунктов, ждут Машину 4/шаг владельца) 2026-06-05 03:29:44 +03:00
Дмитрий 1ecbab5eb7 docs(m3): аудит-сверка 2026-06-05 + фикс-сет 1-5 (G1-G6 расклад, заземление, look-ahead, нюх/интервьюер) 2026-06-05 03:17:20 +03:00
Дмитрий 35e05d2ac9 docs(m3): build summary + follow-up list in questions log (Машина 3 complete) 2026-06-04 19:52:30 +03:00
Дмитрий 63fb924493 test(m3-e): learning hard-rule invariants + plan — Машина 3 собрана
Машина 3-E «Очередь одобрений + ручка разведки» собрана (TDD): router-learning-queue.mjs
(propose-only + owner batch approval + render/signal/persist; hard-rule «без да — никак»)
+ router-exploration.mjs (ручка %разведки=0 default, проба=вопрос владельцу, риск-гард).
19 новых тестов. Финальная регрессия tools-only 2212 GREEN.

МАШИНА 3 (Роутер-наставник) собрана целиком: 3-A контракты / 3-B граф узлов /
3-C машина охвата / 3-D движок роутера / 3-E очередь обучения. Доставка в живую
инфру (STATUS/brain-retro), K4-поправка, live-wiring, перенос волн — follow-up
после Машины 4 (журнал вопросов).
2026-06-04 19:51:45 +03:00
Дмитрий da4831a3b6 test(m3-d): router-engine invariants on real graph + plan + questions log
Машина 3-D «Движок роутера» собрана (TDD): router-engine.mjs (detectHighRisk 6.1
детерминированный / validateLevelSkip 6.2 / cheaperOf / validateTrace 5.1 /
groundTrace ОВ-Д2 / buildRouterPrompt+parse+runRouter, llmCall мокается как
router-classifier) + step-pointer.mjs (дерево-указатель волн D6/OQ1, стендово).
35 новых тестов, регрессия tools-only 2193 GREEN. K4-поправка к стене + live-wiring
+ перенос волн в живой main — ОТЛОЖЕНО до Машины 4 (журнал вопросов).
2026-06-04 19:46:09 +03:00
Дмитрий 404a938256 test(m3-c): coverage-machine invariants on 3-A contracts + plan
Машина 3-C «Машина охвата A/B/C/D» собрана (TDD): coverage-machine.mjs —
A граф зависимостей (buildDependencyGraph/topoOrder/findHoles/decompositionGroups),
B реестр нужды↔решения (coverageRegistry: дыры+сироты), C requestsChecklist,
D ограничения как нужды (effectiveNeeds), хребет readinessChecklist (4 галочки + §).
Независимый верификатор охвата (рычаг E §6.3). 19 новых тестов, регрессия 2158 GREEN.
2026-06-04 19:26:21 +03:00
Дмитрий 62030e23a7 test(m3-b): node-graph invariants on real registry + plan
Машина 3-B «Граф узлов из реестра» собрана (TDD): node-graph.mjs поверх
loadRegistry — buildNodeGraph/resolveNode (ОВ-Д2 заземление) + twinsOf
(subcategory) / hintLinksOf (chains) / conflictsOf (явные) + checkGraphFreshness
(3.6). 20 новых тестов, регрессия tools-only 2139 GREEN.
2026-06-04 19:19:00 +03:00
Дмитрий 6e3de1aca6 test(m3-a): contract fixtures (own+external) + 3-A invariants + plan + questions log
Машина 3-A «Контракты скилов» собрана (TDD): skill-contract.mjs (схема C-13/L
+ form validator + normalize/accessors + G4 drift-guard) + skill-contract-registry.mjs
(buildRegistry/loadRegistry). 28 новых тестов, регрессия tools-only 2119 GREEN.
Образцы own (writing-plans) + external (operations:process-doc). Журнал вопросов заведён.
2026-06-04 19:12:47 +03:00
Дмитрий d2c828a228 docs(router-mentor): sync 26-point coverage map with M2 build + M3 canon
Сверка 2026-06-04: все 26 назначений «пункт → машина» актуальны и
непротиворечивы (собранное в M2 подтверждено по коду). Внесены 6 пометок
дельты, назначения по машинам не менялись:
- п.15: default-deny уточнён зелёным проходом (finding 9) + узкое Write-
  исключение K4 (Вариант А, реализуется в 3-D)
- п.23: D29 как отдельный сверщик растворён → роль у артефакта + закрытой
  двери (C-7); якорь «сырая просьба» сохранён в P16-e (M3)
- п.24: добавлен контракт K5 (судья судит план как будущее, «проверено» за
  факт не берёт; реальное проверено = рантайм-сентинел M5)
- п.26: routing-tag ещё живой, редизайн escape отложен в M6
- мастер-карта: K5 добавлен в аварийный блок Машины 4 (рядом с K1/K2)
- чертёж M2: условие В синхронизировано с каноном K4 (читаемый .md через
  узкое исключение; печать seal — только каналом одобрения)
2026-06-04 18:59:52 +03:00
Дмитрий 46ffb0d02a docs(router-mentor-m2): actualize blueprint with C/L + fresh-eyes revision + cross-machine contracts
- Машина 2 чертёж: вшита C/L-надстройка (два плана, две печати, закрытая дверь, контракт скила), решения A-K
- Fresh-eyes ревизия 2026-06-04: findings 1-5 (закрытая дверь починена: ref+artifact_id+версия+persist+who-seals), 6-7 (D29 поглощена слоем, D33 → два режима), 8 (растворён призмой нет-болтовни), 9 (зелёный проход = нет долговременного/исходящего эффекта + условия А/Б/В), мелочи 10-12
- Аварийный блок межмашинных контрактов K1-K4 (М4/М5/М3) — без них зелёный проход и снятие D29 = дыры
- Мастер-карта: НАДСТРОЙКА C/L, Машина 1 собрана, красные маркеры K1-K4 в разделах М3/М4/М5
- Дизайн-спека: D33 ревизия (нет болтовни → два режима) + баннер секции

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 15:37:26 +03:00
Дмитрий 7af294e411 plan: детальный TDD-чертёж Машины 2 (Замок плана + Верховный хук)
Стоит на фундаменте Машины 1. 9 задач: freeze/seal плана (HMAC), детерминированный
матч действие-шаг (op+object, без LLM), персист, семена D12/D13, default-deny decide,
runGate+fail-CLOSED, авто-аудит дверей P15-b, сверка план-след P25-d, инварианты.
Проектные решения A-G помечены явно для ревью владельцем.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 19:43:56 +03:00
Дмитрий ba37291170 plan: детальный TDD-чертёж Машины 1 (Фундамент) — журнал S1, подпись расписок, защита-пол
10 задач TDD: receipt-key-config (keychain) + receipt-sign (HMAC) + action-journal
(хеш-цепочка + подпись головы) + усиление runtime-write-deny/path-norm/read-path-deny
+ подписанные askuser-расписки + сквозной self-verify. Заземлён в реальный код.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 19:10:16 +03:00
Дмитрий ee2ef32389 plan: проход правок мастер-карты (счёт несущих, покрытие D/OQ, зависимости, теневой режим) 2026-06-03 18:39:05 +03:00
Дмитрий 80f968b260 plan: мастер-карта стройки роутер-наставник (7 машин, порядок, покрытие)
Master coordination roadmap из готового дизайна (судья A-I + роутер-наставник +
пред-спека хуков). 7 машин с порядком сборки, инвариантами, точками стыковки и
коверидж-таблицей (26 пунктов хуков + 12 to-build + 7 несущих усилителей).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 17:43:28 +03:00
Дмитрий bf905eb60a feat(brain): surface router-gate v4 signals into episode + factor axes
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com
2026-05-31 19:05:20 +03:00
Дмитрий bd43fda6bd docs(router-gate-v4): calibration 5 plan - cosmetic-detector git-approval exemption 2026-05-31 11:39:20 +03:00
Дмитрий f7216bff52 docs(router-gate-v4): CLAUDE.md v2.44 — item 2b judge live + activated + readonly calibration 2026-05-31 09:04:09 +03:00
Дмитрий ec8f66b8a1 feat(router-gate-v4): live main() for LLM-judge wrappers — flag-gated spend (item 2b) 2026-05-31 08:06:26 +03:00
Дмитрий 2b714abde3 docs(router-gate-v4): safe-baseline spec v4 + plan + handoff (item 1b) 2026-05-31 05:58:13 +03:00
Дмитрий c9baf537fa docs(region): lead-region-resolution spec v0.5 + 6-session plan 2026-05-30 15:38:54 +03:00
Дмитрий a5c5d8cb70 fix(router-gate-v4): lastTurnEntries skips harness-injected skill bodies (isMeta + sourceToolUseID)
Sibling Claude session 2026-05-30 found that lastTurnEntries treats
harness-injected skill bodies as spurious turn boundaries, breaking both
enforce-memory-coverage (can't find user's coverage line) AND
enforce-normative-content-rules::detectLegitSkillActive (can't find the
Skill tool_use that lives in the assistant message BEFORE the body).

Refinement applied here: this session inspected 29 isMeta:true entries
across the live transcript (8f4ba767-...jsonl) via a debug helper and
found isMeta:true is ALSO used for "Continue from where you left off"
auto-resume, Stop hook feedback strings, and <local-command-caveat>
wrappers — those are real user-equivalent boundaries that must remain
visible. Sibling's blanket "skip isMeta" proposal would have broken them.

Discriminator: skip ONLY when isMeta === true AND typeof sourceToolUseID
=== 'string' (tool-spawned content). Skill bodies have the linking field;
the other isMeta sources do not. The sourceToolUseID field is harness-
controlled and not writable by controller from inside a tool call —
cannot be spoofed.

Behaviour after fix:
  * Skill body injection → skipped → walk continues back to find user's
    real prompt (with coverage line).
  * The assistant message containing the Skill tool_use is now inside the
    turn → detectLegitSkillActive finds it → normative writes pass when
    invoked under an active claude-md-management skill.
  * "Continue from where you left off." → still treated as turn boundary.
  * Stop hook feedback strings → still treated as turn boundary.

TDD:
  * 3 new tests in tools/enforce-hook-helpers.test.mjs under the
    "lastTurnEntries / lastUserPromptText / lastAssistantText / turnToolUses"
    describe block:
      - lastTurnEntries skips skill body injections (isMeta + sourceToolUseID)
      - lastTurnEntries does NOT skip "Continue from where you left off"
        (isMeta but no sourceToolUseID)
      - turnToolUses includes Skill tool_use spawned in same turn as the
        injected skill body
  * 2/3 RED→GREEN (the "Continue" negative test passed on baseline already
    since its string content satisfies the existing string-content branch).

Scope:
  * Fixes 2 of the 5 structural quirks documented in the Stream H
    completion log (enforce-memory-coverage gap, enforce-normative-
    content-rules detectLegitSkillActive gap).
  * Does NOT fix: enforce-read-path-deny LEGIT_SKILLS exemption gap
    (separate hook, no lastTurnEntries dependency); TDD-gate cross-actor
    blindness (different mechanism — actor session boundaries);
    detectFullTestRun regex narrowness (command-pattern matching).

Regression: vitest tools 1788/1788 GREEN (was 1785; +3 new tests).

Plan: docs/superpowers/plans/2026-05-30-lastturnentries-skill-body-skip.md
2026-05-30 14:16:12 +03:00
Дмитрий 782a02a275 feat(router-gate-v4): Stream G — register 9 v4 hooks + git add whitelist fix + sub-plan
settings.json hook registration changes:
- Removed 5 v3.9 hook registrations: enforce-chain-recommendation,
  enforce-classifier-match, enforce-graph-first, enforce-semgrep-security,
  enforce-override-limit
- Added 9 v4 deterministic hooks (no LLM-judge — Stream H follow-up):
  PreToolUse: router-gate (Bash), powershell-gate (PowerShell),
  normative-content-rules (Edit|Write|MultiEdit), tdd-real-test-verifier (Edit|Write),
  self-debrief-detector (Edit|Write|MultiEdit|Bash),
  askuser-cosmetic-detector (AskUserQuestion), mcp-classification (mcp__.*)
  PostToolUse Task: subagent-return-scanner
  Stop: todowrite-skill-verifier

shell-content-rules.mjs fix:
- Added 'add' to GIT_CONDITIONAL_SUB whitelist. Without it git add was default-deny
  by rule 5 even after approval — broke entire git workflow under v4 router-gate.

TODO Stream H (integration gaps discovered):
1. askuser-answer-parser needs PostToolUse(AskUserQuestion) wrapper
2. Schema mismatch Stream E vs Stream B approval records
3. llm-judge hooks need ROUTER_LLM_KEY config
4. decomposition-detector needs LLM-judge integration
5. parallel-session-lock pure module not implemented

Regression: 1707/1707 vitest tools GREEN.
2026-05-30 06:56:35 +03:00