From 0e6a6ede2be5943b7696667bd10d6ae4635f15b8 Mon Sep 17 00:00:00 2001 From: Maurits Visser Date: Tue, 8 Sep 2026 14:36:41 +0000 Subject: [PATCH 1/2] Re-probe BUG-76 and BUG-121 on v0.21.0, and correct BUG-76's diagnosis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both are still open on mxcli v0.21.0 (released 2026-09-06), probed on a throwaway project copy against Mendix 11.13.0. BUG-121: the same script executed through v0.20.0 and v0.21.0 produces a byte-identical workflow unit — zero diff from bson dump after blanking the $ID GUIDs — so the runtime behaviour cannot have changed. The re-probe also corrects the entry's own title: the path contents ARE present in the stored BSON on both versions, so "writes the paths but not their contents" names the symptom, not the mechanism, and the mechanism is still unidentified. BUG-76: the "unconditional storage corruption" diagnosis in this entry is wrong. It was corrected on a client project on 2026-09-02 but never promoted here. It is a pincer between two spellings: bare outcomes pass mxcli check and make the model unloadable, while qualified outcomes are rejected by rule MDL-WF03 at check and load clean via exec --no-check with one CE0117 for the empty expression. mxcli mandates the spelling the loader rejects and rejects the spelling it accepts. That implies two independent fixes, not one. The issue is already filed upstream as mendixlabs/mxcli#1031, so this goes into the draft as a comment to post rather than a rewritten body. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01WnXVbv8EzsZJwy713L6WVw --- CHANGELOG.md | 3 + bug-logs/mxcli-bugs.md | 55 +++++++++++++++++++ ...lel-split-writes-paths-without-contents.md | 27 ++++++++- ...bug76-workflow-decision-enum-identifier.md | 26 +++++++++ 4 files changed, 110 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e54b75a..ca3cf76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ moment updating it became a separate chore). One line per change: Kinds: `new` · `fix` · `learn` (a skill/learning) · `process` (rules, templates, CI). Credit the person or project that surfaced the change — the credit line is the thank-you. +## 2026-09-08 +- fix(bug-logs): re-probed the two workflow blockers on mxcli **v0.21.0** (released 2026-09-06, Mendix 11.13.0) — **both still open**, and BUG-76's diagnosis in this log was wrong. BUG-121 (`PARALLEL SPLIT`): the same script executed through v0.20.0 and v0.21.0 on two throwaway copies produces a **byte-identical** workflow unit (zero diff from `bson dump` after blanking the `$ID` GUIDs), so the runtime behaviour cannot have changed — and the path contents *are* present in the stored BSON on both versions, so the entry's own title ("writes the paths but not their contents") names the symptom, not the mechanism, which is still unidentified. BUG-76 (`DECISION`): not unconditional storage corruption but a **pincer between two spellings** — a bare outcome passes `mxcli check` and makes the model unloadable (`StorageLoadException`, "not a valid EnumerationValueIdentifier"), while a qualified one is rejected by mxcli's own `MDL-WF03` and loads clean via `exec --no-check` with a single `CE0117` for the empty expression; mxcli mandates the spelling the loader rejects and rejects the one it accepts, which implies two independent fixes rather than one. The correction was made on the source project on 2026-09-02 and never promoted here; it is already filed upstream as mendixlabs/mxcli#1031, so it goes into the draft as a comment to post rather than a rewritten body — a topbar-titled portal project + ## 2026-09-07 - new(bug-logs): seven mxcli defects harvested from a topbar-titled portal project's build (mxcli v0.20.0, Mendix 11.13.0), each with an upstream draft — BUG-120 (three write-path asymmetries; the serious one: `ALTER ENTITY … ADD ATTRIBUTE` reconciles only the widest access rule and silently skips narrower ones — a valid model with wrong security), BUG-121 (`PARALLEL SPLIT` writes its paths but drops their contents: loads, passes every gate, deadlocks at run time — `workflow-structure-rules.md` §11's *proven* row retracted, plus a new CE6681 forward-`JUMP TO` row and the `$WorkflowUserTask`-not-in-call-microflow limit), BUG-122 (`ALTER PAGE … SET PageSize` rejects what `CREATE` accepts on the same widget), BUG-123 (`SHOW CALLERS OF` indexes neither page-button actions nor `show page` targets), BUG-124 (`DESCRIBE MICROFLOW` omits `without events`, so a round-trip silently re-enables event handlers), BUG-125 (`check --references` cannot resolve any enumeration — four A/B probes), BUG-126 (`ALTER PAGE … SET Label` prints "Altered page" and discards the value while `SET Class` applies and `SET Caption` errors by name). Renumbered at merge from 113–119, all seven of which master had taken while the branch was open; `bug-submission-checklist.md` §0 now states the merge-queue rule (`BUG-DRAFT-` in PRs) instead of "grep the toolkit and take the next number", which this branch did and still collided — a topbar-titled portal project, merged by the toolkit queue diff --git a/bug-logs/mxcli-bugs.md b/bug-logs/mxcli-bugs.md index d017359..d8dc49f 100644 --- a/bug-logs/mxcli-bugs.md +++ b/bug-logs/mxcli-bugs.md @@ -2835,6 +2835,41 @@ DECISION"` returns no help text at all. Neither the wrong docs nor the missing h this specific corruption (the corruption reproduces with correct arrow syntax too), but both should be fixed alongside it. +### Re-diagnosed 2026-09-02, and re-probed on mxcli v0.21.0 (2026-09-08) — still open + +**The "unconditional storage corruption" characterisation in this entry's title is wrong.** It was +corrected on a client project on 2026-09-02 (v0.20.0) but never promoted here until now. The defect +is narrower than the title claims, and it has a workaround. + +It is a **pincer between two spellings**, both jaws of which are still closed on v0.21.0 +(re-probed 2026-09-08, Mendix 11.13.0, on a throwaway full project copy): + +| Outcome spelling | `mxcli check` | Native `mx check` | Net | +|---|---|---|---| +| Bare — `'Yes'` | **passes** | **fails to load** — `Mendix.Modeler.Storage.StorageLoadException`: *"Enumeration value condition outcome in has an invalid value '' for property Value. The text 'Yes' is not a valid EnumerationValueIdentifier."* | unloadable model | +| Qualified — `'MyModule.MyEnum.MyValue'` | **rejected**, rule `MDL-WF03` | **loads clean**, 1 x `CE0117` at the decision | works, via `exec --no-check` | + +So mxcli's own `MDL-WF03` mandates the one spelling the loader rejects and rejects the one spelling +the loader accepts. Following the tool's guidance guarantees the unloadable model — which is +exactly why this read as unconditional corruption when it was first filed. + +`bson dump` confirms the mechanism directly: the bare outcome string is written verbatim into +`Workflows$EnumerationValueConditionOutcome.Value`, a slot the loader parses as an +`EnumerationValueIdentifier`. + +**The residual real gap** is separate and smaller: MDL's `DECISION` has no expression clause (`ON`, +`EXPRESSION`, `CONDITION` and `RULE` were all probed and none parse), so a decision written from +MDL lands with an empty condition and the model reports exactly one `CE0117` — an ordinary, +visible modelling error a human fixes by picking the expression in the Studio Pro canvas. + +Incidental confirmation that the qualified form really binds rather than merely being tolerated: a +deliberately non-existent value produced `CE1613` *"The selected enumeration value ... no longer +exists"* while the valid sibling in the same decision resolved silently. + +**Two fixes are needed, and they are independent**: (1) resolve the outcome string to an +`EnumerationValueIdentifier` on write, or at minimum stop `MDL-WF03` mandating the unloadable +spelling; (2) give `DECISION` an expression clause. + ## BUG-77: BUG-75's "create/change attribute values are safe" scope claim is wrong — quoted attribute segments (`$Var/"Attr"`) DO cause CE0117 in create/change statements too, just not consistently **Project:** PROJECT-A, script 64 (`Approval.ACT_ApprovalRun_CreateVersion`, part of the same @@ -4376,6 +4411,26 @@ Open. No scripted workaround found. The split must be built in Studio Pro by han an MCP write session (`learned-mcp-patterns.md` — untested for this activity), until mxcli's parallel-split writer attaches path contents. +### Re-probed on mxcli v0.21.0 (2026-09-08) — NOT fixed + +The same two-path probe script was executed through v0.20.0 and v0.21.0 on two separate throwaway +copies of the same project, and the stored workflow unit dumped from each with +`mxcli bson dump --type workflow`. + +**The two versions write a byte-identical workflow unit** — zero diff lines after blanking the +`$ID` GUIDs. So v0.21.0 produces the identical runtime deadlock, and no live run was needed to +settle the version question. + +Worth recording for whoever fixes this: the path contents *are* present in the BSON, on both +versions — `Workflows$ParallelSplitActivity` -> `Workflows$ParallelSplitOutcome` -> +`Workflows$Flow` -> `Workflows$SingleUserTaskActivity`. That is why `DESCRIBE` round-trips and why +no gate objects. Whatever the runtime reads as empty, **it is not the activity nesting**, so this +entry's title describes the symptom rather than the mechanism. The mechanism is still +unidentified; a maintainer diffing this unit against a Studio-Pro-authored split would likely +find it in one field. + +The v0.21.0 changelog names no parallel-split fix. + **Related:** BUG-76 (scripted `DECISION` corrupts the `.mpr` on load). Both are workflow *structure* writers producing models the runtime will not execute as written; BUG-76 fails loudly at load, BUG-121 fails silently at run, which makes it the worse of the two. diff --git a/bug-logs/pending-github-issues/bug121-parallel-split-writes-paths-without-contents.md b/bug-logs/pending-github-issues/bug121-parallel-split-writes-paths-without-contents.md index 663e6fb..3f84eff 100644 --- a/bug-logs/pending-github-issues/bug121-parallel-split-writes-paths-without-contents.md +++ b/bug-logs/pending-github-issues/bug121-parallel-split-writes-paths-without-contents.md @@ -1,7 +1,8 @@ **Repo:** `mendixlabs/mxcli` **Source:** `bug-logs/mxcli-bugs.md`, `## BUG-121` — observed 2026-09-04 building script `84` of a topbar-titled portal project (Mendix 11.13.0) -**Status:** DRAFT — not yet filed +**Status:** DRAFT — not yet filed. **Re-probed 2026-09-08 on v0.21.0: still open** (see the +re-probe section at the end of this file — include it when filing). **Suggested labels:** bug, workflow, mdl, silent-corruption --- @@ -49,3 +50,27 @@ mxcli against Mendix 11.13.0, native workflow engine, Linux container. BUG-76 (scripted workflow `DECISION` corrupts the `.mpr` on load). Both are workflow *structure* writers emitting models the runtime will not execute as written. + +--- + +## Re-probe on v0.21.0 (2026-09-08) — include when filing + +The identical probe script was executed through **v0.20.0** and **v0.21.0** on two separate +throwaway copies of the same project, and each resulting workflow unit dumped with +`mxcli bson dump --type workflow`. After blanking the `$ID` GUIDs the two dumps differ by +**zero lines** — v0.21.0 writes a byte-identical model, so the runtime behaviour is unchanged. + +One correction to the title, for whoever picks this up: the path contents **are** present in the +stored BSON, on both versions — + +``` +Workflows$ParallelSplitActivity + Workflows$ParallelSplitOutcome + Workflows$Flow + Workflows$SingleUserTaskActivity <- the task IS here +``` + +which is why `DESCRIBE` round-trips and why `check` and `mxbuild` are both clean. So "writes the +paths but not their contents" names the runtime symptom rather than the mechanism, and the +mechanism is still unidentified. A maintainer comparing this unit against a Studio-Pro-authored +parallel split would likely find it in one field. diff --git a/bug-logs/pending-github-issues/bug76-workflow-decision-enum-identifier.md b/bug-logs/pending-github-issues/bug76-workflow-decision-enum-identifier.md index fc961de..fd5d7e7 100644 --- a/bug-logs/pending-github-issues/bug76-workflow-decision-enum-identifier.md +++ b/bug-logs/pending-github-issues/bug76-workflow-decision-enum-identifier.md @@ -131,3 +131,29 @@ alongside it. Duplicate-check: searched `mendixlabs/mxcli` issues (open and closed) for "EnumerationValueIdentifier", "workflow decision EnumerationValueIdentifier", and "workflow DECISION EnumerationValueIdentifier StorageLoadException" — no existing issue found as of 2026-08-31. + +--- + +## Follow-up to post as a comment on issue #1031 (prepared 2026-09-08) + +Re-probed on **mxcli v0.21.0** (released 2026-09-06), Mendix 11.13.0, on a throwaway full project +copy. **Still open**, and the original report's framing needs one correction. + +This is not unconditional corruption — it is a pincer between two spellings, and both jaws are +still closed: + +| Outcome spelling | `mxcli check` | Native `mx check` | Net | +|---|---|---|---| +| Bare — `'Yes'` | passes | fails to load: `StorageLoadException` — *"Enumeration value condition outcome in has an invalid value '' for property Value. The text 'Yes' is not a valid EnumerationValueIdentifier."* | unloadable model | +| Qualified — `'MyModule.MyEnum.MyValue'` | rejected by rule `MDL-WF03` | loads clean, 1 x `CE0117` at the decision | works, via `exec --no-check` | + +mxcli's own `MDL-WF03` mandates the spelling the loader rejects and rejects the spelling the loader +accepts, so following the tool's guidance guarantees the unloadable model. `bson dump` shows the +mechanism: the bare string is written verbatim into +`Workflows$EnumerationValueConditionOutcome.Value`. + +That suggests two independent fixes rather than one: resolve the outcome to an +`EnumerationValueIdentifier` on write (or at minimum stop `MDL-WF03` mandating the unloadable +spelling), and give `DECISION` an expression clause — `ON`, `EXPRESSION`, `CONDITION` and `RULE` +were all probed and none parse, which is why the qualified form still lands one `CE0117` for an +empty condition. From c1a1808cfd2e2a68fbb1a23c83b2180a6185af57 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 8 Sep 2026 15:29:28 +0000 Subject: [PATCH 2/2] Resolve the disputed DECISION notes against BUG-76's pincer diagnosis The three master-side notes that recorded BUG-76 as "shape-dependent, not isolated" now cite the 2026-09-02 re-diagnosis (bare vs qualified outcome spelling) and the 2026-09-08 v0.21.0 re-probe carried by this branch. Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw --- CHANGELOG.md | 2 +- bug-logs/mxcli-bugs.md | 2 +- skills/learned-workflow-patterns.md | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71e46c7..e9dd87f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,7 @@ Kinds: `new` · `fix` · `learn` (a skill/learning) · `process` (rules, templat Credit the person or project that surfaced the change — the credit line is the thank-you. ## 2026-09-08 -- fix(bug-logs): re-probed the two workflow blockers on mxcli **v0.21.0** (released 2026-09-06, Mendix 11.13.0) — **both still open**, and BUG-76's diagnosis in this log was wrong. BUG-121 (`PARALLEL SPLIT`): the same script executed through v0.20.0 and v0.21.0 on two throwaway copies produces a **byte-identical** workflow unit (zero diff from `bson dump` after blanking the `$ID` GUIDs), so the runtime behaviour cannot have changed — and the path contents *are* present in the stored BSON on both versions, so the entry's own title ("writes the paths but not their contents") names the symptom, not the mechanism, which is still unidentified. BUG-76 (`DECISION`): not unconditional storage corruption but a **pincer between two spellings** — a bare outcome passes `mxcli check` and makes the model unloadable (`StorageLoadException`, "not a valid EnumerationValueIdentifier"), while a qualified one is rejected by mxcli's own `MDL-WF03` and loads clean via `exec --no-check` with a single `CE0117` for the empty expression; mxcli mandates the spelling the loader rejects and rejects the one it accepts, which implies two independent fixes rather than one. The correction was made on the source project on 2026-09-02 and never promoted here; it is already filed upstream as mendixlabs/mxcli#1031, so it goes into the draft as a comment to post rather than a rewritten body — a topbar-titled portal project +- fix(bug-logs): re-probed the two workflow blockers on mxcli **v0.21.0** (released 2026-09-06, Mendix 11.13.0) — **both still open**, and BUG-76's diagnosis in this log was wrong. BUG-121 (`PARALLEL SPLIT`): the same script executed through v0.20.0 and v0.21.0 on two throwaway copies produces a **byte-identical** workflow unit (zero diff from `bson dump` after blanking the `$ID` GUIDs), so the runtime behaviour cannot have changed — and the path contents *are* present in the stored BSON on both versions, so the entry's own title ("writes the paths but not their contents") names the symptom, not the mechanism, which is still unidentified. BUG-76 (`DECISION`): not unconditional storage corruption but a **pincer between two spellings** — a bare outcome passes `mxcli check` and makes the model unloadable (`StorageLoadException`, "not a valid EnumerationValueIdentifier"), while a qualified one is rejected by mxcli's own `MDL-WF03` and loads clean via `exec --no-check` with a single `CE0117` for the empty expression; mxcli mandates the spelling the loader rejects and rejects the one it accepts, which implies two independent fixes rather than one. The correction was made on the source project on 2026-09-02 and never promoted here; it is already filed upstream as mendixlabs/mxcli#1031, so it goes into the draft as a comment to post rather than a rewritten body — a topbar-titled portal project · at merge: the three "disputed" `DECISION` notes on master (`mxcli-bugs.md` v0.20.0 clearance table, `learned-workflow-patterns.md` §1 pointer, §8 version table, §21 verdict table) now cite the resolved pincer diagnosis and the v0.21.0 re-probe instead of "shape-dependent, not isolated" — the toolkit merge queue ## 2026-09-07 - new(bug-logs): seven mxcli defects harvested from a topbar-titled portal project's build (mxcli v0.20.0, Mendix 11.13.0), each with an upstream draft — BUG-120 (three write-path asymmetries; the serious one: `ALTER ENTITY … ADD ATTRIBUTE` reconciles only the widest access rule and silently skips narrower ones — a valid model with wrong security), BUG-121 (`PARALLEL SPLIT` writes its paths but drops their contents: loads, passes every gate, deadlocks at run time — `workflow-structure-rules.md` §11's *proven* row retracted, plus a new CE6681 forward-`JUMP TO` row and the `$WorkflowUserTask`-not-in-call-microflow limit), BUG-122 (`ALTER PAGE … SET PageSize` rejects what `CREATE` accepts on the same widget), BUG-123 (`SHOW CALLERS OF` indexes neither page-button actions nor `show page` targets), BUG-124 (`DESCRIBE MICROFLOW` omits `without events`, so a round-trip silently re-enables event handlers), BUG-125 (`check --references` cannot resolve any enumeration — four A/B probes), BUG-126 (`ALTER PAGE … SET Label` prints "Altered page" and discards the value while `SET Class` applies and `SET Caption` errors by name). Renumbered at merge from 113–119, all seven of which master had taken while the branch was open; `bug-submission-checklist.md` §0 now states the merge-queue rule (`BUG-DRAFT-` in PRs) instead of "grep the toolkit and take the next number", which this branch did and still collided — a topbar-titled portal project, merged by the toolkit queue diff --git a/bug-logs/mxcli-bugs.md b/bug-logs/mxcli-bugs.md index 1329620..a9dd55b 100644 --- a/bug-logs/mxcli-bugs.md +++ b/bug-logs/mxcli-bugs.md @@ -5422,7 +5422,7 @@ row the two disagree. | Defect | Entry | Status on v0.20.0 | |---|---|---| -| `DECISION` corrupts the `.mpr` | BUG-76 | **Disputed.** This probe's `ExclusiveSplitActivity` stored and natively loaded; the same-day retest reproduced the byte-exact corruption with `decision '1 = 1'`. Shape not isolated — STOP rule stays (note under BUG-76). | +| `DECISION` corrupts the `.mpr` | BUG-76 | **Resolved 2026-09-08 — not shape-dependent, spelling-dependent.** The two v0.20.0 probes differed in outcome spelling, not shape: a bare outcome (`'Yes'`) passes `mxcli check` and makes the model unloadable; a qualified one (`Module.Enum.Value`) is rejected by `MDL-WF03` yet loads clean via `exec --no-check` with one `CE0117`. Re-probed on v0.21.0: both jaws still closed. See "Re-diagnosed 2026-09-02" under BUG-76; STOP rule stays until upstream (mendixlabs/mxcli#1031) fixes either jaw. | | MDL-written non-interrupting `BOUNDARY EVENT … TIMER` always malformed (`CE0105`) | a project-local finding, no toolkit entry | **Fixed for the non-interrupting form.** Timer wrote and loaded, reading a context attribute. The interrupting form is still unusable — BUG-109 and `learned-workflow-patterns.md` §19. | | pre-11.9 `Workflows$CallMicroflowTask` `$Type` | BUG-WF06 (archived, fixed v0.17.0) | **Re-confirmed fixed.** 14/14 stored as `CallMicroflowActivity`. | diff --git a/skills/learned-workflow-patterns.md b/skills/learned-workflow-patterns.md index 6edddde..0d500d0 100644 --- a/skills/learned-workflow-patterns.md +++ b/skills/learned-workflow-patterns.md @@ -17,8 +17,8 @@ than on a re-run verification — they are flagged inline where that matters. Tr **If you are on v0.20.0 or later, read §21 first.** A full re-probe on 2026-08-31 rebuilt a 23-activity workflow — a decision, a non-interrupting boundary timer, a wait-for-timer, two jumps and two user tasks — from pure MDL at **0 native errors**, cleared the `CE0105` boundary-timer and -`$Type` claims, records the one result that is *disputed* (`DECISION`, against BUG-76's same-day -retest), lists the four gaps that remain, and carries the `JUMP TO` trap that every +`$Type` claims, records the `DECISION` result that was *disputed* until 2026-09-08 (resolved: a +spelling pincer, not a shape — see BUG-76), lists the four gaps that remain, and carries the `JUMP TO` trap that every `DESCRIBE → exec` round-trip walks into. Sections written against older binaries are kept as-is, because the version gate is the point; §21 says which of their claims are now historical. @@ -466,7 +466,7 @@ mxcli **v0.18.0**, where `DECISION` writes correctly. | `v0.16.0` | **corrupts the `.mpr`** — do not emit | | `v0.17.0` | **corrupts the `.mpr`** — confirmed, BUG-76 (binary `2026-08-10T05:12:17Z`) | | `v0.18.0`+ | writes correctly; verify what was stored anyway | -| `v0.20.0` | **disputed, 2026-08-31** — one probe stored and natively loaded an `ExclusiveSplitActivity` inside a 23-activity workflow (§21); the same-day toolkit retest reproduced the byte-exact corruption with `decision '1 = 1' outcomes 'OutcomeA' -> { } 'OutcomeB' -> { }` (BUG-76, `mxlabs-v0.20.0-retest-2026-08-31.md`). Shape-dependent until someone isolates the shape — verify what was stored, every time | +| `v0.20.0` / `v0.21.0` | **resolved 2026-09-08 — a spelling pincer, not a shape.** The two 2026-08-31 probes disagreed because one used bare outcomes and one used qualified ones: bare `'Yes'` passes `mxcli check` and produces the byte-exact `StorageLoadException`; qualified `Module.Enum.Value` is rejected by `MDL-WF03` but loads natively via `exec --no-check` with one `CE0117` (the empty condition). Re-probed on v0.21.0: unchanged. Workaround: qualified spelling + `--no-check`, then pick the expression in Studio Pro (BUG-76, mendixlabs/mxcli#1031) | Two half-right versions of this warning coexisted for four days from 2026-08-21. One said "absolute prohibition, confirmed on v0.17.0" and never learned about the v0.18.0 fix — follow @@ -965,14 +965,14 @@ non-interrupting boundary timer, one `WAIT FOR TIMER`, two `JUMP TO`, two user t XPath targeting and a due date, hand-built in Studio Pro over several sittings. It was rebuilt from pure MDL in a throwaway clone and validated natively. -**Result: 0 errors.** Everything in that list is scriptable on v0.20.0 — with one verdict -disputed (the `DECISION`, below). +**Result: 0 errors.** Everything in that list is scriptable on v0.20.0 — with one verdict that +was disputed until 2026-09-08 (the `DECISION`, below — now resolved as a spelling pincer). ### Cleared — claims elsewhere in this document that are now historical | Claim, and where it still appears | Status on v0.20.0 | |---|---| -| `DECISION` corrupts the `.mpr` (§8 Warning 1, BUG-76) | **Disputed.** This probe's `ExclusiveSplitActivity` was stored and natively loaded. The toolkit's own retest the same day (`bug-logs/mxlabs-v0.20.0-retest-2026-08-31.md`) reproduced the byte-exact `StorageLoadException` with `decision '1 = 1' outcomes 'OutcomeA' -> { } 'OutcomeB' -> { }`. Two v0.20.0 probes, two verdicts, and the loading one did not record its decision's shape — so the defect is **shape-dependent and not yet isolated**. Keep BUG-76's STOP rule at full strength until someone bisects the shape; §8's table carries the row. | +| `DECISION` corrupts the `.mpr` (§8 Warning 1, BUG-76) | **Resolved 2026-09-08 — spelling, not shape.** This probe's `ExclusiveSplitActivity` loaded because its outcomes were qualified (`Module.Enum.Value`, forced through `--no-check` past `MDL-WF03`); the same-day retest (`bug-logs/mxlabs-v0.20.0-retest-2026-08-31.md`) corrupted because its outcomes were bare, which `mxcli check` accepts and the loader rejects as an invalid `EnumerationValueIdentifier`. Re-probed on v0.21.0 (2026-09-08): both jaws unchanged. Keep BUG-76's STOP rule until upstream fixes either jaw (mendixlabs/mxcli#1031); the workaround is qualified spelling + `exec --no-check` + one `CE0117` to fix in the canvas. | | An MDL-written `BOUNDARY EVENT … TIMER` is always malformed — `CE0105` | **Cleared for the non-interrupting form.** The timer wrote correctly, reading `$WorkflowContext/`. The *interrupting* form still fails `CE0105` because its terminator is inexpressible (§19, BUG-109). | | `CALL MICROFLOW` stores the pre-11.9 `$Type` (§13, BUG-WF06) | **Cleared.** 14/14 landed as `CallMicroflowActivity` — re-confirming the v0.17.0 fix. | | `DESCRIBE WORKFLOW` is blind to boundary events, decisions, jumps and waits | **Largely cleared.** All four now read back. The Event Sub-Process still does not — see below. |