I3121 — The release compatibility analyzer's invariants hold under property tests
Add proptest properties to apps/majordomus-cli/src/release/compat.rs: diff(a,a) is empty; reordering a surface gives no change; adding a distinct atom is at least minor; removing one is at least major from 1.0; normalisation is idempotent.
READY wave 0 · p2 · implementation profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3121 will be accepted.
Objective
Add proptest properties to apps/majordomus-cli/src/release/compat.rs: diff(a,a) is empty; reordering a surface gives no change; adding a distinct atom is at least minor; removing one is at least major from 1.0; normalisation is idempotent.
Why
Proposed on 2026-09-11 (c111#6) when the owner ordered that Elm-like versioning be enforced. The version a landing allocates (ADR 0134) rests on this analyzer, and on master 707a04c (grep -c '#\\[test\\]' apps/majordomus-cli/src/release/compat.rs, 2026-10-18) it has 33 example tests and no property. Sources: chatgpt-majordomus:c111#6, chatgpt-majordomus:c079#6.
Current state
compat.rs: 33 #[test]s on master 707a04c (same grep). proptest is a dev-dependency used in other modules (mesh, deploy, served, integration, economics). surface.rs:699 tests normalisation idempotence on one example.
Desired state
Five named properties in the lib suite.
Scope
- apps/majordomus-cli/src/release/compat.rs
Out of scope
- Changing the bump policy
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- Each of the five properties runs at the default case count and passes
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib release::compat
Evidence required
- compat_properties
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/I3121.yaml. Read it back with majordomus plan show I3121.