I3395 — An intent criterion can cite a verification the repository's profile declares, and a recorded passing run of it at the current tree makes the criterion current
Accept a verify:<name> evidence reference in apps/majordomus-cli/src/intent.rs that resolves against the effective profile's verification commands, and let majordomus evidence record --verify <name> run that command and record its exit, duration, tree digest and time in the evidence ledger. The criterion is current when the newest record at the current tree passed, and stale or failing otherwise. Extend case 367 with a fixture repository whose tests are pytest-style files outside test/cases/.
READY wave 0 · p0 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3395 will be accepted.
Objective
Accept a verify:<name> evidence reference in apps/majordomus-cli/src/intent.rs that resolves against the effective profile's verification commands, and let majordomus evidence record --verify <name> run that command and record its exit, duration, tree digest and time in the evidence ledger. The criterion is current when the newest record at the current tree passed, and stale or failing otherwise. Extend case 367 with a fixture repository whose tests are pytest-style files outside test/cases/.
Why
T6 of the owner's report of 2026-10-19 asks for a first verified intent without archaeology; today it is impossible in a foreign repository, because a test reference must name test/cases/ or apps/majordomus-cli/tests/ and a command criterion is never met.
Current state
apps/majordomus-cli/src/intent.rs:1092-1112 accepts test references by TestId and refuses others; :1131-1135 derives a command criterion NotDerivable; :1183-1193 test_id accepts only those paths and the suite: and crate: prefixes; apps/majordomus-cli/src/evidence/record.rs:1-10 records only test/run.sh reports and cargo output.
Desired state
In a foreign fixture, a verify: criterion goes from unresolved to current after a recorded passing run, and to stale after the tree changes.
Scope
- apps/majordomus-cli/src/intent.rs
- apps/majordomus-cli/src/evidence/record.rs
- apps/majordomus-cli/src/evidence/ledger.rs
- apps/majordomus-cli/src/commands/evidence.rs
- apps/majordomus-cli/tests/intent.rs
- test/cases/367_an_intent_is_satisfied_only_by_evidence.sh
- docs/generated/cli.json
- docs/generated/cli.md
- docs/generated/cli.yaml
- docs/generated/openapi.json
- docs/generated/openapi.yaml
Out of scope
- Making command criteria derivable in general
- Changing how test/run.sh or cargo results are recorded
Dependencies
None. This issue is a root of the graph.
What waits on this
Acceptance criteria
- A verify: reference naming an undeclared verification is unresolved with a finding naming it
- A recorded passing run at the current tree makes the criterion current and, with no other criterion, the verdict satisfied
- A failing run, or a passing run at another tree, does not
- Case 367's existing assertions still hold
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test intent
- bash test/run.sh 367_an_intent_is_satisfied_only_by_evidence
- majordomus generate --check
Evidence required
- test_verify_criterion_in_foreign_repository
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/I3395.yaml. Read it back with majordomus plan show I3395.