docs: spec #309 revision 2 — mandatory sections per review r1

Issue: #309
User-Visible: no
This commit is contained in:
Codex
2026-08-25 21:02:26 +03:00
parent bbac40eb8e
commit f0ea376aa9
+36 -1
View File
@@ -1,9 +1,16 @@
# ТЗ #309 — Стыковочные узлы: визуальный лимит mitre и устранение паразитных парных патчей
Issue: https://github.com/Matysh/houseplan-card/issues/309
Статус: ревизия 1.
Статус: ревизия 2 (после SPEC-REVIEW-309-r1: добавлены обязательные разделы §7.1).
База: #302 (полный mitre, веера узлов, детектор «без дыр», сет junction-сцен), #271 (thickLength-лимиты).
## 0. Сценарий
Владелец дома рисует и правит план в Plan-редакторе и рассматривает результат в View/kiosk. В местах схождения стен — особенно под острыми углами, у толстых стен и при смешанных толщинах — он видит зубцы: шипы за торцом, пики над узлом, ступени. Узлы участвуют в каждом плане, дефект виден на любой поверхности, где рисуется кладка (Plan, View, kiosk, Static, скрытый слой Iso) — геометрия общая, из структурного кэша (docs/WALL-THICKNESS.md §3).
**До:** из узла торчат клинья и пики длиной до 4 полутолщин, у крестов смешанных толщин — уступы в чужих квадрантах.
**После:** узел закрыт по чертёжному: вершины не дальше 1.5 полутолщины, сверх — аккуратная плоская фаска; кресты смешанных толщин идут по граням тонких стен без уступов.
## 1. Проблема
Полный mitre (#302, решение №5) ограничен только сектором и `MITRE_LIMIT = 4·max(h)`. На экспорте владельца три класса артефактов (все воспроизведены исполнением на dev dc68868):
@@ -46,6 +53,34 @@ Issue: https://github.com/Matysh/houseplan-card/issues/309
- **Без фантомов (#271):** нет новых площадей за пределами `thickLength`.
- Превью рисования (drawWallPreviewD и патчи превью) использует ту же парную логику — форма превью и персиста совпадает.
## 3.6 Скоуп и не-скоуп
**Скоуп:** форма патчей парных стыков и вееров узлов ≥3 лучей в рендер-геометрии кладки; фильтр не-соседних пар; golden/юниты/мутанты; docs/WALL-THICKNESS.md §3.
**Не-скоуп:** модель данных и конфиг (толщины, ключи walls, партиции) не меняются; hit-зоны и снап не меняются; политика полного mitre в допустимом пороге (#302 решение №5) сохраняется; #308 (перегородка-дубликат) не трогается.
## 3.7 UX
Никаких новых контролов, диалогов или настроек. Меняется только форма отрисованной кладки у узлов на всех поверхностях, где она рисуется (Plan/View/kiosk/Static/hidden-Iso — общий структурный кэш). Превью рисования цепочки использует ту же парную логику — форма превью и персиста совпадает.
## 3.8 Модель данных и миграция
Нет. Чистая рендер-геометрия; конфиг, экспорт/импорт и compatibility-поля не затрагиваются.
## 3.9 i18n
Нет новых строк.
## 3.10 Риски
1. **Дыры на границе фаски** — фаска среза может разойтись с полосами/веерами: закрывается контрактным детектором (#302) на сценах и на полном экспорте отчёта (AC5).
2. **Регресс утверждённых форм** — прямые углы должны остаться байтово прежними (AC4); прочие изменившиеся golden-сцены пересматриваются поимённо (AC6).
3. **Удаление парных патчей в узлах ≥3 лучей** может вскрыть непокрытые сектора у экзотических конфигураций — решение «пропускать все или только не-соседние» принимается измерением с детектором, мёртвый слой не оставляется (§3.3).
4. **Перф** — клип полуплоскостью на узел добавляет O(1) операций на сектор; замер перф-смока в гейте.
## 3.11 Release-артефакты
Записи в `docs/CHANGELOG.md` и `docs/CHANGELOG.ru.md` (User-Visible: yes) в коммите реализации; обновление `docs/WALL-THICKNESS.md` §3 (правило порога и фаски, судьба парных патчей в узлах); скриншот-fingerprint при изменении src.
## 4. Затрагиваемые поверхности
`src/wall-thickness.ts` (обе ветки + константа), golden-сет (пересъёмка затронутых junction-сцен + 3 новые сцены), юниты формы, мутационный гейт, `docs/WALL-THICKNESS.md` §3.