events: per-occurrence overrides / reschedule (RECURRENCE-ID) + 6 tests
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 41s

ev-with-override re-times/re-sizes a single instance of a series (keyed by
original start). ev-expand applies overrides after EXDATE/RDATE: agenda
re-sorts, instance moved out of window is dropped (slot vacated), no-op for a
non-occurring start. assoc for immutable event update. 254/254 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-07 06:52:02 +00:00
parent 48f5b75cc2
commit b308effb9f
5 changed files with 121 additions and 13 deletions

View File

@@ -18,7 +18,7 @@ capacity rules, transactional booking, and a flow-driven notification dispatcher
## Status (rolling)
`bash lib/events/conformance.sh`**248/248** (Phases 1-4 + ext: fed free/busy, waitlist, EXDATE/RDATE)
`bash lib/events/conformance.sh`**254/254** (Phases 1-4 + ext: fed free/busy, waitlist, EXDATE/RDATE, overrides)
## Ground rules
@@ -86,6 +86,13 @@ lib/events/api.sx ── (events/schedule) (events/book) (events/agenda) ──
## Progress log
- 2026-06-07 — Per-occurrence overrides / reschedule (RFC 5545 RECURRENCE-ID).
`ev-with-override event orig-start new-start new-duration` adds an :overrides
entry keyed by the occurrence's original start. `ev-expand` applies overrides
after EXDATE/RDATE: a targeted instance is re-timed/re-sized and the agenda
re-sorted; an instance moved out of the window is dropped (slot vacated);
override of a non-occurring start is a no-op. Used `assoc` for immutable
event update. +6 tests, 254/254 green.
- 2026-06-07 — RRULE exceptions EXDATE/RDATE (extension). `ev-event-full`
carries :exdate/:rdate (epoch-minute starts). Raw expansion renamed
`ev-expand-base`; `ev-expand` now applies exceptions: RDATE adds explicit