Repository navigation
Conversation
Research summary, platform constraints, mxcli capability probe, target apps, stage tables for both tracks, increments and open questions. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…x 10.24 app Scores a proposed partition of own modules into apps: every crossing edge gets the integration lane its ref kind must become (OData external entity, published action/REST, or none = blocker), aggregates over a foreign entity are read from the mxcli catalog, and each partition gets a clean/costly/blocked verdict with the denominator printed. Business Events is not a lane (no Event Broker licence). Field run 2026-10-12 on a four-module Mendix 10.24.0 fixture built by MDL with a planted Orders<->Billing tangle and a Reporting->Billing COUNT/SUM: both found. Fixture is the verbatim app-facts, layer-map and reduced catalog output. tests/wave2/test-cut-score.sh: 56 checks pass. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…ement-1 findings rehost-extract.sh reads an .mpr, emits each own module via the MDL statement 'describe module <M> with all', reorders flows into call order (describe output is catalog-ordered and mxcli's own check refuses it), appends the image collections 'with all' omits, replays into a fresh target and writes a fidelity ledger with its denominator. CRLF inside string literals is kept byte-for-byte. Field run 2026-10-12, ako/mxcli-banking (Mendix 11.13.0): 155/155 documents, 154 identical, 1 doc-comment drift, mx check 0 errors, mxbuild green, struct diff empty. Read probe on the Marketplace FSM template (Mendix 9.24.2, MPR v1) passed; verbatim list-modules and graph-report captures under samples/. Plan doc updated (Event Broker: no; increment 1 results). The CRLF rule is promoted into learned-mdl-preflight.md; mxcli defects and MDL learnings from both increments go to contrib/inbox for triage. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…lite3 CLI requirement First bin/cut-score.sh run on a real Mendix 9.24.2 monolith (42 own modules, 312 edges, 4508 refs). Capped the per-partition blocker cell and stdout line (one cut produced 80 blocking rows and a 10 KB cell). Verbatim dependencies.json and layer map committed as a sample with the findings: 'call' conflates server- and client-side calls, and the 'sync' ref kind never reaches dependencies.json. Best 3-app landscape and first slice recorded. project-bin/app-facts.sh: the seven guard queries run through Python's sqlite3 when the CLI is absent (cloud container, no apt package). tests/wave2/test-cut-score.sh: 56/56. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
One-page visual summary of what both tracks do, how, the self-improvement loop (inbox → triage → skills/bug-logs/bin, preflight gotchas, changelog credit), the two skills planned after increment 3, and the open decisions. Companion to process/decompose-and-rehost-plan-2026-10-12.md. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
describe module … with all truncates at 10 000 lines on mxcli 0.26.0 and omits nanoflows, snippets, JS actions, JSON structures, mappings and task queues. The extractor now drops the cut statement, says so, and describes every omitted document from project-tree --json. New lib/mdlsplit.py is a literal/$$/comment-aware statement splitter shared by topo-order and compare; topo-order covers all document types and forces one unit on a cycle; compare reports NOT re-executable widgets and #923 decisions as not-expressible. Modules replay in reference order; timings.tsv per module. Field run: mendix/genai-showcase-app, Mendix 11.12.0, 36 modules (in progress; ledger totals follow). Banking fixture still passes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…roven 9.24 -> 11.13 pipelines/mendix-mpr/export-module-mpk.py writes Mendix's module-package format from an MPR v1 app (source schema and _MetaData verbatim, the module's unit subtree byte for byte, the four project documents mx module-import requires with secrets and navigation scrubbed, the module's java/js/theme/resources folders, RequiredLib jars and referenced widget .mpk files). It refuses MPR v2 sources and non-reference schemas. Field run 2026-10-12 on the FSM template (Mendix 9.24.2, MPR v1, 4783 units): FeatureToggle, Utils and Visualizations installed with `mxcli marketplace install --file` into 10.24 and 11.13 targets. Every residual mx check error was a crossing edge, none version or format. Utils with its edges satisfied: mx check 0, mxbuild BUILD SUCCEEDED on 11.13.0 after three Java hand-off edits. Unit and entity IDs were preserved 9.24 -> 11.13; Mendix's own `mx create-module-package` regenerates them. Verbatim captures are in samples/mpk-export-probe/. Co-Authored-By: Claude Opus <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Merges claude/youthful-hypatia-qapq73-mpk-export. The probe proved a headless module export from an MPR v1 app installs into Mendix 10/11 with only missing-module errors and preserves entity IDs 9.24 -> 11.13, which contradicts the plan's "cut must be done by regeneration" premise. Route for increment 3: MPK as the mover, MDL for the crossing edges. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…ejected statements First full GenAI Showcase run executed 1 of 36 modules: describe emits the java-action parameter comma after its comment, check is all-or-nothing per file, exec stops at the first unwritable statement. fix-describe-output.py repairs the comma, quarantine-mdl.py defers what check rejects (with its same-module closure), exec-resume.py defers what exec names and continues; deferred statements retry in fixed-point passes and leftovers reach the ledger with the verbatim error. REHOST_REUSE_MDL=1 skips describes. Field run: mendix/genai-showcase-app, Mendix 11.12.0; GenAICommons now executes fully with 11 deferred. Banking fixture still passes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
… bin/cut-ledger.sh First real slice by the hybrid route. FSM 9.24.2 copy -> mx convert 10.24 -> export-module-mpk.py -> marketplace install --file into the Blank Native Mobile App 11.13.0 starter (mxcli new cannot hold a native slice: no native profile). NativeNote 66/66 documents describe-identical on the target. Crossing edges in MDL: CUT STUB entities/flows, tiny docs copied, 26 Synchronization_Note documents moved by describe -> exec. mx check 0 errors, mxbuild BUILD SUCCEEDED after the three known Utils Java hand-offs. bin/cut-ledger.sh (new): document-level crossing edges from the mxcli catalog, plus mx check names the catalog misses and rows no catalog holds, each matched to a resolution rule; exits 1 while any edge is unresolved. Field run on this slice (FSM template 9.24.2 catalog, 2026-10-12): 346 refs -> 308 rows, 0 unresolved; --refs mode reproduces the ledger byte for byte from the committed crossing-refs.tsv. export-module-mpk.py: crossing-edge count now needs a name boundary (Note x54 and Technician x2 were NativeNote./NativeTechnician. substrings); measured on the same slice: only those two drop, Utils unchanged, package database byte-identical. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
FINDINGS.md for the slice (gates, 308-row cut ledger, 26 behaviour stubs, timings, mxcli defects, monolith-side steps, three-level done-criterion). Plan: increment 3 DONE at build-green; done-criterion recorded as ASSUMED. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Run 4 of rehost-extract.sh over 36 modules of the GenAI Showcase (Mendix 11.12.0): 850/2776 documents landed (579 identical, 271 drift), 1993 failed-exec, 43 not-emitted. 1520 of the failures are 7 whole modules dropped by the extractor (quarantine cannot map lint-form errors or mxcli statement numbers; check_exec then discards the remainder). mx check: model unloadable (3 null import-mapping entities) until drop+create; then 14 x CE1613; mxbuild BUILD FAILED. Regression parity not reachable headlessly. Captures and FINDINGS in pipelines/mendix-mpr/samples/genai-showcase-11.12.0/, 17 mxcli defects in contrib/inbox, plan marks increment 2 done and records the ASSUMED Rehost done-criterion (build-green with hand-offs). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Three-level slice criterion (build-green / seam-live / strangled) and Rehost "build-green with hand-offs" move from ASSUMED to CONFIRMED. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…) over published REST One Note created in the monolith landed in the slice's database (OQL verbatim on both runtimes). Ran on the 10.24 copy: the 9.24.2 runtime boots headless (Java 11, manual M2EE) but mxcli 0.26 cannot create or alter a microflow in a 9.x project. 8 mxcli defects filed. Field run: Siemens FSM template v1.1.1 copies + NoteSlice, local container. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
User-confirmed amendment to the "version upgrades out of scope" decision: for Decompose the 9.x monolith copy goes to 10.24 first, as a means. mxcli 0.26 cannot author microflows in 9.x and cannot run 9.x apps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…tive* modules Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…ld-green, seam partly live AssetManagement, Part, WarehouseManagement and Tool moved by MPK from the FSM template (9.24.2 -> mx convert 10.24 -> export-module-mpk.py -> marketplace install --file) into `mxcli new AssetsApp --version 11.13.0`. Build-green: mx check 0, mxbuild BUILD SUCCEEDED, 207+10 documents describe-identical (5 design-property drift, 19 pages/snippets with legacy widgets converted for the React client from mxcli bson dump), cut ledger 703 rows, 0 unresolved, 120 stub rows. Seam (monolith side on the 10.24 copy): slice publishes OData (basic auth, Production security) and a REST upsert; the monolith consumes 4 external entities, rewires Dashboard.DS_CountAssets, adds a REST dual write to the part save, and one Playwright journey across both running apps passes (create unit + part in the slice, see the part in the monolith over OData). Seam-live is not reached: 1 of 536 in-edges rewired, stub count unchanged. 9 mxcli findings to contrib/inbox. Field run: FSM template v1.1.1 (Siemens), both runtimes local (8480 slice, 8580 monolith). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Written from the worker's handback (59bd714): gates, 703-row cut ledger, 120 stub rows, OData/REST seam, Production security, passing cross-app Playwright journey, timings, mxcli defects, unmeasured items. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
The judgement half of the Decompose and Rehost tracks, written only from the field runs of increments 1-5 (plan 2026-10-12, FSM template 9.24.2 samples, GenAI Showcase 11.12.0 FINDINGS). Decompose: 9.x -> 10.24 on a copy first, cuts on business fit and coupling, cut order by dependency direction, MPK move, cut-ledger, OData/REST seam, three CONFIRMED levels, mxcli 0.26 traps pointing at the inbox files. Rehost: Rehost vs MPK, the check/quarantine/exec/resume loop, ledger verdicts, build-green with named hand-offs. Two ondemand rows in skill-routing.tsv, re-rendered (README, ROUTING.md, agent stubs, gate-check stage map); runbook Entry Modes gains one row each as variants of existing modes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, not filed) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The user confirmed both done-criteria; the Rehost sentence still read ASSUMED (it was added by the GenAI analysis after the first edit). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Adds external-entity costs mx check does not show (association ownership, no XPath across local/external, no commit, aggregate limits), OData writes vs REST action criterion, soft delete over key reuse, the ownership flip and dual-write window, and token-based auth for production. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Reducing the staged upstream issues showed create message definition collection works on mxcli 0.26.0; the GenAI failure was ordering. Corrected in the rehost skill, GenAI findings and the plan. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…-live The FSM 10.24 monolith publishes OData CoreSeam.CoreAPI (12 entity sets, added PublicID AutoNumber keys) and REST CoreSeam.CoreActions (rosters). The increment 5 Assets & Parts slice (11.13) swaps its CUT STUB entities for same-name external entities, writes rosters over REST with error handlers, and replaces the Administration.Account_Technician stub with a local owner entity. Stub rows 120 -> 32: non-Mobile 89 -> 1 stub + 20 reasoned hand-offs (access-rule XPath and local->external grid columns external entities cannot carry); Mobile 31 unchanged. Both apps mx check 0 and BUILD SUCCEEDED; cut ledger 709 rows exit 0; new Playwright journey slice -> monolith -> slice PASS 9/9; increment 5 journey PASS. Field run: FSM template 9.24.2 (10.24 copy + AssetsApp 11.13), captures 01-22. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…live) Written from the worker's handback (c9486dd): gates, stub counts 120 -> 1 non-Mobile stub + 20 reasoned hand-offs + 31 Mobile, lane per core entity, security, journeys, mxcli defects, ten decompose-skill corrections and the API skill evaluation recommending a service-seam pattern skill. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Pattern/anti-pattern catalogue P1-P13 from FSM increment 6 (verbatim CE codes, capture paths), external-entity limits moved out of decompose-app.md, recipes for replacing a stub by an external entity and the cross-app join via a published mirror, completion criteria with denominators. decompose-app.md applies increment 6 skill feedback 1-10 (net 1799 -> ~1790 words); service-access section in security-is-not-a-later-script.md; sentinel guard, two-store secret and password policy in learned-constants-and-secrets.md; architecture-blueprint.md 6c pointer. Routed ondemand via skill-routing.tsv and re-rendered. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Basic auth is the minimal proven route; token-based OIDC for production; Mendix SSO deprecated 1 May 2026; consumer matches publisher's method. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Conflicts were in generated routing output (agent stubs, gate-check stage map) and CHANGELOG. Took master's generated files, re-rendered from the merged skill-routing.tsv (render-routing --check passes), kept both sides of CHANGELOG. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
decompose-app.md and rehost-app.md: defects fixed on mendixlabs/mxcli main after 0.26.0 (nightly-80-gbd45c47e) are tagged [fixed after 0.26.0] and kept, since projects still run 0.26.0. Stage 0 restates the 10.24 hop: the MPK export always goes through 10.24; monolith-side edits can stay on 9.x once the U14 fix ships; mxcli run on 9.x still fails (U44, CHANGED). Re-verified on copies of T9.24.2/T11.13.0 and read-only GenAI Showcase: U14, U29, U34, U22, U37, U5, U16 all hold. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…r (E1-E3) - quarantine-mdl.py maps lint errors (`✗ ... [CODE]`) by the `at Q.N` line or the name in the message, and `statement N:` errors by number verified against the named document (re-mapped by name otherwise). - mdlsplit.py closes a statement on an indented `);` when the next line opens with a column-0 keyword (json structure CUSTOM NAME map), and ignores a `;` inside a `--` comment. Split count equals mxcli's syntax count on all 36 GenAI modules (was 1-9 short in 4 of them). - exec-each.py: fallback when no statement can be placed; executes one statement at a time and defers each failure with its verbatim error. - one `-- deferred:` line per statement (no nesting across passes). - timings via Python instead of date +%s.%N / bc; captures/phases.tsv. Field proof: on the run-4 GenAI Showcase captures (mxcli 0.26.0) the 7 formerly dropped modules quarantine 1-11 statements each instead of 0. Banking regression (ako/mxcli-banking RRNetBanking.mpr, 11.13.0): 155/155 emitted, mx check 0 errors, mxbuild BUILD SUCCEEDED. check-portability and check-scripts clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…r (E1-E3) - quarantine-mdl.py maps lint errors (`✗ ... [CODE]`) by the `at Q.N` line or the name in the message, and `statement N:` errors by number verified against the named document (re-mapped by name otherwise). - mdlsplit.py closes a statement on an indented `);` when the next line opens at column 0 with a keyword, an annotation or a doc comment (json structure CUSTOM NAME map followed by `@Position` + entity), and ignores a `;` inside a `--` comment. Split count equals mxcli's syntax count on all 36 GenAI modules in executed (topo) order, on 0.26.0 and the nightly (was 1-9 short in 4+ modules). - exec-each.py: fallback when no statement can be placed; executes one statement at a time and defers each failure with its verbatim error. - one `-- deferred:` line per statement (no nesting across passes). - timings via Python instead of date +%s.%N / bc; captures/phases.tsv. Field proof: on the run-4 GenAI Showcase captures (mxcli 0.26.0) the 7 formerly dropped modules quarantine 1-11 statements each instead of 0. Banking regression (ako/mxcli-banking RRNetBanking.mpr, 11.13.0): 155/155 emitted, mx check 0 errors, mxbuild BUILD SUCCEEDED. check-portability and check-scripts clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Conflicts were the generated gate-check stage map and CHANGELOG, as before: took master's generated map, re-rendered from the merged routing table, kept both sides of CHANGELOG. The merged baseline tier was 52 words over budget (80052/80000), so the two Decompose/Rehost runbook rows are now one-line pointers to their skills. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…endixMau/mxcli-project-toolkit into claude/youthful-hypatia-qapq73 # Conflicts: # CHANGELOG.md
…ithout progress (E5, E6) - exec-resume.py: on `X is defined later in this script` / `references ... X before it is created`, defer the first statement that references X (the one that failed), not X's definition; resume from the earliest statement the error names (create-or-modify re-runs are idempotent). Previously the statements between the failing one and X were skipped silently: 5 documents on the GenAI nightly run (ExampleMicroflows.Ticket and 4 more). - rehost-extract.sh: a deferred retry pass counts as progress only when fewer statements remain deferred; passes 3-6 of the nightly run retried the same 758 statements (~60 min). Field proof: replayed against the captured GenAI exec-ExampleMicroflows round-4 output (mxcli nightly-80-gbd45c47e): the old code leaves the Ticket entity in neither the script nor the deferred file, the new code defers it with the verbatim error. Banking regression (RRNetBanking.mpr, 11.13.0, mxcli 0.26.0): 155/155, mx check 0 errors. check-scripts clean. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…ules, 2395/2776 landed Same source and target snapshot as run 4 (v0.26.0), mxcli nightly-80-gbd45c47e, extractor at 6cd0c6a, fresh nightly describes. Ledger: identical 579 -> 1537, drift 271 -> 858, failed-exec 1993 -> 482, not-emitted 43 -> 4. Gates: target does not load (one snippet with a ContentParams association path stored as an attribute name); with that parameter replaced, mx check 42 x CE1613 in 5 named classes, mxbuild BUILD FAILED. Journeys NOT RUN (needs live LLM credentials). Captures under samples/genai-showcase-11.12.0/nightly/ (FINDINGS.md follows separately), README field-run row, new mxcli defects in contrib/inbox/2026-10-13-genai-nightly-findings.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…t green) Baseline vs nightly table, attribution (toolkit E1-E3 fix is most of the gain), remaining failure classes, done-criterion verdict, skill feedback. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
…atia-qapq73 # Conflicts: # CHANGELOG.md
Master's baseline tier is at 79,997 of 80,000 words, so the 258 words this branch added to three always-on files fail render-routing --check. The CRLF gotcha moves to rehost-app.md; service access already lives in mendix-service-seam.md; the runbook entry-mode rows are dropped. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
This was referenced Oct 14, 2026
MendixMau
pushed a commit
that referenced
this pull request
Oct 14, 2026
Review follow-up on #344: Field evidence lines no longer cite sample directories #347 does not ship (only native-bughunt/ remains); the upstream draft's Source line cites #293 lab notes instead of inbox files; NativeReason reads 3 of 45 clean, 37 rejected, matching the bug-hunt table. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
MendixMau
pushed a commit
that referenced
this pull request
Oct 14, 2026
…, list-modules fixture - export-module-mpk.py empties the module's Constants$Constant DefaultValue by default and prints the count; --keep-constant-defaults keeps them. README states exactly what is and is not scrubbed. - export-module-mpk.py refuses out == src (exit 2) before any remove/write; rehost-extract.sh refuses source == target (exit 2) before writing. - rehost-extract.sh exits 2 with a message on an empty module list (bash 3.2 set -u on an empty array). - Own-module parse moved to lib/own-modules.awk, rows taken after the |--- separator instead of NR>3; fixture test-rehost-list-modules.sh over verbatim list-modules captures (mxcli v0.25.0/v0.26.0 on mxcli's public test project, and the field-service template capture from #293): 5 ok; the previous script fails T4 and T5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…SUCCEEDED (BUILD-FIX.md, build-fix.mdl) Replayed from scratch on a fresh copy of the unblocked restore point: mx check 42 -> 0, mxbuild BUILD SUCCEEDED once module JAR dependencies are resolved and the source's Java sources are copied (not MDL). Green build keeps 11 stubbed microflows, 8 dropped mappings, 36 removed icon widgets; about 450 of 482 failed-exec documents are still absent. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
MendixMau
added a commit
that referenced
this pull request
Oct 15, 2026
## Review
The independent review returned MERGE-AFTER-FIX. Commit `c55182f` addresses each item:
1. **MEDIUM:** the app-facts Python fallback did not strip `\r`, so on native Windows Python every `[ "$(q …)" = "1" ]` failed with "catalog schema is missing".
- **Fixed:** `| tr -d '\r'`, as `_common.sh` does.
- **Test seam:** `APPFACTS_NO_SQLITE3_CLI=1` forces the Python path.
- **New fixture case:** in `test-catalog-edge-guard.sh`, a Python wrapper that ends every line in CRLF, run on both layouts. It passes 22/22 with the fix and 20/22 without it.
2. **LOW:** rows said "NOT DETECTED (no catalog)" even when a catalog existed. **Fixed:** they now carry the actual reason, with new cases for an empty table and an unreadable file.
3. **LOW:** in `{from} | {to} - {None}` the precedence was wrong. **Fixed:** parenthesised, with a new case of no `scope` plus an edge missing `from`. #293's copy crashes on it.
4. **Size:** waiver requested; the reasoning is in the size-cap item above. **Field proof:** the template-app run is now stated inline in the header, as results only.
Added-line client-name scan: clean. Maintainer size waiver given 2026-10-15.
MendixMau
added a commit
that referenced
this pull request
Oct 15, 2026
## Review The independent review returned MERGE-AFTER-FIX. Commit `4016553` addresses each item: 1. **MEDIUM:** uncaught exceptions exited 1, the UNRESOLVED code. - **Fixed:** the entry point catches `OSError`, `ValueError` and `sqlite3.Error` and routes them to `die()` (exit 2) with "cannot read an input: …". The header's Exit line now says that 1 means UNRESOLVED and nothing else. - **New fixture cases:** a missing `--rules`, a nonexistent `--catalog`, and an invalid `--exporter-json`. #293's copy returns 1 on all three. 2. **LOW:** `--refs` lines with the wrong field count were silently dropped. **Fixed:** they are now refused with exit 2, counted, and the first one is named. The fixture case is a captured refs file with one line cut short. #293's copy accepts it silently. Against #293's copy the fixture now fails 6 of 44 checks. Added-line client-name scan: clean.
MendixMau
added a commit
that referenced
this pull request
Oct 15, 2026
## Review ### First review (MERGE-AFTER-FIX), addressed in 300cd35, constant handling revised in aa7d7fc 1. **MEDIUM: the secrets claim was false.** Module constants' `DefaultValue` was copied byte for byte. - **Now:** the default is unchanged from the field-proven path, so constant defaults are copied byte for byte. The opt-in flag `--scrub-constant-defaults` empties every `Constants$Constant` `DefaultValue` in the module, recomputes the ContentsHash and prints `constant defaults emptied: N (names)`, on stderr under `--json`. - `--keep-constant-defaults`, added in 300cd35, is **dropped**. It never reached master. Since a70afd9 it is refused like any unknown option (exit 2). - The README states plainly that module constant defaults travel in the MPK unless the flag is passed, and marks the flag **"unverified in Studio Pro: not yet installed and checked"**. The what-is/isn't-scrubbed table is adjusted. - **Checked headlessly**, on a copy of mxcli's public v1 test project (Mendix 9.24) with two constants added by mxcli: - default run: values copied, units byte-identical to the source - with the flag: both values empty, hash recomputed, count printed - **Field run still owed for `--scrub-constant-defaults`:** 1. export a module that has String and non-String constants with the flag 2. `mxcli marketplace install --file <out.mpk>` into a Mendix 10.24 app 3. `mx check` on 10.24, with the result captured: does the package install, and how is an empty Integer/Boolean default reported? 4. then the same on 11.13 Until that run, the flag stays opt-in and marked unverified. 2. **LOW: same-path misuse.** - `export-module-mpk.py` refuses `out == src` by realpath, exit 2, before any `os.remove` or write. Checked directly and thro Added-line client-name scan: clean.
MendixMau
added a commit
that referenced
this pull request
Oct 15, 2026
, 4/6) (#346) ## Review (MERGE-AFTER-FIX), addressed in 3c472fe 1. **MEDIUM: wrong increment number.** The cut-score blind spots in `decompose-app.md` Stage 1 step 4 were measured in **increment 2**, the first cut scoring on the field-service template. They were wrongly cited as increment 5. The Evidence header now also covers the first two increments: - increment 1: `bin/cut-score.sh` built on a synthetic 4-module app (Mendix 10.24) - increment 2: read probe and first cut scoring on the template 2. **LOW: level amendment dropped.** Stage 6 now says the three levels were CONFIRMED with the user 2026-10-12. It also records that level 3 was amended **2026-10-13** from field evidence: "one journey per crossing edge" became **one journey per crossing kind**, because per edge was undefined for 536 in-edge rows (increment 7). The level 3 row carries the amended criterion. Checks re-run after the fix: `render-routing --check` in sync, the three routing fixtures 5/0, 12/0 and 16/0, and all guards clean. **Baseline word count:** 75,038 before, 75,038 after (budget 80,000). Merge of master after #342: took master's reviewed pipeline files, re-applied the README skills pointer. Added-line client-name scan: clean.
Owner
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Direct lane
What changed and why (one paragraph):
Two new tracks for existing Mendix apps. Rehost regenerates an app as MDL into a fresh project:
pipelines/mendix-mpr/rehost-extract.shplus a check → quarantine → exec → resume repair loop (lib/mdlsplit.py,topo-order-mdl.py,compare-mdl.py,fix-describe-output.py,quarantine-mdl.py,exec-resume.py,exec-each.py). Decompose splits a monolith into apps:bin/cut-score.sh(Stage 3 cut scoring),bin/cut-ledger.sh(every crossing edge resolved, stubbed, handed off or retired; exits 1 while anything is unresolved), andpipelines/mendix-mpr/export-module-mpk.py(headless module export, IDs preserved 9.24 → 11.13). Three on-demand skills were written from the field runs and corrected by their first real use:skills/decompose-app.md(gated target-architecture stage and a strangle stage),skills/rehost-app.md(journey parity, a configuration checklist, the CRLF gotcha), andskills/mendix-service-seam.md(OData/REST seam patterns between Mendix apps). Also small patches tolearned-constants-and-secrets.mdandarchitecture-blueprint.md,project-bin/app-facts.shwithout thesqlite3CLI, the plan, report pages and an upstream mxcli bug-report draft. No always-on (baseline-tier) skill is changed: master's baseline is at 79,997 of 80,000 words, so this PR adds nothing to it.Field evidence (CLAUDE.md "Shipping an instrument", rule 4):
Rehost: ako/mxcli-banking (Mendix 11.13): 155/155 documents emitted, 154 identical,
mx check0,BUILD SUCCEEDED, 35 s. mendix/genai-showcase-app (11.12, 48 modules): first run 29/36 modules landed, 579 identical, build failed with 14 errors; re-run on the mxcli nightly with the fixed extractor: 36/36 modules landed, 1537 identical, build still failed (samples/genai-showcase-11.12.0/nightly/).Decompose on the Siemens FSM template (Mendix 9.24.2, converted to 10.24):
Every run's captures, ledgers, journeys and
FINDINGS.mdare underpipelines/mendix-mpr/samples/.No client data anywhere in the diff. Only public sample apps are used; captures use
<lab>/paths. The leak guard andcheck-no-private-citations.shwere run.Size cap: not met. About 528 files and 74k lines in total; roughly 50 files and 5.5k lines excluding samples, captures and CHANGELOG. The changes are one connected body of field work. I can split them by track if you prefer: (1) instruments and fixtures, (2) skills and routing, (3) sample captures.
Test tier: T0 plus
render-routing --checkon every skill edit. T1:tests/wave2/test-cut-score.sh56/56; Banking regression for the extractor changes. T2: the field runs above. T3 (full suites) is CI's.New/changed instrument: golden input is captured, not hand-written (
samples/fsm-template-9.24.2/dependencies.json, cut-score fixtureCAPTURE.txt). Only the single-tree layout and Linux were exercised. Two-tree layout and macOS / Git Bash are not verified (the extractor's timing code now uses Python instead ofdate +%s.%N/bc).New skills: routing rows added in
bin/lib/skill-routing.tsvand re-rendered.CHANGELOG: lines appended under
## Unreleased, crediting the source projects.Bug entries: no new
bug-logs/mxcli-bugs.mdentries. The mxcli findings are incontrib/inbox/and inbug-logs/mxcli-upstream-report-2026-10-12.md.Known open items:
tests/wave2fixtures forcut-ledger.shand the new resolution kinds; inbox triage intobug-logs/mxcli-bugs.md; skill feedback from the Dispatch and GenAI-nightly runs not yet applied.🤖 Generated with Claude Code
https://claude.ai/code/session_016n4dpM66droAmJMuW4YwhV
Generated by Claude Code