import { mkdir, readFile, writeFile } from "node:fs/promises"; import { diffRegistrySnapshots, validateBreakingEvidence, verifyRegistryBaselineApproval, } from "./lib/registry-compatibility.mjs"; const fixtures = JSON.parse( await readFile( "tests/fixtures/registry/compatibility/semantic-diff.json", "utf8", ), ); const results = []; for (const fixture of fixtures.cases) { const actual = diffRegistrySnapshots(fixture.before, fixture.after); results.push({ id: fixture.id, expected: fixture.expected, actual: actual.impact, passed: actual.impact === fixture.expected, }); } const breaking = diffRegistrySnapshots( fixtures.breakingEvidence.before, fixtures.breakingEvidence.after, ); const missingEvidence = validateBreakingEvidence(breaking, { schemaVersion: 1, changes: [], }); results.push({ id: "breaking-evidence-required", expected: false, actual: missingEvidence.passed, passed: !missingEvidence.passed, }); const tamperedApproval = verifyRegistryBaselineApproval( fixtures.tamperedApproval.snapshot, fixtures.tamperedApproval.approval, ); results.push({ id: "tampered-baseline-digest", expected: false, actual: tamperedApproval.passed, passed: !tamperedApproval.passed, }); await mkdir("artifacts/quality", { recursive: true }); await writeFile( "artifacts/quality/registry-compatibility-fixtures.json", `${JSON.stringify({ schemaVersion: 1, results }, null, 2)}\n`, ); if (results.some((result) => !result.passed)) { process.stderr.write("Registry compatibility fixture failed.\n"); process.exit(1); } process.stdout.write( `Registry compatibility fixtures: ${results.length} PASS\n`, );