intelligence-radar/docs/adr/0003-operating-model-disposition.md

47 lines
2.1 KiB
Markdown
Raw Normal View History

# 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.