whisper-money/app/Jobs
Víctor Falcón 6f7c60a8fe fix(ai): de-duplicate the categorization backfill per user
Raising retry_after stops one dispatch from being re-reserved, but it
does nothing against a *duplicate* dispatch. The ai queue runs two
concurrent workers, so a double "Enable AI" click (or re-enabling
consent mid-run) launches two backfills that read the same pending
snapshot and both bill the model — the very harm tries=1 was meant to
avoid but structurally cannot.

Implement ShouldBeUnique keyed on the user id, mirroring the sibling
RetryTransientAiCategorizationJob, so a user has at most one backfill in
flight. Add a test anchoring the dedup key.
2026-07-05 11:22:50 +02:00
..
Drip refactor(drip): extract base mailable and job for the drip email family (#641) 2026-07-04 20:51:38 +02:00
ApplySingleAutomationRuleJob.php fix(security): scope job-status endpoints to owner + feature-area fixes (#627) 2026-07-03 14:49:32 +02:00
AssignHistoricalTransactionsToBudget.php feat: Load transactions history on budget created (#72) 2026-01-22 11:10:15 +01:00
CategorizeOnboardingTransactionsJob.php feat(ai): manage AI consent outside onboarding with live backfill (#591) 2026-06-25 10:50:35 +02:00
CategorizeUncategorizedTransactionsJob.php fix(ai): de-duplicate the categorization backfill per user 2026-07-05 11:22:50 +02:00
GenerateHistoricalLoanBalancesJob.php feat(loans): backfill historical balances on loan creation (#322) 2026-04-24 13:09:34 +01:00
GenerateHistoricalRealEstateBalancesJob.php feat(real-estate): auto-calculate revaluation % and generate historical balances (#253) 2026-04-15 12:18:33 +00:00
GenerateRuleSuggestionsJob.php feat(ai): suggest automation rules during onboarding (#523) 2026-06-13 22:51:15 +02:00
PurgeResidualEncryptionArtifactsJob.php chore: harden Inertia boundary, CI type-check, and test isolation (#640) 2026-07-04 18:57:58 +00:00
ReEvaluateTransactionRulesJob.php fix(security): scope job-status endpoints to owner + feature-area fixes (#627) 2026-07-03 14:49:32 +02:00
RetryTransientAiCategorizationJob.php fix(ai): handle transient AI provider overloads — stop the Sentry noise and retry the dropped work (#595) 2026-06-26 20:07:06 +02:00
SendDailyBankTransactionsSyncedEmailJob.php feat(settings): let users disable bank transactions email (#472) 2026-06-02 12:24:39 +02:00
SendUpdateEmailJob.php Support soft-deleted users with reusable emails (#316) 2026-04-22 11:41:41 +01:00
SyncAllBankingConnectionsJob.php refactor: centralize duplicated provider & locale keys into enums (#543) 2026-06-16 13:43:14 +00:00
SyncBankingConnectionJob.php fix(banking): only log sync failures once the connection gives up (#603) 2026-06-27 16:04:36 +00:00
SyncBinanceHistoricalBalancesJob.php feat: Add Binance integration (#131) 2026-02-18 15:23:46 +01:00