From e8b3c861b218ea93ecef661cba389da8bbc99830 Mon Sep 17 00:00:00 2001 From: Sergey Matyunin Date: Sat, 22 Aug 2026 12:59:18 +0300 Subject: [PATCH] docs(spec): add proof matrix for grid scale Issue: #239 User-Visible: no --- docs/specs/239-grid-scale-invariance.md | 26 +++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/specs/239-grid-scale-invariance.md b/docs/specs/239-grid-scale-invariance.md index d52d8396..05ce38f0 100644 --- a/docs/specs/239-grid-scale-invariance.md +++ b/docs/specs/239-grid-scale-invariance.md @@ -279,8 +279,9 @@ lossless механизм. ## 10. Данные, migration, i18n, a11y, privacy и security - Schema и формат данных не меняются; миграции нет. -- Новые EN/RU строки нужны для imperial unit label; существующий metric текст - сохраняется. +- Существующий `space.scale_unit` остаётся metric-текстом: RU «см на клетку», + EN `cm per cell`. Новый `space.scale_unit_imperial`: RU «дюйм на клетку», + EN `in per cell`. Label поля остаётся существующим `space.scale_label`. - Поле остаётся обычным label+number input; доступное имя и порядок фокуса не меняются. - Никаких новых данных HA, service calls, URL или файловых операций. @@ -373,6 +374,27 @@ styles совпадают с pre-#239 contract; current golden не требуе шага сетки, default новых пространств 1 см/1 дюйм, существующие значения не мигрируют. +### 13.1 Матрица доказательств + +| AC | Обязательное доказательство | +|---|---| +| AC1 | `test/grid-scale.test.mjs`: точные значения helper и invalid fallback | +| AC2 | `demo/smoke_grid_scale_invariance.mjs`: pair pixel comparison flat View light/dark | +| AC3 | opening unit tests + тот же smoke: DOM metrics и реальные pointer-точки на внешней границе hitbox | +| AC4 | тот же smoke: Plan pair pixels с замаскированным grid; отдельный DOM count/spacing grid intervals | +| AC5 | unit negative controls для physical helpers + pair smoke для hatch/Glow/decor/device/snap nodes; mutation `grid-scale-physical-double-scaled` обязан покраснеть | +| AC6 | pair smoke в Devices/Background: `getBoundingClientRect()` frame/knob/hit handles и mutation-free pointer sequence | +| AC7 | pair pixel/DOM comparison двух `houseplan-space-card` в `demo/smoke_grid_scale_invariance.mjs` | +| AC8 | iso unit tests для height/depth/fingerprint + pair pixel/DOM comparison hidden iso light/dark и отсутствие публичного toggle без Labs | +| AC9 | `test/grid-scale.test.mjs` для pure default + `demo/smoke_space_scale_defaults.mjs` для dialog/save metric и imperial | +| AC10 | `demo/smoke_space_scale_defaults.mjs`: два floors-import drafts и сохранённые canonical значения в обеих unit systems | +| AC11 | unit compatibility cases + smoke open→save без input event для 5, дробного и missing `cell_cm` в imperial | +| AC12 | default smoke: input value/min/max/unit text для EN/RU metric/imperial и неизменный canonical draft при language rerender | +| AC13 | code review сверяет exact scale-1 attributes/computed styles; текущий `golden:verify` выполняется перед бетой и не принимается разработчиком; public docs provenance показывает единственный ожидаемый create-default diff | +| AC14 | targeted opening/touch browser smoke: tap остаётся действием, pan/pinch/second-pointer/`pointercancel`/suppressed click не выполняют action и не мутируют config; edge hit-points из AC3 подтверждают неуменьшение области | +| AC15 | code review по diff: factor O(1), без новых geometry traversal/state reads; performance benchmarks — предрелизный gate | +| AC16 | `node scripts/check-docs.mjs` + code review полного diff обоих changelog и обоих user guide; public screenshot provenance проверяет create-dialog | + ## 14. План автотестов ### 14.1 Unit