Repository navigation
Night batch 2026-10-15: 18 reviewed PRs (stub diet, app-facts sweep, journey controls, fixes) - #385
Merged
Merged
Conversation
) 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
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
marked this pull request as ready for review
October 15, 2026 01:39
This was referenced Oct 15, 2026
Closed
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
Merged
4 of 6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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-ffmerge commit carries that review in itsReview:line. This PR lands them onmastertogether.Direct lane
What changed and why (one paragraph):
The batch has four parts:
_common.shBehaviour A/B for the stub diet (method:
process/preflight-skill-baseline-2026-08-31.md):mxcli checkrejected the page script outright in 2/5 T runs versus 3/5 M runs;Field evidence: none of the instruments in this batch has had a real-project run yet:
Merging to
masteris the maintainer's call under CLAUDE.md "Shipping an instrument" rule 4.ae897b4) contains unit counts derived from an out-of-scope client project. There are no names, only counts. Commit6550815removed them, but the--no-ffmerge keepsae897b4in this branch's history.integration/2026-10-15and new(app-facts): incremental loop sweep + app-map freshness in status (#297) #373's head branch.c9bc073:tests/run-tests.sh33/0 andtests/wave2/run-all.sh111 fixtures, 0 failing.render-routing --checkpasses after every merge.CHANGELOG.mdlines come from each PR, with credits.BUG-DRAFT-*. Two add/add conflicts (learn(microflow-patterns): the microflow header grammar, in one line (#361) #366, learn(lint): stock-rule findings on toolkit conventions, and the #169 rule candidates (#360, #241, #246, #169) #372) were resolved by keeping both entries.Not in this batch, and why:
exec.sh --patchfield runbench-lock-race.sh🤖 Generated with Claude Code
https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
Generated by Claude Code