Estimate: 16m · Depends on: 1.5.4, 1.5.5
The Story-closing E2E proves the shell holds together end-to-end across realistic user journeys. Same shape as Story 1.2.7 / 1.3.6 / 1.4.8 — a Playwright spec that drives the browser through the full surface. Where 1.5.5 covered keyboard + accessibility in isolation, this spec exercises the chrome AS A USER WOULD use it, with mouse + keyboard interleaved.
Spec at tests/e2e/shell-flows.spec.ts covers:
/dashboard → assert sidebar visible with project nav, top-nav visible with workspace switcher + theme toggle + "Search" button + user menu./issues → placeholder page renders → Issues item shows aria-current="page". Repeat for Boards / Reports / Settings.html[data-theme] attribute flips → reload → preserved.page.setViewportSize({ width: 375, height: 812 }) → sidebar hides, hamburger appears → click hamburger → drawer slides in with scrim → navigate via drawer item → drawer auto-closes on route change (or click scrim → drawer closes)./sign-in → cookie cleared.ProjectsEmptyState CTA inline (NOT in the main panel); sidebar project-scoped nav is hidden.Story-level verification recipe (manual, ≤10 minutes): pull main, pnpm install && pnpm dev, sign in, walk the spec's scenarios interactively. Spot-check on a real iPad-sized viewport (the only test breakpoint below md the spec doesn't cover automatically).
If any scenario fails: fix the bug in this Subtask if it's a shell-level regression; log a finding if it points at a deeper service-layer issue (per mistake #27).
tests/e2e/shell-flows.spec.ts covers every bullet in the scenario list above; each scenario is its own test() block named for the journey it exercises.page.setViewportSize to drop below md (768px) and asserts the drawer is the rendered variant./sign-in.tests/e2e/workspace-flows.spec.ts + projects-flow.spec.ts — existing browser-driven E2E patterns to mirrortests/e2e/_helpers/db-reset.ts + email-capture.ts — the helpers