From 32144d9ba6126553c8d10f82df02ef6bee9ef40b Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 30 Oct 2026 21:38:14 +0000 Subject: [PATCH 1/2] fix(skills): correct rules that mxcli v0.25-v0.29 made wrong or obsolete From the mxcli v0.29 compatibility audit (changelog-level, 2026-10-30). - STOP 21: alter navigation/menu (v0.28) and in-loop alter microflow / replace body of (v0.29) exist; the describe-first rule stays. - STOP 1b: bare Editable: since v0.25; quoted-form trap only below v0.28. - learned-mdl-cannot-express.md: filemanager, tab Badge, app title, Visible: roles(), sidebartoggle are buildable from their version. - learned-detection-gaps.md (4 rows), platform-link.md, learned-file-upload-widget.md: name the fixing version. - No more auto-created .User assumption (gone since v0.27). Nothing deleted; older-version guidance stays version-gated (nothing re-probed). skills/generated/ re-rendered (mdl-rules.sh --check in sync). Baseline 64193 -> 64235 words (budget 80000). Checks: test-mdl-rules 43/0, test-mdl-scan 52/0, test-routing-tier 26/0; leak guard clean. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018LeNWZV2sVH62vkgfYh5u5 --- CHANGELOG.md | 1 + skills/design-artifacts.md | 3 ++- skills/generated/rules-access.md | 4 ++-- skills/generated/rules-any.md | 4 ++-- skills/generated/rules-entity.md | 4 ++-- skills/generated/rules-microflow.md | 6 +++--- skills/generated/rules-page.md | 8 ++++---- skills/generated/rules-workflow.md | 6 +++--- skills/learned-detection-gaps.md | 8 ++++---- skills/learned-file-upload-widget.md | 2 +- skills/learned-mdl-cannot-express.md | 10 +++++----- skills/learned-mdl-preflight.md | 4 ++-- skills/learned-multilingual-app.md | 2 ++ skills/learned-stylegallery.md | 3 ++- skills/platform-link.md | 2 +- 15 files changed, 36 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b057dda..ac7621a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ Sections dated before 2026-09-19 predate the cycle and stay as they are. Named m ## Unreleased +- fix(skills): **skill text no longer tells agents that mxcli v0.25–v0.29 cannot do things it now does**: STOP 21 said `ALTER NAVIGATION` does not exist and restatement is the only write — it now points at `alter navigation`/`alter menu` (v0.28, mendixlabs/mxcli#1522) and in-loop `alter microflow`/`replace body of` (v0.29, ako/mxcli#1693), keeping its describe-first rule; STOP 1b now writes the bare `Editable: ` (v0.25) and limits the quoted-form trap to mxcli < v0.28 (#1567); `learned-mdl-cannot-express.md` marks file upload (`filemanager`, v0.27), tab `Badge:` (v0.29), app title (v0.29), role visibility `Visible: roles(…)` (v0.27) and `sidebartoggle` (v0.28) buildable from their version; four `learned-detection-gaps.md` rows (terminators, `if` without `else` in a handler, `Class` on a snippet call, property sets below 10.24.24) and `platform-link.md` now name the mxcli version that fixed them; three passages no longer assume mxcli auto-creates `.User` (gone since v0.27, #1474). Nothing deleted: old-version guidance stays, version-gated, because nothing was re-probed. Baseline 64,193 → 64,235 words. Source: mxcli v0.29 compatibility audit 2026-10-30 - fix(doctor, sync-project, speed-setup): **doctor says when the speed fixes never reached a project**: `bin/exec.sh`, `bin/_common.sh` or `bin/lint-gate.sh` without the 2026-10-29 speed code (marker per file) gives a Machine health warning "speed fixes not active", and the Recommended fix leads with the exact `sync-project.sh --upgrade-bin ...` command (exec.sh always with its `_common.sh`; each copy backed up) before any other advice, because every other number measures the old scripts; `sync-project.sh` names the speed fixes on a hand-edited exec.sh / _common.sh that has the exit-code fix but not the speed work; `skills/speed-setup.md` has Claude show each local edit in one line and ask before replacing. Field: an English colleague's ExpenseTracker analysis after the toolkit update still showed a full mxbuild on every change (45.5 min, 57% of all exec time) with 15 drifted scripts in bin/; reproduced here with the real pre-#587 exec.sh / _common.sh / lint-gate.sh — doctor names all three, sync names exec.sh and refreshes the two unedited ones — Maurits (mauritscgvisser) - fix(doctor, speed-setup): **doctor no longer says "None needed" next to a verdict of "5x slower"**: when process starts are fast but one bench step is 5x+ the reference and 2 s+ slower, the Recommended fix names that step (slow git status: `git config core.untrackedCache true` / `core.fsmonitor true`, no admin rights); a project inside a OneDrive / Dropbox / Google Drive / iCloud folder gets a Machine health warning and "move the project to a local folder" as the fix; low-memory advice now offers "restart the computer" before `--cleanup`; the bench's git step runs one untimed warm-up so a stale index after a copy or clone no longer reads as slow (field, ab-581/gk: 18.3 s cold, 31 ms warm); `skills/speed-setup.md` tells Claude never to say deno, mxbuild or helper process to a user. Field run: ab-581/gk on Linux, bench 14.7 s vs 10.9 s, "None needed" correctly; a project under a OneDrive path, move advice shown — Maurits (mauritscgvisser) - fix(gate-check, gate-cache): **the closeout verdict cache also keys on file CONTENT, so an overwrite that keeps an old mtime (`cp -p`, `rsync -t`, `tar x`, `unzip`, `touch -d`) can no longer replay a stale verdict**: a signed triage.md copied over a FAIL one still printed the cached Stage 0 FAIL (PR #589 review); the cache now stores one `find | sort | xargs cksum | cksum` signature of the project files (skipping .git, node_modules, .mxtk, mprcontents, deployment, *.mpr, files over 1 MB) and any difference, or a signature that cannot be computed, re-evaluates; new `tests/wave2/test-gate-cache.sh` (hit, edit/delete/waiver miss, cp -p miss, TTL 0, 'not evaluated' line); `MXTK_GATE_CACHE_TRACE=1` prints `gate-cache: hit|miss` on --closeout. Field run: ab-581/base copy (197 MB, 633 hashed files) - signature 28 ms, cache hit 1464 -> 1498 ms vs 2567-2786 ms full evaluation - PR #589 reviewer, OlafFede (#583) — OlafFede (#583) diff --git a/skills/design-artifacts.md b/skills/design-artifacts.md index d795e43f..112bc819 100644 --- a/skills/design-artifacts.md +++ b/skills/design-artifacts.md @@ -416,7 +416,8 @@ The gate is all four, and 3 and 4 are the ones projects skip: 2. the gallery module builds with 0 CE errors; 3. the gallery home page is **in a navigation profile and granted to a role a demo user actually holds** — check with `SHOW MODULE ROLES IN `, because a security script that was - drafted and never executed leaves every grant on the auto-created `.User` role, and then the + drafted and never executed leaves every grant on the auto-created `.User` role (mxcli < v0.27) or, + on v0.27+, on no role at all (mendixlabs/mxcli#1474), and then the first attempt to screenshot the gallery silently measures whatever the demo user lands on instead; 4. **someone opened it and wrote down what they saw.** diff --git a/skills/generated/rules-access.md b/skills/generated/rules-access.md index a617fbbb..72bc4f34 100644 --- a/skills/generated/rules-access.md +++ b/skills/generated/rules-access.md @@ -46,7 +46,7 @@ Each row keeps one failure clause; the full root cause is in `process/baseline-i |---|---|---|---|---| | 14 | Narrow an existing entity grant (fewer attributes or rights than the rule already has) | **`revoke` first, then `grant` the narrower set.** A lone narrowing `grant` merges into the existing rule instead of replacing it (BUG-145). | The old, wider rights survive the narrowing `grant`. | access | | 16 🔎 | Write an access-rule XPath constraint with a **path expression inside the `[%CurrentUser/...%]` substitution token** — `[Assoc = '[%CurrentUser/Module.OtherAssoc%]']`, especially crossing module boundaries | **Never put a path inside the CurrentUser substitution. Keep it bare (`'[%CurrentUser%]'`) and do the ENTIRE multi-hop/cross-module traversal on the left-hand side instead**, qualifying the entity name at every module crossing (same rule as the "cross-module association expression paths" MDL gotcha, extended here to access-rule XPath constraints, not just microflow expressions). Was: `[Decision_Partner = '[%CurrentUser/PLM.Account_Partner%]']`. **Fix (confirmed working):** `[PLM.Decision_Partner/PLM.Partner/Administration.Account_Partner = '[%CurrentUser%]']` — walk Partner→Account fully on the left, compare directly to the (already-an-Account) CurrentUser token. | Invalid Mendix XPath, not an mxcli bug: `CE0161` every time. The fixed form is mxcli-safe — no GUI fallback. | access | -| 21 | `DROP` + `CREATE`, `create or modify` or `create or replace` any document **another script also edits** — an aggregator microflow, an after-startup chain, a navigation profile | **STOP → `describe` the live document first, diff your restatement against that dump, and name in the script header which call sites you preserved. A new owner adds `-- supersedes: