whisper-money/database
Víctor Falcón e60fdf4faa fix(banking): repair the two connections stranded just before #757
The code fix cannot reach connections already over the ceiling — the schedulers
filter them out before any job runs — so the mechanism change needs a data repair
alongside it. #742 did both; #757 shipped without one, which is why two rows are
still stranded two days later.

What actually stranded them (not job timeouts, which the branch first blamed):
until #757 a classified-transient failure on a final attempt still incremented
the counter, and both crossed the line in the hours before it deployed. Verified
against prod: 2 rows, 2 users, one of which has never completed a single sync
since 2026-06-07.

Matched exactly rather than with >=. handlePermanentError parks auth failures at
MAX_SCHEDULED_RETRIES + 1 deliberately, and there are 8 such rows in prod; a >=
filter would un-park them, 401 on the next cycle and send each user a second
"authentication failed" email. The counting path can only ever reach exactly
MAX_SCHEDULED_RETRIES, since that is where the scheduler stops dispatching.
`migrate --pretend` confirms the final scope, soft-delete scope included.
2026-08-12 09:41:08 +02:00
..
factories feat(mcp): record MCP tool usage and report it with stats:mcp-usage (#760) 2026-08-11 10:27:32 +02:00
migrations fix(banking): repair the two connections stranded just before #757 2026-08-12 09:41:08 +02:00
seeders feat(banking): add Interactive Brokers sync via Flex Web Service (#581) 2026-06-23 11:39:24 +02:00
.gitignore Set up a fresh Laravel app 2025-11-07 12:01:36 +00:00