convey/import: adopt wave 0 error primitives (wave 1)
Migrate loadImports and loadMoreImports to apiJson(...) with shape validation, upgrade the first-paint loader scaffold, drop the Retry button from first-paint failures, and render load-more failures as a singleton .surface-state-refresh-error banner above #importLoadMore while preserving visible rows. Move the importer websocket listener to the options overload with correlationKey 'import_id', IMPORT_STALL_TIMEOUT_MS = 10 * 60 * 1000, and onTimeout: markRowStalled; add the amber stalled-row UI with import_id surfaced and clear it when a later started or status event arrives. IMPORT_ROW_EVENTS gating prevents file_imported, enrichment_ready, and observe events from clobbering row state.
Co-authored-by: OpenAI Codex <codex@openai.com>