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:
+20
-19
@@ -12,21 +12,21 @@ requirements: [NOTIF-FIX-01, NOTIF-FIX-02]
|
||||
|
||||
must_haves:
|
||||
truths:
|
||||
- "Android push notifications alert audibly/visibly (heads-up + sound/vibration), not silently, even when the notification tag is reused."
|
||||
- "iOS push notifications continue to display correctly (added options are ignored by iOS; payload parsing and declarative/legacy logic unchanged)."
|
||||
- "pwa typecheck and build both succeed, emitting dist/sw.js."
|
||||
- "Re-enable instructions name a browser-agnostic Chromium browser (Chrome or Edge), not Chrome only."
|
||||
- 'Android push notifications alert audibly/visibly (heads-up + sound/vibration), not silently, even when the notification tag is reused.'
|
||||
- 'iOS push notifications continue to display correctly (added options are ignored by iOS; payload parsing and declarative/legacy logic unchanged).'
|
||||
- 'pwa typecheck and build both succeed, emitting dist/sw.js.'
|
||||
- 'Re-enable instructions name a browser-agnostic Chromium browser (Chrome or Edge), not Chrome only.'
|
||||
artifacts:
|
||||
- path: "apps/pwa/src/sw.ts"
|
||||
provides: "Push handler showNotification call enriched with icon, badge, renotify, vibrate"
|
||||
contains: "renotify: true"
|
||||
- path: "apps/pwa/src/components/InstructionSheet.tsx"
|
||||
provides: "Browser-agnostic ANDROID_STEPS first step"
|
||||
contains: "Chrome or Edge"
|
||||
- path: 'apps/pwa/src/sw.ts'
|
||||
provides: 'Push handler showNotification call enriched with icon, badge, renotify, vibrate'
|
||||
contains: 'renotify: true'
|
||||
- path: 'apps/pwa/src/components/InstructionSheet.tsx'
|
||||
provides: 'Browser-agnostic ANDROID_STEPS first step'
|
||||
contains: 'Chrome or Edge'
|
||||
key_links:
|
||||
- from: "apps/pwa/src/sw.ts push handler"
|
||||
to: "self.registration.showNotification options object"
|
||||
via: "NotificationOptions with renotify+vibrate+icon+badge"
|
||||
- from: 'apps/pwa/src/sw.ts push handler'
|
||||
to: 'self.registration.showNotification options object'
|
||||
via: 'NotificationOptions with renotify+vibrate+icon+badge'
|
||||
pattern: "showNotification\\(title"
|
||||
---
|
||||
|
||||
@@ -63,11 +63,11 @@ In the `push` event handler, modify ONLY the `self.registration.showNotification
|
||||
Do NOT set `silent` (it must stay falsy/absent). Do NOT touch the payload parsing, the iOS-18.4+ declarative-vs-legacy branch, the try/catch fallback, `event.waitUntil`, or the `notificationclick` handler. iOS ignores these added options, so its path is unchanged.
|
||||
|
||||
TS caveat: `renotify` and `vibrate` are valid NotificationOptions members but some `lib.dom` TS versions omit/deprecate them on `ServiceWorkerRegistration.showNotification`. If typecheck errors on these keys, resolve it MINIMALLY: declare a `const options: NotificationOptions = { ... }` and pass it (with a narrow `as NotificationOptions` cast only if still required). Do NOT broaden suppression or silence unrelated errors. Build success is the load-bearing gate.
|
||||
</action>
|
||||
<verify>
|
||||
<automated>pnpm --filter @familysync/pwa typecheck && pnpm --filter @familysync/pwa build && test -f apps/pwa/dist/sw.js && grep -q "renotify" apps/pwa/dist/sw.js</automated>
|
||||
</verify>
|
||||
<done>showNotification options include icon, badge, renotify:true, and vibrate; body/tag/data unchanged; `silent` absent; typecheck passes; vite build succeeds and emits apps/pwa/dist/sw.js containing the renotify option.</done>
|
||||
</action>
|
||||
<verify>
|
||||
<automated>pnpm --filter @familysync/pwa typecheck && pnpm --filter @familysync/pwa build && test -f apps/pwa/dist/sw.js && grep -q "renotify" apps/pwa/dist/sw.js</automated>
|
||||
</verify>
|
||||
<done>showNotification options include icon, badge, renotify:true, and vibrate; body/tag/data unchanged; `silent` absent; typecheck passes; vite build succeeds and emits apps/pwa/dist/sw.js containing the renotify option.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
@@ -93,10 +93,11 @@ In the `ANDROID_STEPS` array, change the first step from `'Open Chrome on your p
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
|
||||
- sw.ts showNotification call includes icon, badge, renotify:true, vibrate; body/tag/data and all parsing/waitUntil logic unchanged; no `silent` key.
|
||||
- InstructionSheet ANDROID_STEPS is browser-agnostic (Chrome or Edge).
|
||||
- typecheck + build + test all pass; dist/sw.js emitted with the fix.
|
||||
</success_criteria>
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
Create `.planning/quick/260610-ka9-fix-silent-android-push-notifications-en/260610-ka9-SUMMARY.md` when done.
|
||||
|
||||
+6
-5
@@ -15,7 +15,7 @@ key_files:
|
||||
- apps/pwa/src/sw.ts
|
||||
- apps/pwa/src/components/InstructionSheet.tsx
|
||||
decisions:
|
||||
- "Used `as NotificationOptions` narrow cast (not type suppression) to handle renotify/vibrate absent from this lib.dom; cast is scoped to the single options object"
|
||||
- 'Used `as NotificationOptions` narrow cast (not type suppression) to handle renotify/vibrate absent from this lib.dom; cast is scoped to the single options object'
|
||||
metrics:
|
||||
duration: ~5 min
|
||||
completed: 2026-06-10
|
||||
@@ -27,10 +27,10 @@ metrics:
|
||||
|
||||
## Tasks Completed
|
||||
|
||||
| # | Task | Commit | Files |
|
||||
|---|------|--------|-------|
|
||||
| 1 | Enrich showNotification options to fix silent Android push | c864fc4 | apps/pwa/src/sw.ts |
|
||||
| 2 | Make Android re-enable instructions browser-agnostic | c864fc4 | apps/pwa/src/components/InstructionSheet.tsx |
|
||||
| # | Task | Commit | Files |
|
||||
| --- | ---------------------------------------------------------- | ------- | -------------------------------------------- |
|
||||
| 1 | Enrich showNotification options to fix silent Android push | c864fc4 | apps/pwa/src/sw.ts |
|
||||
| 2 | Make Android re-enable instructions browser-agnostic | c864fc4 | apps/pwa/src/components/InstructionSheet.tsx |
|
||||
|
||||
## Changes Made
|
||||
|
||||
@@ -73,6 +73,7 @@ pnpm --filter @familysync/pwa test
|
||||
### Auto-fixed Issues
|
||||
|
||||
**1. [Rule 1 - Bug] TypeScript error: renotify absent from NotificationOptions in this lib.dom**
|
||||
|
||||
- **Found during:** Task 1 typecheck
|
||||
- **Issue:** `tsc --noEmit` reported `error TS2353: Object literal may only specify known properties, and 'renotify' does not exist in type 'NotificationOptions'` (same for `vibrate`).
|
||||
- **Fix:** Changed `const options: NotificationOptions = { ... }` to `const options = { ... } as NotificationOptions`. The cast is minimal and scoped to the single options object; no other errors suppressed.
|
||||
|
||||
Reference in New Issue
Block a user