Skip to content

I1952 — Evidence subjects are derived once, in Rust

Derive the subject index of ADR 0087 decision 9 from existing declarations, compute a subject's verdict over its members through the one aggregation, and have majordomus generate write it as site/data/registry/evidence-subjects.json.

DONE wave 1 · p1 · implementation profile · parallel safe

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

Objective

Derive the subject index of ADR 0087 decision 9 from existing declarations, compute a subject's verdict over its members through the one aggregation, and have majordomus generate write it as site/data/registry/evidence-subjects.json.

Why

Nothing ties a widget to a subject, and the command-to-test join is derived in shell more than once, with different rules for which header line counts.

Current state

No subject index exists. scripts/generate-site-data derives the tests of commands.json, lib/commands.sh reads the first header line, and scripts/ci/command-furnished reads any line.

Desired state

evidence::subject derives claim, rule, feature, command, capability, mcp and use_case subjects; RuleState::as_proof() is the one declared mapping from a rule state; subject findings are a separate, advisory list; majordomus generate writes site/data/registry/evidence-subjects.json, declared in docs/generated/artifacts.json so its merge is derived; and a case holds the shell derivations equal to the index.

Scope

  • apps/majordomus-cli/src/evidence/subject.rs
  • apps/majordomus-cli/src/evidence/mod.rs
  • apps/majordomus-cli/src/rules/mod.rs
  • apps/majordomus-cli/src/generate.rs
  • apps/majordomus-cli/tests/generated_documents.rs
  • share/schemas/generated/site-evidence-subjects.schema.json
  • site/data/registry/evidence-subjects.json
  • test/cases/507_evidence_subjects_are_derived.sh
  • docs/EVIDENCE.md
  • docs/CLAIMS.yaml
  • docs/claims
  • .gitattributes

Out of scope

  • site/data/generated, which scripts/generate-site-data owns and replaces wholesale
  • An authored list of subjects
  • A capability: the index is read by I1953
  • Making subject findings refuse, which is I1962's

Dependencies

What waits on this

Acceptance criteria

  • The index is written only by majordomus generate, to site/data/registry/evidence-subjects.json, and holds no ledger content and no commit
  • A subject's verdict is computed over its members' own verdicts, a rule member contributing through RuleState::as_proof()
  • A case holds the tests of commands.json equal to the index's command routes
  • Subject findings never enter the claim report's findings

Validation

  • bash test/run.sh 507_evidence_subjects_are_derived
  • majordomus generate --check
  • cargo test --workspace --all-features

Evidence required

  • subjects_derived_once
  • parity_with_shell_derivations

Evidence

coverstypecommandresultat commit
subjects_derived_oncetestbash test/run.sh 507_evidence_subjects_are_derivedok at 4090b2b8ae: the index is written by generate site under site/data/registry, carries no ledger key, is byte-identical across two derivations, and a hand edit is refused with exit 104090b2b
parity_with_shell_derivationstestbash test/run.sh 507_evidence_subjects_are_derivedok at 4090b2b8ae: the committed command pages, capability pages, doctrine pages and command graph equal the index4090b2b

Timeline

started
2026-10-08T10:53:02Z
verified
2026-10-08T10:53:08Z
completed
2026-10-08T10:53:13Z

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/I1952.yaml. Read it back with majordomus plan show I1952.

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