integration: preserve deployed 1.8.0 OTA work

This commit is contained in:
archipelago
2026-06-30 05:08:17 -04:00
parent f4f45c1a09
commit df9d3a55be
39 changed files with 1066 additions and 203 deletions
+82
View File
@@ -304,6 +304,88 @@ phases 26 (`dual-ecash-design.md`).
## 8b. SESSION STATE + RESUME (updated 2026-06-26) — READ §8b "CURRENT STATE + RESUME" FIRST
### ▶ SESSION i (2026-06-30) — CURRENT HANDOFF / 1.8.0 OTA RESUME
**Branch/worktree:** currently on `bitcoin-version-bulletproof`, not `main`. Worktree is dirty.
Do **not** discard mesh changes: they include E2E/transport indicator plumbing and the Meshtastic
receive-path fixes below. Separate recovery note: `docs/SESSION-1.8.0-OTA-PROGRESS.md`.
**What was done this session:**
1.**Local Rust release gate fixed and green.** `cargo test -p archipelago --bin archipelago` is
green: **849/849** after fixing stale tests and the invalid `fedimint-clientd` manifest
(`cpu_limit` was `0.25`, invalid for the current schema; now integer). `cargo check -p archipelago`
also green after mesh edits.
2.**Catalog/release static gates green.** `python3 scripts/check-app-catalog-drift.py --release
--strict` is green. `scripts/check-release-manifest.sh` is green for the currently staged
`1.7.99-alpha` manifest/artifacts. `npm run build` and `npm run type-check` are green.
3. ✅ **Frontend unit gate fixed.** `npx vitest run --silent` now green: **81 files / 668 tests**. Fixes
were test-only: add `router.onError` to the login test router mock and update the `AppIconGrid`
mobile unresolved-new-tab expectation to match current app-launcher behavior.
4. ✅ **Workstream F harness gap closed.** `tests/lifecycle/bats/cascade-uninstall.bats` now asserts
uninstall progress truthfulness via backend `uninstall-stage`: stage must be parseable, monotonic,
below 100 before terminal absence, and present before the app disappears. Non-destructive skip-mode
parse check is green: `ARCHY_PASSWORD=dummy bats tests/lifecycle/bats/cascade-uninstall.bats` → 7 skip-ok.
5. ✅ **3ccc → .116 Meshtastic receive bug taken over and partially live-validated.** Context: `3ccc`
is the stock/non-Archy Meshtastic peer. The bug was LoRa text from `3ccc` not surfacing in
`.116` `mesh.messages`. Root causes/fixes:
- The prior attempted fix dropped any packet older than 10 minutes by `rx_time`; live `.116` logs
showed `FromRadio.packet` from `!433e3ccc` being dropped as stale (`rx_time` about an hour old).
The window is now **24h**, so recent radio FIFO/store-forward backlog surfaces instead of vanishing.
- Radios with unset clocks can report tiny nonzero epoch values; those are now treated as unknown,
not stale.
- Serial prevalidation was rejecting valid `FromRadio.queueStatus` frames (`field 11`, live bytes like
`5a04100e1810`) as corrupt payloads; field 11 and other modern non-message `FromRadio` variants
are now accepted/ignored instead of poisoning the stream.
- Focused Meshtastic tests green: **8/8**, including `packet_to_inbound_frame_accepts_recent_meshtastic_backlog`
and `packet_to_inbound_frame_accepts_stock_peer_with_unset_clock`.
- Deployed patched binary to **.116**: sha256
`028ec6ff9a60ca8970c081987457d78ed1c517cd81f7089f51b9a01745b5c3c4` at `/usr/local/bin/archipelago`.
Service active. Post-deploy checked window showed `FromRadio field=11` accepted and no new
`Dropping stale ... !433e3ccc` entries.
- There are stale other-agent `RXDIAG` shell watcher processes on `.116`; leave them unless they
actively interfere.
6. ✅ **Phase-3 Quadlet read-only check on .116 skip-clean.** Copied lifecycle tests to `.116` and ran
`bats bats/use-quadlet-backends-install.bats`: **6/6 skip-clean** because no backend `.container`
units exist. This confirms `use_quadlet_backends` is not active on `.116`; Phase-3 remains a rollout gate.
**Commands/results worth trusting:**
- `cargo test -p archipelago --bin archipelago` → 849/849 green.
- `npx vitest run --silent` from `neode-ui/` → 81 files / 668 tests green.
- `npm run build` from `neode-ui/` → green, bundle `index-CYaDgfX3.js`.
- `python3 scripts/check-app-catalog-drift.py --release --strict` → green.
- `scripts/check-release-manifest.sh` → green for **v1.7.99-alpha** staged artifacts.
- `tests/release/run.sh --manifest` was rerun after `cargo fmt`; it previously reached frontend tests,
which are now fixed. Re-run it from scratch as the next static gate.
**Remaining blockers / decisions before 1.8.0 OTA:**
1. **Release version metadata is not 1.8.0 yet.** `releases/manifest.json`, Cargo, and npm still say
`1.7.99-alpha`; `CHANGELOG.md` top says `v1.8.00-alpha` (note double zero). Do not silently publish
until the release version naming is decided (`1.8.0-alpha` vs `1.8.00-alpha` vs `1.8.0`).
2. **Workstream B signing is blocked on the offline release-root mnemonic.** `docs/workstream-b-signing-runbook.md`
says catalog distribution/embedded manifests are live, but authenticity requires the publisher to pin
`RELEASE_ROOT_PUBKEY_HEX` and sign `releases/app-catalog.json` with `RELEASE_MASTER_MNEMONIC`.
This cannot be automated by an agent without the offline mnemonic.
3. **Phase-3 `use_quadlet_backends` is implemented but default-off.** Completing this requires explicit
node/fleet flag rollout plus backend reinstall/migration verification. `.116` currently skip-clean only.
4. **Bitcoin multi-version coordinated rollout is still separately owned/blocked by its runbook.** See
`docs/bitcoin-version-bulletproof-rollout.md`; do not repoint `bitcoin-knots:latest` before fixed binary
is fleet-wide.
5. **True RF validation of 3ccc requires either a live 3ccc send or waiting for another FIFO/backlog packet.**
Parser/unit coverage and `.116` logs strongly validate the drop-path fix, but no human was available to
send a fresh 3ccc message during this session.
**Immediate next steps for the next agent:**
1. Run `tests/release/run.sh --manifest` from repo root again; frontend unit failures are fixed, so expect
it to pass or continue from the next failing stage.
2. If `.116` is still the canary, monitor logs after any 3ccc activity:
`journalctl -u archipelago --since "<time>" | grep -Ei "!433e3ccc|3ccc|Dropping stale|Meshtastic received text|FromRadio field field=2"`.
3. Decide/reconcile version naming for the actual 1.8.0 OTA, then use the release scripts intentionally
(do not run `create-release.sh` casually: it commits/tags and requires `main` + clean tree).
4. If pursuing Workstream B completion, get the offline release mnemonic from the publisher and follow
`docs/workstream-b-signing-runbook.md` exactly.
5. If pursuing Phase-3 Quadlet, enable `ARCHY_USE_QUADLET_BACKENDS=1` only on a canary first and run the
Quadlet/lifecycle gates before considering fleet rollout.
### ▶ SESSION h (2026-06-26) — LATEST, RESUME FROM HERE
**Canonical resume detail: memory `project_session_resume_2026_06_23b` (▶️ top of MEMORY.md).**