docs(m2): аудит Машины 2 — куча (T1-T9 хвосты + F1-F3 замечания + фикс-сет)

This commit is contained in:
Дмитрий
2026-06-05 04:03:03 +03:00
parent e991027793
commit 200b5b2da7
@@ -1188,3 +1188,30 @@ export function auditExempt({ exempt = [], isMutating }) {
## СЛЕДУЮЩИЙ ШАГ
Чертёж Машины 2 актуализирован под C/L (2026-06-04): стена реализационного плана (Tasks 1–9) + надстройка двух планов / двух печатей / закрытой двери (Tasks 10–12). Стоит на проверенном фундаменте Машины 1 (✅ собрана). Перед сборкой — **владелец подтверждает D/E/F/G** (и заодно дефолты H–K). Исполнение — `subagent-driven-development`. Дальше — Машина 3 (Роутер-наставник): контракты скилов, машина охвата A/B/C/D, look-ahead, L-ядро; и Машина 4 (Судья): два гейта + апелляционный цикл.
---
## АУДИТ МАШИНЫ 2 (2026-06-05) — куча: соответствие + хвосты + замечания
Адверсари-сверка построчно (3 модуля + зависимость `classifyBashCommand`). **Все задачи собраны, логика стены цела, полная регрессия 2224 GREEN.** Брешей нет; зелёный проход Bash безопасен (редиректы хард-блокируются в `classifyBashCommand`).
### ⏸ Хвосты — сознательно отложено (меж-машинные контракты, НЕ дыры)
- **T1** `[owner]` — регистрация matcher `*` в `.claude/settings.json` (без неё стена инертна).
- **T2** `[→ M4, K1]``freezePlan/freezeArtifact` зовётся кем угодно с ключом; «печатает только гейт-1» — судья.
- **T3** `[→ M4, K2]` — покрытие навыком по журналу, не по тексту.
- **T4** `[→ M5, K3]` — консервативный `classifyBashCommand` (сейчас безопасен через redirect-blacklist).
- **T5** `[→ M3]` — волны (дерево шагов); `step-pointer` построен, не вшит.
- **T6** `[→ M3 3-D, K4]` — узкое Write-исключение; сейчас Write в разговоре блокируется (верно).
- **T7** — `door-coverage` не вшит в живой прогон/STATUS (утилита есть, surfacing отложен).
- **T8** — `buildFrozenPlanFromApproval` не построен (опционально; канал печати — M4).
- **T9 (было B3)** `[→ M4, K6 — ВШИТ 2026-06-05]` — анти-откат high-water-mark. Несрываемый контракт судьи (§Машина 4 + аварийный блок выше). M2 сознательно НЕ строит (зарубка в runtime = призрак).
### ⚠️ Замечания — непреднамеренные, минорные
- **B-F1** `[ИСПРАВЛЕНО 2026-06-05]``actionOf` брал объект из 4 полей (как до фикса B4); MCP-write с полем `filename`/`uri` не сматчился бы с шагом → блок (fail-closed, но рубит легитимный шаг). Фикс: список полей объекта выровнен с расширенным B4.
- **B-F2** `[ИСПРАВЛЕНО 2026-06-05]``decide()` при `artifact_id` проверял только равенство id (печать артефакта проверяла обёртка `decideMode`). Фикс: `decide()` теперь сам проверяет печать артефакта (самодостаточность, защита-в-глубину).
- **B-F3** `[residual]` — указатель шага `plan-step-<sess>` не подписан; целостность держится на `runtime-write-deny` (пол). Приемлемо; связан с T9/K6 (откат указателя — тот же класс).
### Статус
- **Исправлено кодом (TDD):** F1 (`actionOf` поля), F2 (`decide` проверяет печать артефакта).
- **Записано/отложено:** T1–T8 (контракты M3/M4/M5 + owner-matcher), T9/B3→K6 (уже вшит в M4), F3 (residual).
- **Брешей нет.** Стена логически верна.