What to build
Updater jobs are disk-mirrored to /var/lib/hal0/update-jobs and survive restart; model-pull jobs live only in app.state.model_pull_jobs, so a restart mid-pull 404s the poll — despite the docstring claiming "Mirror of the updater route shape." Extend the same disk-mirror pattern (same make_job primitive) to model-pull jobs.
Pointers: updater.py:114; routes/models.py:1230. Audit Q4.2.
Acceptance criteria
Blocked by
None - can start immediately
What to build
Updater jobs are disk-mirrored to
/var/lib/hal0/update-jobsand survive restart; model-pull jobs live only inapp.state.model_pull_jobs, so a restart mid-pull 404s the poll — despite the docstring claiming "Mirror of the updater route shape." Extend the same disk-mirror pattern (samemake_jobprimitive) to model-pull jobs.Pointers:
updater.py:114;routes/models.py:1230. Audit Q4.2.Acceptance criteria
Blocked by
None - can start immediately