Scrubs the fleet SSH/UI password from every tracked file (22 occurrences) and removes inline credentials from the code paths that used them. Docs and trackers keep the surrounding context — these are published under docs/history/ per the open-source plan — with the literals replaced by <FLEET_PW> / <FLEET_PW_ALT> so the "two variants exist" detail survives without the values. Three of the eight files were in .planning/ and were NOT in the plan's enumerated list; the reworked audit-secrets.sh found them. Code changes: - neode-ui/test-openwrt.mjs: node URL and password come from ARCHY_NODE_URL / ARCHY_NODE_PW; the SSH target derives from the URL instead of a hardcoded tailnet IP; exits 2 when unset. - scripts/run-post-install-tests.sh: drops the built-in "testpass123!" default and adds --password-stdin; refuses to run unauthenticated instead of silently trying a known password. --phase1-only still needs no password. - .gitea/workflows/post-install-tests.yml: sshpass with an inline literal replaced by key auth (NODE_SSH_KEY secret); password comes from the NODE_UI_PASSWORD secret and is piped over stdin rather than argv, so it stays out of the node's process list and the job log. Default target IP removed. scripts/audit-secrets.sh now reports 5/5 pass, 0 fail. Note: rotation of the exposed credentials is deliberately deferred to the pre-publish gate and is NOT done by this commit — these values are still live. See Phase 0. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
5.7 KiB
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)
- 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 theif ... thenwhile the more-indentedechosurvived, leaving an orphanfi. Container exited instantly; app detection is container-based so the app disappeared. Guard added:scripts/check-manifest-shell.pyrunssh -nover every embedded manifest script and rejects#in these scalars; wired intotests/release/run.sh. - Fedimint crash-looped. I declared port 8175 on the
fedimintapp so the gate could name it — but 8175 is served by the separatearchy-fedimint-uicompanion. The orchestrator then tried to publish 8175 from fedimintd, collided, andstart_containerfailed 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
- indeedhub crash-loop — NOT mine, needs a real fix.
indeedhub-miniois absent on.38and.88, so nginx fails withhost not found in upstream "minio"and bothindeedhubandindeedhub-apiexit(1). The stack member never gets created. Look atapi/rpc/package/stacks.rs+dependencies.rs. - Verify
.38refetched the signed catalog and bitcoin-knots starts..88already did (signed: True, script fixed). - Deploy the .125 build to archi-dev-box for operator confirmation.
Binary is built at
core/target/release/archipelagowith: app-login page using the sidebar A mark (favico-black-v2.svg) not the wordmark; page pinned to100svh+position:fixedso mobile stays centred and the keyboard overlays instead of scrolling; install-version modal icon usesobject-containso non-square icons are not cropped. Operator has not seen these yet. - Cut v1.7.125-alpha once confirmed. Sign with the NEW mnemonic.
Traps that cost time today
create-release.shsays "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 addversion+changelog+manifest → commitchore: release vX→git tag -a vX→ push main → push the tag explicitly →git ls-remote --tagsto prove it →publish-release-assets.sh.- The release gate's
cargo-test-weeklytimes 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.pywritesAPP_LAUNCH_PORTSone-per-line; rustfmt packs it, so runcargo fmtafter 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 '<FLEET_PW_ALT>' 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.39archi-dev-box — dev target100.82.34.38archipelago-1100.70.96.88austin-sapien100.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-failure →
Restart=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:
- Fix the indeedhub crash-loop:
indeedhub-miniois 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. - Verify .38 refetched the signed catalog and bitcoin-knots starts (.88 already did).
- 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.
- 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.