docs: cover furniture corner tie-break

Issue: #445
User-Visible: no
This commit is contained in:
Sergey Matyunin
2026-09-04 00:58:36 +03:00
parent eb5e15fb6f
commit a6d0c0b980
+13 -1
View File
@@ -305,12 +305,25 @@ exact-SHA Validate. Для `src/**` обновляется canonical docs source
Backend pytest и model-invariants неприменимы, если реализация не меняет Python
или сохранённую геометрию стен.
### AC10. Выбор стены в углу детерминирован
Unit fixture с двумя неколлинеарными поверхностями одного угла проверяет три
ветки выбора: при разных расстояниях выигрывает физически ближайшая поверхность;
при равном расстоянии сторона точки намерения учитывается раньше стабильного
tie-break; при полном равенстве перестановка входного массива не меняет выбранную
поверхность и конечные `x/y/angle`. Mutation, возвращающая прежний выбор первого
минимума из массива либо меняющая местами intent-критерий и стабильный tie-break,
обязана сделать соответствующий witness красным.
## План тестирования
- заменить центролинейные expectations секции wall magnet в
`test/furniture.test.mjs` typed wall-face fixtures с 0/10/20 см;
- добавить pure tests внешней/общей стены, intent point, exact-axis tie,
permutation/winding, local thickness, threshold и independent faces;
- добавить отдельный AC10 unit для двух неколлинеарных стен в углу: ближайшая
поверхность, приоритет стороны намерения и инвариантность к порядку массива
при точном равенстве;
- расширить `demo/smoke_furniture.mjs` production-bundle сценарием preview →
commit → drag у толстой стены и touch safety;
- зарегистрировать дорогие отрицательные варианты в
@@ -374,4 +387,3 @@ Backend pytest и model-invariants неприменимы, если реализ
- Нулевые стены и физические грани независимых тел сохраняют прежнее поведение.
- Проёмы не участвуют в collision model этой задачи.
- `Shift`, persisted schema, i18n и уже сохранённая мебель не меняются.