test: закрыть отпечаток документации и добить свидетеля полей (#594)

Две находки код-ревью r1 из трёх; третья — эталоны — снаружи песочницы, см.
комментарий в issue.

**Отпечаток скриншотов.** `check-docs` краснел ожидаемо: отпечаток считается от
всего `src/**`, а диф его трогает. Прогнал `npm run docs:accept -- --identical`
— все одиннадцать кадров совпали с закоммиченными **попиксельно**, поэтому
принят только отпечаток исходников (`b678af43`), ни один PNG не переснят. Это
и есть доказательство среды по правилу #334/#401: снимать можно где угодно,
принять получится лишь там, где кадры воспроизводятся.

**Свидетель полей.** Ревьюер прав: снимок черновика доказывал «пишет только
своё» для трёх полей из восьми, а перетипизированный `FILL_CHOICES` и выбор
зоны исполнимого oracle не имели вовсе. Добавлены две проверки по образцу
соседних: смена зоны меняет только `_areaSel`, смена режима заливки — только
`_roomFill`. Зона переключается на «Без зоны»: свободных зон в фикстуре может
не остаться, а этот вариант есть всегда, и имя уже заполнено, поэтому
автоподстановка имени по зоне в игру не вступает.

Issue: #594
User-Visible: no
This commit is contained in:
Claude
2026-09-19 11:08:05 +03:00
committed by Claude
parent b53cca01d3
commit 44c3f0ab63
2 changed files with 37 additions and 12 deletions
+25
View File
@@ -198,6 +198,31 @@ const res = await page.evaluate(async () => {
range.dispatchEvent(new Event('input', { bubbles: true }));
await c.updateComplete;
out.scaleWritesOnlyItsOwnKey = JSON.stringify(changedFields(before, draft())) === JSON.stringify(['nameScale']);
// Область: меняется только область (и имя, если оно было пустым, — это
// давнее поведение селектора, а не набора).
before = draft();
const areaSelect = sr().querySelector('hp-dialog .areasel');
// Свободных зон в фикстуре может не остаться — комната держит единственную.
// «Без зоны» доступна всегда, и для проверки соседа этого достаточно: имя уже
// заполнено, поэтому автоподстановка имени по зоне в игру не вступает.
const values = [...areaSelect.options].map((o) => o.value);
const otherArea = c._areaSel ? '' : values.find((v) => v);
out.areaOptionAvailable = otherArea !== undefined;
areaSelect.value = otherArea;
areaSelect.dispatchEvent(new Event('change', { bubbles: true }));
await c.updateComplete;
out.areaWritesOnlyItsOwnKey = JSON.stringify(changedFields(before, draft())) === JSON.stringify(['area']);
// Режим заливки: перетипизированный FILL_CHOICES пишет в _roomFill и, уходя
// с «Свой цвет», обнуляет цвет — это его давний контракт (#581), а не сосед.
before = draft();
const tempRadio = [...sr().querySelectorAll('hp-dialog .srcrow')]
.find((l) => l.textContent.trim() === c._t('fill.temp'))?.querySelector('input[type="radio"]');
out.fillOptionAvailable = !!tempRadio;
tempRadio.checked = true;
tempRadio.dispatchEvent(new Event('change', { bubbles: true }));
await c.updateComplete;
out.fillWritesOnlyItsOwnKey = JSON.stringify(changedFields(before, draft())) === JSON.stringify(['fill'])
&& c._roomFill === 'temp';
// Источник влажности: сегмент открывает список и не трогает температуру.
before = draft();
const humSeg = segmentOf('hum');
+12 -12
View File
@@ -3,7 +3,7 @@
"fixture": "synthetic-only",
"chromium": "151.0.7922.34",
"oxipng": "oxipng 10.2.0",
"sourceFingerprint": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceFingerprint": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"captureScriptSha256": "9e4b0ae533407fe003a129078aec020f2c83d67cdb6fc6da696ce3d829beaeb5",
"command": "npm run build && node demo/docs/capture.mjs",
"scenarios": {
@@ -15,7 +15,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "5d1e816c2fde72316809991e9651e242d3cbcd897fb9db0554dc3bde943486f5"
},
"view-touch": {
@@ -26,7 +26,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "bc2001f9cd51715a38ad8d913b1c5a4f2220b3917c8dc03b2de65cfb3f62f808"
},
"space-create": {
@@ -37,7 +37,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "9f0970de09772674c3156b9fc5b2d49de0ceb22be11ecf8b136047d37d100a84"
},
"room-contour-close": {
@@ -48,7 +48,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "0c354a79f9c3660788b6c5e889a27b6bd78b1f209dc0eef6bb43e2c1344028c4"
},
"plan-context-tray": {
@@ -59,7 +59,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "64169c543291bc4df806dcf8ff484b42c8ea55eb343323d945344e0e28f2ce97"
},
"device-editor": {
@@ -70,7 +70,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "3c8703175605fcf0387d654cd30783ecfd33e21743e70b45190a5ae1a8d355c2"
},
"device-display-preview": {
@@ -81,7 +81,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "5d6193202102f5e6d85567f1111fa105895b933979fbf369c6ba0b1029deb823"
},
"background-editor": {
@@ -92,7 +92,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "375900a29aa62632883ede6727b7dbb8b48cabe9d7d0e16425f9779c837f3dd9"
},
"room-card": {
@@ -103,7 +103,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "c985783769da1bce50c9abe92ce1c6852d62701ce940f6f0a041d634ac21e888"
},
"device-info": {
@@ -114,7 +114,7 @@
},
"theme": "dark",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "19e247d5bf49375b238292d45ae32e9eb38a83f5d1a53f6ddde860ed4adcef42"
},
"pdf-export": {
@@ -125,7 +125,7 @@
},
"theme": "light",
"language": "en",
"sourceSha256": "9b5b6618ac78ca56b3d724f998451dcbff19b20619b8abecd35088aee7a0775a",
"sourceSha256": "b678af433a400f150ea1cf4cdb4e585a02e9b5f8e3cd3fa236a78178ffe6de96",
"imageSha256": "4537692fd57a3ed95528eddd748eee5cb6e456ffab7cc49169853d62459252cd"
}
},