Phase 3 — Feature completeness (behind the API). Crate: nuncio-cal (+ proto + CLI).
Make calendar real: an actual CalDAV transport plus the correctness fixes called
out in the assessment (TZID handling, recurrence).
Scope / acceptance criteria
Real CalDAV client — HTTP(S) CalDAV sync (REPORT/PUT/etc.) replacing any
stubbed transport; all tests mock the server with wiremock (no live network).
TZID fix — events with a TZID reference resolve to the correct offset;
no silent coercion to UTC/local. Test with a fixture crossing a DST boundary.
Recurrence (rrule) — expand recurring events correctly (incl. UNTIL, COUNT, exceptions) over a queried window.
Proto + CLI — a Calendar service (or additions) exposing list/sync of
events over gRPC, driven by a nuncio-cli command.
Offline E2E: sync → list events against a mock CalDAV server. cargo verify green.
Note: proto lives in the shared proto/nuncio/v1/nuncio.proto — coordinate to
avoid clobbering the Contacts/JMAP proto stories.
**Phase 3 — Feature completeness (behind the API).** Crate: `nuncio-cal` (+ proto + CLI).
Make calendar real: an actual CalDAV transport plus the correctness fixes called
out in the assessment (TZID handling, recurrence).
### Scope / acceptance criteria
- [ ] **Real CalDAV client** — HTTP(S) CalDAV sync (REPORT/PUT/etc.) replacing any
stubbed transport; all tests mock the server with `wiremock` (no live network).
- [ ] **TZID fix** — events with a `TZID` reference resolve to the correct offset;
no silent coercion to UTC/local. Test with a fixture crossing a DST boundary.
- [ ] **Recurrence (`rrule`)** — expand recurring events correctly (incl. `UNTIL`,
`COUNT`, exceptions) over a queried window.
- [ ] **Proto + CLI** — a `Calendar` service (or additions) exposing list/sync of
events over gRPC, driven by a `nuncio-cli` command.
- [ ] Offline E2E: `sync → list events` against a mock CalDAV server. `cargo verify` green.
Note: proto lives in the shared `proto/nuncio/v1/nuncio.proto` — coordinate to
avoid clobbering the Contacts/JMAP proto stories.
Superseded by #185/#186 (M1) in the roadmap restructuring (milestones M1–M7). The replacement story carries the full, self-contained spec for a remote implementer. See docs/ROADMAP.md, docs/STORY-WORKFLOW.md, docs/HANDOFF.md.
Superseded by #185/#186 (M1) in the roadmap restructuring (milestones M1–M7). The replacement story carries the full, self-contained spec for a remote implementer. See docs/ROADMAP.md, docs/STORY-WORKFLOW.md, docs/HANDOFF.md.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Phase 3 — Feature completeness (behind the API). Crate:
nuncio-cal(+ proto + CLI).Make calendar real: an actual CalDAV transport plus the correctness fixes called
out in the assessment (TZID handling, recurrence).
Scope / acceptance criteria
stubbed transport; all tests mock the server with
wiremock(no live network).TZIDreference resolve to the correct offset;no silent coercion to UTC/local. Test with a fixture crossing a DST boundary.
rrule) — expand recurring events correctly (incl.UNTIL,COUNT, exceptions) over a queried window.Calendarservice (or additions) exposing list/sync ofevents over gRPC, driven by a
nuncio-clicommand.sync → list eventsagainst a mock CalDAV server.cargo verifygreen.Note: proto lives in the shared
proto/nuncio/v1/nuncio.proto— coordinate toavoid clobbering the Contacts/JMAP proto stories.
Superseded by #185/#186 (M1) in the roadmap restructuring (milestones M1–M7). The replacement story carries the full, self-contained spec for a remote implementer. See docs/ROADMAP.md, docs/STORY-WORKFLOW.md, docs/HANDOFF.md.