Bug: Navbar (z-50) overlaps AppHeader Export PES button and ExportDialog backdrop intercepts inner Export clicks — full GUI export flow is broken #53
Labels
No labels
blocked:commit-ready-failed
blocked:gate-fetch
blocked:gate-lint
blocked:gate-plan
blocked:gate-research
blocked:needs-attention
blocked:needs-decision
blocked:needs-human
blocked:no-changes
blocked:verify-failed
bug
deferred
feature-request
in-progress
needs-decompose
needs-triage
quickfix
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/Kimi_Agent_Brother_10_Digitizing_App#53
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Two distinct z-index / pointer-events issues in
AppHeader.tsxandExportDialog.tsxprevent users from actually exporting a design through the GUI:z-50) overlaps AppHeader Export PES button at the same z-index. Click on Export PES in the workspace header is intercepted by the navbar's "Open Workspace" CTA when the user has scrolled — in some viewports the navbar CTA sits over the AppHeader button. Playwright detects this as<a ... navbar ...> subtree intercepts pointer events.ExportDialog.tsx:113-117— backdrop<div absolute inset-0>blocks clicks on inner "Export" button. The backdrop renders as a sibling of the panel and is on top of it; pointer events on its area never reach the Export button below it. Force-click is the only way through, and even then most clicks land on the backdrop (which callsonCloseand dismisses the dialog).This means clicking "Export PES" inside the dialog closes the dialog instead of running the export, on a fresh human click in the central portion of the dialog.
Steps to Reproduce
http://127.0.0.1:5173/workspaceExpected
.pesfile downloads.Actual
First attempt: navbar CTA intercepts and stops click on Export PES.
Second attempt (after dispaching click directly): dialog opens; clicking the inner Export button dismisses the dialog instead of exporting, because the backdrop
<div className="absolute inset-0">is rendered as a sibling on top of the panel and intercepts the click.The full Playwright tracebacks are:
and:
Suggested Fix
For the navbar/AppHeader overlap:
z-50layers is wrong. AppHeader atz-50is inside the workspace content; the Navbar sticky is the global nav. Either reduce AppHeader's z to less than 50 (e.g.z-30), or make AppHeader non-sticky, or addpointer-events: noneto the navbar at idle state.For the ExportDialog backdrop:
onClickonly to the backdrop and put the panel outside the absolute/inset wrapper, OR give the backdroppointerEvents: 'auto'and the panelpointerEvents: 'auto'; z-index: 1; position: relative;. Cleanest fix: split layout so backdrop is parent (fixed inset-0) and the panel usesposition: relative; z-index: 1inside it. Or use Radix Dialog which handles this correctly out of the box.Severity
High — the GUI export flow does not work for keyboard/mouse users. Only via Playwright
force: truecould we get past the dialog backdrop, and even then the navbar overlap required a DOM-dispatch workaround. The export path is the primary value of the product.Shakedown Context
2026-09-01 BB monogram GUI shakedown. Same session that produced #52 (Settings/Help no-op). Repro: Playwright Python sync API against http://127.0.0.1:5173/workspace.
Environment
localhost:5173localhost:8080Kimi_Agent_Brother_10_Digitizing_Apprepo at run timeFixed and pushed to main (commits
ffe240b+21c915c).Bug #1 — Navbar overlap: AppHeader was at
z-50with no explicit position, same as the sticky Navbar. The Navbar's sticky positioning created its own stacking context that won on scroll, intercepting clicks on the Export PES button. Fix:AppHeader.tsxposition: relative, zIndex: 60.Bug #2 — ExportDialog backdrop: The backdrop
<div absolute inset-0 onClick={onClose}>was a sibling of the relative-positioned panel. In a flex container the absolute sibling sits on top of the relative sibling without an explicit z-index, so the backdrop intercepted clicks anywhere inside the dialog and dismissed the dialog instead of triggering export. Fix:ExportDialog.tsxzIndex: 1on the panel.Regression tests added in
ExportDialog.test.tsx:onClose(panel above backdrop)onClose(close-on-backdrop still works)Note: I dispatched quickfix on this issue earlier; it ran the model probe and kilo, but kilo exited 0 without committing any code changes (likely saw passing tests for the render and called it good). I then made the fixes manually, ran gates (lint clean, 212/212 tests pass), committed, and pushed. The retry counter was reset, so if quickfix re-picks this it will see the fix already on main and skip the model probe.