fix: RC hardware-test feedback — mesh serial access, federation.list, masked install errors

- image: create archipelago user with dialout so the backend can open
  /dev/ttyUSB*/ttyACM* LoRa radios; doctor Fix 14 heals existing nodes
  (verified live on the .65 RC install — device detected after the fix)
- Web5Federation.vue called nonexistent federation.list (Unknown method);
  now uses federation.list-nodes + federation.list-pending-requests with
  a last-seen-based online count
- sanitizer: let app-install dependency errors through — 'LND requires a
  running Bitcoin node' was masked as 'Check server logs', so install
  failures on fresh nodes looked random

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-07-13 18:08:25 +01:00
co-authored by Claude Fable 5
parent b800288550
commit ca89cb4196
4 changed files with 36 additions and 6 deletions
+10 -5
View File
@@ -101,13 +101,18 @@ async function loadFederationSummary() {
federationError.value = ''
try {
const res = await rpcClient.call<{
nodes: Array<{ status: string }>
pending_requests: Array<unknown>
}>({ method: 'federation.list', timeout: 5000 })
nodes: Array<{ last_seen?: string }>
}>({ method: 'federation.list-nodes', timeout: 5000 })
const nodes = res.nodes || []
nodeCount.value = nodes.length
onlineCount.value = nodes.filter(n => n.status === 'online' || n.status === 'connected').length
pendingCount.value = (res.pending_requests || []).length
// list-nodes has no live status field — count a node seen in the
// last 10 minutes as online
const cutoff = Date.now() - 10 * 60 * 1000
onlineCount.value = nodes.filter(n => n.last_seen && new Date(n.last_seen).getTime() > cutoff).length
try {
const pend = await rpcClient.call<{ requests: Array<unknown> }>({ method: 'federation.list-pending-requests', timeout: 5000 })
pendingCount.value = (pend.requests || []).length
} catch { pendingCount.value = 0 }
hasLoadedFederation.value = true
} catch (e: unknown) {
federationError.value = e instanceof Error ? e.message : 'Federation unavailable'