widget-exactly-one-source-invariant-enforced-three-layers
Widgets must have exactly one data source (Cube semantic OR raw SQL, never both/neither). This invariant is enforced at three independent layers: Pydantic validator, Postgres CHECK constraint, and service-layer domain error. All three must stay in sync when the Widget schema changes.
Related
- snowflake
- r-same-snowflake-only-no-direct-source-connectors
- r-dash-wave-2-pass-1-m4-semantic-m5-governance-models-rls-en
- 2026-04-04-oracle-001-self-architecture-analysis
- fernet-encryption-for-data-source-credentials
- widget-exactly-one-source-triple-invariant
- widget-data-source-invariant-enforced-at-three-layers
- widget-exactly-one-source-invariant-enforced-at-three-layers
- widget-exactly-one-source-triple-enforcement-pattern
- exactly-one-source-invariant-on-widget-requires-three-layer
- triple-layer-invariant-enforcement-pydantic-postgres-service