whisper-money/app
Víctor Falcón 2472260ec8 feat(ai): make AI categorization confidence threshold configurable
The confidence bar that decides whether the AI's suggested category is
auto-applied to a transaction was a fixed config value
(ai_categorization.label_confidence, 0.7). Let each user tune it with a
slider in Settings > Manage Plan, next to the AI categorization toggle.

- Add nullable user_settings.ai_confidence_threshold (percent, 0-100);
  null falls back to the global config default.
- User::aiConfidenceThresholdPercent() centralises the "user value else
  config default" resolution used by both the billing page and the
  categorization engine.
- CategorizeTransactions reads the per-user bar instead of the config.
- Gate tier-2 rule learning on the outcome being applied, so the
  effective rule bar becomes max(label bar, rule_confidence): raising the
  threshold to reduce automation now also holds back forward rules
  (previously a suggestion above 0.85 could still spawn a rule even when
  the user's raised bar left the transaction uncategorized).
- Slider (50-95%, debounced save) rendered when AI consent is on.
2026-07-17 18:53:15 +02:00
..
Actions feat(spaces): phase 0 — multi-tenant Space foundation (no behaviour change) (#650) 2026-07-09 14:26:07 +02:00
Ai/Agents feat(ai): auto-categorize transactions with AI (behind flag) (#535) 2026-06-15 16:35:20 +02:00
Console/Commands feat(encryption): report count of users still holding encrypted data (#687) 2026-07-17 09:29:33 +00:00
Contracts feat(connections): manage which accounts a bank connection syncs (#558) 2026-06-18 16:22:49 +02:00
Enums feat(mcp): read-only MCP server for Pro accounts (#689) 2026-07-17 16:54:15 +02:00
Events Add Budgeting Feature to Track and Manage Spending (#36) 2026-01-21 15:25:50 +01:00
Exceptions/Banking fix(banking): recover from EnableBanking 422 wrong-period instead of crashing the sync (PHP-LARAVEL-42) (#653) 2026-07-07 08:57:23 +02:00
Features feat(mcp): read-only MCP server for Pro accounts (#689) 2026-07-17 16:54:15 +02:00
Http feat(ai): make AI categorization confidence threshold configurable 2026-07-17 18:53:15 +02:00
Jobs fix(queue): raise retry_after above the longest job timeout (PHP-LARAVEL-2D) (#645) 2026-07-05 09:31:23 +00:00
Listeners refactor: extract duplicated money formatter into App\Support\Money (#680) 2026-07-15 09:47:53 +02:00
Mail refactor(drip): extract base mailable and job for the drip email family (#641) 2026-07-04 20:51:38 +02:00
Mcp feat(mcp): add write tools (Phase 2) (#690) 2026-07-17 15:25:03 +00:00
Models feat(ai): make AI categorization confidence threshold configurable 2026-07-17 18:53:15 +02:00
Notifications fix: verify email via signed link without requiring login (#490) 2026-06-05 10:01:32 +02:00
Policies refactor(policies): extract HandlesUserOwnership trait (#478) 2026-06-03 17:43:30 +02:00
Providers fix: stop double-dispatching transaction listeners (N+1 insert into jobs) (#620) 2026-07-02 13:26:45 +00:00
Rules feat: parent/child category tree (#474) 2026-06-03 19:30:12 +02:00
Services feat(ai): make AI categorization confidence threshold configurable 2026-07-17 18:53:15 +02:00
Support refactor: extract duplicated money formatter into App\Support\Money (#680) 2026-07-15 09:47:53 +02:00