oficina / calendar Public

Keep split-series exceptions with their original occurrence and export identity open

On branch fix-split-series-overrides

Follow-up to Calendar8/task13. Source b9010e1 fixes SplitSeries reassigning exceptions by their moved start time and retaining the head UID. Exceptions now follow their original occurrence, carry the tail UID/hash when moved, and advance sequence/updated_at. Cancelled exceptions move without resurrection. Head and override writes carry current writable-calendar grant filters inside the transaction, with a stale head revision refusing the split.

Regression test failed on main7b0d4b7 before implementation. It now covers moved exceptions crossing the cut in both directions, the cut itself, cancelled exceptions, exported UID pairing, all-day and DST-fold boundaries, foreign denial, and whole-transaction rollback for malformed legacy recurrence IDs. Full make ci passed. The gate also exposed a pre-existing late-day booking fixture panic; booking HTTP fixtures now choose a complete future day.

Fable review pending its 19:00 Dublin quota reset. Nothing deployed or merged. This bounded fix does not claim to resolve the broader existing semantics of changing a tail's start time/zone or resetting a COUNT rule during a split; include those as explicit review advisories rather than silently treating all recurrence editing as complete.

Current source569fe4b includes the remaining privacy-test fixture call. Initial b9010e1 CI correctly failed because that already-tested local change was omitted from the staged files. Working tree is now clean and contains the full make-ci-tested fixture update. Fresh exact CI is running. Task13 on fix/release-repairs advanced to In progress, not Done; source review and deployment remain outstanding.

Fable5.1 (claude-fable-5-1) approves exact569fe4b67760f099a0e33817d940981037336a21 for source/preview. ExactCI green. Deploying bounded split repair: original-occurrence classification, moved/cancelled override identity and transactional grant scope. Review explicitly leaves existing time/zone key mismatch, EXDATE transfer, reminder transfer and COUNT budget for follow-up; whole recurrence editing is not declared complete. Review artifact calendar-split-final/result.json under /home/paulca/.cache/oficina-provisioning-20260911/.

DEPLOYED and verified at https://overnight-calendar.bds.oncarlos.com/: process /api/version and X-Carlos-Version both569fe4b67760f099a0e33817d940981037336a21; health200; sign-in reaches Home. Correct preview channel is canary/overnight-recurrence. An initial promotion to unused canary/overnight-calendar had no followers and changed no instance; corrected to the existing channel. Canary evidence: calendar-split-final/canary-smoke.json. Fable source/preview approval and exactCI recorded above.