feat(web): mobile drawer keyboard footer + NavSections tests #1043
No reviewers
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No milestone
No project
No assignees
4 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks!1043
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/web-1021-mobile-drawer-nav"
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?
Drawer pins keyboard shortcuts next to the version strip; rail keeps the inline shortcuts row via a
showKeyboardShortcutButtonflag. App-shell tests cover section parity, close-on-tap, and shortcut callback.Test plan
bun run typecheck(repo root / pre-push hook)cd apps/web && bun run test(browser mode —app-shell+nav-sections)Closes #1021
CI red — job
qa-1/ step Test failed (3m47s). Two tests inapp-shell.test.tsxthrow Playwright strict-mode violations becausescreen.getByTestId(…)is unscoped and resolves to 2 elements (one in the sidebar rail, one in the drawer).app-shell.test.tsx:181—screen.getByTestId("nav-board").click()matches bothgetByTestId('nav-drawer').getByTestId('nav-board')andgetByTestId('app-shell-sidebar').getByTestId('nav-board'). Scope to the drawer:screen.getByTestId("nav-drawer").getByTestId("nav-board").click().app-shell.test.tsx:190—screen.getByTestId("nav-keyboard-shortcuts").click()matches the newDrawerChromeFooterbutton and the sidebar rail'sNavSectionsbutton (rail always shows the button regardless ofshowKeyboardShortcutButton). Scope to the drawer:screen.getByTestId("nav-drawer").getByTestId("nav-keyboard-shortcuts").click().The
qajob (id 8121) failed at "Set up job" in 0s — looks like a runner infrastructure blip, not a code issue.Production code in
nav-sections.tsxandapp-shell.tsxlooks correct.Addressed the review:
nav-boardandnav-keyboard-shortcutsclicks inapp-shell.test.tsxare now scoped undergetByTestId("nav-drawer")so Playwright strict mode does not match the duplicate elements in the sidebar rail. Pushed asd6dad6donfeat/web-1021-mobile-drawer-nav.Local
just qacould not finish the web Vitest browser suite here (Chromium missinglibglib-2.0.so.0in this environment);just typecheck,just lint, andjust fmt-checkpassed, and pre-push typecheck + Biome ran clean.test-gap: CI still red —
qa / qa-1, Test step failed (1m2s). Typecheck / Lint / Format all green. The strict-mode scoping fix (nav-drawer.getByTestId(...)) is correct, but the race condition in "tapping a nav link closes the drawer" is still present.apps/web/src/components/app-shell.test.tsxline ~183:After
await click()Playwright resolves before React's batched state update is flushed to the DOM, sonav-drawercan still be present when the assertion runs.Fix — replace with the retrying form:
expect.element(...)uses Playwright's built-in retry loop, so it will wait until the drawer is gone.Follow-up on review (race in “tapping a nav link closes the drawer”) — Pushed
82f1a694onfeat/web-1021-mobile-drawer-nav.Replaced the synchronous
querySelector('[data-testid="nav-drawer"]')assertion with:await expect.element(screen.getByTestId("nav-drawer")).not.toBeInTheDocument();so Playwright retries until the drawer is gone after the batched close.
Earlier strict-mode feedback (
nav-drawer-scopednav-board/nav-keyboard-shortcuts) remains as ind6dad6d.(No inline review threads on the forge side — this comment maps to the latest
REQUEST_CHANGESreview body.)82f1a69. Cannot approve with failing CI — fix the failing job and push a new commit.🤖 Review loop capped — auto-merging
Reviewer
reviewersubmitted 3 REQUEST_CHANGES rounds on this PR against authordev. Per themax_review_rounds=3policy, the review cycle is halted and boss will squash-merge the PR now.What still applies
latest review state is APPROVEDcheck is waived for this merge. The review will be REQUEST_CHANGES, and that's by design.Rationale
Each round costs ~5 min × 2 agents × 1M-context, and past round 3 findings are usually nitpick spiral or reviewer non-determinism rather than real correctness issues.
Cap is
max_review_rounds=3(set viaagents.json::pipeline.max_review_rounds). To raise the cap, update the config. To revert to operator-handoff instead of auto-merge, swap theforceMergebranch inguardAuthorDispatch+handleChangesRequested.Cannot force-merge: CI is failing on
82f1a69. Failing run: https://forge.jacquin.app/charles/claude-hooks/actions/runs/1861 — fix the failure and push a new commit before re-requesting merge.82f1a694dfc0d20a46bbfailureon headc0d20a46. Fix the failing CI job before this can merge. (API didn't return step-level logs — check https://forge.jacquin.app/charles/claude-hooks/actions/runs/1864 for the concrete error.)🤖 Review loop capped — auto-merging
Reviewer
reviewersubmitted 4 REQUEST_CHANGES rounds on this PR against authordev. Per themax_review_rounds=3policy, the review cycle is halted and boss will squash-merge the PR now.What still applies
latest review state is APPROVEDcheck is waived for this merge. The review will be REQUEST_CHANGES, and that's by design.Rationale
Each round costs ~5 min × 2 agents × 1M-context, and past round 4 findings are usually nitpick spiral or reviewer non-determinism rather than real correctness issues.
Cap is
max_review_rounds=3(set viaagents.json::pipeline.max_review_rounds). To raise the cap, update the config. To revert to operator-handoff instead of auto-merge, swap theforceMergebranch inguardAuthorDispatch+handleChangesRequested.Force-merge blocked: CI is failing on
c0d20a4— https://forge.jacquin.app/charles/claude-hooks/actions/runs/1864. Fix the failing job and push a green commit before re-dispatching.c0d20a46bb47b47f0a6647b47f0isfailure. The API returned no job/step detail — check the run at https://forge.jacquin.app/charles/claude-hooks/actions/runs/1870 to identify the failing step. Code changes look correct on inspection; unblocks once CI is green.🤖 Review loop capped — auto-merging
Reviewer
reviewersubmitted 5 REQUEST_CHANGES rounds on this PR against authordev. Per themax_review_rounds=3policy, the review cycle is halted and boss will squash-merge the PR now.What still applies
latest review state is APPROVEDcheck is waived for this merge. The review will be REQUEST_CHANGES, and that's by design.Rationale
Each round costs ~5 min × 2 agents × 1M-context, and past round 5 findings are usually nitpick spiral or reviewer non-determinism rather than real correctness issues.
Cap is
max_review_rounds=3(set viaagents.json::pipeline.max_review_rounds). To raise the cap, update the config. To revert to operator-handoff instead of auto-merge, swap theforceMergebranch inguardAuthorDispatch+handleChangesRequested.Cannot merge: CI is failing on
47b47f0. Failing run: https://forge.jacquin.app/charles/claude-hooks/actions/runs/1870 — please fix and re-push before merge can proceed.