{ "phase": "2", "phase_name": "UI Performance", "timestamp": "2026-07-30T00:00:00Z", "areas_completed": ["Caching approach", "Refresh/staleness UX", "Profiling targets", "Fix scope: backend RPC"], "areas_remaining": [], "decisions": { "Caching approach": [ {"question": "How should main tabs stay warm across switches?", "answer": "KeepAlive + SWR", "options_presented": ["KeepAlive + SWR (Recommended)", "SWR only", "KeepAlive only"]}, {"question": "Which views get converted this phase?", "answer": "Profiling decides", "options_presented": ["Profiling decides (Recommended)", "All main tabs"]}, {"question": "Keep heavy views (Mesh D3+Leaflet) alive?", "answer": "Keep alive, cap KeepAlive max instances", "options_presented": ["Keep alive, cap count (Recommended)", "Exclude heavy views", "You decide"]}, {"question": "Secondary screens treatment?", "answer": "SWR keyed per item, no KeepAlive", "options_presented": ["SWR, no KeepAlive (Recommended)", "Same as main tabs", "You decide"]} ], "Refresh/staleness UX": [ {"question": "How visible should background refresh be on a cached tab?", "answer": "Subtle indicator (small spinner/shimmer while loadState === 'refreshing')", "options_presented": ["Invisible (Recommended)", "Subtle indicator", "Stale-age badges"]}, {"question": "Default staleness TTL?", "answer": "30s default, per-view tuning at Claude's discretion", "options_presented": ["30s, per-view tuning (Recommended)", "Short (10s) everywhere", "Long (60s+) everywhere"]}, {"question": "Background refresh failure behavior?", "answer": "Silent keep-last; retry on next focus/TTL", "options_presented": ["Silent keep-last (Recommended)", "Toast on failure"]}, {"question": "sessionStorage persistence?", "answer": "Yes, except large payloads", "options_presented": ["Yes, except large payloads (Recommended)", "Memory only"]} ], "Profiling targets": [ {"question": "Which surfaces feel slowest?", "answer": "All offered: Apps tab + AppDetails, Mesh, Wallet + send flows, Cloud/Files + Server; user added: Network, Web5, and 'often app store'", "options_presented": ["Apps tab + AppDetails", "Mesh tab", "Wallet tab + send flows", "Cloud/Files + Server"]}, {"question": "Which real hardware verifies fixes?", "answer": "archi-dev-box (user-specified)", "options_presented": [".228 (Recommended)", ".198 dev pair", "Whichever node showed it"]}, {"question": "PERF-01 profiling evidence?", "answer": "Committed findings doc in phase dir (surface -> measured cause -> intended fix)", "options_presented": ["Committed findings doc (Recommended)", "Findings in plans only"]}, {"question": "Pass bar on-device?", "answer": "No visible spinner on revisit (subjective-but-crisp)", "options_presented": ["No visible spinner on revisit (Recommended)", "Numeric budgets"]} ], "Fix scope: backend RPC": [ {"question": "May this phase touch core/ RPC handlers?", "answer": "Additive changes only — new aggregate/batch endpoints and cheap response-shaping; no refactors of existing handlers or orchestrator", "options_presented": ["Additive changes only (Recommended)", "Frontend only", "Whatever profiling justifies"]}, {"question": "Client-side waterfall fix pattern?", "answer": "Parallelize (Promise.all) + rpc-client dedup", "options_presented": ["Parallelize + dedup (Recommended)", "Aggregate endpoints", "You decide per view"]}, {"question": "Deploy discipline?", "answer": "Dev pair only, no OTA this phase", "options_presented": ["Dev pair only, no OTA (Recommended)", "OTA when verified"]} ] }, "deferred_ideas": [ "AIUI: permissioned node access — AI assistant talks to the node safely when permissioned, without leaking data, using the same command surface as Pine and everything else enableable in settings", "AIUI: chat starts expanded; on mobile it must start on chat, not context (current start-on-context is wrong)", "AIUI: deep dive into the content it finds and serves — make it perfect", "AIUI: show peer videos and files", "IndeeHub cross-node content source: nodes serve uploaded films/music/files to every IndeeHub install (an 'archipelago content source'), with payments", "Nostr integration in AIUI made more beautiful" ], "canonical_refs": [] }