#!/usr/bin/env node import { mkdtemp, readFile, rm, writeFile } from 'node:fs/promises'; import os from 'node:os'; import path from 'node:path'; import { verifyRegistry } from './gate-verify.mjs'; const root = process.cwd(); const manifest = JSON.parse(await readFile(path.join(root, 'gates/gates.manifest.json'), 'utf8')); manifest.gateRoots = ['.mosaic-empty-gate-root']; manifest.criteria = []; manifest.gates = []; manifest.proseClaims = []; manifest.compatibilityScenarios = []; const directory = await mkdtemp(path.join(os.tmpdir(), 'gate-empty-population-')); try { const manifestPath = path.join(directory, 'manifest.json'); await writeFile(manifestPath, `${JSON.stringify(manifest)}\n`); const result = await verifyRegistry({ root, manifest: manifestPath, structureOnly: true, fixtureProfile: false, }); const required = ['criteria', 'gates', 'proseClaims', 'compatibilityScenarios']; const missing = required.filter( (population) => !result.failures.some((failure) => failure.includes(`${population} population must be non-empty and anchored`), ), ); if (missing.length > 0) { process.stdout.write(`empty populations were not rejected: ${missing.join(', ')}\n`); process.exitCode = 0; } else { process.stderr.write( 'empty universally quantified registry populations rejected before evaluation\n', ); process.exitCode = 1; } } finally { await rm(directory, { recursive: true, force: true }); }