Files
portal/tools
Дмитрий be3966dbad feat(m5): sealed criterion_id в plan-lock.freezePlan (Пакет 5, 5.1, Δ5)
Каждый шаг получает детерминированный criterion_id = sha256(canonicalJson
содержимого шага без criterion_id) ДО planId/печати → id запечатан подписью плана.
- stepCriterionId (чистая, идемпотентная: criterion_id исключён из хеша).
- sealedCriterionIds(frozenPlan) — вход для criteriaFromSealedPlan (Гейт-2, F3/F9).
- id = ЦЕЛОСТНОСТЬ, не подлинность (Δ5): подмена object/op меняет id; подмена id
  после печати ломает verifyFrozenPlan; подлинность зелёного даёт подпись подписанта (5.4).

+7 тестов. Полная tools-only регрессия 2683 passed + 2 skip (0 регрессий).

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