feat: add local-first private AI digest workflow

Migrate app code into canonical feature slices, add phone-only AI digest scheduling and review, wire local notification/background task support, and cover the flow with tests.
This commit is contained in:
Rijad Zuzo
2026-05-17 00:17:20 +02:00
parent dab50abf0e
commit f655adfbea
212 changed files with 24178 additions and 15895 deletions
@@ -7,6 +7,7 @@ import 'package:relationship_saver/features/local/storage/local_data_store_in_me
import 'package:relationship_saver/features/local/storage/local_data_store_provider.dart';
import 'package:relationship_saver/features/reminders/scheduling/reminder_scheduler.dart';
import 'package:relationship_saver/features/reminders/scheduling/reminder_scheduler_provider.dart';
import 'package:relationship_saver/features/share_intake/share_capture_models.dart';
import 'package:relationship_saver/features/share_intake/share_inbox_view.dart';
import 'package:relationship_saver/features/sync/storage/sync_state_store_in_memory.dart';
import 'package:relationship_saver/features/sync/storage/sync_state_store_provider.dart';
@@ -66,7 +67,7 @@ void main() {
expect(find.text('Share Inbox'), findsOneWidget);
expect(find.text('Ambiguous match'), findsOneWidget);
expect(find.widgetWithText(FilledButton, 'Review & Match'), findsOneWidget);
expect(find.widgetWithText(FilledButton, 'Review & Save'), findsOneWidget);
await tester.tap(find.widgetWithText(TextButton, 'Dismiss Item').first);
await tester.pumpAndSettle();
@@ -116,7 +117,12 @@ void main() {
expect(find.text('Near match conflict'), findsOneWidget);
await tester.tap(find.widgetWithText(FilledButton, 'Review & Match').first);
await tester.tap(find.widgetWithText(FilledButton, 'Review & Save').first);
await tester.pumpAndSettle();
expect(find.text('Review Capture Mapping'), findsOneWidget);
await tester.tap(find.widgetWithText(FilledButton, 'Use Mapping'));
await tester.pumpAndSettle();
expect(find.text('Review Match'), findsOneWidget);