Skip to content

Integration 2026-10-20: six reviewed bug fixes (#486 #480 #482 #481 #484 #485) - #490

Merged
MendixMau merged 21 commits into
masterfrom
integration/2026-10-20
Oct 20, 2026
Merged

MendixMau merged 21 commits into
masterfrom
integration/2026-10-20

Conversation

@MendixMau

Copy link
Copy Markdown
Owner

Integrates six bug-fix PRs from the 2026-10-20 backlog run. Each one was independently reviewed (all MERGE after one fix round) and was green on its own head. Merge with a merge commit, not a squash: each PR's own commits then land on master, and GitHub marks every PR below as merged.

PR Fixes What
#486 #479 (items 1–3) Progress report: one nav group (Stages, Build, Pages, Tips), unique stamp ids, stale header wording gone
#480 #470 conformance-check reads an error only on the first line and an empty set only on the (0 …) summary
#482 #471 page-fidelity scores a popup wireframe against the popup, only when there is popup evidence
#481 #469 monkey.js recognises sign-out in nl/de/fr/es/pt/it (whole caption) plus a project pattern; rapidTab steps past sign-out
#484 #467 bare $VAR before a non-ASCII byte braced (status.sh and 2 more); portability lint for it
#485 #468 \t in sed/grep brackets replaced by [[:blank:]] at 7 sites; portability lint, anchored to the command word

All six merged into master efd4e9a with no conflicts.

Verified on the integrated tree

  • check-scripts, check-portability, render-routing --check, check-pr-discipline origin/master and the leak guard: clean.
  • Fixtures:
    • progress-report-polish 53/0, field-fixes 105/0, pages 54/0;
    • conformance-absent-marker 24/0;
    • monkey-left-app 22/0;
    • page-fidelity-mocks 78/0;
    • status-bare-var 3/0 (ISO-8859-1 cases skip without the locale);
    • sed-tab-bracket 9/0;
    • context-pack 55/0;
    • bug03-gates 47/0.

Impact

Row Answer
Process No new gate. Progress-report layout changes per #486.
Dependencies build-plan-status.sh and progress-report.py ship together (#486). A locally edited build-plan-status.sh needs --only-bin build-plan-status.sh --upgrade-bin build-plan-status.sh. check-portability.sh gains two lints (#484, #485).
Context cost None: no routed or always-loaded file touched (render-routing unchanged).
Behaviour n/a: scripts only.
Runtime Negligible.

Field runs on real projects are owed by the maintainer, as each PR states.

Follow-ups filed during review: #488 (BSD sed \t outside brackets) and #489 (installed vs toolkit _common.sh root inside an app folder).


Generated by Claude Code

claude added 21 commits October 20, 2026 11:05
…s them (#470)

probe() matched both absence markers anywhere in mxcli's answer, so a
built microflow whose documentation said "(0 = …)" and every navigation
describe with a not-found page scored ABSENT and went STALE. An error is
now a line starting "Error:", an empty set is a last non-blank line of
the "(0 …)" summary form; CRLF stripped. New fixture replays verbatim
captures already in the repo on both layouts.

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

SIGN_OUT matched English captions only, so a Dutch app's "Afmelden" was
clicked, the monkey landed on login.html and scored a false CRASH. The
default now covers nl/de/fr/es/pt/it captions, a project adds its own via
project.config.js signOutPattern or SIGN_OUT_PATTERN, and rapidTab steps
past a focused sign-out control instead of pressing Enter on it.

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

In a single-byte locale (and on macOS bash 3.2 even under en_US.UTF-8)
bash reads the first byte of a multibyte character as part of a bare
variable name, so "$LAST_FAIL— fix" expands LAST_FAIL<byte> and set -u
aborts status.sh before it prints NEXT.

- bin/status.sh: ${LAST_FAIL} and ${NOT_DONE_PASS} on the two NEXT lines.
- project-bin/constants-audit.sh, tests/wave2/test-runbook-slice.sh: the
  same idiom (an ellipsis, and a case pattern), braced.
- bin/check-portability.sh: flag any bare $NAME followed by a non-ASCII
  byte, in every scanned file, matched with LC_ALL=C.
- tests/wave2/test-status-bare-var.sh: the lint cases on any machine,
  and both NEXT rules under an ISO-8859-1 locale where one exists.

Reproduced on bash 5.2 with a compiled en_US.ISO-8859-1 locale: both
NEXT rules aborted on master and print after the fix.

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

contentOf() tried div.main before anything else, and a popup wireframe's
.shell-behind carries the caller's div.main, so the popup was scored
against the caller's page. A wireframe with a .dialog now scores the
dialog; a .popup-stage without one scores the stage minus .shell-behind.

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

BSD/macOS sed reads [ \t] in a bracket expression as "space, backslash
or t"; only GNU sed expands \t there, and grep never does. Every trim
built on it also ate a leading or trailing letter t and left real tabs.

- project-bin/context-pack.sh: names() trimmed Mod.ENUM_Product to
  Mod.ENUM_Produc, then reported it "not in the folder plan".
- bin/lib/closeout.sh: _co_trim and the Stage prefix strip.
- bin/lib/entry-mode.sh: the answer-prefix strip and the value trim
  (a tab-separated "answered:<TAB>migration" read as no entry mode).
- bin/gate-check.sh: the intake section count grep.
- tests/wave2/test-progress-report-field-fixes.sh: [^\t] -> a real tab.
- bin/check-portability.sh: flag \t inside a bracket that follows
  sed/grep on the line (awk is fine; $'...' strings are skipped).
- tests: a BSD-sed (sed --posix shim) pass in test-context-pack.sh over
  its captured golden brief, and test-sed-tab-bracket.sh for closeout,
  entry-mode and the lint. Both fail on master and pass here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
… note (#479 items 1-3)

- Top bar: drop the Stage P 0..6 chips and their outline observer; the bar is
  one group of section links (Stages, Build, Pages, Tips) with Stages jumping
  to the stage rail (id=stages). Sticky and phone rules kept, #stage-N card
  anchors kept, and the header line now states the current stage.
- id=stamp: only the "Last updated" span keeps it. The session-log span, the
  build/score/plan notes and the footer note get unique ids plus a data-stamp
  marker. build-plan-status.sh --refresh now ignores lines matching
  id=stamp|data-stamp, so its no-rewrite rule is unchanged and pages written
  before this still compare.
- Header: "replaces the former build-plan.html" removed.

Fixtures: polish P7 (nav, anchors, current stage, unique ids, stamp count,
volatile-line markers, --refresh byte-identical); field-fixes F11 flipped,
F14 asserts the autoreload's live controls ride on the one id=stamp line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
mxcli prints enumeration, scheduled-event and image-collection docs raw,
so a doc line can start "Error:"; the any-line check scored those
ABSENT. Only the first non-blank line is read now (an -c error also
exits 1, which the rc test already scores). The summary regex drops its
trailing-space class so the CRLF cases test the CR strip itself. Fixture
gains a raw enum-doc case and separate CRLF cases (24/24; 6 FAIL on
master; 4 FAIL on the previous head).

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
…ct flags (#469 review)

The non-English words are ordinary verbs, so a word match left "Ziek
afmelden", "Afmelden nieuwsbrief", "Vom Kurs abmelden" and "Disconnetti
dispositivo" unfuzzed; they now match only as the whole caption, and the
focus check tests text, aria-label and title one by one. A project
RegExp keeps its flags (g/y dropped). The rapidTab static guard is
scoped to that branch: the old one passed a blind-Enter mutation, the new
one fails it. Fixture 22/22; 8 FAIL on master, 3 on the previous head.

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
…dence (#471 review)

.dialog is the design system's own component, so any class-word .dialog
turned a full-page wireframe with an inline confirm into that confirm
(39% on master, 5% on the first cut). The dialog boundary now needs a
.popup-stage or .dialog-scrim in the wireframe, or a popup layout in the
page MDL; otherwise the old boundary list applies unchanged. Fixture
78/78: 8 FAIL on master, 1 (the inline-confirm regression) on the
previous head.

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
…tage, dead rule, sync note)

- #stages and #build-detail get the 56px scroll margin, so the nav targets
  no longer land under the sticky bar; asserted in polish P7.
- An unreadable current stage renders plain "Current stage: unknown"
  instead of a link to #stage-P; asserted in polish P7.
- Drop the dead .snav b{flex:0 0 auto} phone rule.
- CHANGELOG: a project with a locally edited bin/build-plan-status.sh keeps
  the old id=stamp filter after sync and rewrites the page on every
  refresh; it needs sync-project.sh --only-bin build-plan-status.sh
  --upgrade-bin build-plan-status.sh alongside this.

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

The lint matched "sed" inside words such as "closed", "parsed" or "used", so an awk
regex after one of them would turn CI red. Anchored as (^|[^[:alnum:]_])(sed|grep)([[:space:]]|$);
verified it still flags the true sed/grep sites and not the two awk probes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VJgWP5vEoAsNsJYqCDMGNw
@MendixMau
MendixMau merged commit 19f3a0a into master Oct 20, 2026
2 checks passed
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