merge: align documentation readiness evidence

This commit is contained in:
donghyeon-ka
2026-07-25 22:17:47 +09:00
6 changed files with 83 additions and 23 deletions
+4
View File
@@ -1,5 +1,9 @@
# Architecture overview # Architecture overview
This Mermaid view is a repository-local implementation projection. The
`PASS_SCOPED` reviewer evidence applies to the canonical draw.io diagram named
in `review-ledger.json`, not automatically to edits in this file.
```mermaid ```mermaid
flowchart LR flowchart LR
Bootstrap[bootstrap / composition root] --> Presentation[presentation] Bootstrap[bootstrap / composition root] --> Presentation[presentation]
+22
View File
@@ -0,0 +1,22 @@
# Imported scoped diagram review evidence
This ledger entry consumes the canonical evidence already recorded by the
`ca-skeleton-frontend-operational-contract` project note. It does not claim
review of the repository-local Mermaid projections or of the complete
production deployment topology.
- Reviewer: `wiki-diagram-reviewer`
- Standard: `rules/diagram-standards.md` v2
- Canonical report:
`docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/diagram-review.md`
- Canonical report SHA-256:
`b4d2a35e4f07e176717786408f98dab5cee1047f77f6ff61f5faeddfccd78a29`
| Canonical diagram | SHA-256 | Score | Verdict | Reviewed scope |
| --- | --- | ---: | --- | --- |
| `raw/diagrams/ca-skeleton-frontend/architecture-overview-2026-07-18.drawio` | `c0ae56c9c964c5c6e698ab7dcc91736b9b811b2b834381817905db81c4230ba0` | 100 | PASS | Clean Architecture compile-time dependency ownership |
| `raw/diagrams/ca-skeleton-frontend/architecture-deployment-2026-07-18.drawio` | `9a654326fb840ddf24b832221ff7eec4b8fadd9f87ad84174fccfa3bfcd1a25b` | 100 | PASS | immutable static assets and mutable `/config.json` delivery |
The canonical report explicitly limits this `PASS_SCOPED`: it does not verify
the complete release/rollback topology, the implementation topology, or live
hosting state.
+20 -8
View File
@@ -1,17 +1,29 @@
{ {
"schemaVersion": 1, "schemaVersion": 1,
"status": "pending-review", "status": "PASS_SCOPED",
"reviewerThreshold": null, "reviewer": "wiki-diagram-reviewer",
"standard": "rules/diagram-standards.md v2",
"evidenceReport": {
"repoPath": "docs/architecture/review-evidence.md",
"canonicalPath": "docs/superpowers/specs/2026-07-18-ca-skeleton-frontend-operational-contract-review/diagram-review.md",
"canonicalSha256": "b4d2a35e4f07e176717786408f98dab5cee1047f77f6ff61f5faeddfccd78a29"
},
"reviews": { "reviews": {
"overview": { "overview": {
"path": "docs/architecture/overview.md", "sourcePath": "raw/diagrams/ca-skeleton-frontend/architecture-overview-2026-07-18.drawio",
"reviewer": null, "sha256": "c0ae56c9c964c5c6e698ab7dcc91736b9b811b2b834381817905db81c4230ba0",
"score": null "score": 100,
"verdict": "PASS",
"thresholdSatisfied": true,
"scope": "Clean Architecture compile-time dependency ownership"
}, },
"staticDelivery": { "staticDelivery": {
"path": "docs/architecture/static-delivery.md", "sourcePath": "raw/diagrams/ca-skeleton-frontend/architecture-deployment-2026-07-18.drawio",
"reviewer": null, "sha256": "9a654326fb840ddf24b832221ff7eec4b8fadd9f87ad84174fccfa3bfcd1a25b",
"score": null "score": 100,
"verdict": "PASS",
"thresholdSatisfied": true,
"scope": "immutable static assets and mutable /config.json delivery"
} }
} }
} }
+4
View File
@@ -1,5 +1,9 @@
# Static asset and runtime-config delivery # Static asset and runtime-config delivery
This Mermaid view is a repository-local implementation projection. The
`PASS_SCOPED` reviewer evidence applies only to the canonical static-delivery
draw.io scope recorded in `review-ledger.json`.
```mermaid ```mermaid
sequenceDiagram sequenceDiagram
participant CI participant CI
+4 -3
View File
@@ -18,9 +18,10 @@ DOCUMENTATION_READY (off-chain)
Pull requests and `develop` pushes evaluate merge readiness. Version tags Pull requests and `develop` pushes evaluate merge readiness. Version tags
evaluate merge then release readiness. Production and field evaluation require evaluate merge then release readiness. Production and field evaluation require
an explicit workflow dispatch. The field tier cannot pass until the 28-day an explicit workflow dispatch. The field tier cannot pass until the 28-day
sample threshold decision is recorded. Documentation readiness cannot pass sample threshold decision is recorded. Documentation readiness consumes the
until both scoped diagrams have a recorded reviewer threshold and signed canonical project-note evidence in which both scoped diagrams already received
scores. 100/100 `PASS_SCOPED`; the repo ledger preserves the evidence scope and
canonical digests.
All jobs upload the shared `artifacts/` tree even after failure. Numeric All jobs upload the shared `artifacts/` tree even after failure. Numeric
retention remains an organization/provider decision; the workflow intentionally retention remains an organization/provider decision; the workflow intentionally
+29 -12
View File
@@ -3,29 +3,43 @@ import { mkdir, readFile, writeFile } from "node:fs/promises";
const ledger = JSON.parse( const ledger = JSON.parse(
await readFile("docs/architecture/review-ledger.json", "utf8"), await readFile("docs/architecture/review-ledger.json", "utf8"),
); );
const evidence = await readFile(ledger.evidenceReport.repoPath, "utf8");
const results = []; const results = [];
for (const [diagram, review] of Object.entries(ledger.reviews)) { for (const [diagram, review] of Object.entries(ledger.reviews)) {
const content = await readFile(review.path, "utf8"); const sourceReferenced = evidence.includes(review.sourcePath);
const hasDiagram = /```mermaid[\s\S]+```/.test(content); const digestReferenced =
/^[0-9a-f]{64}$/.test(review.sha256) &&
evidence.includes(review.sha256);
const scorePass = const scorePass =
typeof ledger.reviewerThreshold === "number" && review.thresholdSatisfied === true &&
review.verdict === "PASS" &&
typeof review.score === "number" && typeof review.score === "number" &&
review.score >= ledger.reviewerThreshold; evidence.includes(`| ${review.score} | PASS |`);
results.push({ results.push({
diagram, diagram,
path: review.path, sourcePath: review.sourcePath,
hasDiagram, sha256: review.sha256,
reviewer: review.reviewer, sourceReferenced,
digestReferenced,
reviewer: ledger.reviewer,
score: review.score, score: review.score,
scorePass, scorePass,
passed: passed:
hasDiagram && sourceReferenced &&
Boolean(review.reviewer) && digestReferenced &&
ledger.reviewer === "wiki-diagram-reviewer" &&
ledger.standard === "rules/diagram-standards.md v2" &&
scorePass && scorePass &&
ledger.status === "PASS_SCOPED", 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 mkdir("artifacts/quality", { recursive: true });
await writeFile( await writeFile(
"artifacts/quality/documentation-review.json", "artifacts/quality/documentation-review.json",
@@ -34,7 +48,10 @@ await writeFile(
schemaVersion: 1, schemaVersion: 1,
generatedAt: new Date().toISOString(), generatedAt: new Date().toISOString(),
status: ledger.status, status: ledger.status,
reviewerThreshold: ledger.reviewerThreshold, reviewer: ledger.reviewer,
standard: ledger.standard,
evidenceReport: ledger.evidenceReport,
reportDigestValid,
results, results,
passed, passed,
}, },
@@ -44,7 +61,7 @@ await writeFile(
); );
if (!passed) { if (!passed) {
process.stderr.write( 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); process.exit(1);
} }