47 lines
2.1 KiB
Markdown
47 lines
2.1 KiB
Markdown
|
|
# 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.
|