Commit Graph

2630 Commits

Author SHA1 Message Date
Дмитрий 1b66fd2076 feat(m7-phase3): enforce-skill-journaler — PostToolUse(Skill) журнал op:Skill + мост K2 (SE-K) 2026-06-08 10:34:19 +03:00
Дмитрий 467f2edddf docs(m7): план Фазы 2 — escape-survivability полная (правило 7б,в + §6 escape-honor) 2026-06-08 10:30:00 +03:00
Дмитрий 199dc04db0 feat(m7-phase2): supreme-gate panicEscapeDecision — escape переживает сбой сетапа main (правило 7б) 2026-06-08 10:28:43 +03:00
Дмитрий 4a383c5465 feat(m7-phase2): normative-content-rules чтит escape — §6 канал правки ЗАКОНА (правило 7в) 2026-06-08 10:25:00 +03:00
Дмитрий 7b51f54f1c feat(m7-phase2): read-path-deny чтит escape владельца (правило 7в) 2026-06-08 10:21:34 +03:00
Дмитрий 2294ed4ef8 feat(m7-phase2): enforce-floor panic-ветка — escape переживает throw floorDecide (правило 7б) 2026-06-08 10:19:48 +03:00
Дмитрий 2ae40924eb feat(m7-phase2): escapeAllowsEvent — panic-предикат escape-survivability (правило 7б) 2026-06-08 10:17:43 +03:00
Дмитрий b7a89e783f docs(m7): план Фазы 0 — fail-CLOSE-карвут + escape-survivability примитивы 2026-06-08 10:08:09 +03:00
Дмитрий a80c6098d5 fix(m7-phase0): disciplineOutcome строгий fail-CLOSE на малформ-возврат (sharp-edges) 2026-06-08 10:07:52 +03:00
Дмитрий 6ef4fe95b9 feat(m7-phase0): disciplineOutcome fail-CLOSE + P-7 списки + контракт helpers:7 (правило 1) 2026-06-08 10:02:43 +03:00
Дмитрий d1ff6019de feat(m7-phase0): canonicalAction тотальна — внешний try + pathNormalizeSafe (правило 7а) 2026-06-08 09:59:29 +03:00
Дмитрий 90f723732e feat(m7-phase0): pathNormalizeSafe — тотальный normalize (правило 7а) 2026-06-08 09:57:41 +03:00
Дмитрий 2365262848 docs(m7): build-handoff #3 — Фаза 1 content-floor собрана + PS single-source (HEAD 8a35f641)
Сменяет build-handoff #2. Фиксирует: Фаза 1 (content-floor V1/V1-PS) реализована
полностью (11 коммитов 4e7d32d4..8a35f641), регрессия 3044+2 GREEN 0 регрессий,
commit-not-push. Готовый промт новой сессии + цепочка скилов (executing-plans драйвер,
per-Task audit→TDD→systematic-debugging→verification, строгий sharp-edges после опасных
Task, гейт закрытия audit→sharp-edges→variant-analysis→regression→verification) +
квирки (vitest фильтры раздельно, гейты блокируют rm/git rm, tdd-real-test-verifier diff
требует expect, for-of не it.each) + отложенное в Фазу 8 (удаление powershell-destructive,
полная PS enumeration). Следующий шаг — Фаза 0 через writing-plans по команде владельца.
2026-06-08 09:40:25 +03:00
Дмитрий 8a35f64192 refactor(m7-floor): PS-content единый источник — matchPsHardBlacklist в shell-content-rules (variant-analysis)
Закрывающий variant-analysis-гейт Фазы 1 вскрыл класс P-1 для PowerShell: у
powershell-gate был СВОЙ PS_HARD_BLACKLIST (29 паттернов), а пол использовал
отдельный узкий psContentBlock (7) — подмножество, которое дрейфовало бы (та же
проблема, что P-1 для Bash). После Фазы 8 (увольнение powershell-gate) пол оказался
бы слабее гейта, который он заменяет. Решение владельца: исправить сейчас.

Зеркало P-1:
- PS_HARD_BLACKLIST + matchPsHardBlacklist перенесены в единый дом shell-content-rules;
  powershell-gate ре-экспортирует (тест single-source-identity: ссылка gate === SCR).
- +bare-egress (Invoke-WebRequest/iwr/irm/curl/wget bare — floor НЕ default-deny, нужен
  в blacklist, не только в whitelist гейта) +rmdir +rm (алиасы Remove-Item, которые гейт
  ловил whitelist'ом default-deny — полу нужны явно).
- psContentBlock стал ТОНКИМ делегатом над matchPsHardBlacklist (симметрия с
  bashIsContentBlock); пол через него видит ТОТ ЖЕ набор, что гейт. Дрейф невозможен.
- Следствие (осознанно): floor теперь блокирует все Set-Content/sc/$env/Az/… как гейт
  (симметрия с Bash-полом, блокирующим все cp/mv/redirect). Escapable. FP-толерантность
  унаследована от гейта (например `sc query`/`del.txt` — gate-aligned, fail-safe).

powershell-destructive.mjs физически не удалён (живые gate'ы блокируют rm/git rm) —
оставлен тонким делегатом (НЕ второй источник). Удаление — follow-up по git-approval.

Регрессия tools-only: 3044 passed + 2 skip (baseline 2843+2, 0 регрессий).
2026-06-08 09:34:23 +03:00
Дмитрий e34b505f04 feat(m7-floor): §12 content-floor инвариант — весь BASH_HARD_BLACKLIST floored (P-6)
Task 1.6 Фазы 1 М7. Тест-генератор: КАЖДАЯ запись BASH_HARD_BLACKLIST рубится полом
даже как валидный шаг плана. Итерация по экспортированному списку → полнота порта ПО
КОНСТРУКЦИИ: новый паттерн без сэмпла → красный (drift-детектор), floor не рубит →
красный. Анти-регресс «непробиваемости» закреплён за Фазой 1 (P-6), не за §9.2-smokes.
+C16 stderr-redirect + #34 injection (отдельные ветки matchBashHardBlacklist).

Полная регрессия tools-only: 2997 passed + 2 skip (baseline 2843+2, +154 Фазы 1,
0 регрессий). 99 floor-decide GREEN.
2026-06-08 09:16:04 +03:00
Дмитрий 8152f8d4af test(m7-floor): инвариант escape снимает content-block (Bash+PS) + специфичность P-2
Task 1.5 Фазы 1 М7. Код уже escapable (1.3/1.4) — тесты фиксируют инвариант против
регресса. Покрыто: Bash node -e + PS Remove-Item + PS forge-write снимаются точным
грантом; P-2 специфичность (грант A не открывает команду B) для PS И Bash; кросс-shell
изоляция (Bash-грант не открывает PS-команду — разные canonicalAction-префиксы). 72 GREEN.
2026-06-08 09:13:55 +03:00
Дмитрий 6a9ac38b95 harden(m7-floor): PS-алиасы forge+delete (sharp-edges после 1.4)
Строгий sharp-edges-гейт после Task 1.4 вскрыл обход через PowerShell-алиасы:
- forge P-3: `sc`/`cpi`/`ni` (алиасы Set-Content/Copy-Item/New-Item) писали в
  ~/.claude/runtime/.env мимо литеральных глаголов → подделка escape-гранта.
  Закрытие: PS_WRITE_VERB_RE += sc/ac/cpi/copy/mi/move/ni/tee (path-gated, FP только
  с протектед-путём; контроль `sc query` не over-блокируется).
- delete: `del`/`ri`/`rd`/`rmdir`/`erase` -Recurse -Force обходили литеральный
  Remove-Item. Закрытие: PS_CONTENT_BLOCK_RE алиасы для long+short флагов.

154 GREEN (floor + powershell-destructive + enforce-floor + supreme-gate).
Отложено в Фазу 8 §5 (карты покрытия): `&` call-operator, Invoke-Command (icm),
PS sub-expression $(), полная enumeration алиасов — coverage, не структурный класс.
2026-06-08 09:12:38 +03:00
Дмитрий 5ab5383182 feat(m7-floor): floor-decide ветка PowerShell content-block + forge-страж (V1-PS, P-3)
Task 1.4 Фазы 1 М7. Ветка PowerShell пола (после Bash, до OBSERVE_TOOLS): psContentBlock
(Remove-Item/-Recurse/iwr/iex/Start-Process/Out-File/redirect) ИЛИ psProtectedWrite
(P-3 forge-страж: PS-запись в ~/.claude/runtime / .env / секрет — иначе Set-Content
подделывает escape-грант). Escapable owner-санкцией. Реоткрытие v3.8 F1. 60 GREEN.

НАХОДКА РЕАЛИЗАЦИИ: plan-версия psProtectedWrite тестила whole-string SECRET_PATH_RE
с $-якорем → `.env` в позиции аргумента (-Path app/.env -Value …) терялся. Робастнее:
проверяем каждый токен (без кавычек, \→/) против anchored RUNTIME_RE/SECRET_PATH_RE —
runtime (forge-вектор) И secret-write закрыты, обычная запись не over-блокируется.
2026-06-08 09:09:18 +03:00
Дмитрий 05c5dcb166 harden(m7-floor): bashIsContentBlock рубит sub-shell как класс (sharp-edges после 1.3)
Строгий sharp-edges-гейт после Task 1.3 вскрыл класс обхода: подстрочный
matchBashHardBlacklist не де-обфусцирует command-substitution. Split-assembly
`$(echo no)$(echo de) -e x` и backtick `echo node` собирают интерпретатор только
при shell-eval → в сырой строке 'node' нет → content-block FALSE → пол пропускал.
router-gate ловит сейчас, но Фаза 8 (увольнение router-gate) открыла бы класс.

Закрытие: bashIsContentBlock проверяет detectSubshell(raw).found ($()/backtick/
process-subst/heredoc) → любой sub-shell = произвольное исполнение → content-block.
Независимо от parse-успеха. Escapable; router-gate тоже блокирует все sub-shell →
0 новых FP. Подтверждено: per-segment токенайзер де-обфусцирует n''ode/no\de.
114 GREEN (floor + enforce-floor + supreme-gate).
2026-06-08 09:06:23 +03:00
Дмитрий f259267191 feat(m7-floor): floor-decide content-block ветка Bash (V1, escapable)
Task 1.3 Фазы 1 М7. bashIsContentBlock (whole+per-segment, паритет с bashIsFloor, P-4)
через единый matchBashHardBlacklist (P-1). floorDecide Bash-ветка зовёт content-block
ПЕРВЫМ (до bashIsFloor); escape снимает (owner-санкция). 44 GREEN.

НАХОДКА АУДИТА (задокументирована в коде+тесте): NB плана «echo "node -e foo" НЕ
over-блокируется» недостижим при подстрочном matchBashHardBlacklist (не отличает
опасную строку-аргумент echo от команды-интерпретатора). Решение — принять FP:
floor УЖЕ принял этот класс для `git push "--force"` (fail-safe, escapable);
under-block в полу страшнее over-block. Парсинг командной позиции НЕ вводим.
2026-06-08 09:01:04 +03:00
Дмитрий e5680c24d5 fix(m7-floor): canonicalAction +PowerShell — escape-привязка специфична (P-2)
Task 1.2b Фазы 1 М7 (КРИТ). canonicalAction получил ветку PowerShell:
`powershell:${normalizeCommand(command)}`. Без неё PS уходил в write-fallback,
пустой путь резолвился в cwd → один escape-грант разблокировал ЛЮБУЮ PS-команду
в окне (тест специфичности был зелёным ложно: a===b==='write:<cwd>').

Сквозной фикс: тот же canonicalAction зовут пол (Task 1.4), стена (enforce-supreme-gate)
и консьюмер. Bash/Write/mcp-ветки не задеты. 118 GREEN (escape-grant + 4 потребителя).
2026-06-08 08:56:44 +03:00
Дмитрий bfbf72f78e feat(m7-floor): powershell-destructive psContentBlock (V1-PS)
Task 1.2 Фазы 1 М7. Новый модуль tools/powershell-destructive.mjs — psContentBlock
для PowerShell-tool (PS-нативные глаголы Remove-Item/-Recurse/iwr/iex/Start-Process/
Out-File/redirect НЕ матчат unix-regex classify-destructive). Реоткрытие v3.8 F1:
PowerShell-tool был полностью вне scope content-floor. 16 GREEN.
2026-06-08 08:55:30 +03:00
Дмитрий 9555d02343 feat(m7-floor): classify-destructive +contentBlock (правило 8, V1 Bash)
Task 1.1 Фазы 1 М7. Поле contentBlock = matchBashHardBlacklist(cmd) !== null
(единый источник P-1, whole-string) рядом с floor/suspicious. suspicious ||=
contentBlock (P-5: голоса судьи М4 видят content-опасное). reason расширен.

Поле для видимости судьи; фактический блок пола — bashIsContentBlock
(whole+per-segment, Task 1.3). 71 GREEN (+38 content-block кейсов, incl.
P-1-пробелы env-prefix/--watch/2>file/cp/mv).
2026-06-08 08:53:53 +03:00
Дмитрий 4e7d32d40f refactor(m7-floor): matchBashHardBlacklist -> shell-content-rules (единый дом content-правил, P-1)
Task 1.0.5 Фазы 1 М7. Перенос BASH_HARD_BLACKLIST + stderrRedirectBlock +
matchBashHardBlacklist из enforce-router-gate.mjs в постоянный дом
shell-content-rules.mjs (там уже живут hasInjection + matchAny). router-gate
ре-экспортирует их для обратной совместимости (тесты + тело гейта).

Единый источник правды устраняет port-дрейф content-floor (М5) по конструкции:
content-block пола (Task 1.1/1.3) импортирует ТОТ ЖЕ матчер, а не ручную копию.

Тесты: +describe single-source identity (router-gate BASH_HARD_BLACKLIST ===
shell-content-rules ссылка) + matchBashHardBlacklist hosted-in-SCR. 233 GREEN.
Чистый рефактор-перенос, 0 изменений семантики.
2026-06-08 08:51:31 +03:00
Дмитрий 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
Дмитрий 661083b311 docs(m7): критический разбор спеки — поправки V1/V1-PS/SE-I/SE-C/SE-K/SE-D/SE-A/SE-B
Независимый критический разбор дизайна М7 (цепочка audit-context-building →
sharp-edges → variant-analysis → systematic-debugging). Фактология §2
подтверждена реальным кодом 8/8; sweep Класса 1 полон. Закрытия:

- V1/V1-PS (КРИТИЧНО): полный port BASH_HARD_BLACKLIST + PowerShell-набор в
  content-floor М5 (правило 8), блок независимо от плана. Иначе in-plan
  node -e / curl-exfil / npm install проскальзывали как шаг плана; node -e
  мог подделать escape-грант и подорвать машины изнутри.
- SE-I/L6: escape-survivability (правило 7) — тотальные canonicalAction/
  normalize, panic-ветка до per-tool-логики, чтение escape всеми остающимися
  fail-CLOSE-стражами (read-path-deny/mcp-classification/normative-content-rules).
- SE-C/SE-K: журнал-K2 честно ограничен skill:-каналом; +PostToolUse
  skill-журналер + seed-allow реактивных навыков (иначе seed/ad-hoc навыки
  в журнал не попадают).
- SE-D: граница КАРТА/ЗАКОН для .mjs через "покрыт ли правкой план-шаг"
  (build-loop не клинит, ad-hoc самомодификация требует escape).
- SE-A: §4.2 метки [Pre]/[Stop]. SE-B: манифест до полного набора М1-М6.
- §1 промис снабжён предпосылками П1/П2/П3 + 4-е структурное условие; §13 changelog.

Verify-item прошлого handoff закрыт фактом: enforce-parallel-session-lock = no-op.
Только спека (.md), код не трогался.
2026-06-08 07:48:13 +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
Дмитрий b5b8b693f1 fix(m6): аудит-правки — G-5 egress токен, единый findOpenGrant, escape-журнал, уникальный id снимка
Аудит М6 (audit-context-building + sharp-edges + корректность; комплекс М1–М6), 4 практичных фикса (TDD):
- FIX-1: enforce-mcp-classification печатает точный FLOOR-ESCAPE токен в egress/verdict-блоке (G-5 для egress).
- FIX-2: escape-grant.findOpenGrant — единый предикат свежести для open и consume (гасит ИМЕННО открывший грант; чинит утечку one-shot при дублях/future-ts).
- FIX-3: enforce-supreme-gate.runGate — best-effort журнал escape (escape:true), указатель не двигается, сбой журнала не блокирует.
- FIX-4: enforce-snapshot — уникальный дефолтный id снимка (ts-pid-счётчик) против ms-коллизии refs/floor-snapshots.

Регрессия tools-only 2843 passed + 2 skip (+9, 0 регрессий). FIX-5 (подпись гранта) сознательно не делали (нулевая защита без ключа; protected-path уже гарантирует).
2026-06-07 19:43:05 +03:00
Дмитрий 64d6135e74 docs(router-mentor): M6 DONE-handoff — промт для новой сессии (пуш/активация/М7) 2026-06-07 19:14:43 +03:00
Дмитрий 863f1767aa test(m6): сквозные инварианты escape + snapshot; регрессия зелёная (2834+2) 2026-06-07 19:04:57 +03:00
Дмитрий dab574e482 feat(m6): enforce-snapshot — git-точка возврата перед разрушительным (fail-close) 2026-06-07 19:03:36 +03:00
Дмитрий 2e06caf6cb feat(m6): snapshot-decide — триггер снимка + чистое-дерево vs ошибка 2026-06-07 19:02:21 +03:00
Дмитрий c6c2e004cc feat(m6): egress-escape — снятие egress-блока совпавшим floor_escape 2026-06-07 19:01:04 +03:00
Дмитрий b6f7d68632 feat(m6): floor-escape-consume — одноразовое погашение пропуска (PostToolUse) 2026-06-07 18:58:32 +03:00
Дмитрий 078c88ba81 feat(m6): G-1 сквозной escape в верховной стене М2 (allow без продвижения указателя) 2026-06-07 18:55:56 +03:00
Дмитрий 0c50b5710a feat(m6): пол — escape во всех ветках, замена approvalOpen 2026-06-07 18:52:34 +03:00
Дмитрий 0e90b964ef feat(m6): писать floor_escape-пропуск из AskUser-ответа 2026-06-07 18:46:13 +03:00
Дмитрий b8f0134dba feat(m6): toFloorEscapeRecord — распознавание escape-одобрения 2026-06-07 18:44:09 +03:00
Дмитрий b4a3c4c3d5 feat(m6): escape-grant pure core — canonicalAction + escapeGrantOpen + readers 2026-06-07 18:41:42 +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
Дмитрий 87d76c473a docs(router-mentor): M6 spec — синк floor-escape-consume из плана (one-shot PostToolUse)
При написании плана выяснилось: строгая одноразовость «погашение после реального
исполнения» (§4 F-S1) требует отдельного PostToolUse-консьюмера. Добавлены модули
floor-escape-consume.mjs (ядро) + enforce-floor-escape-consume.mjs (обёртка) в §3/§9,
уточнён §4 (погашение после исполнения → сбой снимка пропуск не тратит), §9 активация
+ PostToolUse, §11 поправка план→спек. Спек и план теперь совпадают.

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

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 18:01:05 +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
Дмитрий 1ba61b2603 docs(router-mentor): M6 design — факт-аудит кода, правки F1-F4/F-S1/F-S2/I1-I4
Аудит спека М6 тремя линзами (audit-context-building сверка с реальным кодом М5 +
sharp-edges; agentic-actions-auditor неприменим — CI-scope). Внесены правки:

F1  настоящий §4.5-парсер = askuser-answer-parser + enforce-askuser-answer-parser
    (не enforce-branch-switch).
F2  floor-набор разнесён на 3 локуса (Bash / Write-ветка / egress); escape на все три (B).
F3  binding = точное совпадение канонической строки (normalizeCommand / tool:pathNormalize
    / egress), не хеш над classifyDestructive (тот даёт булевы).
F4  toApprovalRecord git-only → migrate:fresh/db:wipe/.env были не одобряемы; floor_escape
    закрывает.
F-S1 escape = отдельный kind floor_escape + отдельный reader + one-shot консум
     (не переиспользование 5-мин approve_git_operation).
F-S2 снимок: чистое дерево → ref=HEAD (успех); fail-close только на реальную ошибку git.
I1-I4 переиспользование helper'ов / честный scope снимка / ясность runtime-записи хуком /
     фиксация неприменимости agentic-actions-auditor.

§11 — карта находка→правка. Только дизайн-артефакт, кода нет. Без push (commit-not-push).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 17:40:32 +03:00
Дмитрий d45336a21f docs(router-mentor): M6 design — escape + auto-snapshot (brainstorming)
Машина 6 (новая фаза дизайна эпика «роутер-наставник»): аварийный выход (escape)
+ авто-снимок (git-точка возврата). Достраивает безопасность пола М5.

Решения с владельцем: Р-М6-1 scope = escape + снимок (М7 = normative-канал /
растворение зоопарка / доска); Р-М6-2 escape = всплывающий вопрос (side-channel,
отпечаток-binding); Р-М6-3 escape на весь floor-список (B); Р-М6-4 снимок = git-
состояние (A); Р-М6-5 подход A (escape в floor-decide + отдельный enforce-snapshot).

Spec: docs/superpowers/specs/2026-06-07-router-mentor-machine-6-design.md.
Только дизайн-артефакт, кода нет. Без push (commit-not-push).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-07 17:15:20 +03:00