Дмитрий
69e20099db
fix(router-mentor): sharp-edges audit M1-M4 — close 8 misuse-resistance holes
...
Второй аудит машин 1-4 другим объективом (sharp-edges: устойчивость к
неправильному применению / мягкие умолчания / совпадение по пустоте-подстроке).
Криптоядра здоровы (подтверждено). 8 реальных дыр закрыты по TDD:
M3:
- coverage-machine F-1: покрытие считалось по двусторонней ПОДСТРОКЕ — produces
"a" покрывал запрос "audit-rls-policy" (ложное «всё покрыто»). Новый tokensCover:
точное равенство ИЛИ подмножество слов по границам. coveringSkill + coverageRegistry.
- router-engine F-8: confidence не проверялся на диапазон — 5/Infinity проходили как
«уверен» (обход воздержания 5.2), -3 как принуд. abstain. validateTrace: [0,1] finite.
- round-control C: пустой roundKey="" активировал managed-режим (!= null) → все сессии
делили один счётчик-бакет. Теперь managed требует непустую строку.
- router-learning-queue G: повторное approve уже-решённого id повторно клало запись в
фонд (дубль). applyApprovalBatch: переводит только status==='pending'.
M2:
- plan-lock F5: шаг с пустым object был джокером (object:'' матчил действие, чей путь
не извлёкся → object''). actionMatchesStep: пустой object шага не матчит ничего.
M4 (инертна; чистые fail-closed правки кода, корректны и при включении):
- judge-slop-counter H: битый/null вердикт в списке ронял счёт (v.missing на null).
Теперь не крашит, считается халтурой (безопасная сторона).
- judge-engine J: consensusDecision на пустом/битом списке дрейфовал к GO. Теперь GO
только если есть голоса И каждый чистый GO; иначе NO-GO (fail-closed для hard-risk).
- judge-orchestrator K: finalGate снимал вето пола на любой falsy floorBlocked
(undefined от упавшей проверки = fail-open). Теперь снять может только явный false.
Регрессия tools-only 2555 passed + 2 skip (+15 TDD-тестов, 0 регрессий).
Осознанно НЕ менялось (без призраков):
- M1 receipt-sign domain default '' / разделитель пробел — backward-compat контракт
(тест 18-19), инъективен на enum-доменах без пробелов.
- M1 action-journal атомарность записи головы + битая .jsonl строка — fail-closed
(битьё → verifyChain ok:false → стена блокирует); чистого behavioral-теста нет.
- M3 round-control requiredSkills=[] — контракт вызывающего (пустой = не требуется).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 06:24:21 +03:00
..
2026-05-23 10:16:32 +03:00
2026-05-23 09:46:28 +03:00
2026-05-23 09:41:48 +03:00
2026-06-07 05:41:07 +03:00
2026-06-07 05:41:07 +03:00
2026-05-27 18:09:38 +03:00
2026-06-05 06:21:19 +03:00
2026-06-05 06:21:19 +03:00
2026-05-31 11:19:14 +03:00
2026-05-31 11:19:14 +03:00
2026-05-29 19:44:55 +03:00
2026-05-29 19:48:49 +03:00
2026-05-19 16:23:51 +03:00
2026-05-19 16:23:52 +03:00
2026-05-19 16:23:45 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-05-26 10:49:28 +03:00
2026-05-28 07:48:20 +03:00
2026-05-28 07:48:20 +03:00
2026-05-25 14:28:26 +03:00
2026-05-25 14:28:26 +03:00
2026-05-29 19:49:38 +03:00
2026-05-29 19:49:38 +03:00
2026-06-05 17:32:45 +03:00
2026-06-05 17:32:45 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-05-28 16:21:39 +03:00
2026-05-28 16:21:39 +03:00
2026-06-07 06:24:21 +03:00
2026-06-07 06:24:21 +03:00
2026-05-19 07:29:43 +03:00
2026-05-19 07:29:43 +03:00
2026-06-05 17:32:45 +03:00
2026-06-05 17:32:45 +03:00
2026-05-29 20:22:26 +03:00
2026-05-29 20:22:26 +03:00
2026-05-24 13:25:05 +03:00
2026-05-24 13:25:05 +03:00
2026-06-05 17:10:21 +03:00
2026-06-05 17:10:21 +03:00
2026-06-04 16:49:10 +03:00
2026-06-04 16:49:10 +03:00
2026-05-30 11:28:13 +03:00
2026-05-30 11:28:13 +03:00
2026-05-25 18:16:29 +03:00
2026-05-25 18:16:29 +03:00
2026-05-25 18:19:03 +03:00
2026-05-25 18:19:03 +03:00
2026-05-30 11:31:00 +03:00
2026-05-30 11:31:00 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 08:06:26 +03:00
2026-05-31 08:06:26 +03:00
2026-05-30 06:11:21 +03:00
2026-05-30 06:11:21 +03:00
2026-05-25 18:15:31 +03:00
2026-05-25 18:15:31 +03:00
2026-05-29 20:48:51 +03:00
2026-05-29 20:48:51 +03:00
2026-05-26 11:16:16 +03:00
2026-05-26 11:16:16 +03:00
2026-05-31 11:06:52 +03:00
2026-05-31 11:06:52 +03:00
2026-05-29 20:29:23 +03:00
2026-05-29 20:20:35 +03:00
2026-05-25 18:20:08 +03:00
2026-05-25 18:20:08 +03:00
2026-05-29 18:47:21 +03:00
2026-05-29 18:47:21 +03:00
2026-05-31 07:26:30 +03:00
2026-05-31 07:38:18 +03:00
2026-06-07 04:32:56 +03:00
2026-06-07 04:32:56 +03:00
2026-06-05 03:42:40 +03:00
2026-06-05 03:42:40 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-05-30 06:08:19 +03:00
2026-05-30 06:08:19 +03:00
2026-05-29 20:07:58 +03:00
2026-05-29 20:07:58 +03:00
2026-06-07 05:41:07 +03:00
2026-06-07 05:41:07 +03:00
2026-05-25 18:22:12 +03:00
2026-05-25 18:22:12 +03:00
2026-05-30 06:05:17 +03:00
2026-05-30 06:05:17 +03:00
2026-05-30 06:00:00 +03:00
2026-05-30 06:00:00 +03:00
2026-05-27 08:23:17 +03:00
2026-05-27 08:23:17 +03:00
2026-05-26 19:25:44 +03:00
2026-05-26 19:25:44 +03:00
2026-05-30 10:50:50 +03:00
2026-05-30 10:50:50 +03:00
2026-05-29 19:56:09 +03:00
2026-05-29 19:56:09 +03:00
2026-05-20 13:47:43 +03:00
2026-05-29 19:45:33 +03:00
2026-05-29 19:45:33 +03:00
2026-05-28 04:50:10 +03:00
2026-05-28 04:50:10 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-06-07 03:15:56 +03:00
2026-06-07 03:15:56 +03:00
2026-06-07 06:24:21 +03:00
2026-06-07 06:24:21 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-06-07 03:15:56 +03:00
2026-06-07 03:15:56 +03:00
2026-06-07 03:15:56 +03:00
2026-06-07 03:15:56 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-06-07 06:24:21 +03:00
2026-06-07 06:24:21 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-06-07 06:24:21 +03:00
2026-06-07 06:24:21 +03:00
2026-06-07 05:41:07 +03:00
2026-06-07 05:41:07 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-05-19 07:36:21 +03:00
2026-05-19 07:36:21 +03:00
2026-05-30 19:29:58 +03:00
2026-05-30 19:29:58 +03:00
2026-05-31 10:34:27 +03:00
2026-05-31 10:34:27 +03:00
2026-05-29 20:10:23 +03:00
2026-05-29 20:10:23 +03:00
2026-05-29 20:55:20 +03:00
2026-05-29 19:50:01 +03:00
2026-05-29 19:50:01 +03:00
2026-06-04 04:05:10 +03:00
2026-06-04 16:49:29 +03:00
2026-06-04 19:12:47 +03:00
2026-06-04 19:19:00 +03:00
2026-06-04 19:26:21 +03:00
2026-06-04 19:46:09 +03:00
2026-06-04 19:51:45 +03:00
2026-06-06 03:07:38 +03:00
2026-06-06 03:07:38 +03:00
2026-05-29 19:56:09 +03:00
2026-05-29 19:56:09 +03:00
2026-05-25 14:28:25 +03:00
2026-05-25 14:28:25 +03:00
2026-06-05 03:18:26 +03:00
2026-06-05 03:18:26 +03:00
2026-05-21 06:06:25 +03:00
2026-05-21 06:06:25 +03:00
2026-05-21 06:06:26 +03:00
2026-05-21 06:06:26 +03:00
2026-05-23 09:41:48 +03:00
2026-05-19 13:39:09 +03:00
2026-05-19 13:39:09 +03:00
2026-05-25 14:28:24 +03:00
2026-05-21 09:59:56 +03:00
2026-05-25 17:07:23 +03:00
2026-05-25 17:07:23 +03:00
2026-05-23 13:49:42 +03:00
2026-05-23 13:49:42 +03:00
2026-05-19 10:27:23 +03:00
2026-05-19 06:36:13 +03:00
2026-05-19 06:36:13 +03:00
2026-05-23 12:26:24 +03:00
2026-05-23 12:26:24 +03:00
2026-05-23 13:22:55 +03:00
2026-05-23 13:22:55 +03:00
2026-05-21 06:06:27 +03:00
2026-05-21 06:06:27 +03:00
2026-05-19 10:27:23 +03:00
2026-05-19 10:27:23 +03:00
2026-05-27 06:46:55 +03:00
2026-05-27 06:46:55 +03:00
2026-05-25 16:32:30 +03:00
2026-05-25 16:32:30 +03:00
2026-05-26 07:57:25 +03:00
2026-05-26 07:57:25 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-05-31 19:05:20 +03:00
2026-05-30 11:34:44 +03:00
2026-05-30 11:34:44 +03:00
2026-06-04 04:01:17 +03:00
2026-06-04 04:01:17 +03:00
2026-06-07 06:24:21 +03:00
2026-06-07 06:24:21 +03:00
2026-06-05 14:52:45 +03:00
2026-06-05 14:52:45 +03:00
2026-06-03 19:15:25 +03:00
2026-06-03 19:15:25 +03:00
2026-06-05 06:21:19 +03:00
2026-06-05 06:21:19 +03:00
2026-05-23 14:18:52 +03:00
2026-05-28 05:33:22 +03:00
2026-05-23 14:26:34 +03:00
2026-05-23 14:31:34 +03:00
2026-05-24 06:45:27 +03:00
2026-05-24 06:45:27 +03:00
2026-06-07 06:24:21 +03:00
2026-06-07 06:24:21 +03:00
2026-05-25 14:28:25 +03:00
2026-05-27 06:46:55 +03:00
2026-05-27 06:46:55 +03:00
2026-06-01 11:50:17 +03:00
2026-06-01 11:50:17 +03:00
2026-05-25 14:28:24 +03:00
2026-05-25 14:28:24 +03:00
2026-05-25 14:28:25 +03:00
2026-05-25 14:28:25 +03:00
2026-05-25 14:28:25 +03:00
2026-06-05 14:52:45 +03:00
2026-06-05 14:52:45 +03:00
2026-06-07 06:24:21 +03:00
2026-06-07 06:24:21 +03:00
2026-06-04 19:50:31 +03:00
2026-06-04 19:50:31 +03:00
2026-05-29 21:26:10 +03:00
2026-05-29 21:26:10 +03:00
2026-06-07 06:24:21 +03:00
2026-06-07 06:24:21 +03:00
2026-05-27 06:46:55 +03:00
2026-05-27 06:46:55 +03:00
2026-05-24 15:26:18 +03:00
2026-05-24 15:26:18 +03:00
2026-05-24 15:36:14 +03:00
2026-05-24 15:36:14 +03:00
2026-05-24 10:40:20 +03:00
2026-05-27 06:46:55 +03:00
2026-05-27 06:46:55 +03:00
2026-06-05 14:52:45 +03:00
2026-06-05 14:52:45 +03:00
2026-05-15 15:28:18 +03:00
2026-05-15 15:28:18 +03:00
2026-05-15 17:25:09 +03:00
2026-05-15 17:25:09 +03:00
2026-05-15 15:34:33 +03:00
2026-05-15 15:34:33 +03:00
2026-05-29 20:01:00 +03:00
2026-05-29 20:01:00 +03:00
2026-05-29 21:01:56 +03:00
2026-05-29 21:01:56 +03:00
2026-05-31 07:26:30 +03:00
2026-05-31 07:26:30 +03:00
2026-06-05 03:20:55 +03:00
2026-06-05 03:20:55 +03:00
2026-06-07 03:56:16 +03:00
2026-06-07 03:56:16 +03:00
2026-05-29 20:10:41 +03:00
2026-05-29 20:10:41 +03:00
2026-06-05 14:52:45 +03:00
2026-06-05 14:52:45 +03:00
2026-05-29 19:42:51 +03:00
2026-05-29 19:42:51 +03:00
2026-05-28 10:45:45 +03:00
2026-05-28 10:46:00 +03:00
2026-06-04 19:45:04 +03:00
2026-06-04 19:45:04 +03:00
2026-05-29 20:15:12 +03:00
2026-05-29 20:01:57 +03:00
2026-05-30 12:08:33 +03:00
2026-05-30 12:08:33 +03:00
2026-05-18 10:18:54 +03:00
2026-05-28 10:46:00 +03:00
2026-05-28 10:46:00 +03:00
2026-05-29 21:12:33 +03:00
2026-05-29 21:12:33 +03:00
2026-05-25 14:28:01 +03:00
2026-05-25 14:28:01 +03:00
2026-05-29 20:46:54 +03:00
2026-05-29 20:46:54 +03:00
2026-05-20 10:32:31 +03:00