/catalogue
Property catalogue
Browse 50 starter properties across five domain pillars. Or paste a fragment of your codebase and let veric suggest properties that fit its shape.
Suggest properties for my codebase
AI-assist · mockedPaste 30+ lines of code or describe your project shape. We'll propose five properties calibrated to its first identifying token.
dbt, pragma solidity, import torch, kyc, isr) to a domain bucket.Browse catalogue
Fifty starter properties across five domains.
PII does not flow to marketing
PII columns must never reach marketing-facing exports.
forall row in mart_marketing_export. row.email is not pii
Freshness ≤ 6 hours
Every fact table is loaded within the last six hours.
forall t in fact_*. now() - t.loaded_at <= 6h
dim_* are SCD2
All dimension tables follow the slowly-changing type-2 schema.
forall t in dim_*. has_columns(t, [valid_from, valid_to, current_flag])
Numeric fact columns are not null
Numeric measures on fact tables never carry NULL.
forall t in fact_*, c in numeric_columns(t). not_null(c)
Referential integrity
Every foreign key resolves to an existing primary key.
forall fk in foreign_keys. exists pk in primary_keys. fk.value = pk.value
Surrogate keys are unique
Every dimension's surrogate key is unique within the table.
forall t in dim_*. unique(t.surrogate_key)
No late-arriving facts in mart_*
Mart-tier facts never have event_time after load_time.
forall row in mart_*. row.event_time <= row.loaded_at
All PII columns are tagged
Any column that holds PII carries the 'pii' tag.
forall c in columns. is_pii(c) -> has_tag(c, 'pii')
Sensitive columns encrypted at rest
Anything tagged sensitive is encrypted on disk.
forall c in columns where has_tag(c, 'sensitive'). encrypted_at_rest(c)
Snapshot tests pass
Every defined snapshot test is passing in the most recent run.
forall s in snapshots. last_run(s).status = 'pass'
Downstream owners declared
Every mart-tier table has a declared owner in metadata.
forall t in mart_*. t.meta.owner != null
No unresolved TODOs in production models
Production-tier models have no leftover TODO markers.
forall m in models where m.tier = 'prod'. not contains(m.sql, 'TODO')