Files
houseplan-card/docs/specs/037-room-scale-system.md
T
Matysh 112c260314
Validate / hacs (push) Failing after 12s
Validate / hassfest (push) Failing after 13s
Validate / frontend (push) Successful in 3m2s
Validate / golden (push) Failing after 51s
Validate / backend (push) Failing after 6m50s
Validate / smoke (push) Failing after 13m44s
Validate / performance (push) Failing after 24m13s
Release v1.61.0-beta.1
2026-08-09 21:51:33 +03:00

63 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ТЗ #37 — Одна объяснимая система масштабов room card
- Issue: https://github.com/Matysh/houseplan-card/issues/37
- Приоритет: P2
- Статус ТЗ: draft, рекомендованная migration semantics зафиксирована
## Цель
Пользователь видит два понятных effective размера — название и метрики — с
одним space default и room overrides. Скрытый третий layout multiplier больше
не создаётся.
## Каноническая формула
После явной миграции:
```text
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.