I1955 — The evidence publication is an allow-listed projection
Add evidence publish, which reads the ledger committed at the presented commit, the run records and coverage, applies the monotone rule, and writes an allow-listed publication with its publication state, carrying text only through the one redactor (ADR 0087 decisions 3 and 14).
BLOCKED wave 3 · p1 · implementation profile · runs alone
Blocked. This issue cannot start until I1953 is done. The status is derived from that, not declared.
Objective
Add evidence publish, which reads the ledger committed at the presented commit, the run records and coverage, applies the monotone rule, and writes an allow-listed publication with its publication state, carrying text only through the one redactor (ADR 0087 decisions 3 and 14).
Why
The site needs a typed dataset whose verdicts are the tracked ledger's at the build commit. The interim publication of ADR 0068 computes its state in a shell script.
Current state
scripts/pages evidence (PR #577, with I1949) writes site/data/evidence.json from a CI artifact; no typed publication exists.
Desired state
majordomus evidence publish --presented <commit> --presented-tree <state> --from <dir> --out <dir> writes an EvidencePublication whose one state (dirty, stale, current, pending or unknown) is the first matching row of ADR 0087 decision 3's publication table, whose every field is on the allow-list, and whose every text has passed the redactor.
Scope
- apps/majordomus-cli/src/evidence
- apps/majordomus-cli/src/capability/builtin/evidence.rs
- apps/majordomus-cli/src/cli.rs
- apps/majordomus-cli/src/commands/evidence.rs
- apps/majordomus-cli/tests/evidence_publication.rs
- test/cases
- docs/EVIDENCE.md
- docs/CLAIMS.yaml
- docs/claims
- .ai/repo/features/evidence.md
Out of scope
- scripts/pages and the site build, which are I1959's
- A version bump
Dependencies
- I1953BLOCKED Evidence answers by subject, on every surface
- I1950DONE Text a run printed is redacted by one rule set
What waits on this
- I1957BLOCKED Every test line is read, and a local run stays local
- I1958BLOCKED Evidence has one route per subject, and every panel is joined to its subject
- I1959BLOCKED The evidence publication is typed, bound to its build, and kept on gh-pages
Acceptance criteria
- The publication carries only allow-listed fields, and a field off the list is not published
- Every text it carries has passed the one redactor, and the artifact passes generate::forbidden_in
- The publication state is the first matching row of ADR 0087 decision 3's publication table (dirty, stale, current, pending, unknown), decided from what the publication observes: a dirty build that a record also contradicts reads dirty and names the record, a run concluded without a record reads unknown, and a record of an ancestor only never reads current
- No verdict in it is stronger than the ledger committed at the presented commit
Validation
- bash test/run.sh 512_evidence_publication_is_a_projection
- cargo test --test evidence_publication
Evidence required
- publication_allow_listed
- publication_states_defined
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I1955.yaml. Read it back with majordomus plan show I1955.