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:
Codex
2026-08-21 14:47:49 +03:00
committed by Codex
parent 6872dc420d
commit 44a35fde0f
+42 -12
View File
@@ -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. Откат