PR #26457 changed the 400 wire format on the HTTP API in three ways:
1. \`Effect.catch(HttpApiError.BadRequest)\` → \`{ data: {}, errors: [], success: false }\`
2. \`HttpApiSchemaError\` defect → same shape
3. \`normalizeEmptyBadRequest\` post-processor that rewrites ANY empty
400 into the same shape
In v1.14.42 (post-Hono-deletion) at least one external plugin
(\`opencode-gemini-auth\`, per #26546 reports) makes an HTTP API call
during startup that hits one of these paths and breaks on the new
body shape — the unparseable JSON ends up printed to stdout and the
TUI never starts. \`opencode --pure\` works (no plugins), \`opencode run\`
works (no in-process server interaction), but \`opencode\` (TUI) crashes.
Revert all three changes from #26457. The default HttpApi serialization
of typed errors comes back, matching v1.14.41 wire format. We can
re-introduce structured validation responses behind an opt-in or
contract change once plugin authors have a chance to migrate.
Closes#26546.