--- id: NL-PLAN-0E85CD00 type: plan title: Deliver read-only CalDAV calendar spec: NL-SPEC-9D4A99C2 status: approved --- # Deliver read-only CalDAV calendar 1. **Parsing and layout core** Provide runtime-neutral calendar parsing and multi-day segmentation. Test unfolding, decoding, dates, tasks, malformed input, week wrapping, and lane allocation. 2. **Calendar service interface** Own non-secret configuration, status, events, calendars, refresh, setup, self-test, and additive state behind one injected service. 3. **Discovery and fetch** Discover event and task calendars with read-only DAV requests. Expand events server-side, leave VTODO unexpanded, and filter dated tasks to the visible window. Keep credentials outside arguments, logs, responses, and persistent configuration. 4. **Lifecycle integration** Inject the service through the shell and expose state and refresh IPC. Refresh after configuration load, every 15 minutes, and when the clock popup opens. 5. **Month grid** Render the Monday-first 42-day grid with lowercase weekdays, today and spillover treatment, dots, pills, and calendar colors. 6. **Multi-day bands** Render week-split segments with reserved lanes and verify deterministic week wrapping. 7. **Agenda and stale state** Order today's all-day items and tasks before timed events. Support scrolling, empty state, last-good data, and stale indication. 8. **Setup and keyring handoff** Add lowercase URL, username, app-password, and save controls with explicit app-password guidance. Validate fields, store through the keyring boundary, clear transient secret state, and show inline failures safely. 9. **Verification** Run parser and service checks. Validate startup, additive IPC, live discovery and fetch, offline behavior, keyring failure, credential non-disclosure, and required screenshots.