fix: consume canonical scoped diagram review evidence
This commit is contained in:
@@ -3,29 +3,43 @@ import { mkdir, readFile, writeFile } from "node:fs/promises";
|
||||
const ledger = JSON.parse(
|
||||
await readFile("docs/architecture/review-ledger.json", "utf8"),
|
||||
);
|
||||
const evidence = await readFile(ledger.evidenceReport.repoPath, "utf8");
|
||||
const results = [];
|
||||
for (const [diagram, review] of Object.entries(ledger.reviews)) {
|
||||
const content = await readFile(review.path, "utf8");
|
||||
const hasDiagram = /```mermaid[\s\S]+```/.test(content);
|
||||
const sourceReferenced = evidence.includes(review.sourcePath);
|
||||
const digestReferenced =
|
||||
/^[0-9a-f]{64}$/.test(review.sha256) &&
|
||||
evidence.includes(review.sha256);
|
||||
const scorePass =
|
||||
typeof ledger.reviewerThreshold === "number" &&
|
||||
review.thresholdSatisfied === true &&
|
||||
review.verdict === "PASS" &&
|
||||
typeof review.score === "number" &&
|
||||
review.score >= ledger.reviewerThreshold;
|
||||
evidence.includes(`| ${review.score} | PASS |`);
|
||||
results.push({
|
||||
diagram,
|
||||
path: review.path,
|
||||
hasDiagram,
|
||||
reviewer: review.reviewer,
|
||||
sourcePath: review.sourcePath,
|
||||
sha256: review.sha256,
|
||||
sourceReferenced,
|
||||
digestReferenced,
|
||||
reviewer: ledger.reviewer,
|
||||
score: review.score,
|
||||
scorePass,
|
||||
passed:
|
||||
hasDiagram &&
|
||||
Boolean(review.reviewer) &&
|
||||
sourceReferenced &&
|
||||
digestReferenced &&
|
||||
ledger.reviewer === "wiki-diagram-reviewer" &&
|
||||
ledger.standard === "rules/diagram-standards.md v2" &&
|
||||
scorePass &&
|
||||
ledger.status === "PASS_SCOPED",
|
||||
});
|
||||
}
|
||||
const passed = results.every((result) => result.passed);
|
||||
const reportDigestValid =
|
||||
/^[0-9a-f]{64}$/.test(ledger.evidenceReport.canonicalSha256) &&
|
||||
evidence.includes(ledger.evidenceReport.canonicalSha256);
|
||||
const passed =
|
||||
reportDigestValid &&
|
||||
results.length === 2 &&
|
||||
results.every((result) => result.passed);
|
||||
await mkdir("artifacts/quality", { recursive: true });
|
||||
await writeFile(
|
||||
"artifacts/quality/documentation-review.json",
|
||||
@@ -34,7 +48,10 @@ await writeFile(
|
||||
schemaVersion: 1,
|
||||
generatedAt: new Date().toISOString(),
|
||||
status: ledger.status,
|
||||
reviewerThreshold: ledger.reviewerThreshold,
|
||||
reviewer: ledger.reviewer,
|
||||
standard: ledger.standard,
|
||||
evidenceReport: ledger.evidenceReport,
|
||||
reportDigestValid,
|
||||
results,
|
||||
passed,
|
||||
},
|
||||
@@ -44,7 +61,7 @@ await writeFile(
|
||||
);
|
||||
if (!passed) {
|
||||
process.stderr.write(
|
||||
"Documentation readiness: FAIL_UNVERIFIED (reviewer threshold and signed reviews required)\n",
|
||||
"Documentation readiness: FAIL_UNVERIFIED (canonical scoped-review evidence is incomplete)\n",
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user