style(13-03): apply Prettier formatting across repo
Mechanical reformat — no logic changes. 398 files changed, 19125 insertions(+), 16457 deletions(-). Prettier 3.8.4 with .prettierrc (singleQuote:true, semi:true, tabWidth:2, trailingComma:all, printWidth:100). Isolated per D-13-08 for reviewability.
This commit is contained in:
@@ -13,6 +13,7 @@ updated: 2026-06-10T18:30:00Z
|
||||
## Tests
|
||||
|
||||
### 1. iOS PWA install → push subscription → 15-min reminder receipt
|
||||
|
||||
expected: After adding FamilySync to the Home Screen on an iOS 16.4+ device and tapping "Enable Notifications", a push notification appears on the lock screen ~15 minutes before a shared Family-calendar timed event starts.
|
||||
why_human: iOS-Safari standalone push delivery cannot be driven by playwright-cli per CLAUDE.md — requires a physical iOS device + Home Screen install.
|
||||
result: pass
|
||||
@@ -20,18 +21,21 @@ note: "PASS confirmed on a real iPhone via the SCHEDULED path (no manual trigger
|
||||
fix_commits: ["260610-hbu (catch-up + per-uid dedup)", "260610-i4x (node-cron→setInterval)"]
|
||||
|
||||
### 2. iOS push subscription does not receive NotAllowedError
|
||||
|
||||
expected: Tapping "Enable Notifications" on iOS in the installed PWA (or the Settings toggle) successfully calls pushManager.subscribe() without throwing NotAllowedError. Both vapidKey and swRegistration are pre-resolved in state before the tap.
|
||||
why_human: NEW-CR-01 fix is verified in code (zero awaits between tap and subscribe()), but runtime confirmation on a physical iOS device is the only way to close this.
|
||||
result: pass
|
||||
note: "Confirmed on a real iPhone (installed standalone PWA). Enable Notifications succeeded with no NotAllowedError; subscription persisted (push_subscriptions id 176, user 3, web.push.apple.com endpoint). Required first fixing a truncated VAPID private key in .env (was 30 bytes → restored to a valid matched 32-byte pair)."
|
||||
|
||||
### 3. iOS subscription health-check keeps subscription alive after 1+ week of inactivity
|
||||
|
||||
expected: After a week without opening the app, opening it again silently re-subscribes (if permission still granted) and notifications continue to be delivered.
|
||||
why_human: Requires real elapsed time and a physical iOS device. Cannot be simulated.
|
||||
result: skipped
|
||||
reason: "Dropped by operator (2026-06-10) — requires 1+ week of real elapsed time; not gating for Phase 5 sign-off. The silent re-subscribe code path (D-10) is verified in code; long-horizon real-world behaviour is left to observe naturally rather than block on."
|
||||
|
||||
### 4. Android FCM: event-change push arrives after the other member modifies a calendar event
|
||||
|
||||
expected: When member A modifies a shared event title/time/location, member B receives a push notification on Android within the next 5-minute poll cycle, showing "A updated an event" with the event title.
|
||||
why_human: End-to-end push delivery through FCM to a real Android device with a subscribed session cannot be driven by playwright-cli.
|
||||
result: skipped
|
||||
@@ -40,6 +44,7 @@ deferred_to: "Phase 6 verification"
|
||||
fix_commits: ["260610-jlp (how-to-enable link)", "260610-ka9 (silent Android notification options)"]
|
||||
|
||||
### 5. List-change push coalescing is observable
|
||||
|
||||
expected: Member B making 5 rapid grocery-list edits results in a SINGLE push notification to member A (not 5), naming the actor and the list, arriving after the 45-second coalesce window.
|
||||
why_human: Requires two devices/sessions, real timing, and real push delivery. Playwright-cli can exercise the API hooks but not multi-device push receipt.
|
||||
result: pass
|
||||
@@ -55,8 +60,11 @@ skipped: 2
|
||||
blocked: 0
|
||||
|
||||
# Sign-off (2026-06-10): Tests 1, 2, 5 PASS on real devices. Test 3 dropped
|
||||
|
||||
# (1-week elapsed time, non-gating). Test 4 deferred to Phase 6 verification
|
||||
|
||||
# (fixes deployed: how-to-enable link + silent-notification options; Android
|
||||
|
||||
# delivery confirmation moved to Phase 6). Phase 5 UAT resolved.
|
||||
|
||||
## Notes
|
||||
@@ -82,5 +90,5 @@ blocked: 0
|
||||
test: 4
|
||||
artifacts: [apps/pwa/src/components/SettingsSheet.tsx, apps/pwa/src/components/PermissionDeniedBanner.tsx]
|
||||
missing:
|
||||
- "Wire SettingsSheet 'How to enable' to open the OS-specific InstructionSheet (extract/share it from PermissionDeniedBanner) instead of calling onClose."
|
||||
- "After unblocking in Chrome site settings, re-run Test 4: modify a shared event as member A, confirm member B's Android device receives the 'updated an event' push within the 5-min poll cycle."
|
||||
- "Wire SettingsSheet 'How to enable' to open the OS-specific InstructionSheet (extract/share it from PermissionDeniedBanner) instead of calling onClose."
|
||||
- "After unblocking in Chrome site settings, re-run Test 4: modify a shared event as member A, confirm member B's Android device receives the 'updated an event' push within the 5-min poll cycle."
|
||||
|
||||
Reference in New Issue
Block a user