Волна 5 эпика #674, перенос ТЗ (класс C). Из 240 файлов `docs/specs/` в `legacy/specs/` уехали 219: на них не ссылается ни один живой файл (код, тесты, скрипты, workflow, документы вне архива и ревью). Остались 21 ТЗ — на которые ссылаются код, ADR, ISOMETRIC, SUN, RADAR, LIGHT (`docs/specs/067`), DECOR-EDITOR, support-relay, и те, на которые ссылаются они сами; README каталога объясняет, где искать остальное. Открытых issue с файлом ТЗ среди перенесённых нет. Относительные ссылки перенесённых файлов переписаны (`../X` → `../../docs/X`, соседние оставшиеся ТЗ → `../../docs/specs/…`) — все 26 резолвятся. Попутно: битая ссылка в `089-isometric-view-stage1.md:8` на удалённый `089-isometric-view.md` — теперь команда `git show` по истории. Строка в `legacy/README.md`. Issue: #682 User-Visible: no Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018qZfe7YS4rqEMKoVeS3GKd
4.2 KiB
ТЗ #52 — Размеры стен и площади в View
Закрыто 2026-09-07 решением владельца, объединено с #53. Слой размеров в режиме просмотра не делается. Раздел «Площади» остаётся действующим контрактом и переиспользуется опцией «Отображать размеры» экспорта PDF (#53). Раздел «Длины» (осевые пролёты стен) на бумаге НЕ применяется: ТЗ #53 §7.3 печатает внутренние размеры каждой комнаты грань-в-грань и внешние размеры наружных граней. «Настройка» и «Collision/zoom» к экрану больше не относятся.
- Issue: https://github.com/Matysh/houseplan-card/issues/52 (закрыт, см. #53)
- Приоритет: P3
- Статус ТЗ: контракт измерений для #53
Цель
Добавить read-only architectural annotation layer на основе существующей
геометрии и cell_cm, не создавая второй системы измерений.
Настройка
Per-space settings.dimensions: 'off' | 'areas' | 'full', default off.
Отдельный card/kiosk default: kiosk всегда скрывает dimensions, пока будущая
явная card option не разрешит их. Editor preview использует effective setting.
Площади
areasиfullпоказывают значение чистого пола через тот же clean-floor/geometryArearesolver, что tooltip #28.- Единицы/округление — существующий
formatArea; metric m², imperial ft². - Label anchor — сохранённый room label position либо interior visual point; annotation не перемещает пользовательское room name.
- Очень малая/узкая room скрывает annotation при отсутствии безопасного места, tooltip/card всё равно содержит площадь.
Длины
fullаннотирует unique physical wall centreline spans из текущей normalized wall model. Общая стена рисуется один раз.- Virtual/open boundary не получает physical length annotation.
- Doors/windows/gates не вычитаются из общей длины span; это размер стены по оси, а не чистая кладка.
- Partitions и physical segments сохранённых room drafts входят; columns не имеют линейного размера. Толщина не меняет длину оси.
- Collinear мусорные fragments сначала проходят существующую compaction; annotation не объединяет через угол/разрыв.
Label расположен параллельно span, читаемый текст никогда не upside-down;
offset выбирается со стороны вне clean floor при возможности. Значение
использует segmentCm/formatLength и space grid scale.
Collision/zoom
Projection вычисляет candidates и детерминированно скрывает labels, чьи screen
bbox пересекаются с более приоритетными (selected room, outer wall, longer
span). Ни один label не становится меньше доступного font minimum. На малом
zoom слой постепенно скрывает wall dimensions, затем areas; stored setting не
меняется. pointer-events:none.
Проверки и приёмка
- rectangles, diagonal/L/nested/shared/thick/open walls, partitions/drafts;
- metric/imperial, different cell_cm, resize and optimize;
- deterministic collision at several viewports/zooms;
- View/kiosk/editor visibility and print-friendly golden;
- area совпадает с room card, length с live ruler для того же span;
- никакой config mutation от отображения слоя.