# ADR 0003 — Operating model disposition (local timer retained) Accepted: 2026-09-27. ## Context IR-WP-0007-T03 asks whether continuous uptime is required for Intelligence Radar's scheduled jobs, and to retain the local timer unless a concrete requirement justifies a hosted worker and its own live owner workplan. The current operating model is a user-level systemd timer/service pair (`ops/systemd/intelligence-radar.timer`, `ops/systemd/intelligence-radar.service`) invoking `python3 -m intelligence_radar run-due`, which is explicitly idempotent and safe to invoke repeatedly (`ops/RUNBOOK.md`). `run-due` and the scheduler already handle missed/late runs and retries (`intelligence_radar/scheduler.py`, exercised in `tests/test_ingestion_scheduler.py`), so uptime gaps degrade freshness rather than correctness. ## Decision Retain the local systemd user timer as the operating model. No hosted worker is adopted. ## Rationale - Nothing in this repository's current scope requires sub-day freshness: the cadence is daily/weekly digests and periodic source captures, not real-time alerting. - The scheduler design already absorbs downtime (a laptop asleep, a missed boot) by running the latest due job on next wake rather than requiring uninterrupted uptime. - A hosted worker adds a live infrastructure surface (deployment, credentials, monitoring, its own on-call) with no offsetting capability gain today, and would need its own owner workplan to be justified, per this task's own instruction not to start "another infrastructure programme before the research evidence is usable." - The evidence-quality blockers ahead of this project (IR-WP-0005 credential delivery, IR-WP-0006 billing reconciliation) are unrelated to scheduler uptime; hosting the scheduler elsewhere would not unblock them. ## Revisit trigger Reopen this decision only if a concrete requirement appears — e.g. a downstream consumer needs sub-daily freshness guarantees, or the operator machine's uptime becomes materially unreliable for the daily/weekly cadence. Until then this is not tracked as an open task.