Skip to content
Draft
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

- feat(exec): **restatement guards before every MDL write — a stale `-- baseline:` DESCRIBE (`bin/describe-baseline.sh`) and a document another `mdlsource/` script also owns (`bin/script-owners.sh`) — warn by default, refuse under `MXTK_RESTATE_GUARD=refuse` or exec approval `ask`; `gate-check.sh` prints the co-owned count; preflight STOP 21 covers draft-ahead batches and script ownership.** A script drafted from a DESCRIBE taken before an earlier script ran put four old messages back with check, mxbuild and lint green ([#261](https://github.com/MendixMau/mxcli-project-toolkit/issues/261)); three apps had 99/579, 130/357 and 38/159 documents created by more than one script, so every replay of an older one reverts the newer ([#269](https://github.com/MendixMau/mxcli-project-toolkit/issues/269)). Executed scripts renamed `done-` keep their run order and header names; a re-run after a clean exec (`describe-baseline.sh record-applied`), a rebuild onto a fresh model, and an in-order replay with `-- supersedes:` headers stay quiet. The owner parser was run over real MDL (mxcli v0.23.0 DESCRIBE captures, the StyleGallery tree: 0 of 20 co-owned, the agent examples), where a string literal spanning lines hid a microflow from a per-line lexer; field run on a project still owed. — AlvinnYeo, MendixMau
- fix(exec): **when mxbuild ran on the baseline and then crashes on the written model (no errors file, non-zero exit), the write is rolled back like a failed gate; the kept-write message now says STOP and names `restore-mpr.sh`; preflight STOP 29: DESCRIBE omits module-role and layout-row visibility, so a page restated from it silently loses them.** Field: a two-hop data source passed check, mxbuild's loader crashed, the write was kept and the next script ran on a model nothing could load; one page had 19 role-locked widgets DESCRIBE did not print, a snippet 56 row-visibility rules (refs [#309](https://github.com/MendixMau/mxcli-project-toolkit/pull/309)). — AlvinnYeo
- chore(context): **baseline word budget freed — 79,997 → 76,259 words (−3,738) without dropping a rule.** The always-on tier sat 3 words under its 80,000 cap, so three open PRs could not all merge. Long incident narratives in `conversion-runbook.md`, `source-triage.md` and `interview-protocol.md` became one-line failure examples pointing at new on-demand `process/baseline-incident-history.md`, where the original text is kept verbatim per section (R1–R20, AR1, ST1–ST4, IP1–IP3); the runbook's copy of the open-questions status table now defers to `interview-protocol.md` §4; `agent-roles.md`'s six template shapes (setup-only, ~2,300 words) moved verbatim to `agents/README.md`, which the installers never copy (explicit `MXTK_AGENTS` list). Every STOP, rule, denominator and gate cell stays in place; files touched by open PRs were left alone. — 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
Loading
Loading