3.1 KiB
ТЗ #37 — Одна объяснимая система масштабов room card
- Issue: https://github.com/Matysh/houseplan-card/issues/37
- Приоритет: P2
- Статус ТЗ: draft, рекомендованная migration semantics зафиксирована
Цель
Пользователь видит два понятных 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:
name_scale = clamp(existingName × k);label_scale = clamp(existingLabel × k);- удалить только поле
k, сохранив x/y/s layout record; - показать rooms, где clamp изменил точное значение;
- 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.