You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit a4d701a
Browse filesBrowse the repository at this point in the historyBrowse files
Exec speed: mx check gate by default, doctor performance check, Windows overhead fixes (#587)
mx check per exec by default (Gate mode: full opts out); full build on the first exec, Java/theme changes, real drops/renames with Java actions, --patch, every 10 check-only passes, before push (new pre-push hook, installed by sync) and at module close; stamp records kind; doctor performance section and process-start check; per-run memos, background build-plan refresh, cold-build notice, MXTK_PROFILE, lint-baseline message. For #584/#585.
Review: MERGE-AFTER-FIX — state/module-close gating, refresh pipe, bash 4.1 guard and memo name re-reviewed MERGE; default-on change MERGE-AFTER-FIX (sync did not install the pre-push hook), fix re-reviewed MERGE. Field: Windows (103 ms/start) exec 138 s -> 90-103 s; Linux gate 20 s -> 9-10 s, 23-script replay with seeded defects all caught.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013jQvaonym9V1wKKfAEPmRr
Copy file name to clipboardExpand all lines: CHANGELOG.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,6 +19,9 @@ Sections dated before 2026-09-19 predate the cycle and stay as they are. Named m
19
19
20
20
## Unreleased
21
21
22
+
- new(doctor, init): **`bin/doctor.sh <project>` measures performance, not just presence**: a "Performance (measured)" section reads the last 20 `steps:` rows of the project's BUILD-LOG and reports the median exec time, the median gate and the slowest step against a normal machine (17-34 s per exec, gate 9-20 s), warning above 60 s per exec or 45 s gate with the lever to pull; on Windows with slow process starts it recommends (never requires) WSL2 or a dev container (Docker Engine in WSL2, Rancher Desktop, Podman Desktop). `Gate mode: check` is the default for every project, existing ones included after sync (`Gate mode: full` in PROJECT.md keeps a full build per exec). Windows field run (ExpenseTracker, Windows 11, Git Bash, 103 ms per process start): check-only execs took 90-103 s against 138-139 s with the full build (gate 60 s → 12-14 s); the 60-70 s of non-gate overhead is the next target. Reported by mkr87. — mkr87 (#584, #585)
23
+
- new(exec): **check-only gate by default (`Gate mode: full` in PROJECT.md, or `MXTK_GATE_MODE=full`, opts out)**: each exec runs `mx check` (beside mxbuild, same version) instead of the full deploy build, converting its JSON into mxbuild's errors shape so the delta gate, rollback and report are unchanged. The full build still runs when Java/JavaScript/theme/widgets changed since the last full build, when the project has Java actions and the script drops or renames something (`drop … if exists`, the re-create idiom, does not count), on `--patch`, before any full build is recorded, and after 10 check-only passes in a row (`MXTK_CHECK_MAX`). The other full builds sit at the work's natural boundaries, as mxcli itself advises (`mx check` after every exec, mxbuild when packaging): a new pre-push hook and `module-close.sh` run `bin/verify-model.sh` when the stamp says the model was only `mx check`ed (the stamp now records `kind: check|full`; `model-stamp.sh check --full`), and `bin/verify-model.sh` closes a batch on demand. Commits stay allowed on a check stamp. Field run (purchase-requests app, Linux, Mendix 11.13.0): gate 20 s → 9-10 s; a push after check-only execs ran the full build (20 s) and re-stamped the model as full; a dropped attribute caught as 6 × CE1613 by `mx check` on the broken model. Golden input: captured `mx check -j` output in `tests/wave2/fixtures/mx-check/`. For #584/#585 (Windows, mkr87). — mkr87 (#584, #585)
24
+
- perf(exec, doctor): **Windows exec overhead (#584/#585)**: exec.sh resolves mxbuild and the model version once per run and exports them (`MXBUILD_PATH`, `MXTK_MODEL_VERSION`) instead of re-probing per call; the build-plan page refresh runs in the background after the verdict (`MXTK_SYNC_REFRESH=1` waits); the first full build after an hour says a cold start can take 2-3 min; `MXTK_PROFILE=1` traces every command with a timestamp and prints the 15 slowest lines plus the step times; `bin/doctor.sh` measures process-start cost and above 30 ms names the antivirus exclusions to ask for (or WSL2/dev container); a missing lint baseline now says `bin/lint-gate.sh --update-baseline` instead of "lint could not run (exit 2)". Reported by mkr87. — mkr87 (#584, #585)
22
25
- fix(page-audit, design-audit, monkey, ui-loop): **no more leaked Mendix sessions from the toolkit's own browser helpers**: all three logged in and closed the browser without the xas logout, so each run burned a seat of a trial licence's cap and later journeys failed login as "Sign in failed"; they now log out first, and `ui-loop.md` says a hand-written screenshot script must too. Field: System.Session count +1 per run on master (page-audit 0 -> 1, design-audit 1 -> 2, monkey 2 -> 3), +0 with the fix — speed experiment E2
23
26
- fix(page-audit, design-audit): **the audits produce their own `.claude/loop/page-scope.json`**: when it is missing or older than the model they run `bin/page-scope.sh` (`scope-ensure.js`, 2 s) instead of FAULTing on 0 pages; a failed regeneration never blanks an existing file and names the failure. Field: scope deleted -> page-audit ran on 9 pages, `touch` of the .mpr -> regenerated once — speed experiment E2
24
27
- new(look-ledger, journey-runner, module-review): **a journey run's screenshots are LOOK evidence**: `bin/look-ledger.sh shots` (run by journey-runner after every run) maps each reached step's PNG to the one page whose widgets (`DESCRIBE PAGE`) it landed on, a URL pattern breaking ties, and lists every owed page as `OPEN` (open that PNG; the Read hook then marks the page SEEN) or `UNREACHED` (short gap-fill journey, or `page-audit.js` as before) with the line `owed N = A OPEN + B UNREACHED`; a shot older than the page's last build is not evidence and nothing is claimed when unsure. Field: 8 owed pages = 5 OPEN + 3 UNREACHED from two journey runs, no separate screenshot pass; baseline words 64,004 -> 64,193 — speed experiment E2
_pmsg="last $_pn execs: median ${_pmed} s per exec (gate ${_pgate} s; slowest step: $_ptop${_ptopv} s). Normal: 17-34 s, gate 9-20 s."
491
+
if [ "$_pmed"-gt"${MXTK_PERF_EXEC_WARN:-60}" ] || [ "$_pgate"-gt"${MXTK_PERF_GATE_WARN:-45}" ];then
492
+
warn "slow execs — $_pmsg"
493
+
[ "$_pgate"-gt"${MXTK_PERF_GATE_WARN:-45}" ] && note "The gate (mxbuild) dominates: 'Gate mode: check' in PROJECT.md runs mx check per exec and the full build before push."
494
+
[ -n"$_spawn_ms" ] && [ "$_spawn_ms"-gt"${MXTK_SPAWN_WARN_MS:-30}" ] && note "Process starts are slow too (above): that is the machine, not the model — see the advice there."
495
+
note "Per-command profile of one exec: MXTK_PROFILE=1 ./bin/exec.sh <script> (prints the 15 slowest lines)."
496
+
else
497
+
ok "$_pmsg"
498
+
fi
499
+
elif [ -n"$PROJECT_DIR" ];then
500
+
note "no exec timings yet (docs/BUILD-LOG.md has no 'steps:' rows) — re-run doctor after a few execs"
501
+
else
502
+
note "exec timings: pass a project dir (bin/doctor.sh <project>) to compare its execs with a normal machine"
503
+
fi
504
+
# Windows advice: the dev container / WSL2 lane is RECOMMENDED where process starts are slow, never
505
+
# required — a machine without it keeps working, just slower.
0 commit comments