Add recurring schedules feature
Introduces a schedules system that lets clients define recurring posts driven by a recurrence rule (daily, weekly, monthly). When a draft publishes, the scheduler automatically chains to the next occurrence.
Core changes:
- New `schedules` table (id, user_did, collection, record|content_url, recurrence_rule, status, fire_count, next_draft_uri, …)
- `DraftsTable` gains `schedule_id`, `trigger_key_hash`, `trigger_key_encrypted` columns
- 5 new XRPC endpoints: createSchedule, listSchedules, getSchedule, updateSchedule, deleteSchedule
- Scheduler: `handleScheduleChaining` — on publish, increments fire_count, computes next occurrence via @newpublic/recurrence, creates next draft
- Dynamic schedules: fetch `content_url?fireCount=N&scheduledAt=T` at publish time
- pause/resume: cancel pending draft; create new next draft + wake scheduler
- `@newpublic/recurrence` local package (luxon-based) — computeNextOccurrence + getOccurrenceRecord
- New lexicons for all 5 schedule endpoints + updated defs.json
- Full test coverage for storage, scheduler, server, schema
- Updated README and docs/api.md with schedule API reference and lifecycle diagram
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>