Skip to content

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

Part of a-test-fails-when-the-code-is-wrong — The suites that guard critical predicates are shown to fail when those predicates are wrong.

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.

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