Files
Claudeandclaude[bot] df46fd1c3e docs(hygiene): ТЗ выпущенных задач без живых ссылок — в legacy/specs (#682)
Волна 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
2026-09-27 22:10:46 +00:00

4.2 KiB
Raw Permalink Blame History

ТЗ #52 — Размеры стен и площади в View

Закрыто 2026-09-07 решением владельца, объединено с #53. Слой размеров в режиме просмотра не делается. Раздел «Площади» остаётся действующим контрактом и переиспользуется опцией «Отображать размеры» экспорта PDF (#53). Раздел «Длины» (осевые пролёты стен) на бумаге НЕ применяется: ТЗ #53 §7.3 печатает внутренние размеры каждой комнаты грань-в-грань и внешние размеры наружных граней. «Настройка» и «Collision/zoom» к экрану больше не относятся.

Цель

Добавить 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/geometryArea resolver, что 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 от отображения слоя.