Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.6 KiB
phase, plan, subsystem, tags, dependency_graph, tech_stack, key_files, decisions, metrics
| phase | plan | subsystem | tags | dependency_graph | tech_stack | key_files | decisions | metrics | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 14-desktop-e2e-coverage | 01 | e2e-test-harness |
|
|
|
|
|
|
Phase 14 Plan 01: Desktop E2E Coverage Summary
Added a third desktop Playwright project (Desktop Chrome, 1280x720, no hasTouch) to playwright.config.ts and made the existing Phase 7 mobile-authored e2e specs green on desktop by desktop-skipping three mobile-only geometry assertions and adding a D-04 parity assertion for the desktop toolbar button.
Tasks Completed
| Task | Name | Commit | Files |
|---|---|---|---|
| 1 | Add desktop project to playwright.config.ts | d3bc696 |
apps/pwa/playwright.config.ts |
| 2 | Desktop-skip mobile-only assertions + D-04 parity | 2903599 |
apps/pwa/e2e/layout.spec.ts |
| 3 | Update spec headers + README, prove full suite green | bfc49d1 |
apps/pwa/e2e/calendar.spec.ts, lists.spec.ts, README.md, .gitea/workflows/ci.yml |
What Was Built
SC-1: A desktop Playwright project entry was appended to the projects array in playwright.config.ts using devices['Desktop Chrome'] with serviceWorkers: 'block'. No baseURL override (inherited from top-level use block). Header jsdoc updated to list three profiles.
SC-2: layout.spec.ts received three test.skip(testInfo.project.name === 'desktop', reason) guards on the mobile-only geometry tests:
- "BottomTabBar is fully in-viewport (Rule 3 — safe-area-inset)" — BottomTabBar returns null at >=768px; nav resolves to DesktopNav sidebar where safe-area-inset assertion is semantically wrong
- "BottomTabBar is fully in-viewport on /lists (Rule 3)" — same reason
- "New Event FAB meets 56x56px touch-target minimum (Rule 1)" — on desktop resolves to toolbar button (CalendarShell.tsx:436-457), not the 56px FAB
A D-04 parity test was added asserting New Event toolbar button height >=44px, guarded by test.skip(testInfo.project.name !== 'desktop') so it runs only on desktop.
All mobile assertions are preserved: toBeGreaterThanOrEqual(56) and toBeGreaterThanOrEqual(44) both still present.
calendar.spec.ts and lists.spec.ts required no structural changes — all tests pass unchanged on desktop (nav landmark resolves to DesktopNav sidebar, overflow/state assertions are viewport-agnostic).
SC-3: CI gate is blocking automatically. The harness job in .gitea/workflows/ci.yml runs pnpm --filter @familysync/pwa test:e2e which executes all configured projects. The chromium engine (used by Desktop Chrome) is already installed via playwright install --with-deps webkit chromium. No continue-on-error added. Step-name comment updated cosmetically only.
Full suite result (local verification): 85 passed, 5 skipped (3 desktop geometry guards + 2 non-desktop parity guards), 0 failed across iphone + pixel + desktop.
Decisions Made
- testInfo fixture pattern: Used
test('name', async ({ page }, testInfo) => { test.skip(...); ... })— consistent with the inline conditional skip incalendar.spec.ts - D-04 parity as sibling test: Added as a new test in the same
describeblock guarded by!== 'desktop', rather than a conditional branch inside the FAB test, to keep the skip reason explicit and discoverable - No
desktop.spec.ts: D-01 maintained — one spec set, no duplication - CI cosmetic only: Step-name comment updated to name all three profiles; no plumbing change required
Deviations from Plan
None — plan executed exactly as written.
Verification Results
All success criteria met:
playwright.config.tscontainsname: 'desktop'withdevices['Desktop Chrome']andserviceWorkers: 'block'npx playwright test --list --project=desktopexits 0 (30 tests enumerated)grep -c "testInfo.project.name === 'desktop'" apps/pwa/e2e/layout.spec.ts== 3- Mobile FAB assertions intact:
toBeGreaterThanOrEqual(56)present - No
desktop.spec.tsunderapps/pwa/e2e/ .gitea/workflows/ci.ymlhas nocontinue-on-erroron the harness jobapps/pwa/e2e/README.mddocuments Desktop Chrome and--project=desktop- Full suite: 85 passed, 5 skipped (expected), 0 failed
Known Stubs
None.
Threat Flags
No new application runtime code introduced. All changes confined to e2e test harness and docs. serviceWorkers: 'block' correctly set on the desktop project (T-14-01 satisfied). No new trust boundary created.
Self-Check: PASSED
Files exist:
- apps/pwa/playwright.config.ts: FOUND
- apps/pwa/e2e/layout.spec.ts: FOUND
- apps/pwa/e2e/calendar.spec.ts: FOUND
- apps/pwa/e2e/lists.spec.ts: FOUND
- apps/pwa/e2e/README.md: FOUND
Commits exist: