calm-artist-7206
10/10/2026, 11:56 AMfresh-machine-37269
10/10/2026, 11:56 AMfresh-machine-37269
10/10/2026, 11:59 AMhook.type (`command`/`prompt`/`system_prompt`) instead of first-non-empty is the right call, and the two new tests nail the exact mix-up case. No i18n surface. Ship it.
• #18151 — button test IDs. Correct root cause: BrandButton reads testId, so the data-testid props were being swallowed. The rename in both modals is right and the tests verify the rendered attribute (they'd have failed on the old code). Nice catch.
• #18144 — duplicate-name feedback. Good fix — the old code folded the duplicate check into isNameValid, so the field stayed aria-invalid="false" with no message. Splitting into `isNameFormatValid`/`isDuplicateName` and threading error into SettingsInput renders the role="alert" + invalid styling correctly. Tests cover create and edit-on-own-name. One tiny nit (non-blocking): when error is set, aria-describedby switches from the format rule to the error id, so the rule text drops out of the accessible description — acceptable, just noting it.
• #18112 — menu keyboard nav. Everything checks out: the initial-focus effect now keys on !anchorElement || portalStyle !== undefined so it fires once the portaled menu actually renders; arrow nav cycles getEnabledItems only (skipping the disabled "Set as active"); Escape/Tab restore focus to the ⋮ trigger before closing. Ports the #18019 fix cleanly and the 7 tests are genuinely behavioral.
• #18111 — Default profile display. Right fix: normalizing "" → null at the selector boundary keeps the internal "" persistence semantics while rendering the Default item. Both entry paths (action-switch and selector onChange) covered.
• #17968 — draft preservation. This is the most intricate one and it holds up. Capturing the input and conversation id in pendingDraftRef, guarding the debounce on the pending object identity, and moving the flush to a useLayoutEffect cleanup (so innerText is read before React detaches the node and loses block-element line breaks) are all correct. The tests cover rapid switching, home navigation, multiline, cleared-after-delivery, and conversation isolation. No notes.
• #17967 — two-stage Escape. The event.stopPropagation() in the pill row's window keydown listener really does stop the modal's window listener (same target window, bubbling phase), so Escape scopes to the popover first — matches the two-stage test. The Enter/Space stopPropagation scoping to the trigger is a sensible bonus.
• #17966 — header validation message. Reusing validateEnvFormat with a errorKey parameter is the right minimal refactor, and the new key is present in all 15 locales. Test asserts header-specific text shows and the env message doesn't.
🌱 Optional nits (not blockers)
• #17967 / #17966 include .pr/bugs/*.png screenshots. The bot files an artifact-cleanup PR against main after merge for fork PRs, so it's handled — just be aware.
• #17967 hardcodes expected pill text in the test rather than reusing the CSS-class constant pattern; harmless.
⚠️ One thing to fix before merge
Every one of these fails Validate PR description on older runs, but they've since gone green (they fail only the required-review gate now). If you touch the descriptions again, keep the ## Why / ## Summary / ## How to Test sections intact — that's the string the checker matches on.
Want me to post these as actual GitHub reviews (approve #18215/#18151/#18144/#18112/#18111/#17968/#17967/#17966, or hold any back)? I didn't push anything yet.calm-artist-7206
10/10/2026, 12:00 PMfresh-machine-37269
10/10/2026, 12:00 PMaria-describedby nit as non-blocking)
• #18112 — menu keyboard navigation ✅
• #18111 — Default profile display ✅
• #17968 — draft preservation ✅
• #17967 — two-stage Escape ✅
• #17966 — header validation message ✅
Each review carries a short rationale plus an AI-disclosure line. On the earlier code-only runs, the PR-description check was the only red; it's green on the current heads, so nothing is blocked there. Let me know if you'd like the nits on #18144 turned into explicit change requests or anything else followed up.