* fix(enable-banking): connector-hop failures no longer park a connection in error
On 2026-09-04 the daily cron flipped four canary companies (bank sync routed
through Accounted Connect, PR #2205) to 'error' with "Banksynkningen
misslyckades ... forny anslutningen" because the service answered 200 with a
body that fails bankSyncResponseSchema. The PSD2 sessions were fine; users
re-authorized Danske, SEB and Revolut for nothing, and the bare "unexpected
shape" message left the contract mismatch undiagnosable.
- New ConnectorSyncError (status, code, body, Zod issue paths) thrown for
every connector-hop failure: transport, timeout, error envelope other than
a dead session, and wire-contract mismatch. The failing field paths are
logged at the throw site.
- Cron: AspspUnavailableError and ConnectorSyncError are transient. The row
is left untouched (no status flip, no renewal advice) and logged at warn
level; the health probe on the same run still catches a dead session.
- Manual sync (POST /sync) and agent sync (triggerConnectionSync) answer
retryable with CONNECTOR_UNAVAILABLE_MESSAGE, which says explicitly that
the connection does not need renewing.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MSet8McjShABUeoATNnh9L
* fix(enable-banking): keep the connector response body out of the sync log line
Superagent P2 and CodeRabbit: POST /sync logged up to 500 chars of the raw
connector body next to user and connection ids. A connector response can
carry transaction and personal data, so the log line now carries only code,
status, the Zod issue paths and the body length. The BAD_SHAPE message no
longer falls back to the body either.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MSet8McjShABUeoATNnh9L
---------
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>