Consolidate the four nightly *-update timers into one host-maintenance orchestrator #40

Closed
opened 2026-05-23 20:54:32 +00:00 by coilysiren · 1 comment
Owner

Originally filed by @coilysiren on 2026-05-21T02:22:19Z - https://github.com/coilysiren/infrastructure/issues/214

Problem

kai-server runs four separate systemd timers for nightly host maintenance, hand-staggered 15 minutes apart so they do not collide on Homebrew's global update lock:

  • coilysiren-pull-all.timer - 02:45 - git pull sweep across ~/projects/coilysiren/*
  • coily-update.timer - 03:00 - brew update + brew upgrade
  • repo-recall-update.timer - 03:15
  • personal-dashboard-update.timer - 03:30

The manual staggering is design debt. The spacing is bookkeeping that exists only because the units would otherwise fight over the brew lock, and it silently breaks if any single step runs long enough to overrun into the next slot.

Proposal

Replace the four timers with one host-maintenance.timer driving a single orchestrator script that runs the steps in sequence:

  1. git pull sweep (current coilysiren-pull-all.sh)
  2. brew update once
  3. brew upgrade
  4. each component's setup step (coily, repo-recall, personal-dashboard) in order

One timer, no lock contention, no spacing bookkeeping. Steps run strictly in sequence so a slow step delays the rest instead of overlapping them. Per-step failures should be non-fatal to the sweep where that is already the behavior (pull-all skips dirty repos rather than aborting).

Out of scope

Changing what each step does. This is consolidation of the scheduling surface, not a behavior change.

Origin: surfaced while adding brew upgrade to coily-update.sh (#213).

_Originally filed by @coilysiren on 2026-05-21T02:22:19Z - [https://github.com/coilysiren/infrastructure/issues/214](https://github.com/coilysiren/infrastructure/issues/214)_ **Problem** kai-server runs four separate systemd timers for nightly host maintenance, hand-staggered 15 minutes apart so they do not collide on Homebrew's global update lock: - `coilysiren-pull-all.timer` - 02:45 - git pull sweep across `~/projects/coilysiren/*` - `coily-update.timer` - 03:00 - `brew update` + `brew upgrade` - `repo-recall-update.timer` - 03:15 - `personal-dashboard-update.timer` - 03:30 The manual staggering is design debt. The spacing is bookkeeping that exists only because the units would otherwise fight over the brew lock, and it silently breaks if any single step runs long enough to overrun into the next slot. **Proposal** Replace the four timers with one `host-maintenance.timer` driving a single orchestrator script that runs the steps in sequence: 1. git pull sweep (current `coilysiren-pull-all.sh`) 2. `brew update` once 3. `brew upgrade` 4. each component's setup step (coily, repo-recall, personal-dashboard) in order One timer, no lock contention, no spacing bookkeeping. Steps run strictly in sequence so a slow step delays the rest instead of overlapping them. Per-step failures should be non-fatal to the sweep where that is already the behavior (pull-all skips dirty repos rather than aborting). **Out of scope** Changing what each step does. This is consolidation of the scheduling surface, not a behavior change. Origin: surfaced while adding `brew upgrade` to `coily-update.sh` (#213).
Author
Owner

Backlog burndown 2026-06-17: closing low-priority (P3/P4) to bring the open count to a manageable level. Nothing lost — reopen if this resurfaces. Batch tag: burndown-2026-06.

Backlog burndown 2026-06-17: closing low-priority (P3/P4) to bring the open count to a manageable level. Nothing lost — reopen if this resurfaces. Batch tag: `burndown-2026-06`.
coilysiren 2026-06-17 08:22:54 +00:00
Sign in to join this conversation.
No description provided.