- _cron_generate: per-rule savepoint isolation (one bad rule can't abort the
whole daily batch)
- fclk_attach_recurrence: clear an existing recurrence first (no orphaned rule
generating forever)
- fclk_apply_planner_cell: collapse split rows (search was limit=1 after the
UNIQUE drop, orphaning extras)
- fclk_release_shift: reject non-posted/open shifts (raw-POST guard)
- delete_open_shift: report success=false when nothing was deleted + JS surfaces it
- _generate: log before removing an empty recurrence
Tests added for collapse, re-attach, draft-release.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fusion.clock.schedule.recurrence (repeat every N day/week/month/year;
forever/until/N-times) re-fit from planning.recurrency onto per-day rows;
daily generation cron; _fclk_on_leave skip; planner Repeat…/Stop-repeat
UI + endpoints; recurrence + role indicators on cells.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>