carlos / platform Public

woodstar runbook: D1 executed — six units captured verbatim, seed backed up, media sync proven

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell 4581c04705678033f1ec30783b3a69073f89a9cb parent 21d1b7d
1 file changed, +35 −8
  • docs/superpowers/plans/2026-08-16-woodstar-cutover-runbook.md +35 −8
diff --git a/docs/superpowers/plans/2026-08-16-woodstar-cutover-runbook.md b/docs/superpowers/plans/2026-08-16-woodstar-cutover-runbook.md
index 154d00a31..c4dc67498 100644
--- a/docs/superpowers/plans/2026-08-16-woodstar-cutover-runbook.md
+++ b/docs/superpowers/plans/2026-08-16-woodstar-cutover-runbook.md
@@ -102,10 +102,37 @@ aws --profile keymail ssm send-command --instance-ids i-092c0c1eea75723cb \
## D1 — Old-box pre-flight (SSH, read-only, any time)
-All over `ssh ec2-user@52.30.232.124`. Output feeds D2's unit files —
-record it in the session and in this file's margin notes.
+**EXECUTED 2026-08-17.** Results (the authoritative input to D2.4):
-- [ ] **D1.1 — units:** `systemctl cat woodstar-*.service` (expect
+- **Units (six + one timer; NO atbridge — #77 ruling premise
+ confirmed on the box). ExecStart verbatim, all `User=woodstar`,
+ `WorkingDirectory=/opt/woodstar/data`:**
+ - relay: `/opt/woodstar/bin/relay -addr 127.0.0.1:7071 -db /opt/woodstar/data/relay.db -name woodstar -media http://127.0.0.1:7072` + unit-level `Environment=WOODSTAR_APPLE_APP_ID=J5NDF5PCD8.app.woodstar.ios` (no -passkey-rp, no -imports — defaults)
+ - media: `/opt/woodstar/bin/media -addr 127.0.0.1:7072 -dir /opt/woodstar/data/media`
+ - indexer: `/opt/woodstar/bin/indexer -addr 127.0.0.1:7073 -db /opt/woodstar/data/indexer.db -relay http://127.0.0.1:7071`
+ - notify: `/opt/woodstar/bin/notify -addr 127.0.0.1:7074 -relay http://127.0.0.1:7071`
+ - unfurl: `/opt/woodstar/bin/unfurl -addr 127.0.0.1:7075 -db /opt/woodstar/data/unfurl.db`
+ - apbridge: `/opt/woodstar/bin/apbridge -addr 127.0.0.1:7076 -db /opt/woodstar/data/apbridge.db -seed /opt/woodstar/data/apbridge.seed -domain woodstar.app -relay http://127.0.0.1:7071 -media http://127.0.0.1:7072` (NO Bridgy-era flags on prod)
+ - `woodstar-media-backup.timer`: hourly root `aws s3 sync /opt/woodstar/data/media s3://woodstar-backups-271376211898/prod/media`
+- **Sizes:** data 250M total; RSS relay 31M, apbridge 16M, others
+ ≤7M (~63M total) — nano-scale verdict re-confirmed.
+- **Data dir:** relay/indexer/apbridge DBs (+wal/shm+litestream
+ dirs), apbridge.seed (64 B, 0600), unfurl.db, media/ (563 files),
+ imports/ (empty, relay default). Nothing unexpected.
+- **Litestream:** exactly relay/indexer/apbridge → `prod/{name}`,
+ retention 72h; WAL uploads fresh (apbridge same-morning).
+- **Caddy actuals:** live Caddyfile HAS the `/unfurl*` + `/img*`
+ legs, NO pds block (sha256 64da1c56…) — matches W0 fan-out parity.
+- **`apbridge.seed` had NO backup — FIXED 2026-08-17:** copied to
+ `s3://woodstar-backups-271376211898/prod/apbridge.seed` (verified
+ in-bucket, 64 B).
+- **Media backup:** in sync — 563 files local = 563 in bucket, timer
+ last ran 08:02Z same morning.
+
+Original checklist (for a re-run; all over
+`ssh -i ~/.ssh/woodstar-canary.pem ec2-user@52.30.232.124`):
+
+- [x] **D1.1 — units:** `systemctl cat woodstar-*.service` (expect
six). Capture EVERY ExecStart flag and Environment line verbatim —
especially apbridge's `-domain`/`-seed` + Bridgy-era flags and any
relay `-passkey-rp`/`-media`/`-imports` values. Six units are the
@@ -113,22 +140,22 @@ record it in the session and in this file's margin notes.
prod — if one appears, the ruling's premise is stale; stop and
re-probe). Any other seventh unit or unspec'd flag is a FINDING —
stop and record it before D2.4.
-- [ ] **D1.2 — sizes:** per-service RSS (`systemctl status`), total
+- [x] **D1.2 — sizes:** per-service RSS (`systemctl status`), total
`du -sh /opt/woodstar/data` — re-confirm the t4g.nano-scale verdict.
-- [ ] **D1.3 — data dir:** `ls -la /opt/woodstar/data` — expect
+- [x] **D1.3 — data dir:** `ls -la /opt/woodstar/data` — expect
relay.db, indexer.db, apbridge.db, apbridge.seed, unfurl.db, media/.
Anything else is a finding.
-- [ ] **D1.4 — Caddyfile actuals vs repo reference:** diff the box's
+- [x] **D1.4 — Caddyfile actuals vs repo reference:** diff the box's
live Caddyfile against `infra/prod-Caddyfile`; specifically whether
`/unfurl*` and `/img*` handles exist live (repo copy lacks both —
§0 said the repo copy is stale).
-- [ ] **D1.5 — litestream actuals:** `/etc/litestream.yml` — which DBs
+- [x] **D1.5 — litestream actuals:** `/etc/litestream.yml` — which DBs
replicate, to which prefixes; **does `apbridge.seed` have ANY backup
today?** If not: copy it to
`s3://woodstar-backups-271376211898/apbridge/apbridge.seed` NOW as
its own pre-flight fix (it is the federation identity), before
anything else proceeds.
-- [ ] **D1.6 — backup freshness:** newest object timestamps under the
+- [x] **D1.6 — backup freshness:** newest object timestamps under the
old bucket's prefixes; note the media backup mechanism (script/timer)
and cadence.