Files
archy/.planning/RESUME-2026-08-05-appgate-fixes.md
T
archipelagoandClaude Opus 5 ab69400956 docs: commit the app-gate design + 2026-08-05 resume notes
Both had been sitting untracked in the working tree since 2026-08-05 —
exactly the "finished work lost because it was never committed" failure
CLAUDE.md's #1 process rule exists to prevent.

APP-PORT-AUTH-GATE.md carries the gate's design rationale ("you cannot
gate a socket you do not own") and, in its open questions, the TLS/scheme
fork that still blocks the gated-app iframe login: if the dashboard is
HTTPS and app ports are HTTP, a Secure session cookie is never sent.

RESUME-2026-08-05-appgate-fixes.md carries the .122-.125 release trail,
the two self-inflicted .124 bugs and their guards, and the open indeedhub
crash-loop (indeedhub-minio absent on .38/.88).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 14:24:51 -04:00

5.7 KiB
Raw Blame History

Resume — 2026-08-05 (app gate, releases .122.125)

Paste the block at the bottom into a new session.

Where things stand

  • v1.7.124-alpha is SHIPPED (signed with the NEW root, published, verified).
  • Signed catalog is LIVE carrying two hotfixes made after .124: the repaired bitcoin start script and the fedimint 8175 removal. Last commit: 4ace62fa.
  • Release-root rotation is COMPLETE. .122 was the last release signed with the old key; .123/.124 and all catalogs use the new one. No override needed.

Two bugs I introduced in .124 (both fixed, both instructive)

  1. Bitcoin vanished from every node. I put a # comment INSIDE the manifest's folded YAML scalar (>-), where # is not a comment — it reaches the shell, and folding joins lines with spaces so it commented out the if ... then while the more-indented echo survived, leaving an orphan fi. Container exited instantly; app detection is container-based so the app disappeared. Guard added: scripts/check-manifest-shell.py runs sh -n over every embedded manifest script and rejects # in these scalars; wired into tests/release/run.sh.
  2. Fedimint crash-looped. I declared port 8175 on the fedimint app so the gate could name it — but 8175 is served by the separate archy-fedimint-ui companion. The orchestrator then tried to publish 8175 from fedimintd, collided, and start_container failed forever. Removed. Rule: never declare a port on an app whose container does not actually serve it.

Also: I published an UNSIGNED catalog at one point, which nodes correctly reject — they silently keep their old cached copy. Always verify 'signature' in catalog on the live URL after publishing.

OPEN TASKS

  1. indeedhub crash-loop — NOT mine, needs a real fix. indeedhub-minio is absent on .38 and .88, so nginx fails with host not found in upstream "minio" and both indeedhub and indeedhub-api exit(1). The stack member never gets created. Look at api/rpc/package/stacks.rs + dependencies.rs.
  2. Verify .38 refetched the signed catalog and bitcoin-knots starts. .88 already did (signed: True, script fixed).
  3. Deploy the .125 build to archi-dev-box for operator confirmation. Binary is built at core/target/release/archipelago with: app-login page using the sidebar A mark (favico-black-v2.svg) not the wordmark; page pinned to 100svh + position:fixed so mobile stays centred and the keyboard overlays instead of scrolling; install-version modal icon uses object-contain so non-square icons are not cropped. Operator has not seen these yet.
  4. Cut v1.7.125-alpha once confirmed. Sign with the NEW mnemonic.

Traps that cost time today

  • create-release.sh says "sign, then re-run" — re-running regenerates the manifest and DESTROYS the signature, and its clean-tree check blocks anyway. Do steps 7/8 by hand: git add version+changelog+manifest → commit chore: release vXgit tag -a vX → push main → push the tag explicitlygit ls-remote --tags to prove it → publish-release-assets.sh.
  • The release gate's cargo-test-weekly times out on the compile after any version bump. Pre-warm: CARGO_INCREMENTAL=0 cargo test --manifest-path core/Cargo.toml -p archipelago --no-run.
  • The frontend version check fails until the in-app What's New block for that version exists (neode-ui/src/views/settings/AccountInfoSection.vue) — that string is what it greps for.
  • generate-app-catalog.py writes APP_LAUNCH_PORTS one-per-line; rustfmt packs it, so run cargo fmt after any catalog sync or the gate fails.
  • Manifest changes reach nodes via the SIGNED CATALOG, not the binary. A manifest hotfix needs only a catalog re-sign — no release.

Fleet

SSH: sshpass -p 'ThisIsWeb54321!' ssh archipelago@<ip> (note the !; @ is older and still works on some). RPC/node password differs per node — the ! one failed RPC login on .38.

  • 100.69.68.39 archi-dev-box — dev target
  • 100.82.34.38 archipelago-1
  • 100.70.96.88 austin-sapien
  • 100.64.204.114 .228 shorty-s — in real use, treat carefully

Force a catalog refresh on a node: Settings → App Updates → Check for updates, or sudo rm -f /var/lib/archipelago/app-catalog.json && sudo systemctl restart archipelago.

All fleet nodes were repaired from Restart=on-failureRestart=always; a node with the old value stays DEAD after an in-process update (the updater exits cleanly and systemd reads that as success). bootstrap::ensure_restart_policy() now self-heals it.


PASTE THIS INTO THE NEW SESSION

Resume the archy work from 2026-08-05. Read .planning/RESUME-2026-08-05-appgate-fixes.md and the memory notes project_fleet_ota_restart_policy_incident and project_v1_7_121_shipped_appgate first.

v1.7.124-alpha is shipped and the signed catalog is live with two hotfixes (bitcoin start script, fedimint 8175). Four things are open, in order:

  1. Fix the indeedhub crash-loop: indeedhub-minio is absent on .38 and .88 so nginx fails on upstream "minio" and indeedhub + indeedhub-api exit(1). This one is pre-existing, not from the port work.
  2. Verify .38 refetched the signed catalog and bitcoin-knots starts (.88 already did).
  3. Deploy the built .125 binary + frontend to archi-dev-box (100.69.68.39) so I can confirm the app-login page (A mark, mobile centring, keyboard behaviour) and the install-modal icon.
  4. Then cut v1.7.125-alpha — I sign with the new mnemonic.

Do not re-run create-release.sh after signing; it destroys the signature — do the commit/tag/publish steps by hand as the resume doc describes.