diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md
index 0a254e3..27402b8 100644
--- a/.planning/ROADMAP.md
+++ b/.planning/ROADMAP.md
@@ -213,11 +213,18 @@ Plans:
- Hard constraints: `setInterval` only; scheduler reads `reminder_lead_minutes` from the DB (ground truth), not the outbox payload; drop the `isShared`-only reminder restriction (a user who set an alarm wants it regardless of calendar).
**Plans**: 4 plans (3 waves)
-
Plans:
+**Wave 1**
+
- [ ] 11-01-PLAN.md — VALARM builders + classifier + extractor + computeAlertInstantUtc (vevent.ts, TDD)
+
+**Wave 2** *(blocked on Wave 1 completion)*
+
- [ ] 11-02-PLAN.md — Variable-lead scheduler: uid:dtstartMs dedup, drop isShared, all-day 9 AM, humanized body (TDD)
- [ ] 11-03-PLAN.md — Backend plumbing: schema field, outbox preserve-on-edit, sync upsert, occurrence surfacing
+
+**Wave 3** *(blocked on Wave 2 completion)*
+
- [ ] 11-04-PLAN.md — EventForm reminder picker (allDay swap, edit pre-population) + client types + Playwright smoke
**UI hint**: yes
diff --git a/.planning/STATE.md b/.planning/STATE.md
index 7670f80..ac16d20 100644
--- a/.planning/STATE.md
+++ b/.planning/STATE.md
@@ -2,9 +2,9 @@
gsd_state_version: 1.0
milestone: v1.1
milestone_name: Operability & Polish
-status: verifying
+status: executing
stopped_at: Phase 11 UI-SPEC approved
-last_updated: "2026-06-14T00:53:26.431Z"
+last_updated: "2026-06-14T01:26:07.775Z"
last_activity: "2026-06-13 - Completed quick task 260613-ndv: isolated local apps/api tests to familysync_test (dev DB no longer polluted)"
progress:
total_phases: 21
@@ -27,7 +27,7 @@ See: .planning/PROJECT.md (updated 2026-06-10)
Phase: 13
Plan: Not started
-Status: Phase complete — ready for verification
+Status: Ready to execute
Last activity: 2026-06-13 - Completed quick task 260613-ndv: isolated local apps/api tests to familysync_test (dev DB no longer polluted)
### ✅ Resolved Checkpoint — Phase 15 Plan 15-03 Task 2 (human-action)
diff --git a/.planning/phases/11-per-event-reminders/11-02-PLAN.md b/.planning/phases/11-per-event-reminders/11-02-PLAN.md
index 3fabe0d..e8b03eb 100644
--- a/.planning/phases/11-per-event-reminders/11-02-PLAN.md
+++ b/.planning/phases/11-per-event-reminders/11-02-PLAN.md
@@ -2,8 +2,8 @@
phase: 11-per-event-reminders
plan: 02
type: tdd
-wave: 1
-depends_on: []
+wave: 2
+depends_on: [11-01]
files_modified:
- apps/api/src/broker/reminderScheduler.ts
- apps/api/tests/broker/reminderScheduler.test.ts
@@ -16,7 +16,7 @@ must_haves:
- "A timed event with reminderLeadMinutes=0 produces no push; an all-day event with 0 fires at 9 AM on the event date"
- "Reminders fire on personal calendars too (the isShared-only restriction is dropped)"
- "The same event fires exactly once across consecutive ticks; a rescheduled event (new dtstart) re-fires — dedup key is uid:dtstartMs"
- - "Push body is humanized to the largest sensible unit (30 min / 1 hour / 1 day / 7 days)"
+ - "Push body is humanized to the largest sensible unit (30 min / 1 hour / 1 day / 7 days) (D-09)"
artifacts:
- path: "apps/api/src/broker/reminderScheduler.ts"
provides: "humanizeLeadMinutes, variable-lead query, uid:dtstartMs dedup, all-day 9 AM branch, NULL-vs-0 guard, dropped isShared restriction"
@@ -66,7 +66,7 @@ NOTE: `computeAlertInstantUtc` is created by Plan 11-01 in vevent.ts and importe
-This plan imports `computeAlertInstantUtc` from `../broker/vevent.js` (created in Plan 11-01). Until Plan 11-01 merges, the all-day-9AM test (Wave 0 gap) cannot pass — this plan is wave 1 alongside 11-01 but the all-day task's automated verify depends on 11-01's symbol. Sequence the all-day task LAST within this plan; if 11-01 has not yet landed in the shared tree, the executor imports the symbol signature as specified in 11-01's artifacts list and the test goes RED until both merge. Do not redefine computeAlertInstantUtc here.
+This plan imports `computeAlertInstantUtc` from `../broker/vevent.js` (created in Plan 11-01). This plan is **wave 2, `depends_on: [11-01]`** — 11-01 lands before this plan runs, so the symbol is available and the all-day-9AM test can go GREEN within this plan. Sequence the all-day task LAST within this plan. Do not redefine computeAlertInstantUtc here — import it from 11-01.