convey/observer: adopt wave 0 error primitives for loadObservers (wave 1)
Migrate loadObservers to apiJson(...) with minimal shape validation, upgrade the loading scaffold to the shared surface-state loading markup, and route first-paint and refresh failures through replaceLoading('observersList', errorCard(...)). Drop showLocalError({ retry: true }) from this loader path while preserving showLocalError itself for in-file action errors.
Co-authored-by: OpenAI Codex <codex@openai.com>