Linear: ENG-470 (project Spindle). It closes out ENG-460.
Summary #
Pneumo's CI now runs on our own spindle, spindle.demi.dev: a mill on Railway plus a nixery executor on the owner's home server. Tangled's hosted spindle had denied every run since its 4 GiB repo quota arrived (ENG-460). The workflow files don't change.
-
docs/adr/0005-ci-on-our-own-spindle.mdrecords the context, the decision and the consequences:- 4 seats in parallel;
- a 15-minute run-time timeout, which retires the queue-inclusive 5-minute budget;
- the home server as a dependency;
- about $5/month;
- the hosted CI history dropped at the switch.
-
docs/agents/tangled.mdgets a new "Our spindle (since 2026-11-01)" section:- the architecture, and where the runbook lives;
- limits and scheduling;
- the cancel path (spindle XRPC);
- what to do when the executor is offline;
- the first runs' durations and memory.
The old hosted-spindle measurements are kept under "Hosted spindle (history, until 2026-11-01)". The CI coverage table notes that its durations are hosted and its local-only choices still stand.
-
docs/SPEC.md§16.4: the CI line now names our spindle and links ADR 0005.
Verify #
$ mise run check:infra → exit 0 (workflow files valid)
Evidence on our spindle (2026-11-01) #
- Pull 35, pipeline
3mzbe5b6nod22: 4/4. ts 3m25s · infra 3m12s · android 2m57s · e2e 6m34s. - Pull 34, retry
3mzbexpv5zb22: 4/4. Its first run hit the ENG-497 test-timeout flake under parallel load. - Peak memory per container (cgroup
memory.peak): 2.6 to 3.6 GiB, and two at the 6 GiB cap. The kernel recorded 0 OOM kills.
🤖 Generated with Claude Code