Plan items 0.1 and 0.2 in PROPOSAL_mdl_beta_syntax_freeze.md (§9). Enforces the round-trip laws of ADR-0012.
Problem
Running a document's own describe output unchanged as create or modify silently lost data in 7 of the 12 Studio Pro-authored documents it wrote (proposal §8.1). Nothing in CI checks this. Every existing test uses mxcli-authored content. In mxcli-authored content GUID == $ID, so identity loss cannot show up.
Scope
-
Commit PedApp as a fixture (cleared for use). It is Studio Pro-authored and has microflows, nanoflows, pages, snippets, translations and table-stored associations. Add a workflow and REST documents to it in Studio Pro.
-
Integration test (-tags integration). For every document:
describe;
exec the output unchanged on a copy;
- compare canonical BSON per unit (
modelsdk/canon).
The test checks both laws. GetPut: nothing is written. PutGet: a second describe is identical to the first.
-
Allowlist of known failures. It starts as the §8.1 list and may only shrink. The test fails if an allowlisted case starts passing and nobody removes it from the list.
-
Include a control. Run one deliberately edited statement and assert that it does write. This follows CLAUDE.md: "nothing changed" tests need a control.
Done when
The test runs in CI, and its allowlist is exactly the losses from the round-trip audit.
Plan items 0.1 and 0.2 in PROPOSAL_mdl_beta_syntax_freeze.md (§9). Enforces the round-trip laws of ADR-0012.
Problem
Running a document's own
describeoutput unchanged ascreate or modifysilently lost data in 7 of the 12 Studio Pro-authored documents it wrote (proposal §8.1). Nothing in CI checks this. Every existing test uses mxcli-authored content. In mxcli-authored content GUID ==$ID, so identity loss cannot show up.Scope
Commit PedApp as a fixture (cleared for use). It is Studio Pro-authored and has microflows, nanoflows, pages, snippets, translations and table-stored associations. Add a workflow and REST documents to it in Studio Pro.
Integration test (
-tags integration). For every document:describe;execthe output unchanged on a copy;modelsdk/canon).The test checks both laws. GetPut: nothing is written. PutGet: a second
describeis identical to the first.Allowlist of known failures. It starts as the §8.1 list and may only shrink. The test fails if an allowlisted case starts passing and nobody removes it from the list.
Include a control. Run one deliberately edited statement and assert that it does write. This follows CLAUDE.md: "nothing changed" tests need a control.
Done when
The test runs in CI, and its allowlist is exactly the losses from the round-trip audit.