Skip to content
Closed
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
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ Sections dated before 2026-09-19 predate the cycle and stay as they are.

## Unreleased

- learn(iterative-build-loop, upstream-feedback): **every model write goes through `exec.sh`; on a refusal the move is commit (`--commit-first`), wait (exec lock) or stop and report — never `FORCE_EXEC` on the agent's own initiative; MCP writes stay allowed and are accepted as unrecorded, recorded by an `MCP:` commit; the gate checks the saved file (save, then check); no batched-gate mode exists, so do not imitate one with overrides; Studio Pro MCP server asks get a third destination in `upstream-feedback.md` with their evidence rows** ([#69](https://github.com/MendixMau/mxcli-project-toolkit/issues/69), [#171](https://github.com/MendixMau/mxcli-project-toolkit/issues/171), [#173](https://github.com/MendixMau/mxcli-project-toolkit/issues/173)). The phase-close check is coverage, N of N: every model commit is covered by an applied exec row, a `--commit-first` commit or an `MCP:` commit (the pre-exec sequence now commits as `MCP: …`); the refusal table includes PRE-EXISTING errors and ends with "read the printed remedy"; the exec lock refuses rather than queues, and the text says so. Field evidence: a 2026-09-29 two-build comparison (229 errors hidden by a stale disk copy; per-script apply 22–30 s growing to 55–65 s). Routing triggers for the build loop, page patterns and measured claims now name the refusal, the UI round and transcript token counts (stubs re-rendered; baseline unchanged at 79,997 words) — MendixMau
- learn(learned-page-patterns, measured-claims): **UI fix rounds: SCSS first, apply directly through `exec.sh`, re-look only changed pages (N of N), and check four regressions before applying (N1 page-column on the layout root, N2 `.d-none` losing to a `display` class, N3 Data Grid 2 `autoFit` columns at 32 px, N4 focus ring); transcript usage is read from each message's LAST record** ([#170](https://github.com/MendixMau/mxcli-project-toolkit/issues/170), [#171](https://github.com/MendixMau/mxcli-project-toolkit/issues/171)). The round took 1,507 calls against 515 for a comparable build; re-measured on Claude Code 2.1.296 transcripts, sub-agent output read from the first record was up to 7x low while the main loop's was exact — MendixMau
- new(init-project): **the scaffold prints an auto-compact advisory: a warning when `CLAUDE_CODE_AUTO_COMPACT_WINDOW` or any `autoCompactWindow` in the project or user settings is above 250k, an "unparseable" line for a value it cannot read, otherwise a `/autocompact 250k` recommendation; it writes no setting and never fails the scaffold** ([#167](https://github.com/MendixMau/mxcli-project-toolkit/issues/167)). A lead session at a 1M window averaged 363–466k context per call. Fixture `tests/wave2/test-init-autocompact.sh` (15 checks; fails on master) — MendixMau
- learn(testing-shape, test-result-audit): **three test-strength rules, each with a denominator: refusals probed on the server, every undeclared 4xx a failure, one clean-database final run** ([#172](https://github.com/MendixMau/mxcli-project-toolkit/issues/172)). A field comparison of two builds against one frozen spec found the toolkit build checked permission refusals only in the client (a hidden menu item), logged unexpected 400/422 responses as information, and reached 20/20 by stitching three runs. `testing-shape.md` §7 gains three report lines (`N of N restricted pairs probed server-side`, `undeclared 4xx/5xx: 0 of M requests — each fails its step`, `one clean-DB run <id>: N of N scenarios incl. timers, not stitched`); `test-result-audit.md` gains check 2e, which carries the reasons and the field evidence and asks for those numbers. Both baseline skills stay inside the 80,000-word baseline budget (79,997): the reasons live in the on-demand audit skill, and two redundant sentences in `testing-shape.md` §4's verdict paragraphs were folded (the empty-set corollary is stated in the Trace row, `harness-architecture.md` and `report-schema.md`). The backing inbox note is trimmed to its unpromoted "Keep" items. — MendixMau
- learn(learned-detection-gaps, module-review): **two UI defects every model gate passes: a lazy-loaded combo box filter hides its preset, and a theme that pins row heights by position lets the next row cover an inserted widget** ([#299](https://github.com/MendixMau/mxcli-project-toolkit/issues/299)). Both passed check, mxbuild, lint and the scripted checks on a 127-module production app and were found only in the running app. Two register rows with the first oracle and the pre-build check (pluggable properties that change *when* data loads; grep the theme for fixed `height` on positional row classes before an insert), and two LOOK lines in `module-review.md` §4c with denominators (`N of N filters show their preset on first load`, `N of N widgets inserted into an existing container fully visible`). — jopterhorst
- fix(app-restart, test-stack-up): **a port held by another process before `run --local` is named and reported as "instrument blocked" (exit 4), never killed** ([#262](https://github.com/MendixMau/mxcli-project-toolkit/issues/262)). Studio Pro had started its own runtime on the app/admin ports a restart needed; `mxcli run --local` then failed with "Authentication failed" (the admin API answering was Studio Pro's), the next journey ran against Studio Pro's runtime, and four more runs were NOT RUN. `app-restart.sh` now checks the app port and the admin port (record's `adminPort`, else app + 10) before stopping anything — a holder outside the recorded process tree exits 4 with its name, pid and parent — and again after the stop, where anything still holding a port is by definition not ours. `test-stack-up.sh` runs the same check wherever it would tell you to start `run --local` (`--no-docker`, no Docker daemon, `--check` with a leftover record), on the record's ports, `RUN_LOCAL_APP_PORT`/`RUN_LOCAL_ADMIN_PORT`, or mxcli's defaults 8080/8090. Holder lookup: lsof, then ss, then netstat + tasklist on Windows; unnamed holders still block when nothing of ours is running. Fixtures: `test-app-restart.sh` +2 cases (14 assertions, all fail on the old script), `test-stack-up-local.sh` T7 (4 of 6 fail on the old script). — AlvinnYeo
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ Every mxcli project has a `.ai-context/skills/` directory (bundled by `mxcli ini
| Changing an EXISTING Mendix app — adding a feature, altering a flow, restructuring a module — when it has no BRDs, no architecture doc and no wireframes: the knowledge base comes from the live model (Path D), stages 2–4 run over what changes plus what it touches, nothing more, and the Track B regression baseline is the precondition; audit-only stays in existing-app-assurance | `skills/existing-app-change.md` |
| Setting up or wiring a COMPANY BRAIN — the private tier between the toolkit and a project for own skills, conventions, lint rules, MDL snippets and approved MPKs; and deciding whether something goes to the toolkit, the company brain or docs/brain/ | `skills/company-brain.md` |
| Cutover and retrospective — promoting proven patterns back into the toolkit | `skills/close-the-loop.md` |
| Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence — a claim not in the register may not be cited | `skills/measured-claims.md` |
| Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence, or counting tokens from transcripts — a claim not in the register may not be cited | `skills/measured-claims.md` |
| Any review pass that runs more than once — module-review, coherence, monkey, wiring-sweep: findings accumulate across runs, a per-run report cannot show a trend | `skills/improvement-register.md` |

**Source — reading a legacy system (migration entry mode)**
Expand Down Expand Up @@ -587,7 +587,7 @@ Every mxcli project has a `.ai-context/skills/` directory (bundled by `mxcli ini
| Task | Skill to load |
|---|---|
| Dispatching a build step to a helper — generate its one-file pack (the brief's Build steps row, mxcli brain brief, live DESCRIBEs, example, folder) and hand over the path instead of a reading list. Measured: 25-38% fewer tool calls and 30-41% less time, same quality; the token saving is not proven | `project-bin/context-pack.sh` |
| Building a module with mxcli — verified, iterative, coverage-checklist gated | `skills/iterative-build-loop.md` |
| An exec.sh guard refused a write (not a permission prompt), or building a module with mxcli — verified, iterative, coverage-checklist gated; on a refusal: commit, wait or stop, never FORCE_EXEC | `skills/iterative-build-loop.md` |
| After marking a module done, or any time "how much is built vs proven" is asked — renders build-plan.html from done- prefixes and verify-module.sh/improvement-register.md, kept as two honestly separate views; --json writes architecture/build-plan.json parsed from build-plan.md's Phase headings (a plan with no Phase headings gets no file) | `project-bin/build-plan-status.sh` |
| Turning a client-derived Mendix app into a clean, shareable demo with zero client fingerprint — branding, data, custom widgets | `skills/anonymize-client-app-for-demo.md` |
| Handing a headless-built model to a person — opening it in Studio Pro, a free sandbox, or a colleague's machine: the model travels, the demo data and runtime config (keys, an agent's bound model) do not, and each needs its own re-establish step | `skills/handoff-to-studio-pro.md` |
Expand All @@ -610,7 +610,7 @@ Every mxcli project has a `.ai-context/skills/` directory (bundled by `mxcli ini

| Task | Skill to load |
|---|---|
| Building and auditing Mendix pages — widget patterns, datasource shapes | `skills/learned-page-patterns.md` |
| Building and auditing Mendix pages, or starting a UI fix round across many pages — widget patterns, datasource shapes; for a round: SCSS first, four regressions to check | `skills/learned-page-patterns.md` |
| Generating a whole page tree in one script — the structure patterns that survive it | `skills/oneshot-page-structure-patterns.md` |
| Building or auditing a collapsible sidebar nav — Atlas Core's collapsed state needs icons assigned per menu item or it silently clips label text | `skills/learned-sidebar-collapse-icons.md` |
| Building or altering any data grid — native DATAGRID vs pluggable DG2 decision rule, the ALTER PAGE INSERT corruption, sort-by and filter-binding traps | `skills/learned-dg2-patterns.md` |
Expand Down
6 changes: 3 additions & 3 deletions ROUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ picks the row up. That is the whole procedure — there is no second list to rem
| Changing an EXISTING Mendix app — adding a feature, altering a flow, restructuring a module — when it has no BRDs, no architecture doc and no wireframes: the knowledge base comes from the live model (Path D), stages 2–4 run over what changes plus what it touches, nothing more, and the Track B regression baseline is the precondition; audit-only stays in existing-app-assurance | `skills/existing-app-change.md` | ba,architect | P,0 | ondemand |
| Setting up or wiring a COMPANY BRAIN — the private tier between the toolkit and a project for own skills, conventions, lint rules, MDL snippets and approved MPKs; and deciding whether something goes to the toolkit, the company brain or docs/brain/ | `skills/company-brain.md` | all | - | ondemand |
| Cutover and retrospective — promoting proven patterns back into the toolkit | `skills/close-the-loop.md` | all | 7 | ondemand |
| Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence — a claim not in the register may not be cited | `skills/measured-claims.md` | all | - | ondemand |
| Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence, or counting tokens from transcripts — a claim not in the register may not be cited | `skills/measured-claims.md` | all | - | ondemand |
| Any review pass that runs more than once — module-review, coherence, monkey, wiring-sweep: findings accumulate across runs, a per-run report cannot show a trend | `skills/improvement-register.md` | mdl,gate,test,review | 5,6 | ondemand |
| The first command of every session, and any time someone asks "where are we" or "what next" — one screen: stage, done/overdue, the ONE next action, from the instruments, never from memory | `bin/status.sh` | all | P,0,1,2,3,4,5,6,7 | baseline |
| Before obeying any learned-* STOP or workaround that costs a detour — probe the binary you actually have, then stamp the verdict back into the rule | `skills/retesting-learned-rules.md` | all | - | baseline |
Expand Down Expand Up @@ -136,7 +136,7 @@ picks the row up. That is the whole procedure — there is no second list to rem
| 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` | mdl,review,test | 5,6 | baseline |
| Before any mxcli exec / exec.sh / --mcp write — ask or run? the knob decides | `bin/exec-approval.sh` | mdl,gate | 5,6 | baseline |
| Dispatching a build step to a helper — generate its one-file pack (the brief's Build steps row, mxcli brain brief, live DESCRIBEs, example, folder) and hand over the path instead of a reading list. Measured: 25-38% fewer tool calls and 30-41% less time, same quality; the token saving is not proven | `project-bin/context-pack.sh` | mdl | 5 | ondemand |
| Building a module with mxcli — verified, iterative, coverage-checklist gated | `skills/iterative-build-loop.md` | mdl,gate | 5 | ondemand |
| An exec.sh guard refused a write (not a permission prompt), or building a module with mxcli — verified, iterative, coverage-checklist gated; on a refusal: commit, wait or stop, never FORCE_EXEC | `skills/iterative-build-loop.md` | mdl,gate | 5 | ondemand |
| After marking a module done, or any time "how much is built vs proven" is asked — renders build-plan.html from done- prefixes and verify-module.sh/improvement-register.md, kept as two honestly separate views; --json writes architecture/build-plan.json parsed from build-plan.md's Phase headings (a plan with no Phase headings gets no file) | `project-bin/build-plan-status.sh` | architect,gate,review | 4,5,6 | ondemand |
| Turning a client-derived Mendix app into a clean, shareable demo with zero client fingerprint — branding, data, custom widgets | `skills/anonymize-client-app-for-demo.md` | mdl,review | 6 | ondemand |
| Handing a headless-built model to a person — opening it in Studio Pro, a free sandbox, or a colleague's machine: the model travels, the demo data and runtime config (keys, an agent's bound model) do not, and each needs its own re-establish step | `skills/handoff-to-studio-pro.md` | test,review | 6,7 | ondemand |
Expand Down Expand Up @@ -164,7 +164,7 @@ picks the row up. That is the whole procedure — there is no second list to rem

| Always relevant for | Load this | Agent(s) | Stage(s) | Tier |
|---|---|---|---|---|
| Building and auditing Mendix pages — widget patterns, datasource shapes | `skills/learned-page-patterns.md` | mdl | 5 | ondemand |
| Building and auditing Mendix pages, or starting a UI fix round across many pages — widget patterns, datasource shapes; for a round: SCSS first, four regressions to check | `skills/learned-page-patterns.md` | mdl | 5 | ondemand |
| Generating a whole page tree in one script — the structure patterns that survive it | `skills/oneshot-page-structure-patterns.md` | mdl | 5 | ondemand |
| Building or auditing a collapsible sidebar nav — Atlas Core's collapsed state needs icons assigned per menu item or it silently clips label text | `skills/learned-sidebar-collapse-icons.md` | mdl | 5 | ondemand |
| Building or altering any data grid — native DATAGRID vs pluggable DG2 decision rule, the ALTER PAGE INSERT corruption, sort-by and filter-binding traps | `skills/learned-dg2-patterns.md` | mdl | 5 | ondemand |
Expand Down
2 changes: 1 addition & 1 deletion agents/architect-agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ This table is your whole list. The baseline table in the project's CLAUDE.local.
| `skills/mendix-agents.md` | Building a Mendix AI agent |
| `skills/company-brain.md` | Setting up or wiring a COMPANY BRAIN |
| `skills/close-the-loop.md` | Cutover and retrospective |
| `skills/measured-claims.md` | Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence |
| `skills/measured-claims.md` | Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence, or counting tokens from transcripts |
| `skills/agent-permission-friction.md` | Any refused, denied or blocked command |
| `project-bin/build-plan-status.sh` | After marking a module done, or any time "how much is built vs proven" is asked |
| `skills/workflow-structure-rules.md` | Designing or reviewing a Workflow's SHAPE before or after the MDL |
Expand Down
2 changes: 1 addition & 1 deletion agents/ba-agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ This table is your whole list. The baseline table in the project's CLAUDE.local.
| `skills/brd-validation.md` | Validating BRDs against the code and document KB |
| `skills/company-brain.md` | Setting up or wiring a COMPANY BRAIN |
| `skills/close-the-loop.md` | Cutover and retrospective |
| `skills/measured-claims.md` | Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence |
| `skills/measured-claims.md` | Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence, or counting tokens from transcripts |
| `skills/agent-permission-friction.md` | Any refused, denied or blocked command |
| `skills/mendix-epics-api.md` | Working with the Mendix Epics board programmatically |
| `skills/upstream-feedback.md` | About to open an issue, PR or discussion against mxcli or the toolkit |
Expand Down
4 changes: 2 additions & 2 deletions agents/gate-agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,14 @@ This table is your whole list. The baseline table in the project's CLAUDE.local.
| `skills/cloud-dev-environment.md` | Setting up or resuming an mxcli project in a cloud/ephemeral container |
| `skills/coverage-ledger.md` | Building the Stage 4 coverage ledger |
| `bin/coverage-check.sh` | Checking a coverage ledger against its BRD |
| `skills/iterative-build-loop.md` | Building a module with mxcli |
| `skills/iterative-build-loop.md` | An exec.sh guard refused a write (not a permission prompt), or building a module with mxcli |
| `project-bin/conformance-check.sh` | Running the ledger rung alone |
| `project-bin/graph-sweep.sh` | Running the wiring rung alone |
| `project-bin/test-stack-up.sh` | Before any runtime test |
| `skills/company-brain.md` | Setting up or wiring a COMPANY BRAIN |
| `skills/close-the-loop.md` | Cutover and retrospective |
| `skills/report-schema.md` | Writing or reading docs/report.json |
| `skills/measured-claims.md` | Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence |
| `skills/measured-claims.md` | Before citing ANY behavioural claim about the harness, the Mendix runtime or a test tool as evidence, or counting tokens from transcripts |
| `skills/agent-permission-friction.md` | Any refused, denied or blocked command |
| `project-bin/coherence-cadence.sh` | After every module's CONFIRM stage |
| `project-bin/build-plan-status.sh` | After marking a module done, or any time "how much is built vs proven" is asked |
Expand Down
Loading
Loading