merge: align documentation readiness evidence
This commit is contained in:
@@ -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]
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user