From a50b6df21bb459d6fd7709572fb7ae2d2d6a1787 Mon Sep 17 00:00:00 2001 From: archipelago Date: Mon, 15 Jun 2026 16:52:30 -0400 Subject: [PATCH] fix(nginx): rewrite fedimint UI asset paths so CSS applies (B13, fresh-ISO) Fedimint UI HTML/CSS reference absolute /assets/* paths; under /app/fedimint/ those hit the main SPA, not the fedimint container, so the UI renders unstyled. Add the proven sub_filter asset-rewrite pattern (as indeedhub/ botfights use) to the /app/fedimint/ block in the nginx template + https snippet (also rewrites url(...) for the CSS background image). Bootstrap self-heal for already-deployed nodes is the documented resume point. Co-Authored-By: Claude Opus 4.8 (1M context) --- image-recipe/configs/nginx-archipelago.conf | 9 +++++- .../archipelago-https-app-proxies.conf | 9 +++++- tests/production-quality/TRACKER.md | 30 +++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/image-recipe/configs/nginx-archipelago.conf b/image-recipe/configs/nginx-archipelago.conf index 3f862ea6..013bfc4e 100644 --- a/image-recipe/configs/nginx-archipelago.conf +++ b/image-recipe/configs/nginx-archipelago.conf @@ -652,7 +652,14 @@ server { proxy_read_timeout 300s; proxy_send_timeout 300s; proxy_set_header Accept-Encoding ""; - sub_filter_once on; + sub_filter_types text/css application/javascript application/json; + sub_filter_once off; + sub_filter 'href="/' 'href="/app/fedimint/'; + sub_filter 'src="/' 'src="/app/fedimint/'; + sub_filter "href='/" "href='/app/fedimint/"; + sub_filter "src='/" "src='/app/fedimint/"; + sub_filter 'url("/' 'url("/app/fedimint/'; + sub_filter "url('/" "url('/app/fedimint/"; sub_filter '' ''; } location /app/fedimint-gateway/ { diff --git a/image-recipe/configs/snippets/archipelago-https-app-proxies.conf b/image-recipe/configs/snippets/archipelago-https-app-proxies.conf index 639f389a..7ded1871 100644 --- a/image-recipe/configs/snippets/archipelago-https-app-proxies.conf +++ b/image-recipe/configs/snippets/archipelago-https-app-proxies.conf @@ -174,7 +174,14 @@ location /app/fedimint/ { proxy_read_timeout 300s; proxy_send_timeout 300s; proxy_set_header Accept-Encoding ""; - sub_filter_once on; + sub_filter_types text/css application/javascript application/json; + sub_filter_once off; + sub_filter 'href="/' 'href="/app/fedimint/'; + sub_filter 'src="/' 'src="/app/fedimint/'; + sub_filter "href='/" "href='/app/fedimint/"; + sub_filter "src='/" "src='/app/fedimint/"; + sub_filter 'url("/' 'url("/app/fedimint/'; + sub_filter "url('/" "url('/app/fedimint/"; sub_filter '' ''; } location /app/fedimint-gateway/ { diff --git a/tests/production-quality/TRACKER.md b/tests/production-quality/TRACKER.md index c4d80243..d274aed8 100644 --- a/tests/production-quality/TRACKER.md +++ b/tests/production-quality/TRACKER.md @@ -1,3 +1,33 @@ +# ▶▶ SESSION SAVE / RESUME (2026-06-15) + +**State:** v1.7.96-alpha SHIPPED. v1.7.97-alpha NOT cut yet — 10 fixes committed on **vps2 main** (`git remote: gitea-vps2`), nothing on the fleet yet. Validate on .116/.198 + UI-confirm BEFORE cutting .97. + +**Resume command (run elsewhere):** +``` +cd ~/Projects/archy && git fetch gitea-vps2 && git checkout main && git reset --hard gitea-vps2/main && cat tests/production-quality/TRACKER.md +``` +Then continue from "IN PROGRESS" below. + +**Committed & ready for .97 (vps2 main):** B5 (LND CORS, verified .116/.198/.103), B1, B2, B4, B14, B21, B3 (incl. /api/peer-content nginx via bootstrap), B15, B7. B6 pruned-gate already live. + +**IN PROGRESS — B13 Fedimint CSS:** nginx template + https snippet committed (fixes FRESH ISOs). REMAINING (resume here): add the bootstrap self-heal for already-deployed nodes, then BUILD (cargo build --release -p archipelago — ALWAYS check EXIT 0 before commit), sideload to .198, verify `curl http://192.168.1.198/app/fedimint/` styled + an asset returns CSS not HTML. Exact code to add in core/archipelago/src/bootstrap.rs: + +```rust +// after NGINX_PEER_CONTENT_BLOCK const: +const NGINX_FEDIMINT_OLD: &str = " sub_filter_once on;\n sub_filter '' '';\n }\n location /app/fedimint-gateway/ {"; +const NGINX_FEDIMINT_NEW: &str = " sub_filter_types text/css application/javascript application/json;\n sub_filter_once off;\n sub_filter 'href=\"/' 'href=\"/app/fedimint/';\n sub_filter 'src=\"/' 'src=\"/app/fedimint/';\n sub_filter \"href='/\" \"href='/app/fedimint/\";\n sub_filter \"src='/\" \"src='/app/fedimint/\";\n sub_filter 'url(\"/' 'url(\"/app/fedimint/';\n sub_filter \"url('/\" \"url('/app/fedimint/\";\n sub_filter '' '';\n }\n location /app/fedimint-gateway/ {"; +// in patch_nginx_conf(): add to guard + body: +// let needs_fedimint_css = content.contains("location /app/fedimint/") && !content.contains("'href=\"/' 'href=\"/app/fedimint/'"); +// (add `&& !needs_fedimint_css` to the early-return guard) +// if needs_fedimint_css { patched = patched.replace(NGINX_FEDIMINT_OLD, NGINX_FEDIMINT_NEW); } +``` + +**Then, in priority order:** B12 (mempool host detect — stacks.rs:1278), B16 (bitcoin status retain — UI-test), B6 no-node-present half, B14b (FIPS reachability depth), B22/B23 (peer download + group chat — need live repro), B9/B10/B11/B17/B18/B19, B8 (low), B20 (mesh-headers feature). + +**Ship .97 when ready:** ./scripts/create-release.sh 1.7.97-alpha (curate CHANGELOG ≥3 layman bullets first + run scripts/sync-whats-new.py; SKIP_RELEASE_TESTS=1 only for the 2 known-flaky vitest timing tests) → scripts/publish-release-assets.sh 1.7.97-alpha gitea-vps2 → git push gitea-vps2 main + tag. (gitea-local push fails: token rejected — non-blocking.) + +--- + # Production-Quality Bug Tracker Living tracker for the post-v1.7.96 "no new features until production quality" push.