Skip to content

Night batch 2026-10-15: 18 reviewed PRs (stub diet, app-facts sweep, journey controls, fixes) - #385

Merged
MendixMau merged 60 commits into
masterfrom
integration/2026-10-15
Oct 15, 2026
Merged

MendixMau merged 60 commits into
masterfrom
integration/2026-10-15

Conversation

@MendixMau

Copy link
Copy Markdown
Owner

Night batch 2026-10-15. Each of the 18 PRs below was reviewed on its own by a fresh agent that did not write it, and merged into this branch only on a MERGE verdict with green CI. Every --no-ff merge commit carries that review in its Review: line. This PR lands them on master together.

Direct lane

What changed and why (one paragraph):
The batch has four parts:

PR What Review
#340 learnings #336–#339 MERGE
#363 upstream draft, run --watch theme (#284) MERGE
#362 close-task resolves checkpoint.sh (#358) MERGE
#355 mdl-scan STOP-row scanner, warn-only (#349) MERGE
#370 shared mxtest guard / pid check in _common.sh MERGE
#368 journey-proof named controls (#159) MERGE
#364 three check tiers: exec / module close / release gate MERGE
#365 DG2 REPLACE rule + LOOK FAULT remedy (#356, #357) MERGE
#366 microflow header grammar (#361) MERGE
#372 lint learnings bundle (#360, #241, #246, #169) MERGE
#367 test-agent journeys/ write location (#359) MERGE
#371 crumbs are links; LOOK "can I get back?" (#232) MERGE
#376 pipefail here-strings in sync/review/conformance MERGE
#369 stub moves T4 MERGE + A/B
#373 incremental loop sweep + app-map freshness (#297) MERGE after fix (env-var cap at ~1,600 units, rename gaps)
#377 app-facts escaped read-only catalog URI MERGE after fix (inline fallback)
#378 runbook slice for helpers (T2+T3) MERGE after fix (double count, slice content) + A/B
#380 per-role on-demand routing token (T1) MERGE + A/B

Behaviour A/B for the stub diet (method: process/preflight-skill-baseline-2026-08-31.md):

  • Setup: fresh-agent reps on one fixed model, each reading the context pack in full. Arm T is the trimmed context (33k words), arm M is master (60k).
  • Drafting, 5 reps × 2 tasks:
    • the planted STOP request was refused in 20/20 runs;
    • mxcli check rejected the page script outright in 2/5 T runs versus 3/5 M runs;
    • crumbs were missing in 1/5 T runs versus 2/5 M runs;
    • the microflow task scored identically in both arms.
  • Retrieval probes, 5 triggers × 3 reps: T named the right file in 15/15 runs.
  • Result: T is no worse than M on every scored metric.
  • Side finding: 3 of 5 M-arm probe agents skipped most of the 4,822-line pack.

Field evidence: none of the instruments in this batch has had a real-project run yet:

Merging to master is the maintainer's call under CLAUDE.md "Shipping an instrument" rule 4.

Not in this batch, and why:

PR Reason
#374 Writes model files; needs one exec.sh --patch field run
#379 Reviewed MERGE; owes a macOS and a Git Bash run of bench-lock-race.sh
#375 HOLD; review findings did not converge across three rounds; design decision pending
#384 Fixes for review findings in progress
#273, #341, #342, #344, #345, #346, #347 Waiting on the maintainer's client-name check
#333 Waiting on a field run

🤖 Generated with Claude Code

https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw


Generated by Claude Code

MendixMau and others added 30 commits October 14, 2026 13:23
…3 false sign-out, widget-pinned probes, restart signs everyone out

Field run 2026-10-14 (mxcli v0.26.0, Mendix 11.15.0). Refs #336 #337 #338 #339.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
)

bin/mdl-scan.sh greps an MDL script for the STOP rows of
learned-mdl-preflight.md that a text pattern identifies and that have a
captured failure in bug-logs/: rows 1 (BUG-18), 12 (BUG-142), 16 (CE0161
CurrentUser path) and 26 (dg2 quoted association path). Rules are data in
bin/lib/mdl-scan-rules.tsv. exec.sh runs it first, before the lock, the
commit, mxcli check and the snapshot; a hit refuses the exec. The only
override is MXTK_SCAN_OVERRIDE="<reason>", printed and logged (#348 will
harden it).

Fixtures: tests/wave2/test-mdl-scan.sh (43 checks, keys and CE text
asserted verbatim in the ledger), tests/wave2/bench-mdl-scan.sh (4/9
captured failures caught, 0/17 clean files flagged).

Field evidence: captured bug-log output only; no live mxcli/mxbuild run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… reconcile the 403 probe with the goto row

Review of #340 (MERGE-AFTER-FIX):
- ui-loop: drop "sessions live in the runtime's memory", which contradicts
  measured-claims.md (sessions persist in System.Session and survive a
  container restart). Scope to mxcli run --local and state the evidence
  as a timing match (7 starts vs the reports), not an inspected session table.
- testing-shape 403 row: name the probe actually used (a full
  page.goto('<base>/')), keep the re-authenticating helper rule of the
  2026-08-15 row, and amend that row with an unconfirmed cross-reference:
  its bounce may have been this 403 misread.
- CHANGELOG headline matches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
)

checkpoint.sh ships at claude-hooks/bin/ and reaches ~/.claude/bin only via
the opt-in install-claude-hooks.sh --basic. close-task.sh printed
`checkpoint.sh --write` unconditionally. It now looks in PATH, then
~/.claude/bin, then $MXTK_ROOT/claude-hooks/bin, and prints the full path,
or an install pointer with "skip: RESUME.md is the resume source". The exit
code is unchanged (1 only when writes are owed). close-the-loop.md step 4 is
updated to match. Fixture tests/wave2/test-close-task-checkpoint.sh: 10 cases,
7 fail on master.

Closes #358

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…dist/pages (#284)

Paste-ready mendixlabs/mxcli draft, status DRAFT — NOT FILED: a theme-only
rebuild under `mxcli run --local --watch` deletes deployment/web/dist/pages
and still reports a successful reload; the other change classes watch serves
stale; the timing table from #284; and the upstream questions (why a restart
is ~5x a reload, whether a recreated microflow keeps its old compiled version).
Evidence only from #284 and its 2026-10-14 comment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…se gate

Maintainer decision: only fast checks run during development; heavy checks
run at module close or at the release gate. testing-shape.md §3 now holds
the tier table as the single source, beside the unchanged lanes and re-run
events. Unbuilt checks are marked (planned: #N): #348, #349 (PR #355), #351,
#352, #353, #354. The runbook's Stage 6 paragraph points at it in one line.

Baseline words 75,028 -> 75,261 (budget 80,000).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… edits

Review of #363: "nothing in the watch output said so" was an inference not in
#284; replaced with the issue's own wording (the implementer saw the old
behaviour until the app was restarted).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…d-shots LOOK FAULT names its remedy (#356, #357)

#356: ALTER PAGE REPLACE of a DataGrid 2 column with a new Attribute:
passes check --references and fails mxbuild (v0.26.0, Mendix 11.15.0).
learned-dg2-patterns.md rule 1 now covers replace/re-attribute; new
detection-gaps row; one-line gotcha pointer in learned-mdl-preflight.md;
BUG-DRAFT-dg2-replace-column-attribute-passes-check (upstream candidate).

#357 change 1: the "screenshots older than their section's VALID AT"
FAULT now names the addendum remedy; close-the-loop.md routes re-shot
pages to an addendum; test-obligation-valid-at.sh T5 asserts the text.
Per-page staleness (change 2) is left to the maintainer.

Closes #356

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
)

Empty parameter list `()` is mandatory, `returns` follows it, placement is
`folder '…'` not `in`, and a list member is changed in `loop … change … end loop;`.
Verbatim v0.26.0 parse errors from the field build in BUG-DRAFT-microflow-header-grammar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
The test-agent brief confined writes to {{TEST_DIR}} (tests/e2e/ when
filled), while verify-module.sh, fixture-manifest.sh, journey-proof.md
and the Stage-6 artifact gate read journeys from ${JOURNEY_DIR}
(default journeys/). The brief and its workflow step now send journeys
there; agent-roles.md says how to fill {{TEST_DIR}}, which nothing
fills automatically.

Reported by joshuamoesa.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… fail (#159)

--positive-control proves the harness can fail, not that a journey's claim can.
Port named-controls.js: a control file (control.of / control.mustFail) is PROVEN
only when the runner exits 1, every check named by mustFail is FAIL (at least
one), and nothing else is FAIL or INVALID; a persona other than the run user is
a FAULT and is not run. journey-runner.js gains --out=<file> and a warn-only
"WARN   named control:" line for a journey with no claim or no control file.
journey-proof.md gains the rule. Fixture tests/wave2/test-named-controls.sh,
19 cases over the captured card-disbursement walk. No field run of this port.

Closes #159. Source: MendixMau, card-disbursement requirements-driven build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…bling path (#362 review)

A HOME or toolkit path with a space broke copy-paste of the printed
`<path> --write` and install-hint commands. Both are now single-quoted,
with embedded ' escaped via sed for bash 3.2. The ~/.claude/bin copy
(claude-hooks/bin/close-task.sh) printed a bare checkpoint.sh, though
~/.claude/bin is usually not on PATH; it now prints its sibling's full
path, quoted. The fixture gains T7a-c (space in HOME, space and ' in the
toolkit path, quoted install hint; each printed line is eval'd) and T8
(hooks copy): 14/14 pass, 11 fail on master.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…fixed

- STOP-12: a ContentParams list now ends at its matching ] by depth (in the
  string-blanked line), not at the last ] on the line, so
  `ContentParams: [{1} = Name], Visible: [IsActive]` (one line or two) is clean.
- STOP-1: a body-less customContent column is forgotten at the next } or at
  the ) that closes its header's scope; a LAST such column no longer marks a
  later container as inside it. customcontent rules match the line with
  string literals blanked.
- Severity column (warn|block) in mdl-scan-rules.tsv. Every rule ships warn
  (scan exit 3): exec.sh prints the hits, notes them in BUILD-LOG, goes on.
  The block path (exit 1, refuse, MXTK_SCAN_OVERRIDE) is kept and tested
  through a test-only rules file. Flip criterion in the rules-file header.
- Clean corpus gains the review's forms; bench reports 0/19 false positives.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…(T4)

Verbatim moves into process/baseline-incident-history.md (UI1-UI4, TO1-TO3,
MF1, MP1) with a one-line pointer in each source: ui-preflight-pages.md,
tool-output-is-not-ground-truth.md, microflow-preflight.md and
learned-mdl-preflight.md. Rules, STOP rows and their numbers, denominators
and one-line failure examples stay in place. Baseline 75,028 -> 74,223 words.

New bin/check-moved-text.sh: every line removed from the sources must be
found with grep -F in the destination (83 of 83 here).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…the baseline table

T2: skills/conversion-runbook.md is no longer a render-routing surface; its rendered
baseline table (a fourth copy) is replaced by a one-line pointer to CLAUDE.local.md and
ROUTING.md.

T3: bin/runbook-slice.sh <stage> prints §1b plus that stage's section. The span logic
moves from gate-check.sh into bin/lib/runbook-span.sh, shared by both and by the per-role
count. The runbook routing row is split: lead/ba/architect keep the runbook,
mdl/gate/test/review get the slice; routing_baseline_pack counts the slice's printed words.

Adds tests/wave2/test-runbook-slice.sh and tests/bench/trim-noloss.sh; updates
test-routing-tier.sh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…-run pid check via _common.sh

mxtest_after_startup, mxtest_left and mxtest_refusal were duplicated in
project-bin/app-restart.sh and project-bin/test-scratch.sh. They now live once
in project-bin/_common.sh. The copies differed only in a refusal branch that
test-scratch never takes; the tool-name argument still selects it, so each
script prints byte-for-byte what it printed before.

pid_is_mxcli_run (app-restart.sh) becomes mxtk_pid_is_mxcli_run on
mxtk_pid_args: Linux matches a whole `run` argument after mxcli, macOS keeps
the joined ps line, Windows keeps the tasklist image check.

Both scripts exit 2 with the sync remedy when the installed _common.sh
predates the move; one fixture case each.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…n I get back?" (#232)

design-spacing.md §3 prescribed the page-header crumb as one plain-text
dynamictext, which every wireframe and page then copied. The scaffold
now builds crumbs from linkbuttons with SHOW_PAGE targets (current page
alone as text). module-review.md §4c, the one LOOK question list, gains
"can I get back?" and "does every tile go somewhere?".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…ates (#360 #241 #246 #169)

Known answers for QUAL004 on DS_ Data grid 2 datasources and TEST_ helpers, CUSTOM002 on
TEST_/GET_/PRS_/STUB_, and QUAL002 on MDL089 types (per-kind options), with upstream drafts.
lint-backlog Batch 7 adds the four missing #169 candidates; the inbox file is promoted and deleted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…ce and widget-pinned probes read as sign-outs; restarts sign everyone out

Review: independent review (r-community) MERGE-AFTER-FIX — ui-loop restart cause contradicted measured-claims.md; new 403 row conflicted with testing-shape's 2026-08-15 page.goto row → both fixed (timing-match scope, cause open; probe named, old row kept with an unconfirmed cross-note); confirmation MERGE at 190a2d7. Baseline +526 words (75,028 → 75,554), under the 2,000-word trim zone; movable story text noted for a later trim.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…eflight STOP table (#361 review)

STOP rows are for corruption or silent failure; `mxcli check` catches this one. One line in
learned-microflow-patterns.md "Additional MDL Syntax Rules" instead; LOOP clause dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… its directory (#368 review)

A control saved as *.journey.json would be walked, normalized and seeded as a
real journey, because verify-module, report-normalize and fixture-manifest
discover journeys by that suffix. The runner's gap check and named-controls.js
now accept only *.control.json (beside the journey or in controls/);
named-controls.js FAULTs any other name without running it. journey-runner.js
creates the parent directory of an --out= path. journey-proof.md names the
suffix and why. Fixture test-named-controls.sh 19 -> 24 cases: misnamed
controls do not count, a *.control.json is not discovered as a journey, and
--out= into a new nested directory.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…one release gate

- Rename "tiers" to "check moments" so it does not collide with §1's "No tiers".
- Every-exec row lists the real exec.sh chain (lock, module-brief advisory,
  mxcli check, snapshot, apply, mxbuild delta gate, auto-restore on a new
  error, lint ratchet), verified against project-bin/exec.sh's header; budget
  ~1 minute (mxbuild 22-65 s per script, iterative-build-loop.md Gate cost).
- The re-run event row "Project close / cutover" is renamed "Release gate
  (before UAT/production)", so the project-wide suite has one name and runs
  once; the moment row points at it.
- Drop the closing sentence that repeated the "felt wide" rule; shorter
  planned markers.

Baseline words 75,261 -> 75,225.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… bumped stamp (#365 review)

Review of #365: "VALID AT: <current commit>" set a trap. Stamping the
commit that adds the shots makes them older than their own stamp, so the
FAULT stays. The message now says to stamp the model commit the shots
were taken on and to restore a bumped original stamp, and is shorter
(remedy ~200 chars). Detail is in module-review.md (one sentence) and the
close-the-loop.md row. test-obligation-valid-at.sh T9 stamps a
shots-only commit and asserts the FAULT stays, with a PASS control on the
model commit; T5 matches the new text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…swer (#372 review)

The opt-out story never edits or deletes a .star file. Two sanctioned options remain:
`enabled: false` recorded in PROJECT.md, and baseline-with-reason; upstream draft kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…ld dropping dist/pages (#284)

Review: independent review MERGE-AFTER-FIX (both optional) — every number traced to #284's body or its 2026-10-14 comment, nothing invented; one inferred sentence reworded to #284's own wording and two PR-body citations corrected in 0b9b931. Draft only; nothing filed upstream.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…ew follow-ups (#369)

- A mistyped or unchanged source path, or 0 removed lines in total, now
  exits 2 instead of printing "0 of 0" and exiting 0.
- Header documents the grep -F substring limit; lines under 15 characters
  are listed as "trivially found, review by hand".
- New tests/wave2/test-check-moved-text.sh: found / missing (exit 1, line
  named) / special characters / typo path and unchanged source (exit 2) /
  usage. 10 ok here; 4 FAIL against the previous script version.
- microflow-preflight.md: the mxcli layout claim is dated "(as of 2026-09-25)".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…es (leak guard)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
#297)

The loop sweep re-described every loop-containing microflow on every run:
1,917 describes in 2 h 45 at 6 workers on a 17,500-unit app (about 31 s
each), while about 80 units had changed between rounds.

- manifest.json stores a {UnitID: ContentsHash} snapshot of the .mpr Unit
  table and an mdl_index of the unit state each mdl/ file came from.
- A refresh describes only new, changed or moved candidates, keeps the rest
  and deletes outputs of removed units. Full sweep on first run, --full,
  mxcli version change, or an unreadable Unit table.
- UnitID -> name via mx-metadata-note.py units (shared Model base with the
  History-note code, no duplicate walk). The hash is computed from the
  .mxunit bytes: one stale Unit-table row was found in a field app's history.
- bin/status.sh: "app map: N units changed since <date>" / "fresh".
- skills/app-analysis.md: measured cost by app size.

Fixture tests/wave2/test-app-facts-incremental.sh (92 checks, both
layouts); bench tests/wave2/bench-app-sweep.sh (2,000 units, 1 % changed:
20 describes vs 2,000).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
)

Remove the unit counts, timings and stale-row observation that came from
a project outside this repository. The bytes-over-column hash rule stays,
justified on its own terms. Field evidence is now: no field run; checked
on synthetic and captured fixtures only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… slice gained verdicts + §3b

Measured with bin/render-routing.sh --check on this head (master: 56,236; baseline
75,028 → 73,233 unchanged). The line carries no review figure.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… review 32,181 → 30,265)

Measured with bin/render-routing.sh --check on #378's head (760a423) and on this head. Also
drops the stale copy of #378's line the merge left beside the updated one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…only URI

Review: independent review MERGE-AFTER-FIX — URI escaping verified (#, ?, %41, space, &, ;=, [], unicode; read-only, no stray files; Windows nturl2path form valid); finding: hard refusal on old _common.sh broke app-facts' own fallback design and named wrong paths → inline pathname2url fallback + native_path, 2 fixture cases, in b97c9f6; confirmation MERGE: db-uri 10/0 (8 fail on master), app-report 109/0, catalog-edge-guard 20/0, mxbuild-version-match 18/0, check-portability clean, check-scripts 110/110. No field run yet.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…its copy of the baseline table (stub diet T2+T3)

Review: independent review MERGE-AFTER-FIX — full pack double-counted the runbook (85,797 > 80,000 budget); runbook-slice dropped the gate-verdict table and §3b helper-ownership rule → both fixed (anchor-based spans with fallback pointer), in 760a423; confirmation MERGE: baseline 73,233/80,000 (master 75,028), Stage 5 mdl 56,236 → 43,599; fixtures routing-tier 14, runbook-slice 31, baseline-pack 22, render-routing 5, bug03 31, bug12 61, ritual-slim 17, check-skill-routing pass. Behaviour A/B (with #369/#380, 5 reps × 2 tasks + 5 probes × 3 reps, sonnet): trimmed context no worse than master on every scored metric (planted STOP 10/10 each arm, parse failures page 2/5 vs 3/5, probes 15/15).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
…gents column (stub diet T1) — stacked on #378

Review: independent review MERGE — `<role>?` on-demand routing token; audit refuses all?, ? on non-baseline rows, and plain+? duplicates; the five re-tiered skills hold no rule mdl needs before drafting. Confirmation MERGE at 966caff (stacked on #378 via merge commits): Stage 5 mdl 43,599 → 30,647, review 32,181 → 30,265, baseline 73,233; fixtures routing-tier 26, runbook-slice 31, baseline-pack 22, render-routing 5, bug03 31, bug12 61, ritual-slim 17. Behaviour A/B as on #378: no worse than master on every metric. Follow-up: completed agent stubs in existing projects are never re-rendered, so they don't get the saving.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
@MendixMau
MendixMau marked this pull request as ready for review October 15, 2026 01:39
@MendixMau
MendixMau merged commit 868b3cb into master Oct 15, 2026
1 check passed
This was referenced Oct 15, 2026
MendixMau pushed a commit that referenced this pull request Oct 15, 2026
Brings in #385, #388, #389. Clean merge: exec.sh (STOP-row scan, #349),
skills/learned-mdl-preflight.md and CHANGELOG.md auto-merged with both
sides kept; render-routing --check passes without a re-render.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
@MendixMau
MendixMau deleted the integration/2026-10-15 branch October 15, 2026 10:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants