convey/home: adopt wave 0 error primitives for refresh (wave 1)
Migrate refreshSkills, refreshRoutines, and refreshBriefing to apiJson(...) with shape validation that raises ApiError with cause 'parse' on malformed responses so legitimate-empty and malformed states stay distinct. Skills and routines render error cards in place, while briefing uses replaceLoading(...) to preserve the existing card and surface refresh failures as a sibling error.
Co-authored-by: OpenAI Codex <codex@openai.com>