Commit Graph
100 Commits
Author SHA1 Message Date
DorianandClaude Opus 4.6 69cb30cb45 fix: source nvm in CI workflow for npm/npx availability
Build Archipelago ISO (dev) / build-iso (push) Failing after 1s
act_runner runs non-interactive shells where nvm isn't loaded.
Cargo steps already source .cargo/env but frontend steps were missing
the equivalent nvm.sh sourcing, causing "npm: command not found".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 00:36:03 +01:00
DorianandClaude Opus 4.6 111e59d503 feat: add production build mode to dev-start.sh (option 10)
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Linux-only option that mirrors ISO install exactly: builds backend
(release), frontend (with typecheck), syncs all configs, and restarts
all system services (Tor, WireGuard, NostrVPN, nginx, backend).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-10 00:08:42 +01:00
DorianandClaude Opus 4.6 4f3aee2a87 chore: re-trigger CI ISO build
Build Archipelago ISO (dev) / build-iso (push) Failing after 6m30s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 23:39:49 +01:00
DorianandClaude Opus 4.6 f2cacfb13d chore: trigger CI ISO rebuild with rootfs fixes
Build Archipelago ISO (dev) / build-iso (push) Failing after 6m43s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 23:25:55 +01:00
DorianandClaude Opus 4.6 e1e986dadd fix: add e2fsprogs and cryptsetup-initramfs to rootfs
Build Archipelago ISO (dev) / build-iso (push) Successful in 14m51s
ISO boot failed in emergency mode because:
- fsck.ext4 binary missing (no e2fsprogs in rootfs)
- LUKS data volume never opened (no cryptsetup-initramfs in initramfs)

Both packages were in the installer debootstrap but not the target rootfs
Dockerfile. The initramfs regeneration at install time now includes LUKS
support since cryptsetup-initramfs is present.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 21:07:34 +01:00
DorianandClaude Opus 4.6 a0a7aadcb3 chore: Debian 12 → 13 (Trixie) migration, service hardening
Build Archipelago ISO (dev) / build-iso (push) Successful in 12m25s
- Update all references from Debian 12 (Bookworm) to Debian 13 (Trixie)
- Enable SystemCallArchitectures, RestrictAddressFamilies, RestrictRealtime
  in archipelago.service (safe on systemd 256+ which respects NoNewPrivileges=no)
- Update GLIBC compatibility checks from 2.36 to 2.40
- ISO filename, build container, and docs updated throughout

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 21:32:08 +02:00
DorianandClaude Opus 4.6 fe3c844fe6 fix: AIUI /aiui/ base path, nginx alias cycle, VPN auth, container boot
Build Archipelago ISO (dev) / build-iso (push) Successful in 11m17s
- AIUI: rebuild with /aiui/ base path (router, chunk loader, SW scope)
- nginx: remove alias from /aiui/ location (caused try_files redirect cycle)
- VPN: WireGuard standalone setup, auth improvements
- ISO: build script hardening, service file updates
- first-boot-containers: networking stack fixes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 20:42:09 +02:00
DorianandClaude Opus 4.6 56e04a9df8 fix: netavark GLIBC mismatch in ISO, container adopt, app updates
Build Archipelago ISO (dev) / build-iso (push) Successful in 13m24s
ISO build no longer copies netavark from build host (Debian 13/GLIBC 2.41)
which broke container networking on Debian 12 targets. Rootfs already
installs netavark from Debian 12 repos — just configure the backend.

Install RPC now adopts existing containers (from first-boot) instead of
erroring on duplicates. Container scanner extracts real versions from
image tags and detects available updates against pinned versions.

Frontend shows update button with version info when updates are available.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 11:47:35 +02:00
DorianandClaude Opus 4.6 b94e1aa135 fix: harden ElectrumX status — cached backend, stable frontend
Build Archipelago ISO (dev) / build-iso (push) Successful in 14m6s
Backend: cache status in RwLock, refresh every 15s via background task.
Eliminates per-request TCP race to ElectrumX that caused volatile errors.
Fix error classification so "Failed to read" is transient, not hard error.

Frontend: keep last-known-good data across failed polls, persist Tor
onion once discovered, adaptive polling (5s active / 30s synced).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-09 10:32:55 +02:00
DorianandClaude Opus 4.6 ed3df0728f fix: container stack installers, DNS resolution, uninstall cleanup
Build Archipelago ISO (dev) / build-iso (push) Successful in 15m54s
- Replace aardvark-dns container names with host.containers.internal
  for all cross-app connections (LND→Bitcoin, ElectrumX→Bitcoin,
  Mempool→ElectrumX, Fedimint→Bitcoin, NBXplorer→Bitcoin P2P+RPC)
- Add BTCPay multi-container stack installer (postgres + nbxplorer +
  btcpay-server) with proper secrets, data dir ownership, NOAUTH
- Add Mempool multi-container stack installer (mariadb + mempool-api +
  mempool-frontend) with host.containers.internal for RPC
- Immediately remove apps from state on uninstall (no 3-min ghost delay)
- Include archy-bitcoin-ui in bitcoin uninstall container list
- Fix LND UI port 8081 (was 8080, conflicting with LND gRPC)
- Fix ElectrumX UI: proxy /electrs-status to backend, cache-busting
  headers, graceful fallback when backend returns HTML
- Add Tor hidden services for ElectrumX and LND in torrc template
- Remove unused detect_bitcoin_container_name() (replaced by
  host.containers.internal)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 23:29:50 +02:00
DorianandClaude Opus 4.6 2d1536f016 feat: standalone WireGuard from first install, fix networking stack
Build Archipelago ISO (dev) / build-iso (push) Successful in 14m13s
Standalone WireGuard (wg0:51820):
- New archipelago-wg.service creates wg0 independent of NostrVPN
- Keypair generated on first-boot, persisted on LUKS partition
- vpn.create-peer uses wg genkey/pubkey (no nvpn dependency)
- wg-address service depends on archipelago-wg, not nostr-vpn

Networking fixes:
- Remove nos.lol from default relays (requires PoW, events rejected)
- Add Tor hidden service for private relay (port 7777) — NAT'd peers
  can reach relay over Tor for NostrVPN signaling
- Fix Tor hostname sync race: wait loop before copying hostname files
- Add tor-hostnames + wireguard dirs to LUKS partition setup
- Include relay in hostname sync loops (setup-tor.sh + first-boot)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 20:27:38 +02:00
DorianandClaude Opus 4.6 5427d4ec5d feat: NostrVPN add-device guided wizard
Build Archipelago ISO (dev) / build-iso (push) Successful in 14m28s
Replace disconnected "Generate Invite" + "Add participant" with a 2-step
wizard: enter phone npub → get invite QR + mesh details. Backend vpn.invite
now accepts optional npub param to add participant in the same call. Modal
shows network ID, node npub, and relay URLs for manual app configuration.

Also includes nostr-vpn service hardening (rate-limit restarts, reset-failed
before enable).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 19:04:53 +02:00
DorianandClaude Opus 4.6 ac2f312c61 fix: reboot/shutdown commands work without sudo prefix
Build Archipelago ISO (dev) / build-iso (push) Successful in 14m48s
polkit denies reboot/shutdown for non-root users without a local seat
(e.g. SSH sessions). Since archipelago has NOPASSWD sudo, add shell
aliases so reboot/shutdown/halt/poweroff transparently use sudo.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 17:51:21 +02:00
DorianandClaude Opus 4.6 980b3a7c00 fix: nostr-vpn crash-loop on fresh install, relay config lost on LUKS
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Two issues on fresh ISO install:
1. nostr-vpn.service was enabled in rootfs but env file doesn't exist
   until first-boot generates Nostr identity — crash-loop on boot.
   Now only enabled by first-boot-containers.sh after identity exists.
2. LUKS encrypted partition mounts over /var/lib/archipelago/, hiding
   the relay config.toml the Dockerfile put there. Now copies relay
   config and creates nostr-relay/nostr-vpn dirs on the LUKS partition.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 17:48:38 +02:00
DorianandClaude Opus 4.6 54ec723743 fix: vpn.add-participant writes to root-owned daemon config via sudo
Build Archipelago ISO (dev) / build-iso (push) Successful in 18m18s
The nvpn daemon config at /var/lib/archipelago/nostr-vpn/ is owned by
root, but the backend runs as archipelago. Direct write silently failed,
so adding a second phone's npub never reached the daemon — service
restarted with stale config. Now falls back to sudo cp for root-owned
paths, and first-boot sets ownership to archipelago.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 16:25:39 +02:00
DorianandClaude Opus 4.6 9d21f381f0 fix: build report — rootfs tar path prefix, git repo path
podman export creates paths without ./ prefix, but tar tf checks
used ./etc/... which never matched. List once, grep without prefix.
Also fix git commands to use $HOME/archy (workspace has no .git).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 16:00:53 +02:00
DorianandClaude Opus 4.6 faa8680bcb fix: expand brace globs in Dockerfile RUN — dash has no brace expansion
Build Archipelago ISO (dev) / build-iso (push) Successful in 13m50s
Dockerfile RUN steps execute under /bin/sh (dash on Debian), which
doesn't support brace expansion {a,b,c}. The nostr-relay directory
was never created, causing the config copy to fail (build #444).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 15:43:22 +02:00
DorianandClaude Opus 4.6 185ef2acf6 fix: restore musl static build, brand GRUB as Archipelago
Build Archipelago ISO (dev) / build-iso (push) Failing after 8m40s
Runner is Debian 13 (glibc 2.41), ISO rootfs is Debian 12/bookworm
(glibc 2.36). Dynamic binary crashes with GLIBC_2.41 not found.
Musl static build eliminates the dependency entirely.

Also set GRUB_DISTRIBUTOR="Archipelago" so installed system boot
menu says "Archipelago" not "Debian GNU/Linux".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 15:19:14 +02:00
DorianandClaude Opus 4.6 7741dc8652 feat: ISO networking stack — relay + nvpn v0.3.7 + WireGuard
Build Archipelago ISO (dev) / build-iso (push) Failing after 12m6s
Add nostr-rs-relay as native system service (port 7777) for VPN
signaling. Every node runs its own private relay from first boot.
Update nvpn binary from v0.3.4 to v0.3.7 (fixes mesh event
processing). Add WireGuard helper and address service for peer VPN.
First-boot script configures relay, nvpn identity, relay URLs
(direct + Tor onion), and syncs daemon config.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 15:06:27 +02:00
DorianandClaude Opus 4.6 e977600471 feat: NostrVPN mesh + VPN card UI + nvpn v0.3.7
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
- VPN card: relay URLs, device management, invite QR, add participant
- Backend: vpn.invite, vpn.add-participant, vpn.peer-config RPCs
- nvpn v0.3.7 system service (fixes event processing bug in v0.3.4)
- First-boot: auto-configure nvpn with node identity and endpoint
- Service: AF_NETLINK for WireGuard, NoNewPrivileges=no for sudo wg
- TASK-50: networking stack reliability from first install

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 15:00:00 +02:00
DorianandClaude Opus 4.6 22da11a16d fix: revert musl build, add ACPI power-off support
- Revert CI to normal cargo build --release (musl was false positive)
- Add acpid + acpi-support-base to rootfs packages
- Add acpi=force to GRUB and ISOLINUX boot params (installer + installed)
- Fixes "Maybe missing ACPI. Shutdown not powering off" on some hardware

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 13:15:09 +02:00
DorianandClaude Opus 4.6 e9fb2f3939 fix: install/uninstall UI state, progress bar, auto-Tor hidden services
- Install progress bar replaces action buttons (no overlay)
- Hide status badge during install/uninstall
- Uninstall keeps progress state until container disappears from WebSocket
- Uninstall RPC timeout increased to 660s (Bitcoin UTXO flush)
- Installing apps appear in My Apps immediately as placeholders
- Auto-configure Tor hidden service for every app on install
- Widen Tor module visibility for install hooks
- Only clear stale install entries on error status

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 09:20:18 +02:00
DorianandClaude Opus 4.6 a0cd1b0a33 fix: static musl build — eliminates GLIBC version mismatch on ISO
Build Archipelago ISO (dev) / build-iso (push) Successful in 13m3s
Build server (Debian 13) has GLIBC 2.41 but ISO targets Debian 12
(GLIBC 2.36). Switching to x86_64-unknown-linux-musl produces a
fully static binary that runs on any Linux.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-08 01:27:47 +02:00
DorianandClaude Opus 4.6 fac5f117a9 fix: fast VPN status — read config file instead of slow nvpn CLI
Build Archipelago ISO (dev) / build-iso (push) Successful in 49m48s
nvpn status command hangs for seconds (connects to relays), causing
the Network page to never finish loading. Read tunnel_ip from the
local config file instead (instant).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-08 00:36:49 +02:00
DorianandClaude Opus 4.6 37b6b376b2 fix: nostr-vpn service crash on reboot, detect activating state
Build Archipelago ISO (dev) / build-iso (push) Successful in 36m11s
- Remove ReadWritePaths sandbox (causes namespace error when /run/nostr-vpn
  doesn't exist after reboot — /run is tmpfs)
- Detect both 'active' and 'activating' states in VPN status check

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 22:05:08 +01:00
DorianandClaude Opus 4.6 9d1baf75d5 perf: skip missed ticks on all intervals, reduce scan frequency
Build Archipelago ISO (dev) / build-iso (push) Successful in 23m2s
Prevents burst of health checks, scans, and snapshots after slow
podman responses by using MissedTickBehavior::Skip. Bumps container
scan interval from 30s to 60s to reduce DB lock contention.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-07 20:25:09 +01:00
DorianandClaude Opus 4.6 5ae60e83ae feat: VPN peer QR code UI, consolidate CI workflows
Build Archipelago ISO (dev) / build-iso (push) Successful in 23m10s
- Add vpn.create-peer, vpn.list-peers, vpn.remove-peer RPC methods
- Generate WireGuard config + QR code (SVG) for mobile device connection
- Add "Add Device" modal on Network page with QR scanner support
- Remove old build-iso.yml (replaced by build-iso-dev.yml)
- Remove container-tests.yml (tests run in dev workflow)
- Remove container orchestration tests from dev workflow (redundant)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 19:44:00 +01:00
Dorian ff31441439 chore: trigger CI build with all fixes
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
2026-04-07 19:38:25 +01:00
DorianandClaude Opus 4.6 9eb5831172 perf: incremental cargo builds, skip apt when cached
Build Archipelago ISO (dev) / build-iso (push) Successful in 39m54s
- Build in $HOME/archy to reuse target/ cache across CI runs
- Skip apt-get install when ISO build deps already present
- Cargo tests also use persistent target dir

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 16:08:29 +01:00
DorianandClaude Opus 4.6 b58755b8ed fix: kiosk boot loop — redirect /kiosk to / for proper boot screen
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Kiosk was redirecting /kiosk → /dashboard, bypassing RootRedirect
and BootScreen entirely. This caused the kiosk to land on Login.vue
showing "server is starting up" in a loop instead of the proper
terminal-style boot progression screen.

Now /kiosk → / → RootRedirect → BootScreen, matching what remote
browsers see.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 16:04:58 +01:00
DorianandClaude Opus 4.6 e10893e3c1 fix: nostr-vpn service — set HOME, create dirs, remove strict sandbox
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
nvpn binary writes to $HOME/.config/nvpn. Set HOME to data dir,
create runtime dirs in ExecStartPre, remove overly restrictive
ProtectSystem/ProtectHome that blocked the binary.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:57:38 +01:00
DorianandClaude Opus 4.6 314497f94d fix: TS type error in VPN status, remove unused assignment warning
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
- Fix vpnStatus type mismatch (provider: string|undefined vs string|null)
- Remove redundant history_dirty assignment in health_monitor.rs

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:23:17 +01:00
DorianandClaude Opus 4.6 23f17356df fix: implement Claude API key save RPC, VPN status on home page
Build Archipelago ISO (dev) / build-iso (push) Failing after 2m19s
- Add system.settings.get/set RPC methods for Claude API key management
- Save key to secrets/claude-api-key, restart claude-api-proxy service
- Home Network card now fetches VPN status via vpn.status RPC
- Shows provider name (nostr-vpn, tailscale) instead of just "Connected"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:18:35 +01:00
DorianandClaude Opus 4.6 362bbb451f fix: add v1.3.4 What's New, fix VPN TS error
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
- Add v1.3.4 release notes: NostrVPN, FIPS/Routstr, ISO boot fix, bootstrap
- Remove unused i18n import from VpnStatusSection.vue (TS6133)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 15:05:56 +01:00
DorianandClaude Opus 4.6 e042b3d563 fix: handle NostrVpn provider in VPN disconnect match
Build Archipelago ISO (dev) / build-iso (push) Failing after 11m7s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 14:53:26 +01:00
DorianandClaude Opus 4.6 0aefacf3b9 fix: restore FIPS as installable container app
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
FIPS stays in the marketplace as an installable container app.
NostrVPN is the native system service; FIPS is a separate optional app.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 14:51:13 +01:00
DorianandClaude Opus 4.6 324405006d feat: NostrVPN as native system service, remove FIPS
Build Archipelago ISO (dev) / build-iso (push) Failing after 1m1s
- Convert NostrVPN from container app to native systemd service
- Auto-configure VPN with node's Nostr identity after onboarding
- Add nostr-vpn.service with proper capabilities (NET_ADMIN, NET_RAW)
- Remove FIPS from marketplace, container config, nginx, image-versions
  (consolidated into NostrVPN — same mesh VPN concept)
- Add AIUI inclusion step to dev CI workflow
- AIUI installed on VPS build server for ISO inclusion

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 14:49:34 +01:00
DorianandClaude Opus 4.6 e97fee2d7e feat: NostrVPN as native system service, Claude API key input, fix duplicate password
Build Archipelago ISO (dev) / build-iso (push) Failing after 1m0s
- Add NostrVPN as a native systemd service (extracted from container)
- Add VPN status detection for nostr-vpn in backend vpn.rs
- ISO build extracts nvpn binary from container image
- First-boot auto-configures NostrVPN with node's Nostr identity
- Change Claude Auth from login iframe to API key input field
- Remove duplicate ChangePasswordSection from Settings.vue
- FIPS and Routstr remain as installable container apps

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 14:40:33 +01:00
DorianandClaude Opus 4.6 dc6496e693 fix: FIPS env var name, remove broken NostrVPN CMD
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
- FIPS container expects FIPS_NSEC/FIPS_NPUB, not FIPS_NOSTR_SECRET
- NostrVPN container doesn't have a 'start' binary — use image default

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 14:17:23 +01:00
DorianandClaude Opus 4.6 b07bf574ef fix: service file crash on fresh installs, CI workflow portability
Build Archipelago ISO (dev) / build-iso (push) Successful in 16m0s
- Remove MemoryDenyWriteExecute=yes from archipelago.service — ring
  (rustls) and secp256k1 (bitcoin/nostr) crypto libraries need
  executable memory mappings that this restriction blocks
- Add + prefix to ExecStartPre so mkdir/chown run as root
- Use $HOME/archy instead of /home/archipelago/archy in CI workflows
  so builds work on both .228 and VPS CI runners

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:08:21 +01:00
DorianandClaude Opus 4.6 2daadb7a1d fix: dynamic UID in first-boot-containers.sh, remove temp fix-ssh workflow
Build Archipelago ISO (dev) / build-iso (push) Successful in 14m37s
Replace hardcoded /run/user/1000 with $(id -u archipelago) so first-boot
works regardless of the archipelago user's UID.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:33:15 +01:00
DorianandClaude Opus 4.6 178b728892 fix: run SSH fix from /tmp to bypass broken home dir
Build Archipelago ISO (dev) / build-iso (push) Successful in 14m35s
Fix SSH Permissions / fix-ssh (push) Successful in 1s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 10:36:26 +01:00
DorianandClaude Opus 4.6 1989014dd5 feat: add Nostr VPN, FIPS, Routstr apps with status UIs
Build Archipelago ISO (dev) / build-iso (push) Failing after 0s
Fix SSH Permissions / fix-ssh (push) Failing after 0s
Add three new marketplace apps:
- Routstr (v0.4.3): Decentralized AI inference proxy with Cashu payments
- Nostr VPN (v0.3.4): Mesh VPN with Nostr signaling + WireGuard tunnels
- FIPS (v0.1.0): Self-organizing encrypted mesh network

Includes status UI dashboards for headless apps (nostr-vpn-ui, fips-ui)
with usage instructions, node identity display, and container logs.
Nostr identity injected via env vars for all three apps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 05:06:45 +01:00
DorianandClaude Opus 4.6 f42968c8d5 fix: retrigger SSH fix (VPS runner only now)
Build Archipelago ISO (dev) / build-iso (push) Failing after 0s
Fix SSH Permissions / fix-ssh (push) Failing after 1s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 04:30:21 +01:00
DorianandClaude Opus 4.6 2c92ec54a7 fix: retrigger SSH fix (VPS runner only)
Build Archipelago ISO (dev) / build-iso (push) Failing after 1s
Fix SSH Permissions / fix-ssh (push) Failing after 0s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 04:27:20 +01:00
DorianandClaude Opus 4.6 bdab982a4a fix: use numeric UIDs for SSH fix
Fix SSH Permissions / fix-ssh (push) Failing after 0s
Build Archipelago ISO (dev) / build-iso (push) Failing after 21m9s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 04:05:57 +01:00
DorianandClaude Opus 4.6 0a5ef4c987 fix: emergency SSH permission fix via CI
Build Archipelago ISO (dev) / build-iso (push) Failing after 0s
Fix SSH Permissions / fix-ssh (push) Failing after 0s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 04:00:37 +01:00
DorianandClaude Opus 4.6 fc1efc5bdb chore: retrigger CI — Builds dir now exists on VPS
Build Archipelago ISO (dev) / build-iso (push) Successful in 17m45s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 03:18:30 +01:00
DorianandClaude Opus 4.6 2407888c72 chore: retrigger CI — Builds dir now exists on VPS
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 03:17:46 +01:00
DorianandClaude Opus 4.6 226498b435 feat: auto-deploy to dev environment after CI build
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
- Deploy backend binary + frontend to VPS after successful build
- Fix ISO ownership to use runner's UID instead of hardcoded 1000
- FileBrowser on VPS serves ISOs at :8083

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 03:06:43 +01:00
DorianandClaude Opus 4.6 1c952bb02d chore: bump version to 1.3.4
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 03:05:05 +01:00
DorianandClaude Opus 4.6 3dde239177 chore: trigger CI build on VPS runner
Build Archipelago ISO (dev) / build-iso (push) Failing after 15m8s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 02:46:02 +01:00
DorianandClaude Opus 4.6 eb6f76c909 chore: trigger CI build on new VPS runner
Build Archipelago ISO (dev) / build-iso (push) Failing after 11m35s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 01:48:05 +01:00
DorianandClaude Opus 4.6 101cb5f42d fix: remove duplicate rpcbind from bitcoin-knots container creation
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
bitcoin.conf already has server=1, rpcbind=0.0.0.0, rpcallowip, listen.
Passing them again via command-line causes bitcoin to try binding port
8332 twice → "Address already in use" → container crashes on every start.

Now only passes pruning/txindex args and dbcache via CLI.
Health check uses cookie auth (-datadir) instead of plaintext password.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 00:56:26 +01:00
DorianandClaude Opus 4.6 449f47da49 fix: BUILD_VERSION from Cargo.toml, kiosk scaling, new apps, Rust warnings
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Critical:
- BUILD_VERSION was hardcoded as "1.3.0-alpha" — now reads from Cargo.toml
  This caused ALL ISOs to show v1.3.0 regardless of actual binary version

Kiosk:
- Remove --disable-gpu flags (broke display scaling on some monitors)
- Add --start-fullscreen --window-size for reliable fullscreen

New apps:
- Nostr VPN, FIPS, Routstr, noStrudel, BotFights, NWNN, 484 Kitchen,
  Call the Operator, Arch Presentation, Syntropy Institute, T-0

Rust: suppress dead_code and unused_assignments warnings

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 00:35:52 +01:00
DorianandClaude Opus 4.6 8814b03e33 fix: replace actions/checkout in build-iso-dev.yml (THE ACTUAL WORKFLOW)
Build Archipelago ISO (dev) / build-iso (push) Successful in 46m18s
We were editing build-iso.yml but Gitea runs build-iso-dev.yml.
Replaced actions/checkout@v4 with direct git fetch+rsync.
This is the root cause of stale builds all day.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 22:33:40 +01:00
DorianandClaude Opus 4.6 78e877311d chore: retrigger CI build (runner restored)
Build Archipelago ISO (dev) / build-iso (push) Successful in 50m29s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 21:39:30 +01:00
Dorian ae97f4a979 chore: retrigger CI with fixed checkout workflow
Build Archipelago ISO (dev) / build-iso (push) Failing after 14m48s
2026-04-02 21:10:45 +01:00
DorianandClaude Opus 4.6 9d1904cddc chore: retrigger CI after .228 repo sync
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 20:59:16 +01:00
DorianandClaude Opus 4.6 c81ef5ad79 chore: trigger CI build with new runner registration
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 20:49:59 +01:00
Dorian d243cbb83e android 2026-04-02 20:49:43 +01:00
DorianandClaude Opus 4.6 37f5790165 fix: replace actions/checkout with direct git fetch+rsync (no more red cross)
Build Archipelago ISO (dev) / build-iso (push) Failing after 7m58s
actions/checkout@v4 uses a broken Gitea-generated token that always
fails. Replaced with direct git fetch+reset on the local repo, then
rsync to workspace. No more stale builds. Verified with version check.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 20:38:52 +01:00
DorianandClaude Opus 4.6 69f52f7260 fix: v1.3.3 — firmware, fedimint perms, GRUB fallback, data dirs, Rust warnings
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
- Add firmware-linux-nonfree to ISO (fixes missing Realtek NIC firmware)
- Pre-create nbxplorer/Main and btcpay/Main data directories
- Fix fedimint data dir permissions (chmod 775 for non-root container)
- GRUB GFX fallback: gfxpayload=keep + console fallback for incompatible hardware
- Kill stale Chromium before kiosk restart (prevents duplicate processes)
- Suppress Rust warnings: #[allow(dead_code)] on run_boot_reconciliation,
  #[allow(unused_assignments)] on history_dirty
- Version bump to 1.3.3

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 20:28:53 +01:00
DorianandClaude Opus 4.6 1b1300729c fix: CI always syncs from local repo (checkout token unreliable)
Build Archipelago ISO (dev) / build-iso (push) Successful in 50m24s
The actions/checkout@v4 step fails with stale Gitea token but leaves
a cached .git dir, preventing the fallback from triggering. Now we
always rsync from ~/archy/ which is kept up-to-date via git pull.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 19:17:40 +01:00
DorianandClaude Opus 4.6 380af7e1cb fix: CI always pulls latest before fallback to local repo
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
The actions/checkout fails (Gitea token issue) and falls back to
~/archy local copy. But local copy was stale — builds were missing
fixes. Now: always git pull in local repo before rsync fallback.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 19:15:54 +01:00
DorianandClaude Opus 4.6 09474789fd fix: FileBrowser default dirs, login option on onboarding intro
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
- Pre-create Documents/Photos/Music/Downloads/Builds dirs for FileBrowser
- Add "Already set up? Log in" link on onboarding intro page
- Prevents users from getting stuck in onboarding loop

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:33:28 +01:00
DorianandClaude Opus 4.6 7fdb85713a fix: AIUI proxy graceful error without API key, deploy proxy parity
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Claude proxy no longer crashes when ANTHROPIC_API_KEY is not set.
Instead serves a 401 with a helpful message telling users to configure
their API key in Settings. Fixes blank AIUI on fresh installs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:30:34 +01:00
DorianandClaude Opus 4.6 81b4db82d1 fix: onboarding persistence, clipboard, install UI, OnlyOffice removal, UI containers
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Onboarding:
- Persist current step in localStorage — page refresh resumes where user was
- Router afterEach saves step; guard redirects to saved step, not always intro
- Show npub alongside DID on restore success screen

UI fixes:
- Clipboard polyfill for HTTP contexts (fixes Copy DID crash on non-HTTPS)
- AppCard installing overlay shows for pkg.state=installing (survives refresh)
- Hide uninstall button during installation
- Frontend version bumped to 1.3.2

App store:
- OnlyOffice fully removed from marketplace, curated apps, app config
- Replaced with CryptPad references throughout
- Remove OnlyOffice from ISO capture patterns

Container stability:
- UI containers (bitcoin-ui, lnd-ui, electrs-ui) pull from registry first
- Added --cap-add FOWNER for rootless Podman compatibility
- electrs-ui now included in first-boot loop alongside bitcoin-ui and lnd-ui

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 18:20:52 +01:00
DorianandClaude Opus 4.6 a808458124 chore: bump version to 1.3.2
Build Archipelago ISO (dev) / build-iso (push) Successful in 1h7m38s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 17:08:52 +01:00
DorianandClaude Opus 4.6 c6e55e9dd0 fix: container stability, OnlyOffice removal, node bootstrapping, UI fixes
Build Archipelago ISO (dev) / build-iso (push) Successful in 50m9s
Container orchestration:
- Add --network-alias to all archy-net containers (fixes Podman DNS)
- Fix bitcoin-knots health check: expand $BITCOIN_RPC_PASS at creation
- Increase bitcoin-knots memory limit to 4g, reduce dbcache to 2048
- Enable podman-restart.service in ISO for auto-start on boot
- Fix UI container Dockerfiles: ENTRYPOINT [], user root for rootless

App changes:
- Remove OnlyOffice (incompatible with rootless Podman)
- Replace with CryptPad reference (single-process, e2e encrypted)
- Fix NPM port mapping: 8181 → 81
- Fix OnlyOffice port mapping: 8044 → 9980 (now CryptPad: 3003)

AIUI & proxy:
- Add MODEL_MAP to claude-api-proxy (ISO + deploy)
- Map legacy model IDs (claude-haiku-4.5 → claude-haiku-4-5-20251001)

Kiosk:
- Move chromium-kiosk data dir to /var/lib/archipelago (data partition)
- Remove --metrics-recording-only (contradicted --disable-metrics)

Node bootstrapping:
- Add bootstrap-switchover.sh for live node updates
- ElectrumX UI improvements and nginx proxy fixes
- LND UI nginx config updates

Backend:
- Bitcoin health check uses .cookie auth (no plaintext creds)
- ElectrumX status endpoint improvements
- Network alias flag in install.rs for DNS reliability

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 16:15:04 +01:00
DorianandClaude Opus 4.6 56d11f5c99 fix: stale rootfs container cleanup, OnlyOffice/NPM port corrections
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
ISO build:
- Remove stale archipelago-rootfs-tmp container before creating new one
  (previous failed builds leave it behind, blocking subsequent builds)

Container ports:
- OnlyOffice: fix LAN address from 8044 to 9980 (actual mapped port)
- Nginx Proxy Manager: fix from 8181 to 81 (correct admin port)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 15:16:24 +01:00
DorianandClaude Opus 4.6 00cc6f77c3 fix: increase Bitcoin memory limit to 4g, reduce dbcache to 2048
Build Archipelago ISO (dev) / build-iso (push) Failing after 42m38s
Bitcoin Knots needs more memory headroom (was OOMing at 2g during IBD).
Reduce dbcache from 4096 to 2048 on large disks to stay within the 4g
container limit. Low-memory systems get 2g (was 1g).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 14:25:31 +01:00
DorianandClaude Opus 4.6 1dccbbdd23 fix: restore continue-on-error on checkout (runner can't fetch Gitea)
Build Archipelago ISO (dev) / build-iso (push) Has started running
The act_runner on .228 cannot git-fetch from git.tx1138.com via the
actions/checkout action (auth/network issue). Without continue-on-error
the build dies before the ~/archy rsync fallback can run. Restore it
so the fallback works. The red cross on checkout is cosmetic — the
fallback step provides the correct code.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 14:15:14 +01:00
DorianandClaude Opus 4.6 0d39ab8d9d fix: remove continue-on-error from checkout, increase timeout to 5min
Build Archipelago ISO (dev) / build-iso (push) Failing after 5m1s
The continue-on-error flag causes the checkout step to always show a
red cross in Gitea UI even on success. Removed it since the rsync
fallback is now conditional and ~/archy is up to date. Increased
timeout from 3 to 5 minutes for slow LAN fetches.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 14:03:50 +01:00
DorianandClaude Opus 4.6 8328dfde43 fix: CI workflow only syncs from ~/archy if checkout failed
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
The rsync step was unconditionally overwriting the git checkout with
~/archy (which had diverged commit history), causing every CI build to
use wrong code. Now only falls back to rsync if checkout didn't produce
a valid workspace. Also removed --delete to prevent destroying checkout
files, and updated verification checks.

Root cause of CI build #373 using stale code.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 13:47:12 +01:00
DorianandClaude Opus 4.6 9389478eea fix: AIUI copy uses rsync to handle same-file in CI workspace
Build Archipelago ISO (dev) / build-iso (push) Failing after 38m32s
The CI build server's /opt/archipelago/web-ui/aiui resolves to the
same path as the build workspace. cp -r fails with "same file" error
which aborts the build under set -e. Use rsync instead (handles
same-src/dest gracefully), with cp fallback + || true.

This was the root cause of CI build #373 failure.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 13:04:10 +01:00
DorianandClaude Opus 4.6 42707c4276 fix: move companion indicator into sidebar, inline design
Build Archipelago ISO (dev) / build-iso (push) Failing after 55m19s
Build Archipelago ISO / build-iso (push) Has been cancelled
Move CompanionIndicator from global App.vue overlay to DashboardSidebar
next to ControllerIndicator. Redesigned as inline sidebar element with
Tailwind classes — shows muted 'Relay' when idle, orange 'Companion'
with pulse dot when actively receiving input.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:41:54 +01:00
DorianandClaude Opus 4.6 ae4791d438 fix: companion indicator shows relay state, add node-profile script
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Build Archipelago ISO / build-iso (push) Has been cancelled
CompanionIndicator: show muted icon when relay connected but idle,
orange when companion actively sending input. Removes Transition
wrapper for always-visible relay status.

Add scripts/node-profile.sh utility.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:14:34 +01:00
DorianandClaude Opus 4.6 f0ef424ce2 chore: update indeedhub submodule (rootless podman fix)
Build Archipelago ISO (dev) / build-iso (push) Has started running
Build Archipelago ISO / build-iso (push) Has been cancelled
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:12:15 +01:00
DorianandClaude Opus 4.6 2a17303590 chore: remove stale Claude/Cursor configs from repo
Build Archipelago ISO / build-iso (push) Has been cancelled
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Remove old agents, hooks, plans, skills, rules, and settings that
accumulated in .claude/ and .cursor/. These are not used by the build
and were bloating the repo. Active memory is in the project-level
.claude/projects/ directory (not tracked in git).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:10:25 +01:00
DorianandClaude Opus 4.6 94524e150a feat: frontend remote relay, kiosk hardening, CSS compositor fix
Frontend:
- Add remote-relay.ts: receives companion input via /ws/remote-relay,
  dispatches keyboard/mouse/scroll events into browser DOM
- Add CompanionIndicator.vue: NES gamepad icon when companion connected
- Wire relay start/stop to auth state in App.vue

Kiosk:
- Move Chromium data dir to /var/lib/archipelago/chromium-kiosk (encrypted)
- Disable MetricsReporting, AutofillServerCommunication, PasswordManager
- Remove --metrics-recording-only (contradicts disable-metrics)

CSS:
- Fix Chromium ghost rectangles: only apply preserve-3d + backface-visibility
  during transitions, not always-on (causes Chromium to skip painting
  off-viewport cards)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:10:08 +01:00
DorianandClaude Opus 4.6 34a37191dd fix: add Claude model ID normalization to AIUI proxy in ISO build
Build Archipelago ISO / build-iso (push) Has been cancelled
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Sync MODEL_MAP from deploy script to ISO build's inline claude-api-proxy.
Maps short model names (claude-sonnet-4) to full API IDs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:01:58 +01:00
DorianandClaude Opus 4.6 2c866ad158 refactor: split remote relay into own module, add lifecycle reconnect
- Move handle_remote_relay from remote_input.rs to remote_relay.rs
- Android: lifecycle-aware WebSocket reconnection on app resume
- Cleaner module boundaries between xdotool input and browser relay

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 11:01:38 +01:00
DorianandClaude Opus 4.6 7982714588 fix: nginx AIUI SPA routing and session gate cleanup
Backport from .228 live server:
- AIUI: use SPA fallback (try_files → /aiui/index.html) for client-side routing
- Remove cookie_session gates from AIUI proxies (API key managed by proxy)
- Apply to both HTTP and HTTPS server blocks

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 10:59:54 +01:00
DorianandClaude Opus 4.6 5ec4a7285a fix: first-boot container creation, remote input relay, ISO packages
Critical first-boot fixes (root cause: ALL 25 containers failed on install):
- Fix image-versions.sh sourcing: multi-path fallback for /opt/archipelago/scripts/
- Fix --add-host host-gateway: resolve actual gateway IP (podman 4.3 compat)
- Fix disk size detection: check /var/lib/archipelago not / (was forcing prune on 428GB disk)
- Fix Bitcoin health check: expand $RPC vars at creation, not inside container
- Add --network-alias to all containers (aardvark-dns reliability)
- Add --network-alias to backend RPC install handler

ISO build:
- Add apache2-utils for htpasswd (Fedimint gateway password hashing)

Remote input:
- Add broadcast relay channel for companion app → browser input forwarding
- Add /ws/remote-relay WebSocket endpoint
- Android: NES controller improvements, server connect flow updates

Container images:
- Fix lnd-ui Dockerfile: listen on 8080, run as root user (rootless compat)
- Fix bitcoin-ui, electrs-ui Dockerfiles: root user for rootless podman

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 10:34:58 +01:00
DorianandClaude Opus 4.6 8de5db6518 fix: version 1.3.0-alpha (alpha until beta testing complete)
Build Archipelago ISO (dev) / build-iso (push) Failing after 49m27s
Build Archipelago ISO / build-iso (push) Failing after 37m25s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 08:54:39 +01:00
DorianandClaude Opus 4.6 ee7b5980dd fix: container orchestration stability, AIUI inclusion, lnd-ui port, version 1.3.0
Build Archipelago ISO (dev) / build-iso (push) Failing after 6m0s
Build Archipelago ISO / build-iso (push) Failing after 41m40s
Container stability:
- Merge scan results instead of full replacement (prevents UI flapping)
- Absence threshold: 3 consecutive missed scans before removing from state
- container-list RPC uses cached scanner state for consistency
- Increased Podman API timeout 30s → 60s (scanner + health monitor)
- Keep crashed containers visible as "exited" instead of podman rm -f
- Resolve host-gateway IP via ip route (podman 4.3.x compatibility)

ISO build fixes:
- AIUI web app inclusion: searches 5 paths + CI step to copy from build server
- Claude API proxy: systemctl enable with symlink fallback
- AIUI nginx: try_files =404 (was /aiui/index.html redirect loop)
- Build version set to 1.3.0

Container fixes:
- lnd-ui: nginx listens on 8080 (was 80, Permission denied in rootless)
- first-boot: image-versions.sh sourced from correct path with validation
- first-boot: host-gateway resolved to actual gateway IP

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 01:28:11 +01:00
DorianandClaude Opus 4.6 9d4fb805f5 fix: remove broken nginx if-block for AIUI Claude proxy
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-02 00:08:49 +01:00
DorianandClaude Opus 4.6 21071e73f1 feat: NES portrait controller, remote input handler updates
Build Archipelago ISO (dev) / build-iso (push) Successful in 53m5s
Build Archipelago ISO / build-iso (push) Successful in 46m4s
- NESPortraitController layout for vertical phone use
- Updated NESController and NESKeyboard components
- Remote input WebSocket handler and API route registration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 23:37:55 +01:00
DorianandClaude Opus 4.6 479fbe0d21 fix: show Bitcoin as Loading when container running but RPC unavailable
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 23:35:27 +01:00
DorianandClaude Opus 4.6 cd874cb711 feat: Android companion app remote input, themes, and network layer
Build Archipelago ISO / build-iso (push) Has been cancelled
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
- RemoteInputScreen: touch/keyboard relay via WebSocket to /ws/remote-input
- Network layer for server communication
- UI components and NES/Neo theme variants
- Updated navigation, server connect, and WebView screens
- Build config and string resources updates

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:42:33 +01:00
DorianandClaude Opus 4.6 1ceca4479c fix: unbundled ISO uses full first-boot script with all container fixes
Build Archipelago ISO (dev) / build-iso (push) Has started running
Build Archipelago ISO / build-iso (push) Has been cancelled
The unbundled build was generating a 73-line inline script that only
created FileBrowser. This meant no lnd.conf, no UI sidecars, no
--add-host DNS fix for any app. Now uses the full first-boot-containers.sh
which handles both bundled (load tarballs) and unbundled (pull from
registry) modes, and includes all fixes for LND config, nginx sidecars,
and DNS resolution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:31:45 +01:00
DorianandClaude Opus 4.6 1b3a3f401b fix: UI containers use --network host for localhost proxy access
Build Archipelago ISO / build-iso (push) Has been cancelled
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Bitcoin UI and Electrs UI proxy API calls to 127.0.0.1 services
(Bitcoin RPC on 8332, backend on 5678). With port-mapped containers,
127.0.0.1 is the container's own localhost — the proxy fails and UIs
show "Unable to connect to Bitcoin node".

Fix: bitcoin-ui and electrs-ui use --network host (internal ports
8334 and 50002 don't conflict with host nginx on 80/443). LND UI
stays port-mapped (-p 8081:80) because port 80 would conflict.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 22:18:00 +01:00
DorianandClaude Opus 4.6 9a1edfb377 fix: correct UI container port mappings in first-boot
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Build Archipelago ISO / build-iso (push) Has been cancelled
Bitcoin UI listens on 8334 internally (not 80), Electrs UI on 50002.
Port mappings must match: -p 8334:8334 and -p 50002:50002.
Also adds missing electrs-ui to the UI container list.
Removes --network host for bitcoin-ui which conflicted with nginx.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:38:44 +01:00
DorianandClaude Opus 4.6 e4eea40e67 fix: add --add-host for host.containers.internal in package install path
Build Archipelago ISO / build-iso (push) Has been cancelled
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Containers installed via marketplace need host.containers.internal
to resolve for Tor proxy (9050) and inter-service communication.
Was only in first-boot-containers.sh and podman_client.rs, not in
the direct podman run path used by package.install RPC.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:30:43 +01:00
DorianandClaude Opus 4.6 04d272d8e0 fix: restore outer glass container on seed phrase pages
Build Archipelago ISO / build-iso (push) Has been cancelled
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
The outer page wrapper needs path-glass-container for the glass effect.
Only the inner text field grid should be without it.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:18:32 +01:00
DorianandClaude Opus 4.6 b05f72f50f fix: revert to direct port access for app iframes
Build Archipelago ISO / build-iso (push) Has been cancelled
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Proxy paths (/app/name/) break iframes due to root-relative asset
paths. Direct IP:port access works correctly over Tailscale and LAN.
This has been confirmed working on .228 via Tailscale DNS.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 21:08:11 +01:00
DorianandClaude Opus 4.6 6b90ab9eb0 fix: always use nginx proxy paths for app iframes
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Build Archipelago ISO / build-iso (push) Has been cancelled
Direct port access (http://host:port) fails over Tailscale/VPN and
when ports aren't externally accessible. Now all apps use nginx proxy
paths (/app/name/) on both HTTP and HTTPS.

Also adds missing proxy paths for btcpay, nextcloud, penpot, grafana,
indeedhub. Bumps version to 1.3.1.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:43:01 +01:00
DorianandClaude Opus 4.6 05544a1856 chore: bump version to 1.3.1 for OTA update testing
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Build Archipelago ISO / build-iso (push) Has been cancelled
First release with working UI sidecar containers (--user 0:0, CHOWN caps)
and complete update pipeline (manifest publishing, archive extraction,
WebSocket notifications).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:41:29 +01:00
DorianandClaude Opus 4.6 e0f2fd6f02 fix: UI sidecar containers need --user 0:0 and CHOWN caps for rootless podman
Build Archipelago ISO / build-iso (push) Has been cancelled
Build Archipelago ISO (dev) / build-iso (push) Has been cancelled
Container Orchestration Tests / smoke-tests (push) Has been cancelled
Container Orchestration Tests / unit-tests (push) Has been cancelled
The backend's post-install hooks create archy-bitcoin-ui, archy-lnd-ui,
archy-electrs-ui containers but with only NET_BIND_SERVICE cap. Nginx
inside these containers crashes on chown in rootless podman.

Added --user=0:0, CHOWN, DAC_OVERRIDE, SETUID, SETGID caps to match
the first-boot-containers.sh pattern. Also fixed manifest publish
Python error (git log fails in rsync'd workspace with no .git).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:35:41 +01:00