0003 — All scheduled jobs on AWS EventBridge

Context

Scheduled jobs today live in four places:

Four mechanisms to understand, debug, and monitor. Three of them have no proper observability.

Decision

Every scheduled job runs on AWS EventBridge Scheduler and invokes a Lambda under agents/.

Job Trigger Lambda
Subscription renewal rate(30 minutes) agents/outlook-subscription-renewer
Tour reminder rate(1 hour) agents/tour-reminder
Listings sync rate(15 minutes) agents/listings-sync
Application link one-shot on tour confirmation agents/application-link
Work order pipeline rate(8 hours) agents/wo-pipeline (migrated from launchd)

Inbox-poll was retired in ADR-0011 once the Microsoft Graph webhook took over real-time inbound delivery.

Vercel Cron is not used. If the web app ever needs its own scheduled job, it also goes to EventBridge.

Consequences

Easier

Harder

Follow-up work

Alternatives considered

Vercel Cron for listings sync. Proposed in Trello #762 v3 target doc. Rejected because listings sync is agent-side work (scrapes AppFolio, writes unit availability to DDB, consumed by Clara). Per ADR-0001, agent work doesn't run on Vercel.

Keep some EC2 setInterval jobs. Rejected because the whole point is one place for scheduling.

AWS Step Functions. Overkill. We have independent periodic jobs, not multi-step workflows.