From b1deb0beab076bd0fd4dfac4ee8d96ca5c452214 Mon Sep 17 00:00:00 2001 From: Matysh Date: Sat, 8 Aug 2026 22:03:09 +0300 Subject: [PATCH] Avoid hassfest manifest collision --- demo/golden/accept.mjs | 3 ++- .../{manifest.json => baseline-manifest.json} | 0 demo/golden/policy.mjs | 2 ++ demo/golden/run.mjs | 4 ++-- test/golden-policy.test.mjs | 11 ++++++++++- 5 files changed, 16 insertions(+), 4 deletions(-) rename demo/golden/baselines/{manifest.json => baseline-manifest.json} (100%) diff --git a/demo/golden/accept.mjs b/demo/golden/accept.mjs index de49bba7..9753c8f5 100644 --- a/demo/golden/accept.mjs +++ b/demo/golden/accept.mjs @@ -5,6 +5,7 @@ import { dirname, resolve } from 'node:path'; import { fileURLToPath } from 'node:url'; import { sourceFingerprint } from '../../scripts/source-fingerprint.mjs'; import { GOLDEN_MATRIX_VERSION, GOLDEN_SCENARIOS } from './matrix.mjs'; +import { GOLDEN_BASELINE_MANIFEST } from './policy.mjs'; const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); const reviewed = process.argv.includes('--reviewed'); @@ -45,7 +46,7 @@ for (const scenario of GOLDEN_SCENARIOS) { // updated baseline directory behind. for (const { scenario, candidate } of candidates) copyFileSync(candidate, resolve(baselineRoot, `${scenario.id}.png`)); -writeFileSync(resolve(baselineRoot, 'manifest.json'), `${JSON.stringify({ +writeFileSync(resolve(baselineRoot, GOLDEN_BASELINE_MANIFEST), `${JSON.stringify({ schema: 1, matrixVersion: GOLDEN_MATRIX_VERSION, acceptedAt: new Date().toISOString(), diff --git a/demo/golden/baselines/manifest.json b/demo/golden/baselines/baseline-manifest.json similarity index 100% rename from demo/golden/baselines/manifest.json rename to demo/golden/baselines/baseline-manifest.json diff --git a/demo/golden/policy.mjs b/demo/golden/policy.mjs index 92c41693..5817a7a9 100644 --- a/demo/golden/policy.mjs +++ b/demo/golden/policy.mjs @@ -1,3 +1,5 @@ +export const GOLDEN_BASELINE_MANIFEST = 'baseline-manifest.json'; + export const assertGoldenInvocation = (mode, scenarioFilter = '') => { if (!['capture', 'verify'].includes(mode)) throw new Error(`unknown golden mode: ${mode}`); if (mode === 'verify' && scenarioFilter) diff --git a/demo/golden/run.mjs b/demo/golden/run.mjs index 895a2b52..ff36ce1c 100644 --- a/demo/golden/run.mjs +++ b/demo/golden/run.mjs @@ -7,7 +7,7 @@ import { launch } from '../serve.mjs'; import { assertFreshDemoBundle } from '../bundle-freshness.mjs'; import { goldenClip, prepareGoldenScenario } from './harness.mjs'; import { GOLDEN_MATRIX_VERSION, GOLDEN_SCENARIOS } from './matrix.mjs'; -import { assertGoldenInvocation, goldenRunFailed } from './policy.mjs'; +import { assertGoldenInvocation, GOLDEN_BASELINE_MANIFEST, goldenRunFailed } from './policy.mjs'; const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '../..'); const mode = process.argv.find((arg) => arg.startsWith('--mode='))?.slice(7) || 'capture'; @@ -106,7 +106,7 @@ async function comparePng(page, actual, baseline, threshold) { } let baselineManifest = null; -const baselineManifestPath = resolve(baselineRoot, 'manifest.json'); +const baselineManifestPath = resolve(baselineRoot, GOLDEN_BASELINE_MANIFEST); if (existsSync(baselineManifestPath)) { try { baselineManifest = JSON.parse(readFileSync(baselineManifestPath, 'utf8')); } catch { baselineManifest = { invalid: true }; } diff --git a/test/golden-policy.test.mjs b/test/golden-policy.test.mjs index c7acfec3..f0d93af1 100644 --- a/test/golden-policy.test.mjs +++ b/test/golden-policy.test.mjs @@ -1,6 +1,15 @@ import assert from 'node:assert/strict'; import test from 'node:test'; -import { assertGoldenInvocation, goldenRunFailed } from '../demo/golden/policy.mjs'; +import { + assertGoldenInvocation, + GOLDEN_BASELINE_MANIFEST, + goldenRunFailed, +} from '../demo/golden/policy.mjs'; + +test('golden metadata cannot be mistaken for a Home Assistant integration manifest', () => { + assert.equal(GOLDEN_BASELINE_MANIFEST, 'baseline-manifest.json'); + assert.notEqual(GOLDEN_BASELINE_MANIFEST, 'manifest.json'); +}); test('golden capture fails on runtime errors but permits missing baselines', () => { assert.equal(goldenRunFailed('capture', false, [{ status: 'error' }]), true);