# Architecture Reviewer Memory ## Project Structure Confirmed - Feature packages: `apps/mobile/packages/features///` - Domain: `apps/mobile/packages/domain/` - Design system: `apps/mobile/packages/design_system/` - Core: `apps/mobile/packages/core/` - Data Connect: `apps/mobile/packages/data_connect/` - `client_orders_common` is at `apps/mobile/packages/features/client/orders/orders_common/` (shared across order features) ## BLoC Registration Pattern - BLoCs registered with `i.add<>()` (transient) per CLAUDE.md -- NOT singletons - This means `BlocProvider(create:)` is CORRECT (not `BlocProvider.value()`) - `SafeBloc` mixin exists in core alongside `BlocErrorHandler` ## Known Pre-existing Issues (create_order feature) - All 3 order BLoCs make direct `_service.connector` calls for loading vendors, hubs, roles, and managers instead of going through use cases/repositories (CRITICAL per rules, but pre-existing) - `firebase_data_connect` and `firebase_auth` are listed as direct dependencies in `client_create_order/pubspec.yaml` (should only be in `data_connect` package) - All 3 order pages use `Modular.to.pop()` instead of `Modular.to.popSafe()` for the back button ## Known Staff App Issues (full scan 2026-03-19) - [recurring_violations.md](recurring_violations.md) - Detailed violation patterns ### Critical - ProfileCubit calls repository directly (no use cases, no interface) - BenefitsOverviewCubit calls repository.getDashboard() directly (bypasses use case) - StaffMainCubit missing BlocErrorHandler mixin - firebase_auth imported directly in auth feature repos (2 files) ### High (Widespread) - 53 instances of `context.read<>()` without `ReadContext()` wrapper - ~20 hardcoded Color(0x...) values in home/benefits widgets - 5 custom TextStyle() in faqs_widget and tax_forms - 8 copyWith(fontSize:) overrides on UiTypography - ~40 hardcoded SizedBox spacing values - Hardcoded nav labels in staff_nav_items_config.dart - Zero test files across entire staff feature tree ## Design System Tokens - Colors: `UiColors.*` - Typography: `UiTypography.*` - Spacing: `UiConstants.space*` (e.g., `space3`, `space4`, `space6`) - App bar: `UiAppBar` ## Known Client App Issues (full scan 2026-03-19) ### Critical - Reports feature: All 7 report BLoCs call ReportsRepository directly (no use cases) - OneTimeOrderBloc, PermanentOrderBloc, RecurringOrderBloc call _queryRepository directly for loading vendors/hubs/roles - OneTimeOrderBloc._onSubmitted has payload building business logic (should be in use case) - ClientMainCubit missing BlocErrorHandler mixin - firebase_auth imported directly in authentication and settings feature repos (2 packages) ### High (Widespread) - 17 hardcoded Color(0x...) across reports, coverage, billing, hubs - 11 Material Colors.* usage (coverage, billing, reports) - 66 standalone TextStyle() (almost all in reports feature) - ~145 hardcoded EdgeInsets spacing values - ~97 hardcoded SizedBox dimensions - ~42 hardcoded BorderRadius.circular values - 6 unsafe Modular.to.pop() calls (settings, hubs) - BlocProvider(create:) used in no_show_report_page for Modular.get singleton - Zero test files across entire client feature tree - 2 hardcoded user-facing strings ("Export coming soon") - 9 files with blanket ignore_for_file directives (reports feature) ### Naming Convention Violations - CoverageRepository, BillingRepository, ReportsRepository missing "Interface" suffix - IViewOrdersRepository uses "I" prefix instead of "Interface" suffix ## Review Patterns (grep-based checks) - `Color(0x` for hardcoded colors - `TextStyle(` for custom text styles - `Navigator.` for direct navigator usage - `import.*features/` for cross-feature imports (must be zero) - `_service.connector` in BLoC files for direct data connect calls - `Modular.to.pop()` for unsafe navigation (should be `popSafe()`)