AppModule conditionally loads reconciliation, notifications, and developer modules based on raw SUPABASE_URL string checks. This makes behavior surprising across test, local, staging, and production environments.
Affected areas: app/backend/src/app.module.ts, app/backend/src/config/*, app/backend/src/reconciliation/*, app/backend/src/notifications/*, app/backend/src/developer/*, .env.example, backend setup docs/tests.
Implementation scope:
- Add typed config flags such as
features.reconciliationEnabled, features.notificationsEnabled, and features.developerRoutesEnabled.
- Move dynamic module selection behind a small factory with tests.
- Document safe local defaults and production-required settings.
- Remove direct
process.env reads from module composition.
Acceptance criteria:
- Test, local, staging, and production module sets are deterministic from typed config.
- Missing required production config fails fast.
- Docs and
.env.example describe each flag and default.
AppModuleconditionally loads reconciliation, notifications, and developer modules based on rawSUPABASE_URLstring checks. This makes behavior surprising across test, local, staging, and production environments.Affected areas:
app/backend/src/app.module.ts,app/backend/src/config/*,app/backend/src/reconciliation/*,app/backend/src/notifications/*,app/backend/src/developer/*,.env.example, backend setup docs/tests.Implementation scope:
features.reconciliationEnabled,features.notificationsEnabled, andfeatures.developerRoutesEnabled.process.envreads from module composition.Acceptance criteria:
.env.exampledescribe each flag and default.