From 5412e82e4fc44eaaf54c0c8069ddd5c63855285e Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 13 Oct 2026 10:06:46 +0000 Subject: [PATCH 01/68] Fix graph-sweep/app-facts catalog guard and per-BRD conformance ledgers (#259, #260) graph-sweep.sh and app-facts.sh refused any catalog whose build_mode label was not 'full'; mxcli v0.24+ writes 'source' for a complete catalog. Both now check what they read: a non-empty refs table with at least one RefKind='call' edge, and FAULT naming the mode and per-kind edge counts otherwise. conformance-check.sh read only /coverage-ledger.md, which is an index in the per-BRD layout. It now measures every /coverage-ledger/*.md, writes one report per BRD, keys baseline pointers by BRD, documents LEDGER_FILE (file or directory), FAULTs on a missing LEDGER_FILE, and names an index as an index with the files its rows are in. Fixtures (both layouts, fail on master's scripts): tests/wave2/test-catalog-call-edges.sh (12 checks, 10 fail on master), tests/wave2/test-conformance-per-brd-ledger.sh (17 checks, 17 fail on master). Synthetic catalogs/ledgers; field runs on a v0.24 / per-BRD project are owed. Reported by AlvinnYeo. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw --- CHANGELOG.md | 2 + agents/review-agent.md | 7 +- project-bin/app-facts.sh | 24 ++- project-bin/conformance-check.sh | 140 ++++++++++++--- project-bin/graph-sweep.sh | 35 ++-- skills/coverage-ledger.md | 18 +- tests/wave2/test-catalog-call-edges.sh | 170 ++++++++++++++++++ .../wave2/test-conformance-per-brd-ledger.sh | 163 +++++++++++++++++ 8 files changed, 510 insertions(+), 49 deletions(-) create mode 100755 tests/wave2/test-catalog-call-edges.sh create mode 100755 tests/wave2/test-conformance-per-brd-ledger.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index a28740e2..9af52a63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ Sections dated before 2026-09-19 predate the cycle and stay as they are. ## Unreleased +- fix(graph-sweep, app-facts): **the catalog guard checks for `call` edges, not the `build_mode` label; mxcli v0.24+ labels a complete catalog `source` and both scripts refused every one** ([#259](https://github.com/MendixMau/mxcli-project-toolkit/issues/259)). Field report: four module reviews recorded the sweep as "Instrument FAULT" on a fresh catalog with 5,368 refs rows. Now an empty refs table or zero `RefKind='call'` edges FAULTs, naming the mode and per-kind edge counts; `manifest.json` records the real mode. `tests/wave2/test-catalog-call-edges.sh` (12 checks, both layouts) fails 10 of 12 on master's scripts, including the verbatim FAULT line. Synthetic catalogs; a field run on a v0.24 project is still owed. — AlvinnYeo +- fix(conformance-check, coverage-ledger): **per-BRD ledgers (`/coverage-ledger/.md`) are all measured, one report per BRD, and an index file is named as one instead of "0 measurable rows"** ([#260](https://github.com/MendixMau/mxcli-project-toolkit/issues/260)). Field report: every module with an index ended in `FAULT: 0 measurable rows extracted from 1 ledger(s).`, while `LEDGER_FILE` on one per-BRD file measured 128 rows. Baseline pointers carry the BRD id, `LEDGER_FILE` (file or directory) is in the usage text, and a missing one FAULTs instead of falling back. `tests/wave2/test-conformance-per-brd-ledger.sh` (17 checks, both layouts) fails all 17 on master's script. A field run on a per-BRD project is still owed. — AlvinnYeo - feat(exec): **per-project exec lock with stale takeover, opt-in `--commit-first`, a post-exec "restart needed / watch can apply this" verdict, a scoped `bin/app-restart.sh`, and `bin/test-scratch.sh` for `mxcli test` on a locked copy** ([#287](https://github.com/MendixMau/mxcli-project-toolkit/issues/287) items 3-4, [#284](https://github.com/MendixMau/mxcli-project-toolkit/issues/284), [#275](https://github.com/MendixMau/mxcli-project-toolkit/issues/275), [#289](https://github.com/MendixMau/mxcli-project-toolkit/issues/289) items 1-2, [#285](https://github.com/MendixMau/mxcli-project-toolkit/issues/285), [#278](https://github.com/MendixMau/mxcli-project-toolkit/issues/278) recipe half). In a 20-task UX-fix field run over three apps (2026-10-12), 57 of 148 `exec.sh` runs applied nothing (26 refused on uncommitted model changes, 15 gate failures, 16 mxbuild exit 1), a machine-wide `pgrep "mxcli exec"` guard blocked an exec because another project was writing, watch mode silently missed recreated microflows, grants, attributes, pages, page URLs and theme SCSS/JS (~26 restarts), and 24 implementer restart-resumes cost 41.6M tokens because only the lead could restart apps. `exec.sh` now locks per project (atomic, `