feat: catch up missed scheduled deployments on garden reconnect
When a garden is offline during a scheduled deployment window, the
deployment is silently missed because schedule evaluation happens
client-side via Quantum. This adds server-side catch-up: after
subscription sync on reconnect, the server checks each scheduled
subscription against its last successful deployment time and triggers
deployments for any that are overdue.
Changes:
- Add schedule and timezone columns to subscriptions table
- Persist schedule/timezone during subscription sync
- Add catch_up_overdue_schedules/2 with timezone-aware cron evaluation
- Trigger catch-up after subscriptions:sync in garden channel
- Garden stamps timezone on subscriptions before sync
SOW-77
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>