woodstar runbook: D1 executed — six units captured verbatim, seed backed up, media sync proven
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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. |