mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
`passed` означает «в пределах порога», а не «байт в байт»: comparePng считает diffRatio, и статус ставится по нему. А приёмка копировала кандидата поверх КАЖДОГО эталона матрицы, поэтому подпороговый дрейф уезжал в контракт молча — и накапливался: каждая приёмка подтягивала эталон к последней среде, порог не пересекался никогда, а эталон уходил. Так1e341c60заменил 22 картинки, объявив четыре. Проект уже сталкивался с этим:ad3f9981восстанавливал девять уехавших эталонов руками. Такую работу обязан делать инструмент. Теперь копируются только сцены из --expect-change и --expect-new; остальные сохраняют и файл, и свой хеш из прежнего индекса. Индекс по-прежнему перезаписывается на полный набор — сирота или пропавшая запись делают манифест недействительным целиком. Решение вынесено в чистую функцию goldenAcceptancePlan: оно одно, и ошибка в нём дорога. Отсутствие прежнего хеша у необъявленной сцены — ошибка, а не повод взять кандидата: без эталона бывает только новая сцена, а она обязана быть названа в --expect-new. Логика вернулась в demo/golden/accept.mjs, где ей и место: после #344 эти файлы исключены из корпуса отпечатка, так что правка больше не требует пересборки и пересъёмки. scripts/golden-accept.mjs остался проходным вызовом ради документированной команды. Проверено сквозным прогоном на синтетическом кандидате: у двух сцен байты другие, объявлена одна — на диске изменились ровно два файла, эталон и индекс, а хеш второй сцены остался прежним. Два мутанта убиты руками: «брать кандидата вместо прежнего хеша» и «заменять всё». Issue: #351 User-Visible: no
32 lines
1.7 KiB
JavaScript
32 lines
1.7 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Проходной вызов `demo/golden/accept.mjs` (#334, #350, #351).
|
|
*
|
|
* node scripts/golden-accept.mjs --reviewed --expect-change=<id,id>
|
|
* node scripts/golden-accept.mjs --reviewed --expect-new=<id,id>
|
|
*
|
|
* Обёртка появилась потому, что до #344 любой `.mjs` из `demo/golden` входил в
|
|
* корпус отпечатка, и правка инструмента приёмки объявляла устаревшими бандл и
|
|
* оба манифеста. После #344 это ограничение снято, правило живёт в самом
|
|
* `accept.mjs`, а этот файл остался ради документированной команды и передаёт
|
|
* аргументы как есть.
|
|
*
|
|
* Два флага утверждают разное: `--expect-change` — «я знаю, почему старый кадр
|
|
* изменился», `--expect-new` — «я посмотрел на новый кадр». Необъявленная сцена
|
|
* не переписывается вовсе: её эталон и хеш остаются прежними (#351).
|
|
*/
|
|
import { spawnSync } from 'node:child_process';
|
|
import { dirname, resolve } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '..');
|
|
const argv = process.argv.slice(2);
|
|
if (!argv.includes('--reviewed')) {
|
|
console.error('приёмка требует явного --reviewed');
|
|
process.exit(2);
|
|
}
|
|
const accept = spawnSync(process.execPath, [
|
|
resolve(ROOT, 'demo/golden/accept.mjs'), ...argv,
|
|
], { cwd: ROOT, stdio: 'inherit' });
|
|
process.exit(accept.status ?? 1);
|