Roadmap
A living, high-level view of what has shipped and what is planned for parrant's
metadata-agnostic policy gate and impact analysis. This file was created alongside the
config axis; it is intentionally short and curated, not exhaustive — the
Changelog is the authoritative per-release record (versions are cut by the
maintainer via release.yml, so this page does not pin release numbers).
Shipped
Policy predicate axes
The gate matches a leaf condition on one of these axes (see the policy gate guide):
change— facts about the changed column (kind / semantic / breaking / model / column).meta— any dbtmetakey on the changed model or column (dotted paths).inferred_meta(shipped) — a meta key resolved by folding UPSTREAM lineage, so a classification declared once (e.g.pii: trueon a staging column) is inherited by every downstream column that derives from it, with column-level declassification. Shipped in #119 and renamedinferred→inferred_metain #120.config(shipped) — each model's resolved dbtnode.config(grants.select,materialized,tags,enabled,schema, …) by dotted key, mirroringmeta. Set-operator missing paths resolve to the empty set (present, not unknown); scalar missing paths resolve toUNKNOWN(routed toon_missing_meta). This makes "sensitive data must not be granted to a role outside an allowlist" expressible directly viaconfig.grants.select not_subset_of [...], with no manifest-patch bridge — it composes withinferred_meta.piifor the offline PII-exposure rule (examplepii_grants_allowlist.yml).reach— a quantified condition over the change's downstream reach (models / columns / exposures), including Metabase dashboards askind: exposure.structural— booleans the pipeline computes (provable_test_break,touches_exposure,reaches_anything).
Other shipped capabilities
- Fail-safe three-valued evaluation with independent
on_missing_meta/on_errorknobs and built-inon_meaning_changed/on_indeterminatesemantic-severity defaults. policy init(manifest-introspecting, safe-by-construction scaffold) andpolicy test(offline backtest with a per-rule fail-safe-UNKNOWN trust column).- In-code override pragmas (
-- lineage:allow-change/-- lineage:allow-break). - Cross-boundary Metabase reach (
metabase-extractartifact + offline join).
Next / under consideration
- Per-commit base-manifest fidelity for
policy test— exercise the provable-break and semantic meaning-change block tiers during a backtest (today they need a per-commit before-state; see the fidelity note). - External-input release paths —
block-until-acknowledged(owner sign-off via a PR label) andblock-until-proven(a/data-diffresult). Both would require the gate to consume a new external input, cutting against the offline / zero-credential guarantee — noted as possible future work, deliberately unbuilt today. - Column-grained
config—configis model-grained today (dbt config is a model-level notion); a column-level surface would only follow if a real per-column config need appears.