---
name: ci-selfhost-migration
description: "CI self-host migration is DONE — runners live on kitsubito + HFENDULEAM (gravity retired 2026-06-07); twohost cross-runner jobs exist, gated by [twohost] commit tag"
metadata:
  node_type: memory
  type: project
  originSessionId: 9a071e30-231c-4cfb-b16d-b994a0d1d2b7
---

CI self-host migration **completed** (verified 2026-06-05): `.github/workflows/ci.yml`
test matrix runs on `[self-hosted, Linux, kitsubito]` + `[self-hosted, Windows,
hfenduleam]` (timeout-minutes 25, concurrency group). `twohost-a`/`twohost-b`
cross-runner jobs exist, gated on `[twohost]` in the commit message (tailscale peer
IPs, `SPT_TWO_HOST_*` env, 900s rendezvous wait). Whole two-host ladder proven green
2026-06-04 (run 26958175812). Repo must stay private while runners are attached.

**2026-06-07 — gravity-linux retired as runner**, replaced by kitsubito
(`reavus@kitsubito`, key-auth ssh from this box, tailscale `100.98.197.12`, Ubuntu
22.04.5 / glibc 2.35 / rustc 1.96, 16-core — Linux test leg ~4 min). Runner is a
systemd service (`~/actions-runner`, svc.sh, `~/.cargo/bin` on runner PATH).
Gravity deregistered from repo AND its on-box service stopped + uninstalled
(2026-06-07); only its `~/actions-runner` dir may remain. Gravity itself stays live
as the spt daemon deploy box ([[gravity-deploy-procedure]]).
First migration commit green: run 27085653904 @ 2776f8a. hfenduleam runner converted
same day from console `run.cmd` (which hung/offline occasionally) to a real Windows
service (`actions.runner.SaberMage-spt-core.hfenduleam`, logon account `.\decid`,
Automatic start) — verified green @ 644123b. Runner pickup is long-poll push (~1-5s);
no gh CLI lever to force assignment — if a job sits queued, check runner online
status, not the queue.

**Why:** earlier version of this memory said "plan in CI-SELFHOST-PLAN.md, execute
after D4b green" — that work landed without the memory being updated; do not re-plan
or re-surface it as pending.

**How to apply:** to run the two-host rig ladder in CI, put `[twohost]` in the commit
message. M5-D7c's residue is only adding the M5 ladder rungs (with D9a) — not runner
provisioning.
