Commit Graph

545 Commits

Author SHA1 Message Date
Дмитрий 69d4b19502 fix(keychain): async keytar read via sync subprocess (no getPasswordSync) 2026-06-09 14:24:43 +03:00
Дмитрий 440fd71bbf fix(content-floor): quote-aware redirect in matchBashHardBlacklist (port b0cd18d7 after --ours merge) 2026-06-09 13:35:24 +03:00
Дмитрий d59b9177d4 Merge branch 'main' into worktree-brainrepo
# Conflicts:
#	tools/enforce-coverage-verify.mjs
#	tools/enforce-coverage-verify.test.mjs
#	tools/enforce-router-gate.mjs
#	tools/enforce-router-gate.test.mjs
2026-06-09 13:26:12 +03:00
Дмитрий c8639f2fd1 feat(manifest): register coverage-verify + todowrite-skill-verifier (G2 phase8 manifest 11to13) 2026-06-09 12:56:40 +03:00
Дмитрий 068b03d946 feat(criterion-gate): register enforce-criterion-gate in manifest (Level B task6) 2026-06-09 12:30:06 +03:00
Дмитрий 4e54331ef4 feat(criterion-gate): consumer enforce-criterion-gate fail-CLOSE (Level B task5) 2026-06-09 12:26:33 +03:00
Дмитрий e229cf0706 feat(criterion-gate): per-criterion green producer (Level B task4) 2026-06-09 12:24:30 +03:00
Дмитрий caa41e6cac feat(criterion-gate): mutation runner in-place + restore (Level B task3) 2026-06-09 12:22:40 +03:00
Дмитрий 9414699ad9 feat(criterion-gate): vitest json run + test-count guard (Level B task2) 2026-06-09 12:21:21 +03:00
Дмитрий 67a46df978 feat(criterion-gate): JS mutation operators pure (Level B task1) 2026-06-09 12:19:50 +03:00
Дмитрий b92afad96c feat(verify-gate): register enforce-verify-gate in manifest (G1 task7) 2026-06-09 10:22:36 +03:00
Дмитрий 2bd7efbebd feat(verify-gate): consumer enforce-verify-gate fail-CLOSE (G1 task6) 2026-06-09 10:19:44 +03:00
Дмитрий 9ce6041be4 feat(verify-gate): producer staged-fingerprint + io main (G1 task5) 2026-06-09 10:18:11 +03:00
Дмитрий 93e516e680 feat(verify-gate): producer pure buildVerifyReceipt (G1 task4) 2026-06-09 10:16:22 +03:00
Дмитрий 0f20c944ca feat(verify-gate): rubilnik verify-gate-config (G1 task3) 2026-06-09 10:15:16 +03:00
Дмитрий 1088599023 feat(verify-gate): verify-receipt pure core sign/accept (G1 task2) 2026-06-09 10:13:57 +03:00
Дмитрий 1857773f89 feat(verify-gate): VERIFY_PASS receipt domain (G1 task1) 2026-06-09 10:12:41 +03:00
Дмитрий e8958155c4 feat(judge-gate): runJudgeTurn three-mode wiring + main (shadow runs+logs, live-block fail-close) 2026-06-09 08:46:28 +03:00
Дмитрий b48fd86152 feat(judge-gate): shadow verdict log + judge-unavailable warn (J8) 2026-06-09 08:43:00 +03:00
Дмитрий 50550f311e feat(judge-gate): async runJudgeGate orchestration + degraded-allow on unavailable 2026-06-09 08:40:36 +03:00
Дмитрий 36545b636f feat(judge-gate): callJudgeModel async transport + spend-gate (unavailable vs malformed) 2026-06-09 08:38:38 +03:00
Дмитрий 0af6610b77 feat(judge-gate): extractGate2Product Write-only plan detector 2026-06-09 08:36:03 +03:00
Дмитрий 0c6f084f0e feat(judge-gate): parseJudgeResponse fail-closed parser 2026-06-09 08:33:46 +03:00
Дмитрий a630053714 fix(shadow-replay): exclude runtime writes and scope M6 to bash 2026-06-09 07:20:48 +03:00
Дмитрий 647879adc6 feat(shadow-replay): main cli and runAll 2026-06-09 06:30:17 +03:00
Дмитрий dd63f950e2 feat(shadow-replay): buildCorpus runMachine report 2026-06-09 06:26:57 +03:00
Дмитрий ff8f14d8d2 feat(shadow-replay): M4 adapter and M3 divergence 2026-06-09 06:24:33 +03:00
Дмитрий a7f3ebd971 feat(shadow-replay): M2 adapter signed plan 2026-06-09 06:22:40 +03:00
Дмитрий d5feca2672 feat(shadow-replay): M5 M6 adapters 2026-06-09 06:21:01 +03:00
Дмитрий f139ad5320 feat(shadow-replay): classifyOutcome 2026-06-09 06:19:10 +03:00
Дмитрий 8228703320 feat(shadow-replay): fixtures 2026-06-09 06:17:38 +03:00
Дмитрий 5782ede3eb test(action-journal): pin M1 fail-closed on torn append (entry without head update) 2026-06-09 05:23:51 +03:00
Дмитрий 2b0c28e59f feat(supreme-gate): tree leaf resolution plus advance flag for R-08 waves 2026-06-09 05:12:38 +03:00
Дмитрий 16e0c1db09 feat(supreme-gate): pointer state accepts tree position as index array 2026-06-09 05:10:45 +03:00
Дмитрий 51f718ea07 feat(plan-lock): tree leaves, leaf resolver, validate, recursive criterion ids, hierarchical consumers 2026-06-09 05:09:21 +03:00
Дмитрий 1a3ccc2178 feat(step-pointer): serialize plus tree navigation for R-08 waves 2026-06-09 05:06:49 +03:00
Дмитрий 0e995970f9 feat(reconcile): wire reconcileEvent reader in main (inert, WARN-only) 2026-06-09 04:08:22 +03:00
Дмитрий 752512d3cd feat(status): R-30 journal integrity block via live verifyChain (read-only) 2026-06-09 04:06:53 +03:00
Дмитрий 1000abc7fc feat(status): R-24 door coverage block (read-only) 2026-06-09 04:05:15 +03:00
Дмитрий 0eef670e54 feat(door-coverage): door matcher reader and canonical mutating tools list 2026-06-09 04:02:27 +03:00
Дмитрий 2e6a6c0a7a feat(status): R-09 learning queue block (read-only) 2026-06-09 03:59:32 +03:00
Дмитрий 553ddea464 docs(tools): utochnit docstring node-graph + pinning-invarianty (P5 E/G) 2026-06-09 03:23:39 +03:00
Дмитрий cf9f803d36 feat(status): detail-render doski oborony + escapeCell anti-injection (P4 E/G) 2026-06-09 03:21:29 +03:00
Дмитрий 5ae0b1359f 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
Дмитрий 84f75abb14 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
Дмитрий cfc4e0a853 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
Дмитрий 3dbd8a5cd9 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
Дмитрий 52cea07fee 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
Дмитрий f1c245f8f6 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
Дмитрий d1a767867a 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