Commit Graph

479 Commits

Author SHA1 Message Date
Дмитрий 0885d88546 feat(verify-gate): register enforce-verify-gate in manifest (G1 task7) 2026-06-09 10:22:36 +03:00
Дмитрий f28bf7b8e9 feat(verify-gate): consumer enforce-verify-gate fail-CLOSE (G1 task6) 2026-06-09 10:19:44 +03:00
Дмитрий 18b6937b4c feat(verify-gate): producer staged-fingerprint + io main (G1 task5) 2026-06-09 10:18:11 +03:00
Дмитрий 0ef1ed855d feat(verify-gate): producer pure buildVerifyReceipt (G1 task4) 2026-06-09 10:16:22 +03:00
Дмитрий 750e8e6641 feat(verify-gate): rubilnik verify-gate-config (G1 task3) 2026-06-09 10:15:16 +03:00
Дмитрий 7dc97a3ea3 feat(verify-gate): verify-receipt pure core sign/accept (G1 task2) 2026-06-09 10:13:57 +03:00
Дмитрий 030ceba1d0 feat(verify-gate): VERIFY_PASS receipt domain (G1 task1) 2026-06-09 10:12:41 +03:00
Дмитрий a48eb6fe1c feat(judge-gate): runJudgeTurn three-mode wiring + main (shadow runs+logs, live-block fail-close) 2026-06-09 08:46:28 +03:00
Дмитрий ae60f47ab3 feat(judge-gate): shadow verdict log + judge-unavailable warn (J8) 2026-06-09 08:43:00 +03:00
Дмитрий aadff281b8 feat(judge-gate): async runJudgeGate orchestration + degraded-allow on unavailable 2026-06-09 08:40:36 +03:00
Дмитрий 7fcc242e83 feat(judge-gate): callJudgeModel async transport + spend-gate (unavailable vs malformed) 2026-06-09 08:38:38 +03:00
Дмитрий 71be6d9a9b feat(judge-gate): extractGate2Product Write-only plan detector 2026-06-09 08:36:03 +03:00
Дмитрий f701a311bc feat(judge-gate): parseJudgeResponse fail-closed parser 2026-06-09 08:33:46 +03:00
Дмитрий 3663705dde fix(shadow-replay): exclude runtime writes and scope M6 to bash 2026-06-09 07:20:48 +03:00
Дмитрий 926c329b12 feat(shadow-replay): main cli and runAll 2026-06-09 06:30:17 +03:00
Дмитрий 8b5197ce69 feat(shadow-replay): buildCorpus runMachine report 2026-06-09 06:26:57 +03:00
Дмитрий 912b5ec0f7 feat(shadow-replay): M4 adapter and M3 divergence 2026-06-09 06:24:33 +03:00
Дмитрий 6d4beb2d35 feat(shadow-replay): M2 adapter signed plan 2026-06-09 06:22:40 +03:00
Дмитрий bdc6d68c63 feat(shadow-replay): M5 M6 adapters 2026-06-09 06:21:01 +03:00
Дмитрий c259dd4468 feat(shadow-replay): classifyOutcome 2026-06-09 06:19:10 +03:00
Дмитрий 46eea4a747 feat(shadow-replay): fixtures 2026-06-09 06:17:38 +03:00
Дмитрий 37423a4b10 test(action-journal): pin M1 fail-closed on torn append (entry without head update) 2026-06-09 05:23:51 +03:00
Дмитрий 386b10ce8c feat(supreme-gate): tree leaf resolution plus advance flag for R-08 waves 2026-06-09 05:12:38 +03:00
Дмитрий 10d4019f11 feat(supreme-gate): pointer state accepts tree position as index array 2026-06-09 05:10:45 +03:00
Дмитрий 218628519f feat(plan-lock): tree leaves, leaf resolver, validate, recursive criterion ids, hierarchical consumers 2026-06-09 05:09:21 +03:00
Дмитрий c30a92bf71 feat(step-pointer): serialize plus tree navigation for R-08 waves 2026-06-09 05:06:49 +03:00
Дмитрий d77477486a feat(reconcile): wire reconcileEvent reader in main (inert, WARN-only) 2026-06-09 04:08:22 +03:00
Дмитрий b9cd792db3 feat(status): R-30 journal integrity block via live verifyChain (read-only) 2026-06-09 04:06:53 +03:00
Дмитрий 2b530ae687 feat(status): R-24 door coverage block (read-only) 2026-06-09 04:05:15 +03:00
Дмитрий c198852116 feat(door-coverage): door matcher reader and canonical mutating tools list 2026-06-09 04:02:27 +03:00
Дмитрий 8c693c8cb5 feat(status): R-09 learning queue block (read-only) 2026-06-09 03:59:32 +03:00
Дмитрий 403f1f17ea docs(tools): utochnit docstring node-graph + pinning-invarianty (P5 E/G) 2026-06-09 03:23:39 +03:00
Дмитрий b15e424cc4 feat(status): detail-render doski oborony + escapeCell anti-injection (P4 E/G) 2026-06-09 03:21:29 +03:00
Дмитрий 74b243e52b fix(observer): routing-detector ignorit PASTED-citaty /node (P1 E/G, 4-y FP-klass)
Novyy uzkiy stripPastedContext (fenced+blockquote only) pered detekciey. NE reuse stripQuotedContext (tot stripaet inline - FN). Sohraneno FP-smeshchenie routingGate (SE-1). Regressiya 3185 passed.
2026-06-09 03:18:55 +03:00
Дмитрий 95a5398aa8 fix(observer): PII count via sanitize pipeline, overlap once (P2 E/G)
Edinyy PIPELINE: count ravno chislu redakciy sanitize (SE-2). sanitize byte-identical. Regressiya 3177 passed.
2026-06-09 03:16:49 +03:00
Дмитрий cebd33263d fix(observer): release-класс не ловит голый commit (P3 E/G)
classifyTask: убран commit из release-регекса (коммит != релиз). push/merge/deploy/release/релиз/тегни остаются. Аналитика-only, гейтов-потребителей нет. Регрессия 3175 passed.
2026-06-09 03:14:24 +03:00
Дмитрий e4f1344276 test(m3e): живой инвариант покрытия реестра карточками + конфликт-целостность
Новый tools/m3e-card-coverage-invariants.test.mjs на реальном реестре:
(1) у каждого узла nodes.yaml есть карточка skill===slug (missingContracts пуст);
(2) нет пустых карточек (G-B); (3) конфликт-рёбра резолвятся и симметричны (G-H);
(4) реестр контрактов без формальных ошибок/дублей/дрейфа. GREEN — покрытие 86/86.
Конфликт-проверки пока тривиальны (0 рёбер), наполнятся в Task 4.

coverage: skill:test-driven-development
2026-06-08 18:56:10 +03:00
Дмитрий 49d5e97923 feat(contracts): карточки phase-0 (#2-#9) + m3a form-инвариант всех карточек
8 карточек-контрактов phase-0: playwright-mcp, github-mcp, markdownlint, cspell,
lychee, stylelint, gitleaks, pa11y (все external, zero-hash + path"" → G4 инертен).
m3a расширен: «ВСЕ файлы contracts/ form-валидны + нет дрейфа» (loadRegistry errors
+ driftFlags пусты) — per-батч валидация прогоном vitest. m3a 3/3 GREEN.

coverage: skill:executing-plans
2026-06-08 18:38:24 +03:00
Дмитрий 8db247efcd feat(card-coverage): чистый чекер покрытия узел↔карточка + конфликт-рёбра
Новый tools/card-coverage.mjs (H, R-11/R-12): missingContracts (узел без
карточки skill===slug), emptyCards (needs∪produces пусто — G-B), unresolvedConflicts
(висячая ссылка — G-H), asymmetricConflicts (A→B без B→A — G-H). Чистые функции,
данные инъектируются. TDD на фикстурах: RED→GREEN, 5/5.

coverage: skill:test-driven-development
2026-06-08 18:34:46 +03:00
Дмитрий fcc364a097 fix(skill-contract): G-E — страж дрейфа инертен при пустом source.path без содержания
checkContractDrift: external без локального source.path И без поданного
currentContent (== null) → не сторожим (G4 инертен). Это прод-случай зеро-хеша
(Р5 MCP/marketplace): loadRegistry при пустом path не читает content. Прямой
вызов с поданным currentContent — drift сверяется как раньше. TDD: RED→GREEN,
48/48 skill-contract + registry. Дисциплина doubt→drift на реальных источниках
не понижена.

coverage: skill:test-driven-development
2026-06-08 18:33:05 +03:00
Дмитрий fc4ee35021 feat(m7-phase7): доска Ф6 — judgeMode ← judgeGateMode() (реальный режим судьи: inert до активации)
CLI status-md-generator передаёт в доску «кто на посту» реальный режим судьи через
judgeGateMode() вместо хардкода 'inert'. До активации владельцем (флаг+ключ) → 'inert'
(видимое поведение не меняется); после активации доска покажет shadow/live-block.
Структурный тест фиксирует проводку (импорт + judgeMode: judgeGateMode(), не хардкод). 51/51 GREEN.
2026-06-08 14:46:12 +03:00
Дмитрий 7b46bb26a2 feat(m7-phase7): enforce-judge-gate mode-aware + finalGate + runJudgeGate seam + live fail-CLOSE (§8)
Обёртка судьи переписана с {active}-shadow-заглушки на mode-aware: decide({mode,verdict,
floorBlocked}) — inert/shadow → allow ($0/D28 тихий); live-block → finalGate (судья GO И пол
чист → allow; иначе block; битый вердикт → NO-GO, сомнение→блок). runJudgeGate — owner-seam
(§8 последняя фаза: реальный llmCall-транспорт + извлечение продукта подключает владелец; до
этого нейтральный GO wired:false — flip mode=block без транспорта НЕ кирпичит). main:
inert/shadow → allow fail-open ($0); live-block → exitDisciplineDecision (fail-CLOSE, судья жив).
7/7 GREEN. Инертно до активации владельцем.
2026-06-08 14:44:35 +03:00
Дмитрий cd69bea572 feat(m7-phase7): judgeGateMode — inert/shadow/live-block (§8, default shadow D28; рубильник важнее режима)
Новый резолвер режима судьи М4 в judge-gate-config: inert ($0, нет флага/ключа) / shadow
(active, логирует не блокирует — D28 «сперва тихо») / live-block (active + ROUTER_MENTOR_JUDGE_
MODE=block, блокирует на NO-GO). Рубильник judgeActive важнее режима: MODE=block без флага/ключа
→ всё равно inert. Default при активации — shadow (рекомендуемая обкатка §11). 9/9 GREEN.
2026-06-08 14:42:52 +03:00
Дмитрий 1227ec6668 feat(m7-phase6): доска «кто на посту» (computeGuardBoardBlock) — манифест М1–М6 + режим судьи + ПОСТ ПУСТОЙ (§7)
Новый чистый computeGuardBoardBlock в status-md-generator: read-only снимок обороны М1–М6 из
checkManifest (registered/missing) — missing → «⚠️ ПОСТ ПУСТОЙ» (нельзя ложно объявить protected,
SE-B), + режим судьи М4 (пока inert; live — Ф7) + счётчики недавних escape/блоков. Врезан в
renderStatus сразу после таблицы контролёров C1–C6; CLI читает .claude/settings.json (fail-quiet
→ {}). GUARD_LABELS маппит хуки на машины М1–М6. Read-only, ничего не блокирует. 49/49 GREEN.
2026-06-08 14:28:56 +03:00
Дмитрий 02eae97026 feat(m7-phase6): SE-B — DEFAULT_REQUIRED_HOOKS до полного М1–М6 (+М4 judge-gate, М6 snapshot/escape, М1 журналер)
floor-manifest-check.DEFAULT_REQUIRED_HOOKS расширен с 5 (пол+стена+3 exfil-стража) до 9 —
+enforce-judge-gate (М4), +enforce-snapshot и +enforce-floor-escape-consume (М6), +enforce-
skill-journaler (М1). Раньше доска рапортовала бы «protected» при незарегистрированных М4/М6
(SE-B). Теперь «ПОСТ ПОЛНЫЙ» = весь контур М1–М6. WARN-only (сигнал, не блок, Δ8). 13/13 GREEN.
2026-06-08 14:26:57 +03:00
Дмитрий b8b1601b51 feat(m7-phase5): decide §6 — ЗАКОН требует escape владельца, КАРТА — claude-md-management (build-loop SE-D)
decide переорганизован: escape-allow → контент-слои (recovery/suspicious/fake-rule, defense
для всей нормативки, сохраняют reason) → §6 classification (LAW non-escaped → block «требует
escape владельца, скил недостаточен») → CARD-поток (skillActive + judge + H3-degradation).
ЗАКОН (Pravila/PSR/Tooling + ad-hoc дисциплинарный исходник + контент-правка правил) больше НЕ
проходит по одному claude-md-management-скилу — только escape. КАРТА (CLAUDE.md/memory) —
прежний скил-канал. build-loop sealedPlanCoversEdit (Ф8 live через plan-lock). Tooling-тест
обновлён под §6; +4 §6-теста. 48/48 GREEN.
2026-06-08 12:49:01 +03:00
Дмитрий f3d91cfce5 feat(m7-phase5): classifyNormative — детерминированный КАРТА/ЗАКОН + build-loop SE-D (§6)
Новые чистые экспорты в enforce-normative-content-rules: isDisciplineSourcePath (исходники
машин М1–М6 по префиксам enforce-/judge-/floor-/escape-grant/action-journal/receipt-/
shell-content-rules/plan-lock/classify-destructive/path-normalization), contentTouchesLaw
(контент правит правила/дисциплину), classifyNormative → {kind:'CARD'|'LAW'}. КАРТА =
CLAUDE.md/MEMORY.md/memory; ЗАКОН = Pravila/PSR/Tooling + дисциплинарный исходник ВНЕ плана +
контент-правка правил; build-loop: дисциплинарный исходник ПОД sealed-планом → КАРТА; сомнение
→ ЗАКОН. Тотален (null guard). Интеграция в decide — Task 2. 44/44 GREEN.
2026-06-08 12:46:46 +03:00
Дмитрий 392a1aaeba test(m7-phase4): §12 whole-phase инвариант-гейт — анти-регресс поглощённой дисциплины
Lock-in тест над поглощённой дисциплиной Фазы 4a/4b (coverage/todowrite/rationalization +
self-debrief в манифесте): fail-CLOSE (exitDisciplineDecision, нет fail-open catch→block:false),
escape≠override (нет findOverride-вокабуляра), нет controller-text→allow (text-bypass вырезан,
Класс 1), манифест-членство (Ф6 self-check). Scope только поглощённые 4a/4b — не ещё-не-
поглощённые (memory-coverage/branch-switch/verify-* retire Ф8). 16/16 GREEN. Закрывает Фазу 4.
2026-06-08 12:28:31 +03:00
Дмитрий 3d3cc41215 feat(m7-phase4c): Гейт-2 planGateSteps/runPlanGate (sealed план-требование) + Гейт-3 verify absorption proof (§4.2)
Гейт-2 combiner (зеркало criterionGateSteps): runPlanGate = specToPlanCoverage + k5CriterionCheck
через runGateLadder. Поглощает tdd-gate Rule #6 «план перед prod-кодом» в ЗАПЕЧАТАННОЙ форме
(покрытие sealed-плана + критерий значимого шага), без Класс-1 text-mention hasPlanIndicator.
Синергия с М2-стеной. Гейт-3 absorption-proof: runCriterionGate засчитывает только ПОДПИСАННЫЙ
зелёный по критерию (расписка М5), отвергает само-написанный sentinel. Live-wiring обоих — Ф7;
retire tdd-gate/verify-* — Ф8. 43/43 GREEN.
2026-06-08 12:26:34 +03:00
Дмитрий a67d2014fa test(m7-phase4b): decomposition покрыт existenceCheck Гейт-1 через журнал (§5 coverage-map)
Proof покрытия: обещанный планировочный навык, не вызванный по журналу (extractSkillCalls),
→ existenceCheck.missingSkills непуст → NO-GO. Доказывает, что Гейт-1 М4 ловит скрытое
дробление через журнал-факт ДО retire no-op enforce-decomposition-detector (Ф8). Live-wiring
«обещанные навыки ← журнал» в judge-gate — Фаза 7. 39/39 GREEN (примитивы уже построены).
2026-06-08 12:21:12 +03:00