Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ three commits past it), and a bug report can name a release instead of a sha nob
Sections dated before 2026-09-19 predate the cycle and stay as they are.

## Unreleased
- fix(routing): **`learned-mcp-patterns.md` is no longer always-on in the build stage; it loads before the first MCP write in a session.** It sat in the Stage 5 baseline pack and in `mdl-agent`'s always-read rows, so every build session and every MDL helper agent carried ~4,900 tokens of MCP save/handoff rules and JSON payloads, including sessions that never open Studio Pro and cloud containers where MCP does not exist. Choosing the write mode is already Step 0 of `learned-mdl-preflight.md`, which stays always-on, so nothing is lost at the moment of choice; the MCP skill's trigger now names the moment it is needed (`mxcli --mcp` exec or a `pg_*`/`ped_*` call). Stage 5 pack: 74,055 β†’ 71,443 words, 23 β†’ 22 files; baseline 79,752 β†’ 77,140 words. Found by the context report (`bin/context-audit.sh`, `bin/render-routing.sh --check`). β€” MendixMau
- fix(doctor, test-stack-up): **in a cloud container, a missing Docker daemon is now reported as normal, with the Docker-free route, instead of a warning that says to start it.** The Claude Code on the web container has the docker CLI but no daemon, and the agent cannot start one. Doctor used to WARN "docker daemon is not responding … sudo systemctl start docker", so sessions tried, failed, and reported "cannot start the docker daemon" as a blocker, until the user said to use `mxcli run --local`. Now the cloud lane prints: no Docker here, normal, do not try to start it; build check = exec.sh's mxbuild gate; run the app = `./mxcli run --local`. On a desktop (Docker or Podman, stopped or absent) the warning and start hint stay, plus one line saying a container is optional: the mxbuild gate needs none, and Studio Pro's Run Locally or `mxcli run --local` runs the app. The no-runtime text no longer says the build check needs Docker. `test-stack-up.sh` with the app down and no reachable Docker/Podman now stops with the Docker-free route instead of failing inside `mxcli docker run`. β€” MendixMau
- fix(gate-check): **the stage-decision readers now read only the Decisions table, and Stage 7 accepts a dated CONFIRMED.** `has_confirmed_decision` (Stages 3 and 4) and the Stage 7 cutover check scanned every pipe row in the register, so an Open-questions row numbered 4 or 7 with Status CONFIRMED passed that stage with no decision behind it. Both now count only rows under a header whose first cell is `Stage`; a register with no such header keeps the old every-row scan. Stage 7 also matched the status string-exactly, so `CONFIRMED 2026-08-10` failed there while passing every other stage (TD-07); it now uses the same word-anchored match. Positive control: the pre-fix script passes Stages 4 and 7 on an Open-questions-only register and fails Stage 7 on the dated status. Fixture T13–T15 in `test-bug03-gates.sh` β€” MendixMau
- learn(bug-logs): **`BUG-DRAFT-grant-association-generalization-member`** β€” a member association owned by another module's entity cannot be named in a `grant` statement, so `revoke` + `re-grant` silently drops that member access and `mx check` reports CE0066; patch-only workaround provided. Found fixing a guest-groups association in a Mendix app (mxcli v0.23.0, Mendix 11.12.2). β€” MendixMau
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ All gate decisions land in the consuming project's `PROJECT.md`, marked `CONFIRM

## Key skills and when to load them

Load skill files **on demand when the task calls for it** β€” not all upfront. Full routing table: `README.md` β†’ "When to use which skill". The always-on set (`README.md` β†’ "Baseline routing"): `query-the-model.md`, `learned-mdl-preflight.md`, `learned-microflow-patterns.md`, `learned-mcp-patterns.md`, and `bin/bug-lookup.sh` (a CE code, BUG-n or keyword β†’ the matching ledger entries; `bug-logs/mxcli-bugs.md` itself is read on demand β€” it outgrew the always-on budget).
Load skill files **on demand when the task calls for it** β€” not all upfront. Full routing table: `README.md` β†’ "When to use which skill". The always-on set (`README.md` β†’ "Baseline routing"): `query-the-model.md`, `learned-mdl-preflight.md`, `learned-microflow-patterns.md`, and `bin/bug-lookup.sh` (a CE code, BUG-n or keyword β†’ the matching ledger entries; `bug-logs/mxcli-bugs.md` itself is read on demand β€” it outgrew the always-on budget). `learned-mcp-patterns.md` is on demand too: read it before the first MCP write in a session, not on every build.

| Task | Read this file |
|------|---------------|
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,7 @@ Every mxcli project has a `.ai-context/skills/` directory (bundled by `mxcli ini

| Task | Skill to load |
|---|---|
| Before the first MCP write in a session (Studio Pro open: `mxcli --mcp` exec, or pg_*/ped_* calls) β€” save after every write, the handoff sequence, confirmed JSON payloads. Choosing the write mode itself is Step 0 of learned-mdl-preflight.md | `skills/learned-mcp-patterns.md` |
| Reading what loop bodies do (LOOP_TQ, deferred commit, nested loop, REST in loop, transaction control per item, scheduled-event reachability) from described MDL; the catalog holds top-level activities only and cannot see inside a loop | `skills/microflow-loop-antipatterns.md` |
| Writing MDL microflow scripts β€” worked recipes | `skills/mdl-cookbook-microflows.md` |
| Writing a single MDL script that takes a project from nothing to a working vertical slice β€” execution order, why it is deliberately non-idempotent, the instrument hierarchy, and the silent failures that pass every check | `skills/build/mdl/oneshot-mdl-method.md` |
Expand Down Expand Up @@ -787,7 +788,6 @@ Read a row when its Stage(s) cell says *every stage* or names the stage the regi
| After the FIRST build that follows any design-system port, and before any page is built on it β€” reads the BUILT stylesheet and reports how many framework knobs point at a design token, how many tokens arrived, how many component classes arrived, each with its denominator. Measured on a real run: 55 tokens ported correctly into the right file, 0 of 35 knobs bound and 0 of 20 classes present, two build phases shipped in the framework's default blue with mx check, mxcli lint, the MDL suite and two e2e journeys all green | `project-bin/check-design-reaches-app.sh` | 3,5 |
| Before exec'ing ANY page script β€” compares the drafted MDL's shell against the wireframe's: page column, layout/nav shell, one H1. Measured 0/10 pages on a real first build, repaired wholesale 47 scripts later | `project-bin/check-page-shell.sh` | 5 |
| After drafting and again after exec'ing any page script β€” scores the page MDL (or `mxcli describe` output on stdin) against its wireframe: headings/actions/content/classes, weighted. The scored companion to check-page-shell's binary gate; 32% median measured without it, 90% first-draft with it. Every run is appended to the project's docs/PAGE-FIDELITY.tsv β€” first non-stub row per page = first-build score of record vs the β‰₯80% target (forward-reference stubs score with --stub, exempt) | `project-bin/page-fidelity.js` | 5 |
| Choosing CLI vs MCP+MDL vs hand-rolled MCP, or any MCP write session β€” three co-equal write modes, not CLI-only | `skills/learned-mcp-patterns.md` | 5 |
| Reviewing any module before calling it done β€” the ONE pass: build, gate, prove, LOOK (is it logical, does it look right, does it match our design, over every page not just the tested ones), confirm with the denominator stated | `skills/module-review.md` | 5,6 |
| Before any mxcli exec / exec.sh / --mcp write β€” ask or run? the knob decides | `bin/exec-approval.sh` | 5,6 |
| Before calling any module tested β€” what testing a module means, and the false-green register of confirmed ways a test reports green over a broken feature | `skills/testing-shape.md` | 5,6 |
Expand Down
2 changes: 1 addition & 1 deletion ROUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ picks the row up. That is the whole procedure β€” there is no second list to rem
| Writing ANY MDL script β€” before the first line. Step 0 picks the write mode, then the STOP table overrides it for corrupting operations | `skills/learned-mdl-preflight.md` | mdl | 5 | baseline |
| Writing or fixing any microflow β€” MDL gotchas plus annotation discipline | `skills/learned-microflow-patterns.md` | mdl | 5 | baseline |
| Writing a microflow with any loop, a retrieve/commit/call inside a loop, nested or multiple loops, >20 activities counting loop bodies, or a list built from a list β€” post the checklist before the first MDL line | `skills/microflow-preflight.md` | mdl | 5 | baseline |
| Choosing CLI vs MCP+MDL vs hand-rolled MCP, or any MCP write session β€” three co-equal write modes, not CLI-only | `skills/learned-mcp-patterns.md` | mdl | 5 | baseline |
| Before the first MCP write in a session (Studio Pro open: `mxcli --mcp` exec, or pg_*/ped_* calls) β€” save after every write, the handoff sequence, confirmed JSON payloads. Choosing the write mode itself is Step 0 of learned-mdl-preflight.md | `skills/learned-mcp-patterns.md` | mdl | 5 | ondemand |
| Reading what loop bodies do (LOOP_TQ, deferred commit, nested loop, REST in loop, transaction control per item, scheduled-event reachability) from described MDL; the catalog holds top-level activities only and cannot see inside a loop | `skills/microflow-loop-antipatterns.md` | architect,review,mdl | 0,5,6 | ondemand |
| Writing MDL microflow scripts β€” worked recipes | `skills/mdl-cookbook-microflows.md` | mdl | 5 | ondemand |
| Writing a single MDL script that takes a project from nothing to a working vertical slice β€” execution order, why it is deliberately non-idempotent, the instrument hierarchy, and the silent failures that pass every check | `skills/build/mdl/oneshot-mdl-method.md` | mdl | 5 | ondemand |
Expand Down
2 changes: 1 addition & 1 deletion agents/mdl-agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ a rule below names an asset (e.g. "the wireframe", "the brief"), it means the pa
| `project-bin/check-design-reaches-app.sh` | After the FIRST build that follows any design-system port, and before any page is built on it β€” reads the BUILT stylesheet and reports how many framework knobs point at a design token, how many tokens arrived, how many component classes arrived, each with its denominator. Measured on a real run: 55 tokens ported correctly into the right file, 0 of 35 knobs bound and 0 of 20 classes present, two build phases shipped in the framework's default blue with mx check, mxcli lint, the MDL suite and two e2e journeys all green |
| `project-bin/check-page-shell.sh` | Before exec'ing ANY page script β€” compares the drafted MDL's shell against the wireframe's: page column, layout/nav shell, one H1. Measured 0/10 pages on a real first build, repaired wholesale 47 scripts later |
| `project-bin/page-fidelity.js` | After drafting and again after exec'ing any page script β€” scores the page MDL (or `mxcli describe` output on stdin) against its wireframe: headings/actions/content/classes, weighted. The scored companion to check-page-shell's binary gate; 32% median measured without it, 90% first-draft with it. Every run is appended to the project's docs/PAGE-FIDELITY.tsv β€” first non-stub row per page = first-build score of record vs the β‰₯80% target (forward-reference stubs score with --stub, exempt) |
| `skills/learned-mcp-patterns.md` | Choosing CLI vs MCP+MDL vs hand-rolled MCP, or any MCP write session β€” three co-equal write modes, not CLI-only |
| `skills/module-review.md` | Reviewing any module before calling it done β€” the ONE pass: build, gate, prove, LOOK (is it logical, does it look right, does it match our design, over every page not just the tested ones), confirm with the denominator stated |
| `bin/exec-approval.sh` | Before any mxcli exec / exec.sh / --mcp write β€” ask or run? the knob decides |
| `project-bin/verify-module.sh` | Finishing any module β€” before calling it done. One command that runs every instrument and keeps "instrument faulted" apart from "feature failed"; in a wired project run the installed copy at bin/verify-module.sh |
Expand All @@ -66,6 +65,7 @@ a rule below names an asset (e.g. "the wireframe", "the brief"), it means the pa
| `skills/mendix-best-practices-index.md` | Asked "is there a Mendix best practice for this", or mapping a lint rule that rose in the ratchet back to the practice and the skill that prevents it β€” one row per area: Mendix docs page, bundled assess-quality section, toolkit skill before the write, lint rule after exec |
| `skills/learned-stylegallery.md` | Building or using the in-app design gallery |
| `project-bin/check-design-portability.sh` | Before porting ds.css into SCSS, and at the Stage-3 gate β€” greps the stylesheet for rules that cannot match the HTML Mendix emits (rem against the real root, table/th/td selectors, positional row selectors). mx check, mxcli check and mxcli lint are all blind to CSS |
| `skills/learned-mcp-patterns.md` | Before the first MCP write in a session (Studio Pro open: `mxcli --mcp` exec, or pg_*/ped_* calls) β€” save after every write, the handoff sequence, confirmed JSON payloads. Choosing the write mode itself is Step 0 of learned-mdl-preflight.md |
| `bug-logs/mxcli-bugs.md` | Reading a whole class of tool defects (a retest, a new mxcli release, an audit) β€” for one CE code or symptom use bin/bug-lookup.sh instead; the ledger is 32k words |
| `skills/cloud-dev-environment.md` | Setting up or resuming an mxcli project in a cloud/ephemeral container β€” the one-time setup order (mxcli download β†’ mxcli init β†’ init-project.sh β†’ sources decision β†’ push) and the commit-and-push loop that survives container reclaim |
| `skills/microflow-loop-antipatterns.md` | Reading what loop bodies do (LOOP_TQ, deferred commit, nested loop, REST in loop, transaction control per item, scheduled-event reachability) from described MDL; the catalog holds top-level activities only and cannot see inside a loop |
Expand Down
2 changes: 1 addition & 1 deletion bin/lib/skill-routing.tsv
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ check-page-shell project-bin/check-page-shell.sh Before exec'ing ANY page script
page-fidelity project-bin/page-fidelity.js After drafting and again after exec'ing any page script β€” scores the page MDL (or `mxcli describe` output on stdin) against its wireframe: headings/actions/content/classes, weighted. The scored companion to check-page-shell's binary gate; 32% median measured without it, 90% first-draft with it. Every run is appended to the project's docs/PAGE-FIDELITY.tsv β€” first non-stub row per page = first-build score of record vs the β‰₯80% target (forward-reference stubs score with --stub, exempt) mdl,gate,review 5 baseline design
assemble-prototype project-bin/assemble-prototype.js After every wireframe edit: assembles design/wireframes/*.html into design/prototype.html, one hash-routed page a stakeholder can click through instead of twenty separate files. Generated, never edited (design-artifacts.md Step 3) architect,review 3 ondemand design
check-prototype-links project-bin/check-prototype-links.js Before wireframes pass to the build loop, and with --brd before a BRD is signed off: dead #/route links, orphan screens, controls with no data-bind and no data-cut, BRD routes no screen has, screens no use case walks (design-artifacts.md Step 3c, brd-validation.md check 8) architect,review 3 ondemand design
learned-mcp-patterns skills/learned-mcp-patterns.md Choosing CLI vs MCP+MDL vs hand-rolled MCP, or any MCP write session β€” three co-equal write modes, not CLI-only mdl 5 baseline build/mdl
learned-mcp-patterns skills/learned-mcp-patterns.md Before the first MCP write in a session (Studio Pro open: `mxcli --mcp` exec, or pg_*/ped_* calls) β€” save after every write, the handoff sequence, confirmed JSON payloads. Choosing the write mode itself is Step 0 of learned-mdl-preflight.md mdl 5 ondemand build/mdl
module-review skills/module-review.md Reviewing any module before calling it done β€” the ONE pass: build, gate, prove, LOOK (is it logical, does it look right, does it match our design, over every page not just the tested ones), confirm with the denominator stated mdl,review,test 5,6 baseline build
exec-approval bin/exec-approval.sh Before any mxcli exec / exec.sh / --mcp write β€” ask or run? the knob decides mdl,gate 5,6 baseline build
testing-shape skills/testing-shape.md Before calling any module tested β€” what testing a module means, and the false-green register of confirmed ways a test reports green over a broken feature test,gate,review 5,6 baseline verify
Expand Down
1 change: 0 additions & 1 deletion skills/conversion-runbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ Read a row when its Stage(s) cell says *every stage* or names the stage the regi
| After the FIRST build that follows any design-system port, and before any page is built on it β€” reads the BUILT stylesheet and reports how many framework knobs point at a design token, how many tokens arrived, how many component classes arrived, each with its denominator. Measured on a real run: 55 tokens ported correctly into the right file, 0 of 35 knobs bound and 0 of 20 classes present, two build phases shipped in the framework's default blue with mx check, mxcli lint, the MDL suite and two e2e journeys all green | `project-bin/check-design-reaches-app.sh` | 3,5 |
| Before exec'ing ANY page script β€” compares the drafted MDL's shell against the wireframe's: page column, layout/nav shell, one H1. Measured 0/10 pages on a real first build, repaired wholesale 47 scripts later | `project-bin/check-page-shell.sh` | 5 |
| After drafting and again after exec'ing any page script β€” scores the page MDL (or `mxcli describe` output on stdin) against its wireframe: headings/actions/content/classes, weighted. The scored companion to check-page-shell's binary gate; 32% median measured without it, 90% first-draft with it. Every run is appended to the project's docs/PAGE-FIDELITY.tsv β€” first non-stub row per page = first-build score of record vs the β‰₯80% target (forward-reference stubs score with --stub, exempt) | `project-bin/page-fidelity.js` | 5 |
| Choosing CLI vs MCP+MDL vs hand-rolled MCP, or any MCP write session β€” three co-equal write modes, not CLI-only | `skills/learned-mcp-patterns.md` | 5 |
| Reviewing any module before calling it done β€” the ONE pass: build, gate, prove, LOOK (is it logical, does it look right, does it match our design, over every page not just the tested ones), confirm with the denominator stated | `skills/module-review.md` | 5,6 |
| Before any mxcli exec / exec.sh / --mcp write β€” ask or run? the knob decides | `bin/exec-approval.sh` | 5,6 |
| Before calling any module tested β€” what testing a module means, and the false-green register of confirmed ways a test reports green over a broken feature | `skills/testing-shape.md` | 5,6 |
Expand Down
Loading