This website requires JavaScript.
f82837ca03
test(quick-260610-jlp): drop unused React import in InstructionSheet test
Lucas Berger
2026-06-10 14:15:02 -04:00
874c030291
fix(quick-260610-jlp-01): wire SettingsSheet 'How to enable' to open InstructionSheet
Lucas Berger
2026-06-10 14:12:38 -04:00
74b5d44712
refactor(quick-260610-jlp-01): extract InstructionSheet into shared component
Lucas Berger
2026-06-10 14:10:58 -04:00
1f3c672194
test(05): UAT — Test 5 PASS (coalescing); Test 4 issue (blocked-notif recovery link broken)
Lucas Berger
2026-06-10 14:06:13 -04:00
24f4589c4e
test(05): UAT Test 1 PASS — scheduled reminder delivers on real iPhone after node-cron→setInterval + catch-up fixes
Lucas Berger
2026-06-10 13:15:22 -04:00
914197f848
docs(quick-260610-i4x): plan/summary/verification + STATE row (node-cron→setInterval, Verified)
Lucas Berger
2026-06-10 13:09:09 -04:00
d9efbc1060
fix(quick-260610-i4x-01): replace node-cron schedule() with setInterval in three broker workers
Lucas Berger
2026-06-10 13:06:56 -04:00
3b87fa4581
docs(quick-260610-hbu): plan/summary/verification + STATE row (reminder resilience, Verified)
Lucas Berger
2026-06-10 12:40:48 -04:00
19d92c671b
test(260610-hbu): drop unused 'now' param in rowForNow helper
Lucas Berger
2026-06-10 12:38:37 -04:00
93bb2c1c68
test(260610-hbu-02): update reminderScheduler tests for catch-up + per-uid dedup
Lucas Berger
2026-06-10 12:36:23 -04:00
3fdb242f7e
fix(260610-hbu-01): catch-up window + per-uid dedup in reminderScheduler
Lucas Berger
2026-06-10 12:32:43 -04:00
ec38dea1dc
test(05): UAT — iOS push delivery PROVEN on-device (test 2 pass); reminder scheduling issue (test 1)
Lucas Berger
2026-06-10 12:26:11 -04:00
69e5ae8726
fix(06): set hasRrule on EventDetailPopover test fixtures
Lucas Berger
2026-06-10 11:44:37 -04:00
883b00b92b
feat(06-06): distinct all-day event pill styling
Lucas Berger
2026-06-10 11:41:01 -04:00
96ef0b45b9
feat(06-06): add whole-series edit confirmation prompt
Lucas Berger
2026-06-10 11:40:33 -04:00
cbf5f98eb9
feat(06-06): wire end-tracking and recurrence-bound control into EventForm
Lucas Berger
2026-06-10 11:38:24 -04:00
9aa15c484b
test(06-06): add failing tests for end-tracking wiring and recurrence-bound control
Lucas Berger
2026-06-10 11:36:49 -04:00
139ef00ed4
feat(06-05): global session-expiry interstitial via QueryCache/MutationCache onError
Lucas Berger
2026-06-10 11:32:45 -04:00
e7b34a5ce2
feat(06-05): gate app render behind AuthSplash (no pre-auth flash)
Lucas Berger
2026-06-10 11:31:17 -04:00
d7d4023cf9
feat(06-05): centralize session-expiry detection and extend client types
Lucas Berger
2026-06-10 11:29:37 -04:00
e5072ff663
test(06-05): add failing SessionExpiredError detection tests
Lucas Berger
2026-06-10 11:26:59 -04:00
81f2678987
fix(06-04): add global pulse keyframe and drop redundant spin redefinition
Lucas Berger
2026-06-10 11:23:01 -04:00
0c2c26c375
docs(06-03): complete hasRrule server-side exposure plan
Lucas Berger
2026-06-10 11:20:17 -04:00
44d336c01b
feat(06-03): expose hasRrule on expanded occurrences
Lucas Berger
2026-06-10 11:17:13 -04:00
593302ee41
test(06-03): add failing tests for hasRrule + bounded expansion
Lucas Berger
2026-06-10 11:11:08 -04:00
b869fe0a93
docs(06-02): complete RRULE UNTIL/COUNT serialization plan
Lucas Berger
2026-06-10 11:04:04 -04:00
d2abb91bd2
feat(06-02): serialize RRULE UNTIL/COUNT and lock FREQ persistence
Lucas Berger
2026-06-10 11:00:24 -04:00
a59455a727
test(06-02): add failing tests for RRULE UNTIL/COUNT + FREQ persistence
Lucas Berger
2026-06-10 10:56:22 -04:00
78a8cb5ccd
docs(06-01): complete end-tracking math plan (D-04)
Lucas Berger
2026-06-10 10:51:16 -04:00
605f543f81
feat(06-01): implement duration-preserving end-tracking helpers
Lucas Berger
2026-06-10 10:49:10 -04:00
16cdbf3d7c
test(06-01): add failing tests for end-tracking duration math
Lucas Berger
2026-06-10 10:48:09 -04:00
7de1f2482e
docs: add backlog 999.10 (admin Settings section) + 999.11 (initial setup wizard)
Lucas Berger
2026-06-10 10:38:36 -04:00
53913bb7fd
docs(06): record planning complete + annotate roadmap
Lucas Berger
2026-06-10 10:37:02 -04:00
f6b2322012
docs(06): fix 06-06 depends_on format; populate validation map
Lucas Berger
2026-06-10 10:34:44 -04:00
f1a2de2cdc
docs: resolve D-16 — FamilySync shared calendar synced (id 10) + marked is_shared=1
Lucas Berger
2026-06-10 10:34:41 -04:00
456121969f
docs(06): create ux-polish phase plan (6 plans, 2 waves)
Lucas Berger and Claude Opus 4.8
2026-06-10 10:25:41 -04:00
d52acad54c
docs(06): add validation strategy
Lucas Berger
2026-06-10 10:04:34 -04:00
3d0ec986a2
docs(06): research phase for ux-polish
Lucas Berger
2026-06-10 10:02:29 -04:00
4b77ec0254
docs(06): add brand assets & iconography contract to UI-SPEC
Lucas Berger
2026-06-10 09:45:00 -04:00
9707fd0d85
docs(06): UI design contract for ux-polish phase
Lucas Berger and Claude Sonnet 4.6
2026-06-10 09:38:54 -04:00
cdbe94deb2
docs(state): record phase 6 context session
Lucas Berger
2026-06-10 09:33:43 -04:00
afdc8d124d
docs(06): capture phase context
Lucas Berger
2026-06-10 09:33:36 -04:00
497daf6add
docs: add deferred REQ-IDs to REQUIREMENTS traceability table
Lucas Berger
2026-06-10 09:26:45 -04:00
7369c9f1d1
docs(quick-260610-czd): plan/summary + STATE quick-task row, resolve deployment.md dev-cmd todo
Lucas Berger
2026-06-10 09:25:24 -04:00
39e2ee067e
docs(quick-260610-czd-01): add host-side local dev run instructions to deployment.md
Lucas Berger
2026-06-10 09:24:22 -04:00
b745515753
docs(quick-260610-cr8): plan/summary/verification + STATE quick-task row
Lucas Berger
2026-06-10 09:20:22 -04:00
736adf7c58
docs(quick-260610-cr8): adopt drizzle generate+migrate, retire db:push
Lucas Berger
2026-06-10 09:20:13 -04:00
1a95d81a3f
docs(quick-260610-cr8-01): repoint deployment.md to generate+migrate, warn against push
Lucas Berger
2026-06-10 09:16:30 -04:00
f452400517
chore(quick-260610-cr8-01): remove db:push script from apps/api/package.json
Lucas Berger
2026-06-10 09:15:30 -04:00
68ff72d195
docs(phase-05): add security threat verification (26/26 closed)
Lucas Berger
2026-06-10 09:09:45 -04:00
3b54ea2f12
wip: phase 05 web-push paused — code complete + verified, awaiting iOS/Android device UAT
Lucas Berger
2026-06-09 22:51:04 -04:00
17dfaac5f2
docs(05): mark phase pending iOS/Android device UAT (verification human_needed)
Lucas Berger
2026-06-09 22:48:07 -04:00
ecb576eb8a
test(05): verification (12/12 code) + persist 5 human UAT items
Lucas Berger
2026-06-09 22:47:14 -04:00
02526d07eb
docs(05): code review clean after --fix --all --auto (3 iterations)
Lucas Berger
2026-06-09 22:41:28 -04:00
17756fc523
fix(05-review): NEW-WR-01 emit delete changes when server returns zero events (whole-cache clear)
Lucas Berger
2026-06-09 22:39:11 -04:00
c7ef5811d1
fix(05-review): NEW-CR-01 pre-resolve SW registration to eliminate await before pushManager.subscribe
Lucas Berger
2026-06-09 22:39:05 -04:00
dc8516beb8
docs(05): add code review report
Lucas Berger
2026-06-09 22:33:09 -04:00
44fbb2bb3a
fix(05-review): commit 0004 migration meta (journal + snapshot)
Lucas Berger
2026-06-09 22:33:09 -04:00
1044de57ae
test(05-review): add CR-01/WR-01 reminder pruning tests and IN-01 actor-name tests
Lucas Berger
2026-06-09 22:30:03 -04:00
50da9b3bca
fix(05-review): IN-01 resolve actor display name in eventChangeDispatcher for D-02/D-03
Lucas Berger
2026-06-09 22:25:32 -04:00
8cecbab7ab
fix(05-review): CR-02 change endpoint/p256dh to varchar to prevent InnoDB prefix-index truncation
Lucas Berger
2026-06-09 22:24:23 -04:00
82eccc9017
fix(05-review): CR-04 pre-fetch VAPID key into state; no await before pushManager.subscribe
Lucas Berger
2026-06-09 22:24:00 -04:00
e5f7b1ab7c
fix(05-review): CR-03 notificationclick uses matchAll+focus+navigate for deep-link URLs
Lucas Berger
2026-06-09 22:22:27 -04:00
7702f7e19a
fix(05-review): CR-01+WR-01 prune sentReminders after each scan and mark-sent after dispatch
Lucas Berger
2026-06-09 22:22:04 -04:00
f058aefb88
fix(05-review): WR-04 collect delete changes after db.delete to avoid race in sync fan-out
Lucas Berger
2026-06-09 22:21:37 -04:00
814d29dbdd
fix(05-review): WR-05 re-confirm push subscription server-side on health-check mount
Lucas Berger
2026-06-09 22:21:16 -04:00
76e0fb9588
fix(05-review): IN-03 use useId() instead of Math.random() for headingId in PushPermissionPrompt
Lucas Berger
2026-06-09 22:21:05 -04:00
bf64a0a0e1
fix(05-review): IN-02 add empty-string fallbacks for VAPID env vars in docker-compose
Lucas Berger
2026-06-09 22:20:50 -04:00
c69bd30aaa
fix(05-review): WR-03 log error.message not raw error in push route catch blocks
Lucas Berger
2026-06-09 22:20:43 -04:00
b666b1d114
fix(05-review): WR-02 remove unused 'and' import from listChangeDispatcher
Lucas Berger
2026-06-09 22:20:30 -04:00
e496b5e00a
docs(05-07): complete eventChangeDispatcher + syncCalendar diff plan
Lucas Berger
2026-06-09 22:06:14 -04:00
30e9de13f9
feat(05-07): implement eventChangeDispatcher + syncCalendar diff/title/onChanges
Lucas Berger
2026-06-09 22:03:52 -04:00
4ef6333201
docs(05-08): complete opt-out + reliability surface plan
Lucas Berger
2026-06-09 21:53:33 -04:00
010a69c047
feat(05-08): PermissionDeniedBanner + App mount + CalendarShell onOpenSettings wiring
Lucas Berger
2026-06-09 21:50:48 -04:00
1de4aa5a3e
feat(05-08): SettingsSheet (master toggle D-09) + AppNav avatar promoted to button
Lucas Berger
2026-06-09 21:45:59 -04:00
458d6e4fef
feat(05-08): extend usePushSubscription with isSubscribed, setEnabled, permission state (D-10)
Lucas Berger
2026-06-09 21:43:31 -04:00
8e741cf528
docs(05-06): complete reminderScheduler plan
Lucas Berger
2026-06-09 21:40:22 -04:00
b95f671485
feat(05-06): implement reminderScheduler — shared timed 15-min reminder scan
Lucas Berger
2026-06-09 21:38:32 -04:00
9b04528fd6
docs(05-05): complete list-change push plan
Lucas Berger
2026-06-09 21:29:09 -04:00
d2ce4e08c7
feat(05-05): hook notifyListChange into list/item mutations (reorder excluded)
Lucas Berger
2026-06-09 21:26:29 -04:00
69231043e4
feat(05-05): implement listChangeDispatcher — access-scoped, self-suppressed, coalesced push (NOTIF-02)
Lucas Berger
2026-06-09 21:24:48 -04:00
97f7026095
test(05-05): add failing tests for listChangeDispatcher — RED gate
Lucas Berger
2026-06-09 21:20:34 -04:00
60c247d8ed
docs(05-04): complete push vertical slice plan
Lucas Berger
2026-06-09 21:16:23 -04:00
d816f79271
fix(05-04): wrap setVapidDetails in try/catch to prevent startup crash on bad VAPID key
Lucas Berger
2026-06-09 21:13:58 -04:00
bf8f63b47c
feat(05-04): usePushSubscription hook + PushPermissionPrompt + App mount
Lucas Berger
2026-06-09 21:09:41 -04:00
e5953ebb31
feat(05-04): SW migration to injectManifest with push + notificationclick + denylist
Lucas Berger
2026-06-09 21:06:32 -04:00
f6f1374904
feat(05-04): push subscription API + VAPID startup wiring
Lucas Berger
2026-06-09 21:04:16 -04:00
f07c85d0c9
docs(05-03): complete pushCoalescer TDD plan
Lucas Berger
2026-06-09 21:00:22 -04:00
c1758de05e
feat(05-03): implement pushCoalescer — per-(list,actor) sliding debounce (D-01/D-03)
Lucas Berger
2026-06-09 20:58:42 -04:00
7af827a9b9
test(05-03): add actorId assertion in burst test — fix unused var lint warning
Lucas Berger
2026-06-09 20:58:01 -04:00
fc6f534f0a
docs(05-02): complete pushDispatcher TDD plan
Lucas Berger
2026-06-09 20:56:13 -04:00
e4170b3823
feat(05-02): implement pushDispatcher — VAPID send + 410/404 prune
Lucas Berger
2026-06-09 20:54:47 -04:00
4e0b06d3fd
docs(05-01): mark NOTIF requirements complete in traceability
Lucas Berger
2026-06-09 20:52:35 -04:00
1cc08f1bf1
docs(05-01): complete Wave-0 foundation plan
Lucas Berger
2026-06-09 20:52:23 -04:00
ef558b65be
test(05-01): add Wave-0 RED scaffolds + VAPID fixture + setup truncation
Lucas Berger
2026-06-09 20:50:35 -04:00
2cae72e9dd
docs: capture todo - Gitea CI regression + Docker build/publish
Lucas Berger
2026-06-09 20:49:07 -04:00
73fcdaf075
feat(05-01): add push_subscriptions table + calendar_events.title column; VAPID env wiring
Lucas Berger
2026-06-09 20:47:44 -04:00
80bbdc1735
chore(05-01): install web-push and workbox push dependencies
Lucas Berger
2026-06-09 20:47:35 -04:00
ddc84f1ffc
docs(05): finalize plan 05-07 (D-13 boundary) + add patterns doc
Lucas Berger
2026-06-09 20:34:15 -04:00
36fb929a40
docs(05): create phase plan
Lucas Berger
2026-06-09 18:44:55 -04:00