Decisions & rationale
The reasoning behind the software
Decisions, constraints, assumptions, warnings, and discoveries — each connected to the functionality it explains. Repository memory supports the software model; it does not replace it.
Decisions
-
Imperative Navigator routing
Verified from sourcePrimary navigation uses Navigator push/replace rather than a single declarative router graph.
-
RevenueCat/Superwall gate access, not Firestore
Verified from sourcePaid access ignores Firestore subscription fields for granting entitlements.
Constraints
-
API keys and OAuth clients come from dotenv / platform templates; values must not be committed or documented.
-
Stoppr ships as iOS/Android Flutter; VibeKB docs are static HTML, not part of the app binary.
Assumptions
-
UI claims about sugar/health are not validated by this software model.
Warnings
-
Android Superwall purchase controller wiring is incomplete
high Verified from sourceAndroid early Superwall.configure does not pass SuperwallPurchaseController; later path returns early on Android.
-
Repository has .env.local but main loads .env
medium Verified from sourceOnly .env.local is present in the tree while main.dart loads dotenv .env.
-
Google OAuth client ID fallbacks
medium Verified from sourceauth_service.dart embeds placeholder OAuth client ID strings when EnvConfig is null.
-
Placeholder API keys and OAuth client IDs
high Verified from sourceIntegrations fall back to INSERT_YOUR_* strings when env vars are missing.
Application startup Firebase authentication Sugar food scanning
-
Superwall placement IDs are placeholders
high Verified from sourceMany registerPlacement calls still use INSERT_YOUR_* placement id strings.
-
iOS widget app group ID is a placeholder
medium Verified from sourceStreakService uses group.YOUR_BUNDLE_ID.shared for HomeWidget sync.
Discoveries
-
Anonymous auth created from multiple call sites
Verified from sourcesignInAnonymously appears in onboarding and several repositories, not one gateway.
-
Manifest deep links without Dart handlers
Verified from sourceSome Android/iOS declared URIs are not handled in _processDeepLink.
-
No meaningful automated test suite found
Inferred from sourceAnalysis did not rely on an executable regression suite for app behavior.
-
Feature quotas disabled via local flags
Verified from sourceQUOTA_SYSTEM_ENABLED is hard-coded false on major premium feature screens.
Soft paywalls and quotas Learn video lessons Melinda chatbot assistant
-
Topology test must discover local diagram fixtures
Verified from source
Changes
-
Clean VibeKB 0.2.0 Stoppr model regeneration
Verified from sourceRegenerated the Stoppr living model and /docs as a clean 0.2.0 analysis with canonical important-files schema and current provenance.
-
VibeKB rebootstrap with Explainable Diagrams
Verified from sourceRebuilt .vibekb from Stoppr source using current VibeKB main tooling and static generator.
-
Upgrade VibeKB runtime and re-analyze Stoppr
Verified from source