What problem does it solve? Flutter codebases using Riverpod often drift into tangled architectures where widgets call services directly, providers imperatively invalidate each other, and UI code awaits notifier actions to branch on results. It also prevents translation drift, where non-English ARB locale files silently fall back to English because flutter gen-l10n does not fail on missing keys. ## Core Features & Use Cases - Four architecture rules: UI never calls services directly (only notifiers do), providers never imperatively invalidate siblings (dependents listen and invalidateSelf), UI never awaits notifier action returns (reacts to AsyncValue state via listeners), and side effects like navigation and snackbars are isolated in a dedicated listener widget. - No-translation-drift rule: every key added, renamed, or removed in the app_en.arb template must be mirrored in the same change across all other locales with matching placeholders, verified with a key-set comparison script. - Testing guidance: notifiers are the unit under test with fakes injected via ProviderScope/ProviderContainer overrides, asserting on AsyncValue state rather than caught exceptions. - Use Case: When adding a favorite-toggle feature to a music catalog screen, place the mutation in the catalog notifier, have the list provider listen and refresh itself, and wire error snackbars in a dedicated listener widget instead of awaiting the call in the widget. ## Quick Start Review my new Flutter screen and Riverpod providers against the architecture rules and check that my ARB locale files have no missing translation keys.