Skip to main content

Testing and quality gates

Run the complete Flutter, parser, Android, and device validation workflow.

Local quality gate

cd salli_app
flutter pub get
dart format --output=none --set-exit-if-changed .
flutter analyze --no-fatal-infos
flutter test
dart run tool/sms_pilot_report.dart
flutter build apk --debug

Check the exit code of each command directly. Do not pipe a critical command through a truncating utility that hides failure.

Test layers

LayerExamples
DomainMoney, Safe to Spend, rollover, goals, runway, seettu, analytics
DataDrift schema/migrations, backup, receipt extraction, attachments, rates
SMSfilters, senders, templates, classifier, dedup, background, unmatched queue
Applicationhydration, serialized writes, reactive finance, widget snapshot
Widgetsonboarding, Home, Activity, editor, budgets, accounts, settings, reports
Contractsprivacy copy, accessibility, modal behavior, bottom insets, CI workflow
Devicereceiver, permissions, notifications, widget, encrypted startup, OCR

SMS without a SIM

  • SMS Lab: paste a message and inspect parser/classifier evidence.
  • Debug receiver: tools/inject-sms.sh exercises the native-to-Dart capture pipeline on a connected Android device.
  • Emulator SMS: adb emu sms send tests the genuine OS delivery path.

SMS Lab does not prove broadcast-receiver behavior. Debug injection does not prove carrier/SIM delivery.

Real evidence gate

Before beta, run the reviewed real fixture with:

dart run tool/sms_pilot_report.dart --require-real-evidence

A synthetic-only corpus must fail this stricter gate. The target is at least 90 reviewed, redacted samples across the complete P0 bank/format matrix.

Physical-device matrix

  • low/mid Android device with permission on/off transitions;
  • background/killed/reboot cases;
  • widget private and visible states;
  • physical iPhone for OCR and app lifecycle;
  • English, Sinhala, and Tamil;
  • light/dark/system appearance; and
  • large text and screen-reader checks.