Files
houseplan-card/legacy/specs/037-room-scale-system.md
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

3.1 KiB
Raw Permalink Blame History

ТЗ #37 — Одна объяснимая система масштабов room card

Цель

Пользователь видит два понятных effective размера — название и метрики — с одним space default и room overrides. Скрытый третий layout multiplier больше не создаётся.

Каноническая формула

После явной миграции:

effectiveName = space.card_font_scale × (room.name_scale ?? 1)
effectiveMeta = space.card_font_scale × (room.label_scale ?? 1)

Диапазон каждого stored multiplier остаётся 0.5..3; итоговый CSS size имеет отдельный safe clamp. Layout record rl_<roomId>.k — только read compatibility.

UX

  • Space dialog показывает общий default и preview.
  • Room dialog показывает override «Наследовать» либо процент, рядом effective процент; отдельный Reset для name и metrics.
  • Visual corner resize масштабирует оба effective room значения одним ratio: materializes name_scale и label_scale, сохраняя их относительное отличие. Он больше не пишет layout.k.
  • Context tray при выборе room label показывает два effective значения и Reset.

Legacy

До Optimize renderer умножает старый layout.k как сегодня, поэтому нет скачка. «Оптимизировать планы» preview:

  1. name_scale = clamp(existingName × k);
  2. label_scale = clamp(existingLabel × k);
  3. удалить только поле k, сохранив x/y/s layout record;
  4. показать rooms, где clamp изменил точное значение;
  5. atomic write config+layout и one-deep undo.

Обычный Save room/space не мигрирует k неявно. Если пользователь делает visual resize конкретной legacy card, migration только этой room является явным следствием жеста и сохраняет текущий visual до первого delta.

Edge cases

Room без metrics всё равно хранит independent label_scale; будущие metrics его используют. Rename/delete/remap room обрабатывает layout owner. Zoom карточки не меняет stored scale. Несколько клиентов конфликтуют через существующие rev.

Проверки и приёмка

  • truth table defaults/overrides/k compatibility;
  • zero-delta first drag без скачка; ratio с разными name/meta;
  • Optimize preview/apply/undo/clamp;
  • room/space dialogs, context tray, ru/en narrow layout;
  • после Optimize нет k, а screenshot до/после совпадает в tolerance.