OverviewFilesCommitsIssuesDocsReleasesPeers

P2P-Hiverelay commits / d24ea03

ops(fleet): add `hold` channel and the rc.5 release runbook
`hold` (pinned at v0.24.3) lets an individual box sit out a channel promotion without inventing a bespoke channel per release. Adding the key is inert until a box points at it. Needed because "roll everything except sydney and dallas" is not something the two-channel model can express: sydney is CHANNEL=stable and would follow a stable bump. dallas turns out to need nothing — it has no /etc/hiverelay-updater.conf at all, so it never auto-updates. The runbook records the two things that block shipping and are not mine to do: this branch is 124 commits ahead of main (which is where every box reads channels.json from), and no signing key is configured, so the annotated signed tag the updater fails closed on cannot be created here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
d24ea031f86545e009f019909aa5d72207a883ad
by bigdestiny2 <33146784+bigdestiny2@users.noreply.github.com> · 2026-07-28T00:20:53.000Z

Changed files (2) +157 -1

docs/RELEASE-RUNBOOK-0.25.0-rc.5.md +154 -0
……@@ -0,0 +1,154 @@
1# Release runbook — v0.25.0-rc.5 (canary, Track A)
2
3**Prepared:** 2026-07-28 · **Branch:** `feat/service-http-wiring` · **Status:** ready for maintainer signing
4
5Everything up to the signed tag is done. The remaining steps need your signing key
6and a push, so they are yours.
7
8---
9
10## 0. What is already prepared
11
12| Item | State |
13|------|-------|
14| Code fixes + restored features | committed (`2fa58c1`) |
15| Doc corrections (pilot hostnames, Ship 9 state) | committed (`aae40ff`) |
16| Version bump to `0.25.0-rc.5` + CHANGELOG | committed (`59d2362`) |
17| Fleet watchdog / admin operator / stability writeup | committed (`40ea4bf`) |
18| `hold` channel added to `channels.json` | committed, pinned at `v0.24.3` |
19| `canary` promotion in `channels.json` | **NOT applied** — do it after the tag exists |
20
21Unit suite at time of prep: **3510 tests, 3 known failures** (serve-only recovery
22mode; two startup-rollback cases blocked on the Corestore-7 storage-sweep
23question). Previously the suite aborted at test 727 on a hard `TypeError`.
24
25---
26
27## 1. Blockers you must clear
28
29### 1a. The branch is not on `main`
30
31Every box resolves its target from
32`https://raw.githubusercontent.com/bigdestiny2/P2P-Hiverelay/main/fleet/channels.json`.
33Nothing ships until this branch lands on `main`.
34
35```bash
36git rev-list --count origin/main..HEAD
37```
38
39At prep time this was **124 commits**. Open a PR from `feat/service-http-wiring`
40rather than fast-forwarding — `rc.3` was previously cut from `main` by mistake
41without the feature tree, and that is exactly the failure this gap invites.
42
43### 1b. No signing key is configured
44
45The updater refuses any tag that is not an annotated tag signed by a key in
46`/etc/hiverelay/allowed-signers`. It fails closed: a box that cannot verify the
47tag stays on its current version. This repo currently has no signing config:
48
49```bash
50git config --get user.signingkey # empty
51git config --get gpg.format # empty
52git config --get tag.gpgsign # empty
53```
54
55Configure it, then tag. **An unsigned tag is refused by every box.**
56
57---
58
59## 2. Cut the release
60
61```bash
62git tag -s v0.25.0-rc.5 -m "v0.25.0-rc.5 — restore orphaned lifecycle/gateway features"
63```
64
65Verify before pushing — this is the exact check each box performs:
66
67```bash
68git tag -v v0.25.0-rc.5
69```
70
71Then:
72
73```bash
74git push origin v0.25.0-rc.5
75```
76
77---
78
79## 3. Hold sydney and dallas OFF this rollout
80
81**dallas needs nothing.** It has no `/etc/hiverelay-updater.conf` and no updater
82installed, so it is excluded by construction and will not move.
83
84**sydney is `CHANNEL=stable`.** Today that is harmless — this release only bumps
85`canary`, and sydney is not a canary box. It becomes load-bearing the moment you
86promote `stable`. Pin it now so that promotion cannot sweep it in:
87
88```bash
89ssh -i ~/.ssh/cloudzy_hiverelay root@104.194.135.205 'printf "CHANNEL=hold\n" > /etc/hiverelay-updater.conf && cat /etc/hiverelay-updater.conf'
90```
91
92Confirm the box resolves the held target rather than a moving one:
93
94```bash
95ssh -i ~/.ssh/cloudzy_hiverelay root@104.194.135.205 'hiverelay-updater --dry-run'
96```
97
98Both hosts run the Track B blind public-test stack on `:443`. Track A never
99touches `:443`, the blind compose, or the blind roots — only the fleet relay on
100`:9100` — but keeping them off the rollout entirely is the safer reading of the
101`LIVE_PUBLIC_TEST_ONLY` lease.
102
103---
104
105## 4. Promote the canary channel
106
107Only after the signed tag is pushed:
108
109```bash
110# fleet/channels.json — canary only; stable stays on v0.24.3
111# "canary": "v0.25.0-rc.4" -> "canary": "v0.25.0-rc.5"
112git commit -am 'chore(fleet): promote canary to v0.25.0-rc.5' && git push
113```
114
115Canary boxes are **utah** and **utah-0.5gb** (and bern, currently down). They
116self-update within ~15 minutes on a jittered timer, health-gate, and roll back
117automatically if `/health` does not report `running:true` at the target version
118within 120s.
119
120Verify convergence against the release tag SHA — not just the package version:
121
122```bash
123npm run fleet:check-rollout -- --target v0.25.0-rc.5 --channel canary
124```
125
126⚠️ **utah-0.5gb has 0.5 GB RAM.** Per `docs/FLEET-STABILITY-2026-07-27.md` it runs
127a trimmed plugin set (`outboxlog`, `notify`, `vrf`) and was ABRT-looping under the
128full suite. Watch it specifically after the tick.
129
130---
131
132## 5. Fleet state at prep time
133
13412/13 up. bern is a provider-side outage (SSH + ping dead), not a process fault.
135
136| Box | Channel | Version | Note |
137|-----|---------|---------|------|
138| utah | canary | 0.25.0-rc.4 | canary target; live onion advertised |
139| utah-0.5gb | canary | 0.24.3 | 0.5 GB — trimmed plugins, watch closely |
140| utah-8gb | stable | 0.25.0-rc.4 | manually placed after CS7 remigrate |
141| utah-us, utah-2gb-a, miami, sing-1, sing-2, amsterdam, dubai | stable | 0.24.3 | |
142| **sydney** | stable | 0.24.3 | Track B host — pin to `hold` (§3) |
143| **dallas** | *(no updater)* | 0.24.3 | Track B host — excluded by construction |
144| bern | canary | — | provider outage; needs console/power |
145
146---
147
148## 6. Do NOT promote `stable` from this runbook
149
150`npm run release:check-blockers` reports the full public-release evidence chain as
151open: image manifest, digest-pinned image smoke, Umbrel package smoke, official
152Umbrel PR, Umbrel runtime review, StartOS registry, and fleet rollout evidence.
153Those gate the *public full release*, not a canary tick. Close them before
154`stable` moves off `v0.24.3`.
fleet/channels.json +3 -1
……@@ -1,5 +1,7 @@
11{
22 "_doc": "Declarative release channels for the raw systemd fleet. Each box runs hiverelay-updater on a timer; it reads its channel here and checks out the matching tag (health-gated, auto-rollback). Promote a release by editing the target tag and committing — canary boxes pick it up first, stable boxes when you bump stable. Holding a box = point its channel at the version it already runs.",
3 "_hold_doc": "`hold` exists so an individual box can be excluded from a channel promotion without inventing a bespoke channel per release. Point a box at it with `CHANNEL=hold` in /etc/hiverelay-updater.conf. Currently used to keep the Track B blind public-test hosts off Track A rollouts.",
34 "stable": "v0.24.3",
4 "canary": "v0.25.0-rc.4"
5 "canary": "v0.25.0-rc.4",
6 "hold": "v0.24.3"
57}