fix: consume canonical scoped diagram review evidence

This commit is contained in:
donghyeon-ka
2026-07-25 22:17:47 +09:00
parent c5e218d37a
commit 50dc803f19
6 changed files with 83 additions and 23 deletions
+29 -12
View File
@@ -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);
}