Build
Declarative Delivery
Manage platform state as code with validate, plan, apply, and reviewable drift control.
Use this guide when your team wants repeatable review, promotion, and drift management across the platform surface.
Inputs
- a config directory representing desired state
- an authenticated admin or platform automation path
- schema-aware editor support where possible
Flow
- model the desired state in declarative files
- run
duck validate --config-dir <path> - run
duck plan --config-dir <path> - review drift and expected changes
- run
duck apply --config-dir <path> - rerun
planuntil the environment is clean
Strict Guarantees
duck planreturns0only when the environment already matches the configduck planreturns2when drift is actionable and can be appliedduck planreturns1when blocking declarative errors existduck applyfails before making changes when blocking plan errors exist- declarative reads fail closed by default; missing supported endpoints do not silently disappear from state
- the acceptance bar is
validate -> plan -> apply -> plan clean
What Belongs Here
- catalogs, schemas, tables, views, and grants
- row filters and column masks
- models, macros, notebooks, assets, semantic models, and data products
- compute routing and storage-related config where supported
- Git-backed notebook projects where
notebooks/*.yamlis the reviewed source of truth
Verification
- validation passes both schema and semantic checks
- plan output matches intended changes
- a follow-up plan returns no additional drift
- Git sync leaves linked notebooks aligned with the declarative files under the configured repo path
Known Blocking Cases
- destructive table column type changes stay as blocking plan errors until an online migration path exists
- if a drift item cannot converge safely, the CLI reports it as blocking rather than pretending the environment is clean