I3124 — A JUnit XML report a repository already produces is imported into the evidence ledger, and nothing in that repository changes
Add an importer (majordomus evidence import --junit <file>) that normalises test cases into ledger executions with suite, case, outcome, duration, commit and tree state. Malformed XML, duplicate imports, missing artifacts and a stale revision are typed refusals. For a foreign repository this is the default Observe mode: discover and import, never instrument.
READY wave 1 · p2 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3124 will be accepted.
Objective
Add an importer (majordomus evidence import --junit <file>) that normalises test cases into ledger executions with suite, case, outcome, duration, commit and tree state. Malformed XML, duplicate imports, missing artifacts and a stale revision are typed refusals. For a foreign repository this is the default Observe mode: discover and import, never instrument.
Why
On 2026-10-13 (c246#0, #3) the owner asked for derived JUnit/Cobertura and for non-invasive integration. A second adopter (TypeScript, Vitest) cannot bring its results today. ADR 0041 rejected JUnit as the store; as an import format it does not contradict that decision (see the ADR proposal). It extends milestone test-evidence. Proposed in ADR 0189 (JUnit and Cobertura are formats evidence is imported from and exported to; the tracked ledger stays the only store) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c246#0, chatgpt-majordomus:c246#3, chatgpt-majordomus:c246#4, chatgpt-majordomus:c246#7.
Current state
Only this repository's runners reach the ledger (I1954 BLOCKED, I2786 READY). No importer exists.
Desired state
A Vitest or cargo-nextest JUnit file from a fixture repository becomes ledger executions that claims can cite.
Scope
- apps/majordomus-cli/src/evidence
- apps/majordomus-cli/src/commands/evidence.rs
- docs/EVIDENCE.md
Out of scope
- Cucumber, LCOV and Cobertura (I3125)
- Running tests
Dependencies
What waits on this
Acceptance criteria
- A valid report imports deterministically and a second import is a no-op
- Malformed, stale and duplicate imports are refused with distinct codes
- A fixture foreign repository is byte-identical after import, outside .ai/local
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib evidence
Evidence required
- case_junit_import
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/I3124.yaml. Read it back with majordomus plan show I3124.