mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
docs: spec #329 revision 2 — per-surface refusal channels, AC5 split, absolute thresholds
Issue: #329 User-Visible: no
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Issue #329 — ограничения стыков стен и честная острая вершина
|
||||
|
||||
Статус: ревизия 1. Решения владельца (чат, 2026-08-27, зафиксированы в issue):
|
||||
Статус: ревизия 2 (r1: M1 — каналы отказа по поверхностям, M2 — AC5 разделён, L1 — пороги абсолютные). Решения владельца (чат, 2026-08-27, зафиксированы в issue):
|
||||
пять ограничений приняты; проверки действуют на записи, легаси читается как
|
||||
есть; для остаточных острых вершин легаси-планов рендер закрывает остриё
|
||||
честной фаской вместо «трезубца».
|
||||
@@ -23,7 +23,19 @@
|
||||
|
||||
Все проверки выполняются над кандидатом структурной записи (фронт — в общем
|
||||
барьере перед записью; бэкенд — семантическая дельта-валидация §5). Нарушение
|
||||
= отказ всей записи, план не изменён, тост называет конкретное правило.
|
||||
= отказ всей записи, план не изменён. Канал обратной связи — штатный канал
|
||||
каждой поверхности (M1 spec-ревью r1):
|
||||
|
||||
- **рисование/завершение контура, черновики, независимые стены, merge/
|
||||
split** — тост с конкретным правилом и значением (текущий канал отказов
|
||||
рисования);
|
||||
- **Resize** — существующий контракт ручек (USER-GUIDE «Изменение размеров»):
|
||||
движение упирается в последнюю допустимую позицию; если безопасного шага
|
||||
нет, ручка приглушена и объясняет запрет по hover/focus/нажатию — текст
|
||||
объяснения называет нарушенное правило П1–П5; тост не используется;
|
||||
- **инструмент «Толщина»** — отказ значением в трее по образцу существующего
|
||||
отказа нуля для независимой стены (#313): значение не применяется, причина
|
||||
показывается тостом с названием правила (П3/П5).
|
||||
|
||||
- **П1. Минимальный угол:** угол между СОСЕДНИМИ по азимуту стенами одного
|
||||
узла ≥ **15°**. Считается по осям сегментов, для каждого узла кандидата.
|
||||
@@ -31,12 +43,14 @@
|
||||
атомы, независимые стены и перегородки считаются вместе).
|
||||
- **П3. Минимальная длина сегмента:** длина ≥ **max(20 см, толщина
|
||||
сегмента)**. Для нулевых стен (#306) — ≥ 20 см.
|
||||
- **П4. Минимальная дистанция:** несмежные узлы — не ближе **5 см** (1
|
||||
клетка); узел — не ближе 5 см к стене, которой он не принадлежит
|
||||
(касание конца о середину чужой стены остаётся T-стыком и валидно —
|
||||
правило про «почти-касание» без инцидентности).
|
||||
- **П4. Минимальная дистанция:** несмежные узлы — не ближе **5 см**; узел —
|
||||
не ближе 5 см к стене, которой он не принадлежит (касание конца о середину
|
||||
чужой стены остаётся T-стыком и валидно — правило про «почти-касание» без
|
||||
инцидентности). Порог абсолютный, в сантиметрах, и НЕ зависит от
|
||||
`cell_cm` пространства.
|
||||
- **П5. Просвет комнаты:** после вычета тел стен внутренняя область комнаты
|
||||
непуста и её площадь ≥ **25 см²** (1 клетка 5×5).
|
||||
непуста и её площадь ≥ **25 см²**. Порог абсолютный и не зависит от
|
||||
`cell_cm`.
|
||||
|
||||
## 3. Граница применения
|
||||
|
||||
@@ -112,8 +126,14 @@ margin): правила П1–П5 применяются к элементам,
|
||||
толщине 30 см — отказ (длина < толщины).
|
||||
- **AC4 (П4).** Узел в 4 см от несмежного узла или чужой стены — отказ; 5 см
|
||||
— проходит; T-стык (конец на чужой стене) — проходит.
|
||||
- **AC5 (П5).** Повторение «шпиля» из фикстуры issue рисованием — отказ по
|
||||
просвету (даже если каждый угол ≥ 15°, но толщины съедают комнату).
|
||||
- **AC5a (сквозной сценарий фикстуры).** Повторение «шпиля» из фикстуры
|
||||
issue рисованием отклоняется первым же нарушенным правилом (П1, вершина
|
||||
≈9.9° < 15°) — сквозной смок поверх AC1.
|
||||
- **AC5b (П5 независим от П1).** Равносторонний треугольник со стороной
|
||||
60 см и стенами 33 см: все углы 60° ≥ 15°, но inradius ≈ 17.3 см меньше
|
||||
полутолщины 16.5 см плюс минимального просвета — внутренняя область после
|
||||
вычета тел < 25 см², запись отклоняется по П5. Тот же треугольник со
|
||||
стороной 120 см (inradius ≈ 34.6 см) проходит. Юнит с этими числами.
|
||||
- **AC6 (§4).** Легаси-фикстура issue рендерится без «трезубца»: одна фаска,
|
||||
ноль V-вырезов; golden-сцена + пиксельная проверка смоком (нет разрывов
|
||||
тела выше фаски).
|
||||
|
||||
Reference in New Issue
Block a user