Files
c0py/scripts/validate-canonical-architecture.mjs

51 lines
1.2 KiB
JavaScript

import { readFile, access } from "node:fs/promises";
const requiredFiles = [
"docs/MASTERPLAN.md",
"docs/STANDARDS.md",
"docs/AUTOMATIONS.md",
"docs/UPSTREAM-CAPABILITY-MATRIX.md",
"docs/spec/DIGITAL-TWIN-SPEC.md",
"packages/types/src/index.ts",
];
for (const path of requiredFiles) {
await access(path).catch(() => {
throw new Error(`Missing canonical C0PY artifact: ${path}`);
});
}
const types = await readFile("packages/types/src/index.ts", "utf8");
const requiredContracts = [
"CapabilityDisposition",
"EvidenceConfidence",
"EvidenceRecord",
"CaptureProfile",
"ProductWorkflow",
"FidelityVector",
"ReconstructionSpec",
];
for (const contract of requiredContracts) {
if (!types.includes(` ${contract}`)) {
throw new Error(`Missing canonical contract: ${contract}`);
}
}
const masterplan = await readFile("docs/MASTERPLAN.md", "utf8");
for (const disposition of [
"CORE",
"DEPENDENCY",
"CHERRY_PICK",
"ADAPTER",
"REIMPLEMENT",
"REFERENCE_ONLY",
"DROP",
]) {
if (!masterplan.includes(`\`${disposition}\``)) {
throw new Error(`Masterplan is missing capability disposition: ${disposition}`);
}
}
console.log("C0PY canonical architecture policy: OK");