feat(02-05): cache the six Mesh tab-entry fetch groups without serializing them
- Mesh.vue: six useCachedResource entries wrap mesh.refreshAll(), transport.fetchStatus(), refreshFederationNodes(), refreshSelfOnion(), refreshSelfDid() and refreshContacts(), each with an explicit TTL (10s reachability/transport, 30s federation/contacts, 300s self DID/onion) and persist decision (T-02-01: every group carrying peer or self identity data is persist:false; only aggregate transport status may persist) - armMeshLive's Promise.all fan-out becomes a single Promise.allSettled over refreshMeshGroupIfStale() per group, so a revisit inside TTL issues zero RPC, a stale revisit revalidates concurrently (not a serial chain, T-02-16), and one rejected group never blocks the rest - RefreshIndicator wired into the Mesh header, driven by whether any of the six groups is refreshing — visible while peer reachability revalidates on re-entry so a resumed tab never shows a frozen reachability state as current (T-02-13) - dedup: true added to every underlying rpc-client.ts/mesh.ts/ transport.ts fetcher call backing the six groups - useCachedResource() calls live in Mesh.vue rather than inside stores/mesh.ts or stores/transport.ts: Pinia's defineStore(id, setup) runs in a bare effectScope, not a component instance, so the composable's internal onActivated() would silently no-op there; the fetchers still wrap the stores' own actions unchanged, so those actions' other callers (clearAllMesh, setMeshOnly, the pre-send balance check) keep their guaranteed-fresh, uncached reads Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
e582124259
commit
31389bcc3c
@@ -24,6 +24,7 @@
|
||||
}
|
||||
.mesh-header { justify-content: space-between; align-items: center; gap: 16px; flex-shrink: 0; }
|
||||
.mesh-header-left { flex: 1; }
|
||||
.mesh-title-row { display: flex; align-items: center; gap: 8px; }
|
||||
.mesh-title { font-size: 1.5rem; font-weight: 700; color: rgba(255, 255, 255, 0.95); margin: 0; }
|
||||
.mesh-subtitle { color: rgba(255, 255, 255, 0.5); font-size: 0.85rem; margin: 2px 0 0; display: flex; align-items: center; gap: 8px; }
|
||||
.mesh-subtitle-badge { font-size: 0.65rem; font-weight: 600; color: #4ade80; background: rgba(74, 222, 128, 0.12); padding: 1px 6px; border-radius: 4px; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
|
||||
Reference in New Issue
Block a user