--- gsd_state_version: 1.0 milestone: v1.0 milestone_name: milestone status: executing stopped_at: Phase 2 fully planned (5 plans / 4 waves); proceeding to execute last_updated: "2026-06-05T20:00:27.163Z" last_activity: 2026-06-05 progress: total_phases: 6 completed_phases: 2 total_plans: 9 completed_plans: 9 percent: 33 --- # Project State ## Project Reference See: .planning/PROJECT.md (updated 2026-06-03) **Core value:** One color-coded family calendar (shared + personal) and shared lists from a single low-friction PWA — cross-ecosystem, no app store **Current focus:** Phase 03 — event-write-back + PWA install (next) ## Current Position Phase: 3 (event-write-back + PWA install) — NOT STARTED Plan: Not started Status: Phase 2 (calendar-display) COMPLETE & verified (human UAT approved); Phase 3 ready to plan Last activity: 2026-06-05 -- Phase 2 completed Progress: [███░░░░░░░] 33% (2 of 6 phases complete) ## Performance Metrics **Velocity:** - Total plans completed: 5 - Average duration: - - Total execution time: 0 hours **By Phase:** | Phase | Plans | Total | Avg/Plan | |-------|-------|-------|----------| | 02 | 5 | - | - | **Recent Trend:** - Last 5 plans: - - Trend: - *Updated after each plan completion* ## Accumulated Context ### Decisions Decisions are logged in PROJECT.md Key Decisions table. Recent decisions affecting current work: - CAL-08 RESOLVED → GO (Phase 1): per-member Fastmail app password reaches all of that account's calendars; no cross-account ACL needed. Unified view stands; no shared-only fallback. See CAL-08-DECISION.md. - D-14 (2026-06-04): Phase 1 Gate 2 (live Authelia/Pangolin) deferred. SSE-over-Pangolin smoke = hard gate before Phase 4; live AUTH smoke incl. iOS standalone-PWA folded into Phase 3. Phases 2–3 build behind a dev-auth bypass. Tracked in 01-HUMAN-UAT.md + docs/deployment.md. - D-15 (2026-06-04): Validate real topology via local Newt connector + test subdomain through Pangolin (Mode A), not an Unraid deploy; Unraid reserved for go-live. - CalDAV locked: Fastmail does not expose calendars over JMAP. CalDAV via tsdav is the only protocol. No reconsideration. - Identity: Use oidc_iss + oidc_sub as stable composite key. Never email. - Real-time transport: Prefer SSE over WebSocket (proxy-resilient through Pangolin). SSE pass-through STILL UNVERIFIED — gate before Phase 4 (D-14). - Recurring events: Create + display only in v1 (CALDAV:expand on server side). Single-occurrence edit deferred to v1.x. ### Pending Todos None yet. ### Blockers/Concerns - ~~Phase 1: Personal-calendar CalDAV ACL~~ RESOLVED → CAL-08 GO (per-member app password; no cross-account ACL). - Phase 4 ENTRY GATE: Pangolin SSE pass-through (issue #1034) still unverified — deferred from Phase 1 Gate 2 (D-14). Must pass the 5-min SSE smoke (docs/deployment.md) before building live sync. - Phase 3: iOS standalone-PWA + Authelia login is load-bearing for the wife and is the first real external auth test (carried Gate 2 item, D-14). Also: iOS install guide is load-bearing — she gets no push notifications if she does not install the PWA. - Phase 2/3 dev: build behind a documented dev-auth bypass until Gate 2 deploy (D-14). - Phase 5: iOS push subscriptions silently revoked after 3 silent pushes. Subscription health-check and event.waitUntil() are mandatory from day one. ## Deferred Items | Category | Item | Status | Deferred At | |----------|------|--------|-------------| | Calendar | Single-occurrence recurring edit (RECURRENCE-ID) | v1.x | Roadmap | | Calendar | "This and following" recurring edit | v1.x | Roadmap | | Calendar | Apple Calendar native subscribe URL docs | v1.x | Roadmap | | Calendar | Secondary timezone display toggle | v1.x | Roadmap | | Display | Wall-display / kiosk dashboard | v2 | PROJECT.md | | Calendar | Mark shared-family calendar `is_shared=1` — operator must first create a "Family" calendar on the primary Fastmail account + share it, let the poller sync it, then run `UPDATE calendars SET is_shared=1 WHERE id=`. Until then the shared color lane is empty (correct). | Phase 2 (deferred, D-16) | 2026-06-05 | ## Session Continuity Last session: 2026-06-05 (resumed) Stopped at: Phase 2 fully planned (5 plans / 4 waves); proceeding to execute Resume file: (HANDOFF.json consumed) — next: /gsd-execute-phase 2