convey/static: add shared error-handling primitives (wave 0)
Add convey/static/api.js with apiJson, ApiError, and saveControl.
Extend SurfaceState with errorCard and replaceLoading, AppServices
with registerTask and getTaskHealth, and appEvents with the
listen overload plus onParseError. Expose window.logError from
error-handler.js for websocket parse/drop routing.
Migrate pairing, the starred-app toggle, tokens loading, and the
support background poller to the shared primitives. Add four static
smoke pages under convey/static/tests/ plus the Wave 0 design and
decision log in scratch/design-convey-error-wave0.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>