docs: sync What's New modal for v1.7.119-alpha; drop markdown emphasis from CHANGELOG

scripts/sync-whats-new.py --check (part of the release gate) requires
every CHANGELOG version to have a matching block in the Settings
"What's New" modal. Also strips CHANGELOG markdown bold/italic markup
from the v1.7.119-alpha bullets first — the modal renderer only
strips backticks, not **/* emphasis, so it would have leaked literal
asterisks into the user-facing modal text.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
archipelago 2026-07-31 12:17:29 -04:00
parent 37d293be59
commit af1af8266c
2 changed files with 18 additions and 4 deletions

View File

@ -2,17 +2,17 @@
## v1.7.119-alpha (2026-07-31)
- **Wallet payments now work on nodes whose channels are private/unannounced.** Every invoice-creation call site — the wallet's own Receive flow, and the seller-side paid-content/peer-files flow — only ever sent LND the amount and memo, so LND defaulted `private` to false and returned invoices with no route hints. Any node whose only usable channel is private or unannounced (the common shape for a channel someone opened *to* you) was silently unpayable through the wallet, and unpayable through paid file/content sales too. Both call sites now set LND's `private` flag correctly; this was broken in the field and is the main reason for this release.
- **Tor and the mesh's Tor fallback are reliable again.** The node's background "doctor" health-checker was fighting Tor over the permission bits on its own hidden-service directory: it compared the directory's mode against the literal string `"700"`, but Tor's own setgid hidden-service mode is `2700` — a value the doctor's check never recognized as correct. Every ~5 minutes it "corrected" the mode back to 700 and restarted Tor to apply it, and Tor immediately reasserted 2700 — a permanent restart loop that meant Tor could never hold onto its consensus/HSDir cache long enough to be useful, breaking the mesh's Tor fallback path entirely. The check now compares only the owner/group/other bits that actually matter (both 700 and 2700 pass; genuinely wrong modes like 750 or 2755 are still corrected and restart Tor), plus a 30-minute restart backoff so no future condition can reproduce the storm.
- Wallet payments now work on nodes whose channels are private/unannounced. Every invoice-creation call site — the wallet's own Receive flow, and the seller-side paid-content/peer-files flow — only ever sent LND the amount and memo, so LND defaulted private to false and returned invoices with no route hints. Any node whose only usable channel is private or unannounced (the common shape for a channel someone opened to you) was silently unpayable through the wallet, and unpayable through paid file/content sales too. Both call sites now set LND's private flag correctly; this was broken in the field and is the main reason for this release.
- Tor and the mesh's Tor fallback are reliable again. The node's background "doctor" health-checker was fighting Tor over the permission bits on its own hidden-service directory: it compared the directory's mode against the literal string "700", but Tor's own setgid hidden-service mode is 2700 — a value the doctor's check never recognized as correct. Every ~5 minutes it "corrected" the mode back to 700 and restarted Tor to apply it, and Tor immediately reasserted 2700 — a permanent restart loop that meant Tor could never hold onto its consensus/HSDir cache long enough to be useful, breaking the mesh's Tor fallback path entirely. The check now compares only the owner/group/other bits that actually matter (both 700 and 2700 pass; genuinely wrong modes like 750 or 2755 are still corrected and restart Tor), plus a 30-minute restart backoff so no future condition can reproduce the storm.
- Wallet balances and your node's own FIPS identity key (npub) are no longer written to the browser's sessionStorage — caught by an audit of the page-caching work below. Every cache call site in the app now makes an explicit, reviewed decision about whether its data is allowed to persist across a reload, and a one-time migration purges any legacy, unaudited snapshot left behind by an older build.
- Server, Home, Mesh, Chat/AI chat, and the secondary screens (app details, marketplace, cloud, federation, monitoring, router/OpenWrt) now load instantly from cache when you revisit them and refresh quietly in the background, instead of blanking and re-fetching everything on every tab switch — this closes out the page-performance work started back in v1.7.116/117.
- App updates (including this one) now apply automatically in the background instead of waiting on a tap-to-update prompt, matching how kiosk/TV installs already behaved — the reload still waits for any in-progress splash/dashboard animation to finish first, so it won't land mid-motion. This was a direct, explicit decision made with the mid-payment-reload risk spelled out in advance; reverting to a confirmation prompt for beta is a one-line change if wanted later.
### Known gap — production lifecycle gate not run for this release
`tests/lifecycle/run-gate.sh` — the 5x install/UI/stop/start/restart/reinstall/reboot-survive/archipelago-restart-survive/uninstall gate that CLAUDE.md defines as this project's condition for a release tag — was **NOT run** for v1.7.119-alpha. Its target node (.228) was unreachable at release time, and running it here would have required rebooting the build machine, killing live dev servers and another active work session on the same box. This was a deliberate call to ship the two field-breaking fixes above rather than block on an unreachable node. **Run the full 5x lifecycle gate on .228 as soon as it's reachable again, and treat this release as pending that verification until it's done.**
tests/lifecycle/run-gate.sh — the 5x install/UI/stop/start/restart/reinstall/reboot-survive/archipelago-restart-survive/uninstall gate that CLAUDE.md defines as this project's condition for a release tag — was NOT run for v1.7.119-alpha. Its target node (.228) was unreachable at release time, and running it here would have required rebooting the build machine, killing live dev servers and another active work session on the same box. This was a deliberate call to ship the two field-breaking fixes above rather than block on an unreachable node. Run the full 5x lifecycle gate on .228 as soon as it's reachable again, and treat this release as pending that verification until it's done.
(This release's own automated gates — `tests/release/run.sh`, strict catalog-drift check, the full `cargo test` suite, a mount-level ISO smoke test, and a headless QEMU boot test — all still ran and are not what's being skipped here.)
(This release's own automated gates — tests/release/run.sh, strict catalog-drift check, the full cargo test suite, a mount-level ISO smoke test, and a headless QEMU boot test — all still ran and are not what's being skipped here.)
## v1.7.118-alpha (2026-07-29)

View File

@ -362,6 +362,20 @@ init()
</button>
</div>
<div class="overflow-y-auto flex-1 min-h-0 space-y-6 pr-1">
<!-- v1.7.119-alpha -->
<div>
<div class="flex items-center gap-2 mb-3">
<span class="text-xs font-mono px-2 py-0.5 rounded bg-orange-500/20 text-orange-300">v1.7.119-alpha</span>
<span class="text-xs text-white/40">July 31, 2026</span>
</div>
<div class="space-y-3 text-sm text-white/80 pl-3 border-l border-white/10">
<p>Wallet payments now work on nodes whose channels are private/unannounced. Every invoice-creation call site the wallet's own Receive flow, and the seller-side paid-content/peer-files flow — only ever sent LND the amount and memo, so LND defaulted private to false and returned invoices with no route hints. Any node whose only usable channel is private or unannounced (the common shape for a channel someone opened to you) was silently unpayable through the wallet, and unpayable through paid file/content sales too. Both call sites now set LND's private flag correctly; this was broken in the field and is the main reason for this release.</p>
<p>Tor and the mesh's Tor fallback are reliable again. The node's background "doctor" health-checker was fighting Tor over the permission bits on its own hidden-service directory: it compared the directory's mode against the literal string "700", but Tor's own setgid hidden-service mode is 2700 a value the doctor's check never recognized as correct. Every ~5 minutes it "corrected" the mode back to 700 and restarted Tor to apply it, and Tor immediately reasserted 2700 — a permanent restart loop that meant Tor could never hold onto its consensus/HSDir cache long enough to be useful, breaking the mesh's Tor fallback path entirely. The check now compares only the owner/group/other bits that actually matter (both 700 and 2700 pass; genuinely wrong modes like 750 or 2755 are still corrected and restart Tor), plus a 30-minute restart backoff so no future condition can reproduce the storm.</p>
<p>Wallet balances and your node's own FIPS identity key (npub) are no longer written to the browser's sessionStorage caught by an audit of the page-caching work below. Every cache call site in the app now makes an explicit, reviewed decision about whether its data is allowed to persist across a reload, and a one-time migration purges any legacy, unaudited snapshot left behind by an older build.</p>
<p>Server, Home, Mesh, Chat/AI chat, and the secondary screens (app details, marketplace, cloud, federation, monitoring, router/OpenWrt) now load instantly from cache when you revisit them and refresh quietly in the background, instead of blanking and re-fetching everything on every tab switch this closes out the page-performance work started back in v1.7.116/117.</p>
<p>App updates (including this one) now apply automatically in the background instead of waiting on a tap-to-update prompt, matching how kiosk/TV installs already behaved the reload still waits for any in-progress splash/dashboard animation to finish first, so it won't land mid-motion. This was a direct, explicit decision made with the mid-payment-reload risk spelled out in advance; reverting to a confirmation prompt for beta is a one-line change if wanted later.</p>
</div>
</div>
<!-- v1.7.118-alpha -->
<div>
<div class="flex items-center gap-2 mb-3">