A snapshot: read at commit 707a04c7ce8 on 2026-10-18T00:06:01Z by majordomus 0.29.0. Nothing on this page is read again. See it live
I1948
Evidence is judged at the presented revision, by one freshness function
Where it stands
devtask.issue- Readiness
- complete completion is recorded and every required evidence token is present
- Status
- DONE
- Can start
- not now
- Milestone
- Milestone status
- ACTIVE
- Wave
0- Waiting on
- none
- Holds back
- Behind it in all
15- Evidence
3of3
Moves
plan.transitionWhat it is
- Objective
- Write the freshness table, the presented revision, containment and aggregation of ADR 0087 once each (decisions 4, 5, 7 and 8), so that evidence show can judge the checked-out commit by the ledger committed in it and every verdict comes from one derivation.
- Why
- The rules module holds a second copy of the freshness derivation, a skip reads failing, a plain maximum hides a failure behind an absence, and the corpus verdict proposed in PR #597 says proven over rules whose inputs are merely unchanged. No command judges a commit rather than the working tree.
- Now
- evidence/mod.rs and rules/mod.rs each derive freshness; containment lives privately in the delivery module of PR #600; PR #597 adds RulesVerdict, which accepts inputs_unchanged as proven. This slice is stacked on PR #597 (fix/a-verdict-says-what-was-proven), with its pull request into that branch.
- Wanted
- evidence::freshness implements ADR 0087's freshness table and one aggregate() with failure precedence; `evidence show --presented <rev> --presented-tree <state>` judges the checked-out commit by its committed ledger and reads the working ledger's uncommitted executions through the monotone rule; containment lives in git/mod.rs; the rules module's copy is gone while evidence::changed_since stays byte-for-byte; RulesVerdict is proven only when every blocking rule is proven; ProofState::token() maps each wire word to its design token.
- Done when
- unknown: the record declares no `completion`
- Risk
- Stacked on PR #597, it lands with #597: merged into it, or retargeted to master after #597 lands. If scripts/ci/version-matches-surface asks for a bump, the slice stops and reports; it never bumps.
Acceptance
- Each row of ADR 0087's freshness table is reached by a case assertion, and only row 10 yields proven
- evidence show --presented refuses a revision that is not the checked-out commit, reads the ledger committed in it, and caps proven at stale over a clean failing run the working ledger holds uncommitted
- A skip reads not_run with its reason, never failing and never proven
- aggregate() returns failing whenever any part fails, before any absence
- RulesVerdict is proven only when every blocking rule is proven
- The rules module's own freshness derivation is removed, and evidence::changed_since is unchanged byte-for-byte
- Merging with PR #578 in either order produces no conflict
- Validation
bash test/run.sh 502_evidence_is_judged_at_the_presented_revisionbash test/run.sh 133_rule_graphbash test/run.sh 124_evidencecargo test --workspace --all-features- Evidence required
one_freshness_functionpresented_revision_judgedfailure_precedes_absence- Evidence present
presented_revision_judgedfailure_precedes_absenceone_freshness_function
Scope
- Touches
apps/majordomus-cli/src/git/mod.rsapps/majordomus-cli/src/evidence/mod.rsapps/majordomus-cli/src/evidence/freshness.rsapps/majordomus-cli/src/evidence/ledger.rsapps/majordomus-cli/src/rules/mod.rsapps/majordomus-cli/src/rules/tests.rsapps/majordomus-cli/src/capability/builtin/evidence.rsapps/majordomus-cli/src/cli.rsapps/majordomus-cli/src/commands/evidence.rsdocs/EVIDENCE.mddocs/DOCTRINE.mddocs/HOW_IT_WORKS.mddocs/CONCEPTS.mddocs/CLAIMS.yamldocs/claims.ai/repo/features/evidence.mdtest/cases/502_evidence_is_judged_at_the_presented_revision.shtest/cases/133_rule_graph.sh- Not
apps/majordomus-cli/src/environment: the entry preflight is I1965'sChanging evidence::changed_since, which PR #578 calls from the preflightAdding a field to Execution or RunRefA version bump- Depends on
- none
- Priority
- p1
- Profile
- implementation
- Parallel safe
- false
- Owner
- unknown: the record declares no `owner`
The work so far
- Branches
- none
- Merged
- none
- Commits
0- Trunk
- master
- Sessions
- none
- Created
- 2026-09-26
- Updated
- 2026-10-08T10:52:43Z
- Started
- 2026-10-08T10:50:08Z
- Verified
- 2026-10-08T10:52:39Z
- Completed
- 2026-10-08T10:52:43Z
Synchronisation
- Adapter
scripts/github-sync- Repository
- unknown: the derived plan's header carries no repository
- External issue
- unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
- State there
- unknown: a live GitHub state; this executable makes no network call, so only `scripts/github-sync --check` can answer it
Findings
Nothing is wrong with these records.