diff --git a/docs/specs/331-junction-limit-precision.md b/docs/specs/331-junction-limit-precision.md index cba8b1fe..bc51cf39 100644 --- a/docs/specs/331-junction-limit-precision.md +++ b/docs/specs/331-junction-limit-precision.md @@ -1,6 +1,6 @@ # Issue #331 — пограничная точность ограничений стыков (#329) -Статус: ревизия 2 (spec-ревью r1: H1 — квантование по формуле канонизации +Статус: ревизия 3 (r2: M-r2-1 — AC6 различает стороны, L2 — формулировка риска синхронизирована с §2.3. spec-ревью r1: H1 — квантование по формуле канонизации вместо нативного round, M1 — порог инцидентности 2e-7 и исправленный пример, M2 — узкий except только для кандидата, M3 — обход по рёбрам вместо DFS, M4 — USER-GUIDE, L1 — пользовательская фраза §1). Родители: #329 (правила), #330 (производительность — @@ -141,9 +141,13 @@ python. Порог выбран на два порядка грубее кано - **AC5 (fail-closed).** Синтетическое исключение в проверке кандидата (мутант/подмена) — запись отклонена с тостом `junction.limit_check_failed`; исключение на baseline — запись проходит. Смок/юнит. -- **AC6 (except).** Битая форма документа (TypeError в миграции) — честная - ошибка WS, не тихое «нарушений нет»; `WallSegmentMigrationError` — - прежний фолбэк «нет базы». Backend-юниты. +- **AC6 (except).** Два явных случая по образцу AC5 (r2 M-r2-1): + (а) TypeError в миграции **кандидата** — честная ошибка WS, не тихое + «нарушений нет»; (б) TypeError в миграции **previous** — запись + ПРОХОДИТ по фолбэку «нет базы для наследования» (несвязанную правку не + блокирует баг чужой стороны). `WallSegmentMigrationError` в обоих случаях + — прежний фолбэк «нет базы». Реализация с перепутанными сторонами или без + асимметрии красит хотя бы один из двух юнитов. Backend-юниты. - **AC7 (паритет и регресс).** Паритет-набор расширен всеми классами выше; все существующие юниты/смоки/мутанты #329+#330 и бенч #330 зелёные без изменения ожиданий (кроме прямо описанных в §3 пограничных вердиктов). @@ -163,8 +167,8 @@ python. Порог выбран на два порядка грубее кано - **i18n**: один новый ключ `junction.limit_check_failed` (en+ru). - **Touch**: не задет. - **Риски**: (1) квантование ключей меняет вердикты классов входов — - закрыто явным перечнем §3 и паритетом; (2) выбор максимальной ветви может - легализовать ранее отклонявшиеся конфигурации — это исправление + закрыто явным перечнем §3 и паритетом; (2) сумма коллинеарной компоненты + может легализовать ранее отклонявшиеся конфигурации — это исправление занижения, фиксируется юнитом с точным ожиданием; (3) 0°-нарушение может всплыть на легаси-планах с дублями — наследование #329 §3 по-прежнему пропускает несвязанные правки (инвариант не трогается).