mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
docs: two golden scenes DO move, and the static renderer needs its own AC (#230 r1)
Issue: #230 User-Visible: no
This commit is contained in:
@@ -186,12 +186,25 @@ export function wallHatchNeedsSolid(stepUnits: number, pxPerUnit: number): boole
|
||||
шага: в неё попадает 0–1 полоса в зависимости от фазы паттерна. Поведение
|
||||
сегодняшнее и остаётся; порог `solid` по толщине его прикрывает. Проверяется
|
||||
отдельным AC, чтобы правка не превратила такую стену в пятно.
|
||||
2. **Golden.** Все golden-фикстуры используют `cell_cm: 5`
|
||||
(`demo/fixtures/*.mjs`, `demo/golden/harness.mjs`) и не меняют зум, поэтому
|
||||
эталоны не должны измениться ни в одном пикселе. Это проверяемое
|
||||
утверждение: `golden:verify` обязан пройти без переснятия. Расхождение хоть
|
||||
одной сцены — сигнал, что правка задела больше заявленного, и разбирается до
|
||||
мержа.
|
||||
2. **Golden.** Все фикстуры используют `cell_cm: 5`
|
||||
(`demo/fixtures/*.mjs`, `demo/golden/harness.mjs`), где новая формула даёт
|
||||
ровно сегодняшние 8 юнитов. Но две сцены снимают план при зуме, отличном от
|
||||
единицы (`demo/golden/matrix.mjs:328-331`):
|
||||
|
||||
| сцена | zoom | шаг сейчас | шаг после |
|
||||
|---|---|---|---|
|
||||
| `large-house-zoom-040-dark` | 0.4 | 20.0 юнитов | 8.0 |
|
||||
| `large-house-zoom-250-dark` | 2.5 | 3.2 юнита | 8.0 |
|
||||
|
||||
Обе изменятся — и это прямое следствие решения владельца §4.2, а не побочный
|
||||
ущерб: именно ради этого зумовая компенсация и убирается. Их переснятие
|
||||
входит в задачу (§13, AC11) и делается отдельным шагом с доказательством:
|
||||
`npm run golden:accept -- --reviewed` после того, как расхождение осмотрено
|
||||
глазами и признано ожидаемым.
|
||||
|
||||
Все остальные сцены обязаны совпасть побайтно (AC10). Расхождение любой
|
||||
третьей сцены — сигнал, что правка задела больше заявленного, и разбирается
|
||||
до мержа.
|
||||
3. **Расхождение рендереров.** Сегодня карта и статический рендерер расходятся
|
||||
при зуме ≠ 1; правка их сводит. Побочный эффект желателен, но должен быть
|
||||
зафиксирован тестом, иначе следующий рефакторинг разведёт их снова.
|
||||
@@ -228,14 +241,28 @@ export function wallHatchNeedsSolid(stepUnits: number, pxPerUnit: number): boole
|
||||
**AC9.** Стена 3 см при `cell_cm: 5` не превращается в сплошное пятно из-за
|
||||
нового множителя: `wallHatchNeedsSolid` для неё ложна при типичном `pxPerUnit`.
|
||||
|
||||
**AC10.** `golden:verify` проходит без переснятия эталонов.
|
||||
**AC10.** `golden:verify` расходится ровно на двух сценах —
|
||||
`large-house-zoom-040-dark` и `large-house-zoom-250-dark`. Любая третья
|
||||
разошедшаяся сцена означает провал этого критерия.
|
||||
|
||||
**AC11.** Обе зумовые сцены переснимаются осознанно: расхождение осмотрено,
|
||||
принято `npm run golden:accept -- --reviewed`, и в отчёте на код-ревью
|
||||
объяснено, что именно изменилось и почему это ожидалось.
|
||||
|
||||
**AC12.** Статический рендерер (`space-render.ts`) строит паттерн по той же
|
||||
функции: при `cell_cm: 25` его `width`/`height` равны `wallHatchStepUnits(25)`,
|
||||
а `patternTransform` не содержит `scale`. Без этого критерия нереализованная
|
||||
правка второго рендерера прошла бы незамеченной — все golden-сцены снимаются
|
||||
при `cell_cm: 5`, где старая и новая формулы совпадают.
|
||||
|
||||
## 13. План автотестов
|
||||
|
||||
- `test/wall-thickness.test.mjs` — AC1–AC6, AC9.
|
||||
- `demo/smoke_wall_hatch_density.mjs` (новый) — AC7, AC8: разметка паттерна на
|
||||
реальной карте при `cell_cm` 5 и 25 и при двух значениях зума.
|
||||
- `npm run golden:verify` — AC10.
|
||||
- `demo/smoke_wall_hatch_density.mjs` (новый) — AC7, AC8, AC12: разметка
|
||||
паттерна при `cell_cm` 5 и 25 и при двух значениях зума, на интерактивной
|
||||
карте и в статическом рендерере (`hp-space-card`) в одном прогоне.
|
||||
- `npm run golden:verify` — AC10; затем `npm run golden:accept -- --reviewed`
|
||||
и повторный `verify` — AC11.
|
||||
|
||||
## 14. Мутационный гейт (`scripts/mutation-gate.mjs`)
|
||||
|
||||
@@ -246,13 +273,16 @@ export function wallHatchNeedsSolid(stepUnits: number, pxPerUnit: number): boole
|
||||
| `hatch-step-unclamped` | кламп пределов снят | юниты `wall-thickness` |
|
||||
| `hatch-stroke-not-scaled` | толщина штриха не следует за шагом | смок |
|
||||
| `hatch-zoom-compensation-back` | вернулся множитель `1/zoom` | смок |
|
||||
| `hatch-static-renderer-untouched` | `space-render.ts` снова с константой 8 | смок |
|
||||
| `hatch-density-solid-threshold-off` | порог по шагу на экране не срабатывает | юниты `wall-thickness` |
|
||||
|
||||
## 15. Release-артефакты
|
||||
|
||||
`User-Visible: yes`: обе редакции CHANGELOG, строка в `docs/USER-GUIDE.ru.md` в
|
||||
разделе про толщину стены. Скриншоты документации переснимаются, если этого
|
||||
потребует `check-docs.mjs`.
|
||||
разделе про толщину стены. `docs/WALL-THICKNESS.md` — канонический документ
|
||||
подсистемы, которую задача меняет: правило шага штриховки описывается там же,
|
||||
где живёт правило толщины стены. Скриншоты документации переснимаются, если
|
||||
этого потребует `check-docs.mjs`; два golden-эталона — по AC11.
|
||||
|
||||
## 16. Откат
|
||||
|
||||
|
||||
Reference in New Issue
Block a user