Skip to content

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

Part of test-evidence — Every verifiable claim and widget resolves to revision-bound test evidence, on every surface.

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

What waits on this

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.

Searches the titles and descriptions of every page this site publishes.