fix(webviews): dismiss Sources menu without closing Summary
An outside click with the floating Summary card's Sources menu open dismissed both layers. Summary now detects its open menu trigger before handling an outside press, so the first press dismisses Sources and the next dismisses Summary.
Course item 12: a menu opened inside another layer must dismiss only the innermost layer. The gallery fixture and browser regression exercise the real Summary/Sources pair for outside click, Escape, and selection.
Leo (2026-10-29):
"I think you guys should just keep going indefinitely. Like just, there's so much random nonsense that you can probably associate every single one of his pointers to one of our situations."
Earlier:
"https://aiforui.dev/learn ... you guys should be taking this course and then reading into how it goes."
Audit: webviews/src/agent-session/acpmux/summary/SummaryCard.tsx:156 | course 12 | outside pointerdown closes Summary with Sources open | preserve Summary while its menu handles dismissal.
Validation
- Full web lint/type checks and prepush gate pass.
- Regression: Chromium and WebKit, Catppuccin Mocha and Latte; outside click, Escape, and selection. Original source: 4 pass, 2 expected failures, both named
Sources outside keeps Summary open(one per theme). Fixed source: 6 pass, 0 fail. Each passing case runs in both browsers. Tests also verify the next outside click closes Summary. - Remote red/green proof at
2758e470da72f3bc97392eccb773d1d5aed1f2ff: baseline 4 pass / 2 expected failures, fixed 6 pass / 0 fail. The command then failed a screenshot-transfer size assertion. Current head crops screenshots; product code is unchanged. - Final-head capture/regression and existing Summary/Sources suite requests both ended with
lane-gh: the broker sent no answerbefore returning run IDs. Their execution status is unknown; no final-head green receipt is claimed. - Before opening,
pr-overlapwas invoked but its GraphQL call was refused by the broker; a broker search for SummaryCard dismissal found no existing PR.
Risk: the guard relies on Base UI's existing open-trigger marker, with an ARIA fallback. The browser regression exercises that marker through the real Sources component. No new listeners, timers, or observers.
Screenshots
Gallery fixture: agent-pane.summary-card/nested-sources-menu. Synthetic empty Summary and Documentation tool only. Images show the settled state after the same outside click.
Before/after captures pending recovery of the remote broker route.
UI review
Verdict: blocked
Blockers
- Final-head remote verification and settled screenshots are unavailable after the broker failed to answer. Existing screenshots caught the closing animation and are not used as evidence.
Should fix
- None identified in the scoped behavior diff.
Nits
- None identified.
Needs a human / needs a device
- Independent exact-head review is pending. No native behavior is changed.
Changelog
Fixed: closing the Sources menu with an outside click keeps its Summary card open.
Agent session: agent session