diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index a60b691..9d49922 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -66,7 +66,7 @@ Make FamilySync configurable, administrable, and maintainable for real multi-mem **Wave 3** *(blocked on Wave 2 completion)* -- [ ] 07-03-PLAN.md — layout.spec.ts: tap targets >=44px, no overflow, in-viewport, accessible names (UI-SPEC Rules 1-4) + harness self-validation injected-defect proofs (Wave 3) +- [x] 07-03-PLAN.md — layout.spec.ts: tap targets >=44px, no overflow, in-viewport, accessible names (UI-SPEC Rules 1-4) + harness self-validation injected-defect proofs (Wave 3) - [ ] 07-04-PLAN.md — calendar.spec.ts + lists.spec.ts: populated/empty/error states (Rules 4/5) + DEV_AUTH_BYPASS auth-reached + no-SW-controller precondition (Wave 3) **UI hint**: yes @@ -200,7 +200,7 @@ Make FamilySync configurable, administrable, and maintainable for real multi-mem | 4. Shared Lists + Live Sync | v1.0 | 7/7 | Complete | 2026-06-09 | | 5. Web Push Notifications | v1.0 | 8/8 | Complete | 2026-06-10 | | 6. UX Polish | v1.0 | 6/6 | Complete | 2026-06-10 | -| 7. Mobile Test Harness | v1.1 | 2/4 | In Progress| | +| 7. Mobile Test Harness | v1.1 | 3/4 | In Progress| | | 8. Gitea CI | v1.1 | 0/? | Not started | - | | 9. Faster Write-Back | v1.1 | 0/? | Not started | - | | 10. Admin Role & Settings | v1.1 | 0/? | Not started | - | @@ -213,7 +213,7 @@ Make FamilySync configurable, administrable, and maintainable for real multi-mem **Goal:** [Captured for future planning] Abstract the calendar backend behind a provider interface so Fastmail/CalDAV is one implementation among potentially many. Shipping with a single provider is fine, but the broker, sync, and event-expansion layers should be structured so additional providers (e.g. other CalDAV hosts, Google Calendar, generic ICS feeds) can be added without rework. Captures the "provider" seam as an explicit architectural concern. **Requirements:** TBD -**Plans:** 2/4 plans executed +**Plans:** 3/4 plans executed Plans: diff --git a/.planning/STATE.md b/.planning/STATE.md index 80d0d67..1287206 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -4,13 +4,13 @@ milestone: v1.1 milestone_name: Operability & Polish status: executing stopped_at: Phase 7 UI-SPEC approved -last_updated: "2026-06-11T05:52:57.489Z" +last_updated: "2026-06-11T06:02:41.305Z" last_activity: 2026-06-11 -- Phase 07 execution started progress: total_phases: 14 completed_phases: 0 total_plans: 4 - completed_plans: 2 + completed_plans: 3 percent: 0 --- @@ -26,7 +26,7 @@ See: .planning/PROJECT.md (updated 2026-06-10) ## Current Position Phase: 07 (mobile-test-harness) — EXECUTING -Plan: 3 of 4 +Plan: 4 of 4 Status: Ready to execute Last activity: 2026-06-11 -- Phase 07 execution started @@ -79,6 +79,7 @@ Last activity: 2026-06-11 -- Phase 07 execution started | Phase 06-ux-polish P06 | 45 | 4 tasks | 5 files | | Phase 07 P01 | 310 | 3 tasks | 7 files | | Phase 07 P02 | 196 | 2 tasks | 4 files | +| Phase 07-mobile-test-harness P03 | 480 | 2 tasks | 2 files | ## Accumulated Context @@ -186,7 +187,7 @@ Recent decisions affecting current work: ## Session Continuity -Last session: 2026-06-11T05:52:57.479Z +Last session: 2026-06-11T06:02:41.295Z Stopped at: Phase 7 UI-SPEC approved Resume file: .planning/phases/07-mobile-test-harness/07-UI-SPEC.md diff --git a/.planning/phases/07-mobile-test-harness/07-03-SUMMARY.md b/.planning/phases/07-mobile-test-harness/07-03-SUMMARY.md new file mode 100644 index 0000000..032b2f4 --- /dev/null +++ b/.planning/phases/07-mobile-test-harness/07-03-SUMMARY.md @@ -0,0 +1,124 @@ +--- +phase: 07-mobile-test-harness +plan: "03" +subsystem: test-harness +tags: [playwright, e2e, layout, tap-targets, overflow, accessibility, self-validation] +dependency_graph: + requires: + - "apps/pwa/playwright.config.ts (07-01) — iphone/pixel project matrix, serviceWorkers: 'block'" + - "apps/pwa/e2e/global-setup.ts (07-02) — /health readiness gate + DB seed (calendar_id=10, E2E Grocery List)" + provides: + - "apps/pwa/e2e/layout.spec.ts — UI-SPEC Rules 1-4 assertions (tap targets, overflow, in-viewport, accessible names)" + - "Harness self-validation: addStyleTag injected-defect proofs for Rule 1 + Rule 2" + - "30 tests (15 per profile) — all passing on iphone (WebKit) and pixel (Chromium)" + affects: + - "Phase 07 plan 04 (calendar.spec.ts / lists.spec.ts share the same harness foundation)" + - "Phase 08 CI (layout.spec.ts is a PR regression step)" +tech_stack: + added: [] + patterns: + - "boundingBox() — rendered geometry measurement, not CSS-declared values" + - "page.evaluate(() => scrollWidth/clientWidth) — DOM overflow measurement" + - "page.addStyleTag + handle.evaluate(el => el.remove()) — injected-defect proof pattern" + - "getByRole('navigation', { name }) scoping — avoids strict-mode collision between BottomTabBar and DesktopNav" + - "getByText('FamilySync', { exact: true }) — avoids matching 'Install FamilySync' install-prompt" +key_files: + created: + - apps/pwa/e2e/layout.spec.ts + modified: + - apps/pwa/e2e/global-setup.ts +decisions: + - "D-03-SCOPE-NAV: On mobile profiles (390px/412px), AppNav renders PhoneNav as
(not a nav landmark) — only BottomTabBar exposes