FLUID 0.7.6 — Declarative Packaging Modes (preview)

Type: object

FLUID contract schema 0.7.6 — the current PREVIEW version, opened when 0.7.5 was promoted to stable.

🔥 NEW in v0.7.6:
• Declarative packaging modes — a top-level packaging block (plus a per-exposure binding.packaging override) declares per-container ownership for the IaC emit: isolated (this product creates and owns the container) vs shared (a pre-existing, platform-owned pool referenced via an OpenTofu data source), with a per-kind containers override map for hybrid tiers and a pool id for tenancy/cost attribution (RFC-packaging-modes.md).
• Backward compatible with v0.7.5 — every 0.7.5 contract validates as 0.7.6 unchanged; an ABSENT packaging block keeps the legacy byte-identical emit.

No Additional Properties
Example:

{
    "fluidVersion": "0.5.7",
    "kind": "DataProduct",
    "id": "gold.customer.analytics_360_v1",
    "name": "Customer 360 Analytics",
    "description": "Unified customer profiles with ML-driven insights",
    "domain": "Customer Experience",
    "tags": [
        "customer-data",
        "analytics",
        "gold-layer"
    ],
    "labels": {
        "team": "customer-analytics",
        "criticality": "high",
        "cost-center": "engineering"
    },
    "metadata": {
        "layer": "Gold",
        "owner": {
            "team": "customer-analytics",
            "email": "customer-analytics@company.com"
        },
        "businessContext": {
            "domain": "Customer Experience",
            "subdomain": "Customer Intelligence"
        }
    },
    "exposes": [
        {
            "exposeId": "customer_profiles",
            "title": "Unified Customer Profiles",
            "version": "2.1.0",
            "kind": "table",
            "tags": [
                "pii",
                "customer-facing",
                "real-time"
            ],
            "labels": {
                "sensitivity": "high",
                "retention": "7-years",
                "region": "us-central1"
            },
            "contract": {
                "schema": [
                    {
                        "name": "customer_id",
                        "type": "STRING",
                        "required": true,
                        "description": "Unique customer identifier",
                        "sensitivity": "cleartext",
                        "tags": [
                            "identifier",
                            "primary-key"
                        ],
                        "labels": {
                            "business-name": "Customer ID",
                            "data-category": "identifier"
                        }
                    }
                ]
            },
            "binding": {
                "platform": "gcp",
                "format": "bigquery_table",
                "location": {
                    "project": "company-data",
                    "dataset": "gold_customer",
                    "table": "profiles_v1"
                }
            }
        }
    ]
}

Type: object

Vendor / plugin-namespaced configuration. Each plugin claims a single sub-key (e.g. customScaffold, customCatalog) and validates its own schema there via the fluidbuild.extensionvalidators entry-point.

Additional Properties of any type are allowed.

Type: object

Type: enum (of string)

Contract schema version. Accepts '0.7.3' (source-aligned data products + acquisition pattern + ingestion engines) or '0.7.4' (adds the MCP output-port gateway + runtime agentPolicy enforcement). 0.7.4 is fully backward-compatible with 0.7.3 — every 0.7.3 contract validates as 0.7.4 unchanged. '0.7.6' is the current preview.

Must be one of:

  • "0.7.3"
  • "0.7.4"
  • "0.7.5"
  • "0.7.6"
Must match regular expression: ^\d+\.\d+(\.\d+)?$
Examples:

"0.7.4"
"0.7.3"

Type: enum (of string)

Kind of contract. 'MLPipeline' added for basic ML support.

Must be one of:

  • "DataProduct"
  • "MLPipeline"

Type: string

Stable product identifier, e.g. 'gold.hr.employee360v1'.

Must match regular expression: ^[A-Za-z0-9_][A-Za-z0-9_.-]*[A-Za-z0-9_]$|^[A-Za-z0-9_]$

Type: string

Must be at least 1 characters long

Type: string

Type: string

Business domain/mesh domain (e.g., 'HR', 'Finance').

Type: array of string

Product-level tags for categorization and discovery.

All items must be unique

No Additional Items

Each item of this array must be:

Type: string

Tag format: lowercase alphanumeric with hyphens, e.g., 'customer-data', 'pii', 'real-time'

Must match regular expression: ^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$

Type: object

Product-level labels for metadata and automation.


Example:

{
    "team": "customer-analytics",
    "criticality": "high",
    "cost-center": "engineering",
    "retention": "7-years",
    "region": "us-central1",
    "business-name": "Customer Profiles",
    "data-category": "analytical"
}

Each additional property must conform to the following schema

Type: string

Label values are always strings for consistency and tooling compatibility.

Type: object
No Additional Properties

Type: object

Generation envelope injected by fluid forge / fluid init — records how, when and by which tool/command the contract was generated. Machine-written (not user-authored); additive metadata that does not affect the data product's semantic contract.

Type: integer

Envelope schema version.

Type: string

Envelope discriminator, e.g. 'ContractMetadata'.

Type: stringFormat: date-time

ISO 8601 UTC timestamp of generation.

Type: object

Tool, version and command that generated the contract.

Type: string

Data layer label (e.g., Bronze/Silver/Gold). Free-form. When set together with productType, the two MUST be consistent under the canonical mapping (Bronze↔SDP, Silver↔ADP, Gold↔CDP).

Type: enum (of string)

NEW in v0.7.3: Data Mesh data-product type. SDP = Source-Aligned Data Product (raw ingestion from external systems; corresponds to Bronze). ADP = Aggregated Data Product (cross-source joined / domain-modelled; corresponds to Silver). CDP = Consumption-Aligned Data Product (analytics- or product-shaped; corresponds to Gold). Either metadata.layer or metadata.productType is sufficient — the validator infers the missing one. When both are present they MUST agree.

Must be one of:

  • "SDP"
  • "ADP"
  • "CDP"

Type: enum (of string)

NEW in v0.7.3: Data classification label propagated to catalog + access policy enforcement.

Must be one of:

  • "public"
  • "internal"
  • "confidential"
  • "restricted"

Type: array of string

NEW in v0.7.3: Feature gates the contract opts into (e.g., 'acquisition' while Bronze acquisition is in beta).

All items must be unique

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Type: stringFormat: email

Type: string

Type: string

Oncall rotation or contact for operational issues.

Type: stringFormat: date-time

Type: object

Business alignment information for data mesh organization.

No Additional Properties

Type: string

Business domain this product belongs to.

Type: string

Business subdomain for more granular organization.

Type: string

Business capability this product supports.

Type: string

Value stream this product participates in.

Type: array of string

Product-level tags on metadata for discovery and categorization.

Same definition as tags

Type: array

Must contain a minimum of 1 items

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties
Example:

{
    "exposeId": "customer_profiles",
    "title": "Customer Profiles Table",
    "kind": "table",
    "tags": [
        "pii",
        "customer-facing",
        "analytical"
    ],
    "labels": {
        "sensitivity": "high",
        "retention": "7-years",
        "team": "customer-analytics"
    },
    "contract": {
        "schema": [
            {
                "name": "customer_id",
                "type": "STRING",
                "required": true,
                "sensitivity": "cleartext",
                "tags": [
                    "identifier",
                    "primary-key"
                ],
                "labels": {
                    "business-name": "Customer ID",
                    "data-category": "identifier"
                }
            }
        ]
    },
    "binding": {
        "platform": "gcp",
        "format": "bigquery_table",
        "location": {
            "project": "company-data",
            "dataset": "customer",
            "table": "profiles"
        }
    }
}

Type: string

Stable interface handle (used by consumers & build.outputs).

Same definition as id

Type: string

Type: string

Detailed description of the exposed resource.

Type: string

Semantic version (semver.org).

Must match regular expression: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$

Type: enum (of string)

Must be one of:

  • "table"
  • "view"
  • "api"
  • "file"
  • "stream"
  • "topic"
  • "feature_store"
  • "model"
  • "vector"
  • "graph"
  • "time_series"
  • "other"

Type: array of string

Expose-level tags for categorization and routing.

Same definition as tags

Type: object

Expose-level labels for metadata and automation.

Same definition as labels

Type: object
No Additional Properties

Type: object

The following properties are required:

  • schema
Type: object

The following properties are required:

  • openapiRef

Type: string

Hash of canonical schema/OpenAPI. Used by contract-tests gates.

Must match regular expression: ^sha256:[0-9a-fA-F]{64}$

Type: enum (of string) Default: "strict"

NEW in v0.7.3: Schema evolution policy. strict = fail on any schema change; discoverandfreeze = capture from source on first run, fail thereafter; evolvesafe = accept additive changes; evolveall = accept all changes (cast on type narrow, route failures to DLQ).

Must be one of:

  • "strict"
  • "discover_and_freeze"
  • "evolve_safe"
  • "evolve_all"

Type: array

Tabular schema (for table/view/file).

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Must be at least 1 characters long


Column data type. Accepts a canonical FLUID/SQL type name (case-insensitive) or a parameterized form such as decimal(18,4) or varchar(255). The enum lists the canonical bare types; the pattern additionally permits case variants and parameter suffixes. Intentionally generous — it rejects obvious garbage (e.g. MYSTERY_TYPE) while admitting the cross-dialect superset.

Type: enum (of string)

Must be one of:

  • "string"
  • "text"
  • "varchar"
  • "varchar2"
  • "nvarchar"
  • "char"
  • "nchar"
  • "character"
  • "clob"
  • "int"
  • "integer"
  • "int2"
  • "int4"
  • "int8"
  • "int16"
  • "int32"
  • "int64"
  • "tinyint"
  • "smallint"
  • "mediumint"
  • "bigint"
  • "long"
  • "longint"
  • "serial"
  • "bigserial"
  • "float"
  • "float4"
  • "float8"
  • "float32"
  • "float64"
  • "double"
  • "real"
  • "decimal"
  • "dec"
  • "numeric"
  • "number"
  • "bignumeric"
  • "money"
  • "boolean"
  • "bool"
  • "bit"
  • "date"
  • "time"
  • "datetime"
  • "datetime2"
  • "smalldatetime"
  • "timestamp"
  • "timestamptz"
  • "timestamp_tz"
  • "timestamp_ntz"
  • "timestamp_ltz"
  • "timestampntz"
  • "interval"
  • "year"
  • "variant"
  • "object"
  • "array"
  • "struct"
  • "map"
  • "record"
  • "row"
  • "json"
  • "jsonb"
  • "super"
  • "binary"
  • "varbinary"
  • "bytes"
  • "blob"
  • "bytea"
  • "raw"
  • "geography"
  • "geometry"
  • "geom"
  • "point"
  • "uuid"
  • "uniqueidentifier"
  • "guid"
  • "enum"
  • "hll"
Type: string
Must match regular expression: (?i)^\s*(string|text|varchar|varchar2|nvarchar|char|nchar|character|clob|int|integer|int2|int4|int8|int16|int32|int64|tinyint|smallint|mediumint|bigint|long|longint|serial|bigserial|float|float4|float8|float32|float64|double|real|double\s+precision|decimal|dec|numeric|number|bignumeric|money|boolean|bool|bit|date|time|datetime|datetime2|smalldatetime|timestamp|timestamptz|timestamp_tz|timestamp_ntz|timestamp_ltz|timestampntz|timestamp\s+with(out)?\s+time\s+zone|interval|year|variant|object|array|struct|map|record|row|json|jsonb|super|binary|varbinary|bytes|blob|bytea|raw|geography|geometry|geom|point|uuid|uniqueidentifier|guid|enum|hll)\s*(\(\s*[0-9A-Za-z_,\s'\"-]*\s*\))?\s*$

Type: enum (of string)

Field-level sensitivity classification for improved policy ergonomics.

Must be one of:

  • "none"
  • "internal"
  • "confidential"
  • "restricted"
  • "pii"
  • "phi"
  • "cleartext"
  • "treated"
  • "anonymized"
  • "pseudonymized"
  • "tokenized"
  • "encrypted"

Type: string

Semantic meaning (e.g., 'email', 'phone', 'identifier').

Type: string

Business-friendly name for this field.

Type: string

Business definition and meaning of this field.

Type: array of object

Field-level validation constraints.

No Additional Items

Each item of this array must be:

Type: array of string

Field-level tags for categorization and data governance.

Same definition as tags

Type: object

Field-level labels for metadata and automation.

Same definition as labels

Type: stringFormat: uri

OpenAPI document URL (for APIs).

Type: object
No Additional Properties

Type: enum (of string)

Compatibility promise for non-breaking evolution.

Must be one of:

  • "none"
  • "patch"
  • "minor"
  • "backward"
  • "forward"
  • "strict"

Type: array of enum (of string)
No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "additive_columns"
  • "additive_fields"
  • "additive_endpoints"
  • "nullable_to_required_disallowed"
  • "field_removal_with_notice"
  • "type_widening_allowed"

Type: object

Enhanced data quality rules including anomaly detection.

No Additional Properties

Type: array
No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "freshness"
  • "completeness"
  • "uniqueness"
  • "valid_values"
  • "accuracy"
  • "schema"
  • "anomaly_detection"
  • "drift_detection"

Type: enum (of string)

Must be one of:

  • ">="
  • ">"
  • "<="
  • "<"
  • "=="
  • "!="

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Must match regular expression: ^P(?!$)(\d+Y)?(\d+M)?(\d+W)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$

Type: enum (of string)

Must be one of:

  • "info"
  • "warn"
  • "error"
  • "critical"

Type: array of string

DQ rule tags for categorization and automation.

Same definition as tags

Type: object

DQ rule labels for metadata and routing.

Same definition as labels

Type: object
No Additional Properties

Type: boolean Default: true

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: array of string

Data quality specification tags.

Same definition as tags

Type: object

Data quality specification labels.

Same definition as labels

Type: array of object

Simplified SQL-expression data quality rules (alternate form of dq.rules for inline assertions).

No Additional Items

Each item of this array must be:

Type: object

Type: string

Rule identifier.

Type: string

SQL or boolean expression that must evaluate to true.

Type: enum (of string)

Severity when the rule fails.

Must be one of:

  • "error"
  • "warning"
  • "info"

Type: array of string

Contract-level tags for data quality and governance.

Same definition as tags

Type: object

Contract-level labels for automation and metadata.

Same definition as labels

Type: object
No Additional Properties

Type: string

Availability percentage (e.g., 99.9%).

Must match regular expression: ^(100(\.0+)?|\d{2}(\.\d+)?|\d{1}\d(\.\d+)?)%$

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: string

e.g., '0 rows'

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: number

Target completeness ratio (0.0 to 1.0).

Value must be greater or equal to 0 and lesser or equal to 1

Type: number

Acceptable error rate (0.0 to 1.0).

Value must be greater or equal to 0 and lesser or equal to 1

Type: array of string

QoS-level tags for SLA management.

Same definition as tags

Type: object

QoS-level labels for automation and reporting.

Same definition as labels

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "oidc"
  • "oauth2"
  • "api_key"
  • "none"
  • "custom"
  • "iam"
  • "jwt"

Type: object
No Additional Properties

Type: array of string
No Additional Items

Each item of this array must be:

Type: array of string
No Additional Items

Each item of this array must be:

Type: array of object

Column-level access control. A column named in any restriction is restricted. 'deny': the principal may not read the columns. 'allow': the columns are readable only by the principals an allow names. A deny beats an allow, and a restriction never grants access: the readers are the expose's readers. Principals are logical and resolve through binding.principals. NEW in v0.7.6 (the field itself is older): fluid apply enforces it. GCP BigQuery: a Data Catalog taxonomy per product and dataset with fine-grained access control, a policy tag per set of restricted columns that share their readers, attached through the table schema's policyTags, and roles/datacatalog.categoryFineGrainedReader for exactly the expose's readers allowed to read them: the accessPolicy read grantees and the expose's own policy.authz.readers (a denied principal gets an access error on the columns). A restriction on an expose with no reader on the binding is refused, as it would lock the columns for everyone. A restriction's tags and labels are written into the policy tag's description; AWS has no place for them. AWS: each governance.lakeFormation grant with SELECT excludes the restricted columns its principal may not read (tablewithcolumns.excludedcolumnnames); a grant's hand-written excludedColumns must agree, and a binding with no Lake Formation grants is refused. fluid verify checks the policy tags and their readers on GCP, and the principals' Lake Formation permissions on AWS.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Logical principal the restriction applies to, written as in accessPolicy (e.g. group:analysts@company.example); binding.principals maps it per cloud.

Type: array of string

Columns of this expose's schema.

No Additional Items

Each item of this array must be:

Type: enum (of string)

deny: the principal may not read the columns. allow: only the principals an allow names may read them.

Must be one of:

  • "allow"
  • "deny"

Type: array of string

Authorization policy tags.

Same definition as tags

Type: object

Authorization policy labels.

Same definition as labels

Type: object
No Additional Properties

Type: array of object

Columns to treat before they land. The DuckDB acquisition runner rewrites each named column inside the write, so the file, S3 object or BigQuery load and the DLQ receive the treated value; quality gates judge the source value first. A treated column lands as a string, so declare it with a string type (string, or VARCHAR under a schemaPolicy that compares source type names). A rule the build cannot apply (an unset salt or key, k_anonymity, a column the stream lacks, a non-string declared type, the incremental cursor) refuses the build rather than landing the column untreated. fluid verify checks every non-null value of a masked column for its strategy's shape, on a local file and, through Athena, on an S3+Glue table. The MCP output-port gateway drops masked columns from what it serves.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: enum (of string)

hash: lowercase hex SHA-256 of salt || value, deterministic so joins work (64 hex characters). mask: every character but the first params.keepFirst and the last params.keepLast replaced by '*', length preserved. tokenize: HMAC-SHA256 token, 32 hex characters, the token the tokenizepii preLand hook makes. encrypt: AES-GCM, written as 'aesgcm:v1:' + base64url(nonce || ciphertext || tag) with the column name as associated data; reversible with the key, not deterministic. kanonymity: accepted by the schema but refused at landing: it is a property of a whole table over its quasi-identifiers, not of one value.

Must be one of:

  • "mask"
  • "hash"
  • "tokenize"
  • "encrypt"
  • "k_anonymity"

Type: object

Strategy parameters. The runner accepts exactly these keys and refuses any other, including a literal salt or key: secrets come only from the environment, never the contract, which is published with the plan, the bundle and the Glue table's fluid_contract parameter. Contracts on 0.7.5 and earlier may use the same keys; their schemas leave params untyped, and the runner checks them at build time.

Type: string Default: "FLUID_PII_HASH_SECRET"

NEW in v0.7.6: hash only. The environment variable holding the salt, at least 16 bytes. Unset or empty, the build is refused: an unsalted SHA-256 of a phone number is reversed by enumerating the numbering plan.

Must match regular expression: ^[A-Z_][A-Z0-9_]{0,127}$

Type: string

NEW in v0.7.6: tokenize and encrypt. The environment variable holding the key. tokenize defaults to FLUIDPIITOKENIZATIONKEY and needs at least 32 bytes; encrypt defaults to FLUIDPIIENCRYPTIONSECRET_KEY and needs the base64 of a 16, 24 or 32-byte AES key (openssl rand -base64 32). Unset or empty, the build is refused.

Must match regular expression: ^[A-Z_][A-Z0-9_]{0,127}$

Type: integer Default: 0

NEW in v0.7.6: mask only. Leading characters left as they are.

Value must be greater or equal to 0 and lesser or equal to 64

Type: integer Default: 4

NEW in v0.7.6: mask only. Trailing characters left as they are, so +46701234567 lands as ********4567. A value no longer than keepFirst + keepLast is masked entirely.

Value must be greater or equal to 0 and lesser or equal to 64

Additional Properties of any type are allowed.

Type: object

Type: array of string

Privacy masking rule tags.

Same definition as tags

Type: object
No Additional Properties

Type: string

Provider-specific predicate

Type: array of string

Row-level policy tags.

Same definition as tags

Type: array of string

Privacy policy tags.

Same definition as tags

Type: object

Privacy policy labels.

Same definition as labels

Type: enum (of string)

Must be one of:

  • "Public"
  • "Internal"
  • "Confidential"
  • "Restricted"

Type: object

NEW in v0.7.1: AI/LLM usage governance - controls which AI models can consume this data and for what purposes.

No Additional Properties

Type: array of string

Whitelist of AI models permitted to consume this data. Examples: ['gpt-4', 'claude-3-opus', 'gemini-pro']. Empty array = no AI access.

All items must be unique

No Additional Items

Each item of this array must be:

Type: string
Must match regular expression: ^[a-z0-9][a-z0-9-_.]*[a-z0-9]$|^[a-z0-9]$
Examples:

"gpt-4"
"claude-3-opus"
"claude-3-sonnet"
"gemini-pro"
"gemini-ultra"
"llama-3"
"mixtral-8x7b"

Type: array of string

Blacklist of AI models explicitly prohibited from consuming this data. Takes precedence over allowedModels.

All items must be unique

No Additional Items

Each item of this array must be:

Type: integer

Maximum tokens per AI request. Prevents excessive data exposure in single queries.

Value must be greater or equal to 1


Examples:

4096
8192
16384

Type: integer

Daily token limit for AI consumption. Enforces usage quotas.

Value must be greater or equal to 1

Type: array of enum (of string)

Permitted AI use cases. Controls whether data can be used for training, inference, reasoning, etc.

All items must be unique

No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "inference"
  • "reasoning"
  • "analysis"
  • "summarization"
  • "classification"
  • "embedding"
  • "search"
  • "qa"
  • "code_generation"
  • "fine_tuning"
  • "training"
  • "rag"

Examples:

[
    "inference",
    "reasoning",
    "summarization"
]
[
    "search",
    "qa",
    "rag"
]

Type: array of enum (of string)

Prohibited AI use cases. Example: Allow reporting but deny model training.

All items must be unique

No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "inference"
  • "reasoning"
  • "analysis"
  • "summarization"
  • "classification"
  • "embedding"
  • "search"
  • "qa"
  • "code_generation"
  • "fine_tuning"
  • "training"
  • "rag"

Example:

[
    "training",
    "fine_tuning"
]

Type: boolean Default: false

Whether AI agents can use this data for multi-step reasoning/chain-of-thought. False = simple retrieval only.

Type: boolean Default: false

Whether AI systems can cache/store this data. False = ephemeral processing only.

Type: object

Data retention requirements for AI systems consuming this data.

Type: integer

Maximum days AI system can retain this data. 0 = no retention allowed.

Value must be greater or equal to 0

Type: boolean Default: true

Whether AI system must delete data after use.

Type: boolean Default: true

Whether AI consumption must be logged/audited.

Type: string

Free-text description of allowed purposes. Example: 'Customer service chatbot only, not for marketing'.

Type: array of string

Agent policy tags for categorization.

Same definition as tags

Type: object

Agent policy labels for automation.

Same definition as labels

Type: array of string

Policy-level tags for governance.

Same definition as tags

Type: object

Policy-level labels for automation.

Same definition as labels

Type: object
No Additional Properties

Type: object

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: object

Type: const
Specific value: "gcp"
Type: object

Type: object


Must not be:

Type: object
Must match regular expression: ^(alias/|arn:)

Type: object

Each additional property must conform to the following schema


Type: string
Must match regular expression: ^(user|group|serviceAccount|domain):.+$
Type: array of string
No Additional Items

Each item of this array must be:

Type: string
Must match regular expression: ^(user|group|serviceAccount|domain):.+$
Type: object

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: object

Type: const
Specific value: "aws"
Type: object

Type: object


Must not be:

Type: object
Must match regular expression: ^projects/

Type: object

Each additional property must conform to the following schema


Type: string
Must match regular expression: ^arn:aws[a-z0-9-]*:iam::
Type: array of string
No Additional Items

Each item of this array must be:

Type: string
Must match regular expression: ^arn:aws[a-z0-9-]*:iam::

Type: enum (of string)

Target platform. NEW in v0.7.5: 'pgvector' for the vector/embeddings output port (pgvector-on-PostgreSQL RAG target — emits the embeddings table + ANN index DDL for the ai-embeddable columns). NEW in v0.7.5: 'confluent' for the Confluent Cloud Tableflow managed Kafka→Iceberg emitter. NEW in v0.7.4: 'postgres' for the MCP output-port PostgreSQL driver (AWS Athena uses platform 'aws').

Must be one of:

  • "gcp"
  • "aws"
  • "azure"
  • "snowflake"
  • "databricks"
  • "kafka"
  • "confluent"
  • "local"
  • "kubernetes"
  • "postgres"
  • "pgvector"
  • "other"

Type: enum (of string)

Binding format. NEW in v0.7.5: 'pgvectortable' — a pgvector embeddings table target for the vector output port. NEW in v0.7.4: 'postgrestable' (PostgreSQL driver), 'athenatable' / 'gluetable' (AWS Athena driver) for the MCP output port.

Must be one of:

  • "bigquery_table"
  • "snowflake_table"
  • "snowflake_view"
  • "gcs_file"
  • "s3_file"
  • "http_api"
  • "grpc_api"
  • "pubsub_topic"
  • "kafka_topic"
  • "delta_table"
  • "iceberg"
  • "parquet"
  • "csv"
  • "json"
  • "redshift_table"
  • "redshift_serverless"
  • "redshift_external_schema"
  • "postgres_table"
  • "athena_table"
  • "glue_table"
  • "pgvector_table"
  • "other"

Type: object

Apache Iceberg table format configuration

No Additional Properties

Type: enum (of integer)

Iceberg table format version

Must be one of:

  • 1
  • 2

Type: enum (of string)

Underlying file format for data files

Must be one of:

  • "parquet"
  • "orc"
  • "avro"

Type: array of object

Partition transformation specifications

No Additional Items

Each item of this array must be:

Type: object

Type: string

Source column for partitioning

Type: enum (of string)

Partition transform function

Must be one of:

  • "identity"
  • "year"
  • "month"
  • "day"
  • "hour"
  • "bucket"
  • "truncate"

Type: integer

Number of buckets (for bucket transform)

Type: integer

Truncate width (for truncate transform)

Type: array of object

Sort order specifications for data files

No Additional Items

Each item of this array must be:

Type: object

Type: enum (of string)

Sort direction

Must be one of:

  • "asc"
  • "desc"

Type: enum (of string)

NULL value ordering

Must be one of:

  • "nulls-first"
  • "nulls-last"

Type: object

Iceberg table properties

Each additional property must conform to the following schema

Type: string

Type: object

NEW in v0.7.5: vector / embeddings output-port configuration (platform 'pgvector', format 'pgvectortable'). Consumed by fluidbuild.output_ports.vector to emit the pgvector embeddings-table + ANN-index DDL and a RAG provenance manifest for the schema's ai-embeddable columns.

No Additional Properties

Type: integer

Embedding vector width (e.g. 1536 for OpenAI text-embedding-3-small, 1024 for Cohere embed-english-light). Maps to the pgvector column type vector(<dimensions>).

Value must be greater or equal to 1 and lesser or equal to 16000

Type: string

Provenance: the embedding model that produces the vectors (e.g. 'text-embedding-3-small'). Recorded in the RAG manifest and the embeddings-table's embedding_model column so a retriever can verify model parity.

Type: enum (of string) Default: "vector"

pgvector column type: 'vector' (float32, up to 2000 dims) or 'halfvec' (float16, half the storage, up to 4000 dims).

Must be one of:

  • "vector"
  • "halfvec"

Type: enum (of string) Default: "hnsw"

ANN index built on the embedding column. 'hnsw' (higher recall / lower query latency, buildable before data lands), 'ivfflat' (lower build cost, needs data first), or 'none' (no index — exact search only).

Must be one of:

  • "hnsw"
  • "ivfflat"
  • "none"

Type: enum (of string) Default: "cosine"

Distance function the index optimises for → pgvector operator class: cosine→vectorcosineops, l2→vectorl2ops, innerproduct→vectoripops, l1→vectorl1_ops.

Must be one of:

  • "cosine"
  • "l2"
  • "inner_product"
  • "l1"

Type: string

Target embeddings table name. Defaults to '<exposeId>_embeddings' when omitted.

Type: string

Provenance: the source primary-key column that ties each embedding row back to its origin row (written to the embeddings-table's source_key column). Enables update/delete propagation from the source product to the vector store.

Type: object

HNSW index tuning (used when indexType is 'hnsw').

No Additional Properties

Type: integer

Max bi-directional links per node (pgvector default 16).

Value must be greater or equal to 1

Type: integer

Build-time dynamic candidate-list size (pgvector default 64).

Value must be greater or equal to 1

Type: object

IVFFlat index tuning (used when indexType is 'ivfflat').

No Additional Properties

Type: integer

Number of inverted lists (pgvector guidance: rows/1000 for < 1M rows).

Value must be greater or equal to 1

Type: object

Provider-native addressing with tightened structure for better interop.

No Additional Properties

Type: string

Cloud account ID

Type: string

GCP project ID

Type: string

BigQuery dataset or database name

Type: string

Database name

Type: string

Schema name

Type: string

Table name

Type: string

Storage bucket name

Type: string

File or object path

Type: string

API gateway endpoint

Type: stringFormat: uri

Base URL for API endpoints

Type: string

Pub/Sub or Kafka topic name

Type: string

Pub/Sub subscription name

Type: string

Cloud region

Type: string

Cloud zone

Type: string

NEW in v0.7.5: Confluent Cloud environment id (env-xxxxx) for the Tableflow emitter.

Type: string

NEW in v0.7.5: Confluent Cloud Kafka cluster id (lkc-xxxxx) the Tableflow topic belongs to.

Type: string

NEW in v0.7.5: AWS Kinesis Data Stream name — maps to awskinesisstream in the streaming IaC emitter.

Type: string

NEW in v0.7.5: Amazon Redshift Serverless namespace name — maps to awsredshiftserverlessnamespace.

Type: string

NEW in v0.7.5: Amazon Redshift Serverless workgroup name — maps to awsredshiftserverlessworkgroup.

Type: string

NEW in v0.7.5: ARN of the IAM role attached to the Redshift Serverless namespace / used by the redshift-data CREATE EXTERNAL SCHEMA bridge.

Type: string

NEW in v0.7.5: Redshift external (Spectrum) schema name created over a Glue database via the redshift-data CREATE EXTERNAL SCHEMA bridge.

Type: string

NEW in v0.7.5: Glue Data Catalog database that backs the Redshift external schema.

Type: string

NEW in v0.7.5: ARN of the pre-created AWS IAM role Confluent Tableflow assumes (byobaws). Its trust policy is updated post-apply with the provider integration's externalid (two-phase IAM).

Type: string

NEW in v0.7.5: Iceberg catalog kind/profile selector — maps to iceberg.catalog.type (e.g. glue, rest, nessie, hive). REST-fronted catalogs (polaris / unity / snowflake open catalog) map to 'rest'. Consumed by providers/icebergcatalog.py and the streaming-sink validator.

Type: string

NEW in v0.7.5: Iceberg warehouse — the canonical Iceberg REST 'warehouse' property (maps to iceberg.catalog.warehouse): an object-store URI (s3://|gs://|abfss://) for object-store catalogs, or the catalog/warehouse name for a REST catalog.

Type: string

NEW in v0.7.5: REST Iceberg catalog endpoint URL — the canonical Iceberg REST 'uri' property (maps to iceberg.catalog.uri).

Type: array of string

NEW in v0.7.5: Iceberg partition columns — a FLUID abstraction over the Iceberg PARTITIONED BY / PartitionSpec (maps to iceberg.tables.default-partition-by). On a gcp BigQuery table with exposes[].lifecycle.expire: true (fluid-schema 0.7.6), one DATE, TIMESTAMP or DATETIME column to partition by (time_partitioning.field); without it the table is partitioned by ingestion time. With a column, retention counts from the date in that column, not from landing: BigQuery deletes a partition retention after its date, so a backfill of older rows is deleted at once. Leave it out for the S3 rule's semantics (age since written).

No Additional Items

Each item of this array must be:

Type: array of string

Binding configuration tags for infrastructure.

Same definition as tags

Type: object

Binding configuration labels for automation.

Same definition as labels

Type: object

Provider-specific binding properties (e.g., cluster_by, comment for Snowflake).

Additional Properties of any type are allowed.

Type: object

Type: object

Per-resource governance: registerLocation, principal grants, tag associations, row/column filters. Account-wide governance (admins, tag definitions) lives at the contract top-level governance block.

No Additional Properties

Type: object

Per-resource LF settings: location registration, principal grants, LF-tag associations, row/column filters. Applies only to formats backed by S3 + Glue catalog (iceberg/parquet/csv/json/avro/orc/delta).

No Additional Properties

Type: boolean Default: false

When true, emit awslakeformationresource that registers the binding's S3 path with Lake Formation. Required before LF can manage access to objects under that path.

Type: enum (of string) Default: "cross-account"

NEW in v0.7.6: Which grants[] principals get a statement in the awss3bucketpolicy emitted beside the grants (s3:ListBucket and s3:GetBucketLocation on the bucket, s3:GetObject under location.path). A statement lets its principal read the objects straight from S3, which skips Lake Formation's column, row and cell filters and its revocations. 'cross-account' (the default): only principals whose ARN names an AWS account other than the one running the apply, decided at plan time against the caller identity; same-account grantees get no statement, since on a registered location Lake Formation vends them credentials. 'none': no bucket policy at all; the tightest setting when the location is registered (registerLocation) and every reader, cross-account ones included, queries through a Lake Formation integrated engine, or when the bucket policy is managed elsewhere. 'all-grantees': every grantee, same-account included, which is the output before this field existed and reopens the direct S3 read path. An emitted awss3bucketpolicy is authoritative: it replaces every other statement on the bucket. When no grantee is left none is emitted.

Must be one of:

  • "cross-account"
  • "none"
  • "all-grantees"

Type: array of object

Principal-based LF grants on this exposure's database/table. Each entry maps a principal to a permission set (and optional column projection). Emitted as awslakeformationpermissions resources. Field idiom adapted from ODCS v3 roles[] (principal + access-type), bound to IAM ARNs since LF is cloud-specific.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

IAM principal ARN (role or user) receiving the grant.

Must match regular expression: ^arn:aws[a-z0-9-]*:iam::

Type: array of enum (of string)

LF permissions granted. Valid values per the hashicorp/aws awslakeformationpermissions resource.

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "ALL"
  • "SELECT"
  • "ALTER"
  • "DROP"
  • "DELETE"
  • "INSERT"
  • "DESCRIBE"
  • "CREATE_TABLE"
  • "CREATE_DATABASE"
  • "DATA_LOCATION_ACCESS"

Type: array of string

Subset of permissions the principal can re-grant. Maps to awslakeformationpermissions.permissionswithgrant_option.

All items must be unique

No Additional Items

Each item of this array must be:

Type: array of string

Optional column-level restriction. When set, the grant is emitted against awslakeformationpermissions.tablewithcolumns instead of .table, allowing the principal to read only the listed columns.

All items must be unique

No Additional Items

Each item of this array must be:

Type: array of string

Opposite of columns: every column EXCEPT these is granted. Maps to tablewithcolumns.excludedcolumnnames. Mutually exclusive with columns.

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

LF-tag (TBAC) associations applied to this table. Keys must reference tag definitions declared in the contract's top-level governance.lakeFormation.tagDefinitions. Emitted as awslakeformationresourcelftags.

Each additional property must conform to the following schema

Type: string

Type: object

Row-level (and optionally column-level) filter applied to all reads of this table via LF. Emitted as awslakeformationdatacellsfilter. The filter must then be granted to principals via grants[].permissions including SELECT — LF enforces both layers.

No Additional Properties

Type: string

Filter name (must be unique per table).

Type: string

PartiQL-flavoured row predicate. ALL lets every row through (use when only column filtering is intended).

Type: array of string

Columns visible through the filter. Mutually exclusive with allColumns / excludedColumnNames.

All items must be unique

No Additional Items

Each item of this array must be:

Type: array of string

Columns hidden through the filter (everything else is visible).

All items must be unique

No Additional Items

Each item of this array must be:

Type: boolean Default: false

Convenience for the LF column-wildcard form (every column visible). When true, columnNames / excludedColumnNames must be omitted.

Type: object

NEW in v0.7.6: Per-exposure packaging override — key-wise precedence over the contract-wide top-level packaging block (binding.packaging > packaging > absent-legacy).

No Additional Properties

Type: enum (of string)

NEW in v0.7.6: Blanket ownership mode for every container kind. Default when the block is present: 'isolated'. Per-kind exceptions go in containers.

Must be one of:

  • "isolated"
  • "shared"

Type: string

NEW in v0.7.6: Pool id of the platform-owned tenant pool this product writes into. REQUIRED (enforced by the resolver) whenever any container resolves 'shared' — a pool must be addressable. Propagated as the fluid_pool label/tag for cost attribution.

Must be at least 1 characters long

Type: string

NEW in v0.7.6: Optional path to the platform team's pool manifest file; snapshotted into the bundle at stage 1 so bundleDigest covers it (any pool-file edit invalidates downstream plans).

Must be at least 1 characters long

Type: object

NEW in v0.7.6: Per-container-kind ownership overrides — each key wins over mode for that kind, yielding hybrid tiers. Kind↔platform mapping: bucket → awss3bucket / googlestoragebucket; database → snowflakedatabase AND awsgluecatalogdatabase; dataset → googlebigquerydataset; schema → snowflakeschema; warehouse → snowflakewarehouse; cluster → Confluent environment/cluster (v1: shared only).

No Additional Properties

Type: enum (of string)

NEW in v0.7.6: Ownership of the object-store bucket (awss3bucket / googlestoragebucket).

Must be one of:

  • "isolated"
  • "shared"

Type: enum (of string)

NEW in v0.7.6: Ownership of the database container — covers Snowflake database AND AWS glue_database.

Same definition as bucket

Type: enum (of string)

NEW in v0.7.6: Ownership of the BigQuery dataset (googlebigquerydataset).

Same definition as bucket

Type: enum (of string)

NEW in v0.7.6: Ownership of the Snowflake schema (snowflake_schema).

Same definition as bucket

Type: enum (of string)

NEW in v0.7.6: Ownership of the Snowflake warehouse (snowflake_warehouse) — isolated gives per-product cost attribution.

Same definition as bucket

Type: enum (of string)

NEW in v0.7.6: Ownership of the Confluent environment/cluster. v1 accepts 'shared' only — dedicated-cluster provisioning is not yet supported (the resolver rejects 'isolated').

Same definition as bucket

Type: object

NEW in v0.7.6: Encryption at rest for an AWS S3 binding or a GCP BigQuery binding. Absent: nothing is emitted, and the cloud's default applies: SSE-S3 for new S3 objects, Google-managed keys for BigQuery.

No Additional Properties

Default: "product"

NEW in v0.7.6: The KMS key the bucket's objects are encrypted with (SSE-KMS with an S3 Bucket Key). 'product' (the default): fluid apply creates a customer managed key for each bucket this product owns (awskmskey, rotation on, alias alias/fluid/<contract id>/<bucket>) and makes it the bucket's default encryption (awss3bucketserversideencryptionconfiguration). Its key policy lets the account's IAM policies decide who may use it (the KMS default statement for the account root) and, when the binding carries governance.lakeFormation, lets the Lake Formation service-linked role AWSServiceRoleForLakeFormationDataAccess encrypt and decrypt, matched by aws:PrincipalArn so the role need not exist yet. A principal querying through Athena with credentials Lake Formation vends then needs no KMS permission of its own; a grantee in another account that the bucket policy lets read the objects directly (governance.lakeFormation.bucketPolicy) is also allowed kms:Decrypt, through S3 only. The writer (the identity the build runs as) needs kms:GenerateDataKey and kms:Decrypt from IAM. tofu destroy deletes the alias and schedules the key for deletion after 7 days, the minimum KMS allows; kms:CancelKeyDeletion recovers it until then. Dropping the block, or naming another key, removes the product key while the bucket keeps the objects encrypted under it, which become unreadable once the deletion window ends unless they are rewritten or the deletion is cancelled; fluid apply refuses that plan without --allow-data-loss. On a shared (pool) bucket the bucket's default encryption is the pool owner's, so 'product' is refused there. 'alias/<name>' or a key or alias ARN: an existing key, looked up at plan time (data awskmskey, so the identity running fluid apply needs kms:DescribeKey on it) and made the default encryption of a bucket this product owns by its key ARN, since S3 resolves an alias in the account of whoever writes; the plan fails unless the key is Enabled and a symmetric encryption key (SYMMETRICDEFAULT). On a pool bucket it is only checked. Its key policy is its owner's, and must let the Lake Formation role use it when the location is registered: an AWS managed key cannot be used with that role, so alias/aws/s3 is refused with registerLocation, and the plan fails for any key that is not customer managed. 'none': nothing is emitted. fluid verify checks that the key is Enabled and that the objects under the binding's prefix are SSE-KMS with it. On a gcp binding (fluid-schema 0.7.6, BigQuery tables): 'product' creates a Cloud KMS key ring and crypto key for each dataset this product writes (googlekmskeyring fluid-<contract id>-<dataset> and googlekmscryptokey 'bigquery', in the dataset's location, EU and US mapping to the europe and us key locations, rotated every 90 days), grants the project's BigQuery service agent roles/cloudkms.cryptoKeyEncrypterDecrypter on it, and makes it the dataset's defaultencryptionconfiguration and the table's encryptionconfiguration. The project must have the Cloud KMS API (cloudkms.googleapis.com) enabled. A key ring and key cannot be deleted on GCP: tofu destroy removes them from state and schedules the key's versions for destruction (30 days by default), and a later apply adopts the same names. 'projects/<p>/locations/<l>/keyRings/<r>/cryptoKeys/<k>': an existing key in the dataset's location, used as given; its owner grants the BigQuery service agent. 'none': Google-managed keys. An alias/... or arn:... value is refused on a gcp binding, and a Cloud KMS name on an aws binding. Adding a key to a table that exists replaces the table (BigQuery cannot re-key it in place), so fluid apply refuses that plan without --allow-data-loss; the next build lands the data again. fluid verify checks kmsKeyName on the dataset and the table.

Type: enum (of string)

Must be one of:

  • "product"
  • "none"
Type: object
Must match regular expression: ^alias/[A-Za-z0-9/_-]{1,250}$
Type: object
Must match regular expression: ^arn:aws[a-z-]*:kms:[a-z0-9-]+:[0-9]{12}:(key|alias)/[A-Za-z0-9/_-]{1,250}$
Type: object
Must match regular expression: ^projects/[a-z0-9.:-]{1,100}/locations/[a-z0-9-]{1,63}/keyRings/[A-Za-z0-9_-]{1,63}/cryptoKeys/[A-Za-z0-9_-]{1,63}$

Type: object

NEW in v0.7.6: Maps the contract's LOGICAL principals (accessPolicy.grants[].principal and exposes[].policy.authz.columnRestrictions[].principal, keyed exactly as the contract writes them) to the identities they stand for on this binding's platform, so the base contract stays cloud-neutral and each environment's overlay binds it. On gcp an identity is an IAM member (user:, group:, serviceAccount: or domain:); on aws an IAM principal ARN. A value is one identity or a list; [] says the principal has no identity on this cloud, and nothing is granted to it there. When the block is present, every principal the contract names for this expose must be a key: an unmapped one is refused, never emitted as written. Without the block the principals are used as written, except that a GCP principal in a reserved top-level domain (.example, .test, .invalid, .localhost) is refused as a placeholder. Modelled on ODCS v3's roles[] bound per server (servers[].roles) and on dbt grants resolved per target.

Each additional property must conform to the following schema


Type: string

Must be at least 1 characters long

Type: array of string

All items must be unique

No Additional Items

Each item of this array must be:

Type: string

Must be at least 1 characters long

Type: object

NEW in v0.7.6: An expose's lifecycle. The same fields as the contract-root lifecycle, plus expire, which is only meaningful where there is storage to expire.

No Additional Properties

Type: enum (of string)

Unified lifecycle state vocabulary.

Must be one of:

  • "preview"
  • "active"
  • "deprecated"
  • "retired"

Type: string

How long this expose's data is kept (ISO-8601 duration, e.g. P30D, P7Y). A declaration unless expire is true. With expire: true on an AWS S3 binding, fluid apply expires the objects under the binding's prefix this long after they are written; on a GCP BigQuery table it deletes each daily partition this long after its day ends. Years and months are counted as 365 and 30 days, and a part of a day rounds up to a whole one.

Same definition as window

Type: boolean Default: false

NEW in v0.7.6: Delete stored data once it is older than retention. Default false, so a contract that declares a retention period does not start deleting data when forge-cli is upgraded. Honoured by the AWS emitter on an S3 binding and by the GCP emitter on a BigQuery table; on a gcp binding that is not a BigQuery table (GCS, Pub/Sub, Iceberg storage) it is refused rather than dropped. AWS: fluid apply writes one rule per expose into the bucket's awss3bucketlifecycleconfiguration, filtered to the binding's prefix (location.path, else {database}/{table}/; a binding with neither is refused, so no rule ever expires a whole bucket). The rule expires the current version retention after it is written, removes a noncurrent version (on a versioning-enabled bucket) one day after it stops being current, and aborts an incomplete multipart upload after 7 days or the retention period if shorter. The lifecycle configuration is AUTHORITATIVE for the whole bucket: S3 keeps one per bucket, so rules that fluid apply did not write are replaced. It is therefore written only for a bucket this product owns; on a shared (pool) bucket (packaging) nothing is written, the pool's owner must hold the rule, and fluid verify checks that an enabled rule covering the prefix expires objects after exactly this period. Objects already older than the period when the rule is first applied are expired on S3's next lifecycle run, typically within a day. Removing expire later deletes the lifecycle configuration, which fluid apply refuses without --allow-data-loss (it refuses every plan that removes a resource holding data or policy; removing an access grant or a policy tag is a revocation and is not gated); tofu destroy deletes it. GCP (fluid-schema 0.7.6): the BigQuery table is partitioned by day (timepartitioning type DAY, on binding.location.partitionBy when it names one date or timestamp column, else by ingestion time) with expirationms = retention in days, so BigQuery deletes each partition that long after its day ends. BigQuery counts from the partition's date, not from when its rows were written: by ingestion time (no partitionBy, the default and the S3 rule's semantics) no row is deleted sooner than retention after it landed; with partitionBy, retention is the age of the date in that column, so a backfill of rows whose date is already older than retention lands in expired partitions and is deleted at once. It is never a whole-table expiration, which would delete the product. BigQuery cannot partition a table that exists, so adding expire to a live table replaces it: fluid apply refuses that plan without --allow-data-loss, and the next build lands the data again. A later change of retention is an in-place update. Removing expire from a live table removes the partitioning's replacement trigger, which fluid apply also refuses without --allow-data-loss; BigQuery cannot un-partition a table, so to keep data longer set a longer retention instead. fluid verify checks the live table's partition expiration.

Type: object
No Additional Properties

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: string

Reference to replacement data product or expose.

Type: array of string

Deprecation policy tags.

Same definition as tags

Type: array of string

Lifecycle tags for automation.

Same definition as tags

Type: object

Lifecycle labels for governance.

Same definition as labels

Type: object
No Additional Properties

Type: array of object
No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Human/machine-readable SLI check description

Type: array of object
No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "slack"
  • "email"
  • "webhook"
  • "pagerduty"
  • "custom"

Type: enum (of string)

Must be one of:

  • "info"
  • "warning"
  • "critical"

Type: array of string

Alert configuration tags.

Same definition as tags

Type: object

Default SLI trio (freshness, completeness, latency) by kind.

No Additional Properties

Type: boolean Default: true

Enable auto-generation of default SLIs.

Type: object

Default freshness SLI configuration.

No Additional Properties

Type: string

Freshness threshold (auto-set by kind: table=PT6H, stream=PT1M, api=PT1S)

Same definition as window

Type: enum (of string) Default: "warning"

Must be one of:

  • "info"
  • "warning"
  • "critical"

Type: array of string

Freshness SLI tags.

Same definition as tags

Type: object

Default completeness SLI configuration.

No Additional Properties

Type: number Default: 0.95

Completeness threshold (auto-set by kind: table=0.95, stream=0.99)

Value must be greater or equal to 0 and lesser or equal to 1

Type: enum (of string) Default: "warning"

Must be one of:

  • "info"
  • "warning"
  • "critical"

Type: array of string

Completeness SLI tags.

Same definition as tags

Type: object

Default latency SLI configuration.

No Additional Properties

Type: boolean Default: true

Type: string

P95 latency threshold (auto-set by kind: api=PT200MS, table=PT5S, stream=PT100MS)

Same definition as window

Type: number Default: 95

Latency percentile to measure.

Value must be greater or equal to 0 and lesser or equal to 100

Type: enum (of string) Default: "warning"

Must be one of:

  • "info"
  • "warning"
  • "critical"

Type: array of string

Latency SLI tags.

Same definition as tags

Type: array of string

Default SLI configuration tags.

Same definition as tags

Type: object

Default SLI configuration labels.

Same definition as labels

Type: object

Alert dispatcher config consumed by the acquisition Alerter (DLQ overflow, schema-fingerprint changes, anomaly signals).

No Additional Properties

Type: array of object
No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "log"
  • "file"
  • "webhook"

Type: string

For kind=file: NDJSON sink path (env-vars expanded).

Type: stringFormat: uri

For kind=webhook: Slack-compatible incoming webhook URL. Validated against the SSRF guard at construction time.

Type: array of string

Observability configuration tags.

Same definition as tags

Type: object

Observability configuration labels.

Same definition as labels

Type: object
No Additional Properties

Type: stringFormat: uri

Type: stringFormat: uri

Type: stringFormat: uri

Type: stringFormat: uri

Type: array of string

Documentation tags for organization.

Same definition as tags

Type: object

Documentation labels for automation.

Same definition as labels

Type: object

NEW in v0.7.2: Semantic model definition mapping physical columns to business concepts. Defines entities, measures, dimensions, and metrics for agent-consumable business logic. Eliminates semantic hallucination by providing machine-readable KPI definitions. Compatible with dbt MetricFlow, Snowflake Semantic Views, and OSI-aligned formats.

No Additional Properties
Example:

{
    "name": "orders_revenue_model",
    "description": "Canonical semantic model for revenue analytics",
    "defaultAggTimeDimension": "order_date",
    "entities": [
        {
            "name": "order",
            "type": "primary",
            "expr": "order_id"
        },
        {
            "name": "customer",
            "type": "foreign",
            "expr": "customer_id"
        }
    ],
    "measures": [
        {
            "name": "order_amount",
            "agg": "sum",
            "expr": "amount",
            "description": "Sum of all order amounts"
        },
        {
            "name": "order_count",
            "agg": "count_distinct",
            "expr": "order_id",
            "createMetric": true
        }
    ],
    "dimensions": [
        {
            "name": "order_date",
            "type": "time",
            "expr": "completed_at",
            "typeParams": {
                "timeGranularity": "day"
            }
        },
        {
            "name": "region",
            "type": "categorical"
        }
    ],
    "metrics": [
        {
            "name": "net_revenue",
            "description": "GAAP-compliant net revenue: completed orders minus discounts, excluding refunds",
            "type": "derived",
            "inputMetrics": [
                "gross_revenue",
                "total_discounts"
            ],
            "expr": "gross_revenue - total_discounts",
            "owner": "finance-data@company.com"
        },
        {
            "name": "gross_revenue",
            "description": "Total value of completed orders",
            "type": "simple",
            "measure": "order_amount",
            "filter": "status = 'completed'"
        }
    ]
}

Type: string

Human-readable name for this semantic model.

Type: string

Business context explaining what this semantic model represents.

Type: string

Default time dimension used for measure aggregation. Can be overridden per-measure.

Type: array of object

Join keys with type annotations. Entities connect this table to others in the semantic graph.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Entity name (e.g., 'order', 'customer').

Type: enum (of string)

Entity key type: primary (unique, complete), foreign (references another table), unique (unique, possibly partial), natural (real-world identifier).

Must be one of:

  • "primary"
  • "foreign"
  • "unique"
  • "natural"

Type: string

Column expression. Defaults to entity name if omitted.

Type: array of object

Aggregatable column expressions. Measures are the atomic building blocks from which metrics are composed.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Measure name (e.g., 'totalamount', 'ordercount').

Type: enum (of string)

Aggregation function applied to the expression.

Must be one of:

  • "sum"
  • "avg"
  • "count"
  • "count_distinct"
  • "min"
  • "max"
  • "median"
  • "percentile"

Type: string

SQL expression to aggregate. Defaults to measure name if omitted.

Type: object

Aggregation parameters (mirrors dbt-semantic-interfaces agg_params). Currently used by agg=percentile.

No Additional Properties

Type: number

Percentile in [0, 1] for agg=percentile (0.5 = median). Consumers default to 0.5 when omitted.

Value must be greater or equal to 0 and lesser or equal to 1

Type: boolean

Use the discrete percentile (PERCENTILEDISC / usediscrete_percentile) instead of continuous interpolation.

Type: string

Override the model-level default time dimension for this measure.

Type: object

Dimension over which this measure cannot be naively aggregated (e.g., account balances).

No Additional Properties

Type: enum (of string)

Which value to pick when the non-additive dimension is present.

Must be one of:

  • "min"
  • "max"

Type: boolean Default: false

If true, automatically create a simple metric from this measure.

Type: array of object

Categorical and time-based grouping axes. Dimensions define how data can be sliced in queries.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Dimension name (e.g., 'orderdate', 'region', 'productcategory').

Type: enum (of string)

Dimension type: categorical (text/enum grouping) or time (temporal axis).

Must be one of:

  • "categorical"
  • "time"

Type: string

SQL expression. Defaults to dimension name if omitted.

Type: object

Type-specific parameters.

No Additional Properties

Type: enum (of string)

Default time granularity for this dimension.

Must be one of:

  • "day"
  • "week"
  • "month"
  • "quarter"
  • "year"
  • "hour"
  • "minute"

Type: array of object

Composable KPI definitions built from measures. Metrics are the named business calculations that agents and tools resolve.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Metric name (e.g., 'netrevenue', 'customerchurn_rate').

Type: string

Business definition of this metric.

Type: enum (of string)

Metric type: simple (single measure + filter), derived (expression over other metrics), ratio (numerator/denominator).

Must be one of:

  • "simple"
  • "derived"
  • "ratio"

Type: string

Reference to a measure name (for simple metrics).

Type: string

SQL WHERE clause filter (e.g., "status = 'completed' AND is_refunded = FALSE").

Type: array of string

References to other metric names (for derived/ratio metrics).

No Additional Items

Each item of this array must be:

Type: string

Mathematical expression combining input metrics (for derived metrics).

Type: string

Numerator metric name (for ratio metrics).

Type: string

Denominator metric name (for ratio metrics).

Type: string

Business owner of this metric definition.

Type: array of string

Semantic model tags for discovery and categorization.

Same definition as tags

Type: object

Semantic model labels for automation and metadata.

Same definition as labels

Type: object

AWS Glue crawler configuration for auto-discovery of schema from S3 paths.

Type: string

Glue crawler name.

Type: string

IAM role ARN for the crawler.

Type: string

Cron schedule expression (e.g., 'cron(0 6 * * ? *)').

Type: array of string

Custom classifier names to apply.

No Additional Items

Each item of this array must be:

Type: object

Policy for schema changes detected by the crawler.

Type: enum (of string)

Must be one of:

  • "UPDATE_IN_DATABASE"
  • "LOG"

Type: enum (of string)

Must be one of:

  • "LOG"
  • "DELETE_FROM_DATABASE"
  • "DEPRECATE_IN_DATABASE"

Type: object

AWS Glue Iceberg table management configuration (snapshots, compaction).

Type: enum (of string)

Underlying file format for Iceberg data files.

Must be one of:

  • "parquet"
  • "orc"
  • "avro"

Type: object

Snapshot retention policy.

Type: integer

Maximum age of snapshots in milliseconds.

Type: integer

Minimum number of snapshots to retain.

Type: object

Iceberg compaction settings.

Type: integer

Target file size in MB after compaction.

Type: object

NEW in v0.7.4: Declares this expose as agent-consumable over MCP, with per-expose overrides for the consumer-side output-port server (fluid mcp output-port serve). Its presence opts the expose into the Fluid MCP gateway, where policy.agentPolicy.allowedModels / allowedUseCases are enforced at every read.

No Additional Properties

Type: object
No Additional Properties

Type: integer

Hard cap for the sample MCP tool. Defends against an over-curious agent asking for petabyte-scale row counts. Default: 100.

Value must be greater or equal to 1

Type: object
No Additional Properties

Type: enum (of string)

Surfaced on the describe tool so consumer agents can declare downstream handling. Advisory; the real gate is policy.agentPolicy.

Must be one of:

  • "public"
  • "internal"
  • "confidential"
  • "restricted"

Type: array
No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Upstream data product identifier (e.g., 'silver.hr.people_v2'). Renamed from 'provider' for clarity.

Same definition as id

Type: string

The upstream exposeId being consumed.

Same definition as id

Type: string

Semver range (e.g., ^1.2, ~1.4, >=1.0.0). Not strictly validated by regex; tooling enforces.

Type: object
No Additional Properties

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: string

Maximum acceptable staleness for consumed data.

Same definition as window

Type: number

Minimum completeness expectation.

Value must be greater or equal to 0 and lesser or equal to 1

Type: array of string

QoS expectation tags.

Same definition as tags

Type: object

QoS expectation labels.

Same definition as labels

Type: array of string
No Additional Items

Each item of this array must be:

Type: string

Business purpose for consuming this data.

Type: array of string

Consumption relationship tags.

Same definition as tags

Type: object

Consumption relationship labels.

Same definition as labels

Type: string

Cross-mesh only. Id of the federated workspace that owns this upstream, as declared in federation/upstreams.yaml. Set it when the upstream lives in another mesh rather than this workspace; omit it for a local upstream, which is resolved by walking the workspace.

Must be at least 1 characters long

Type: string

Cross-mesh only. The contract digest this product was composed against, as sha256:<64 hex>. fluid apply re-fetches the upstream's live digest and compares: a mismatch means the upstream changed since composition. Required whenever upstreamWorkspace is set.

Must match regular expression: ^sha256:[0-9a-f]{64}$

Type: array

NEW in v0.5.5: Multiple build configurations for multi-modal data products (e.g., batch + streaming, SQL + ML).

No Additional Items

Each item of this array must be:

Type: object

Enhanced build configuration supporting v0.4.0 patterns with v0.5.5 improvements.

No Additional Properties

Type: object

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: object

Type: const
Specific value: "hybrid-reference"
Type: object

Type: object

Hybrid-reference pattern from v0.4.0 (dbt-style).

No Additional Properties

Type: string

dbt profile target to run against. Forwarded to dbt as --target <name> by the build runner (allowlisted against the profile's real targets; falls back to the profile default when the requested target is unavailable).


dbt node selector(s) forwarded to dbt --select. Accepts a single selector string or an array of selector strings; the build runner drops flag-like values (those starting with '-').

Type: array of string
No Additional Items

Each item of this array must be:


Legacy alias for select (dbt's older --models flag). Same string-or-array shape; select takes precedence when both are set.

Type: array of string
No Additional Items

Each item of this array must be:

Type: object

Additional Properties of any type are allowed.

Type: object

Type: object

Each additional property must conform to the following schema

Type: enum (of string)

Must be one of:

  • "table"
  • "view"
  • "incremental"
  • "ephemeral"

Type: array of string

Simple string tags for categorization, discovery, and automation. Consistent pattern used throughout FLUID objects.

Same definition as tags

Type: object

Key-value labels for structured metadata and automation. Consistent pattern used throughout FLUID objects.

Same definition as labels
Type: object

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: object

Type: const
Specific value: "embedded-logic"
Type: object

Type: object

Embedded logic pattern from v0.4.0.

No Additional Properties

Type: enum (of string)

Must be one of:

  • "sql"
  • "flink_sql"
  • "pyspark"
  • "scala"
  • "python"
  • "r"

Type: object

Additional Properties of any type are allowed.

Type: object

Type: array of string

Simple string tags for categorization, discovery, and automation. Consistent pattern used throughout FLUID objects.

Same definition as tags

Type: object

Key-value labels for structured metadata and automation. Consistent pattern used throughout FLUID objects.

Same definition as labels
Type: object

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: object

Type: const
Specific value: "multi-stage"
Type: object

Type: object

NEW in v0.5.5: Multi-stage orchestration pattern.

No Additional Properties

Type: array of object
No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: enum (of string) Default: "hybrid-reference"

Must be one of:

  • "hybrid-reference"
  • "embedded-logic"

Type: object

Base properties for all build patterns.

Same definition as properties

Type: array of string
No Additional Items

Each item of this array must be:

Type: array
No Additional Items

Each item of this array must be:

Type: string

Unified identifier pattern: starts/ends with alphanumeric or underscore, allows dots and hyphens in middle. Both casing conventions accepted (snake_case / dotted lowercase / PascalCase / UPPER) so existing catalog ids round-trip unchanged.

Same definition as id

Type: array of string

Simple string tags for categorization, discovery, and automation. Consistent pattern used throughout FLUID objects.

Same definition as tags

Type: object

Key-value labels for structured metadata and automation. Consistent pattern used throughout FLUID objects.

Same definition as labels

Type: array of string

Simple string tags for categorization, discovery, and automation. Consistent pattern used throughout FLUID objects.

Same definition as tags

Type: object

Key-value labels for structured metadata and automation. Consistent pattern used throughout FLUID objects.

Same definition as labels
Type: object

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: object

Type: const
Specific value: "acquisition"
Type: object

Type: object

NEW in v0.7.3: Source-aligned acquisition pattern. The build ingests data from an external system (no transformation). Engine ∈ {duckdb, airbyte, meltano, dlt, kafka-connect, debezium}.

No Additional Properties

Type: object

External source system specification.

No Additional Properties

Type: string

Source system kind: filesystem, postgres, mysql, sqlite, http, salesforce, stripe, github, kafka, etc. Engine-specific catalog of supported kinds.

Type: object

Connection details. Use ${VAR} placeholders for env values; use secretRef for credentials. Inline secrets are forbidden by validator.

Type: string

Reference to a secret in the configured backend (vault://, aws://, gcp://, azure://, env://).

Must match regular expression: ^[a-z][a-z0-9_+.-]*://.+

Type: string

NEW in v0.7.3: Username/principal for SQL- or REST-style sources. Required by most database drivers (Postgres/MySQL/Oracle/etc.) — without it the underlying client falls back to the OS-user identity and typically fails authentication. Goes alongside secretRef (or an inline password) for the credential pair.

Type: string

NEW in v0.7.3: Default schema/namespace within the source database to read from. Maps to engine-specific config: dlt sqldatabase schema=, Meltano tap-postgres filterschemas=[], Airbyte source-postgres schemas=[], Debezium schema.include.list, Kafka Connect JDBC schema.pattern. Use schemas (array) to scope to multiple schemas at once.

Type: array of string

NEW in v0.7.3: Multi-schema variant of schema. When both are set, schemas wins and schema is treated as a deprecated alias. Engines that don't natively support multi-schema reads will iterate the list.

All items must be unique

No Additional Items

Each item of this array must be:

Additional Properties of any type are allowed.

Type: object

Type: enum (of string)

Must be one of:

  • "full_refresh"
  • "incremental_append"
  • "incremental_dedup"
  • "incremental_merge"
  • "cdc"
  • "streaming"

Type: string

Column used for incremental cursor (e.g., updated_at, SystemModstamp).

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "high_water_mark"
  • "log_position"
  • "lsn"

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: array of string

List of streams/tables/objects to ingest.

No Additional Items

Each item of this array must be:

Type: object

Type: enum (of string)

Must be one of:

  • "csv"
  • "parquet"
  • "json"
  • "ndjson"
  • "avro"
  • "orc"

Type: object

Additional Properties of any type are allowed.

Type: object

Additional Properties of any type are allowed.

Type: object

Type: object

Destination format for ingested data. binding.platform on the expose remains the source of truth for where; sink.format describes how.

No Additional Properties

Type: enum (of string)

Must be one of:

  • "iceberg"
  • "delta"
  • "parquet"
  • "csv"
  • "json"
  • "snowflake_table"
  • "bigquery_table"
  • "redshift_table"
  • "duckdb_table"

Type: enum (of string)

Must be one of:

  • "rest"
  • "glue"
  • "nessie"
  • "unity"
  • "snowflake-managed"
  • "hive"

Type: array of string
No Additional Items

Each item of this array must be:

Type: object

Delivery semantics + idempotency + DLQ configuration.

No Additional Properties

Type: enum (of string) Default: "at_least_once"

Must be one of:

  • "at_most_once"
  • "at_least_once"
  • "exactly_once"

Type: string Default: "{run_id}:{stream}:{record_pk}"

Template for the idempotency key. Default: {runid}:{stream}:{recordpk}

Type: object
No Additional Properties

Type: boolean Default: true

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "parquet"
  • "json"
  • "ndjson"

Type: integer Default: 10000

Value must be greater or equal to 0

Type: array of enum (of string)
No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "pii_classification_failed"
  • "schema_violation"
  • "destination_write_failed"
  • "quality_gate_failed"

Type: object

Schema evolution behavior. Stricter-wins between policy and per-change overrides.

No Additional Properties

Type: enum (of string) Default: "strict"

Must be one of:

  • "strict"
  • "discover_and_freeze"
  • "evolve_safe"
  • "evolve_all"

Type: enum (of string)

Must be one of:

  • "include"
  • "warn"
  • "fail"

Type: enum (of string)

Must be one of:

  • "drop"
  • "warn"
  • "fail"

Type: enum (of string)

Must be one of:

  • "cast"
  • "warn"
  • "fail"

Type: enum (of string) Default: "required"

Must be one of:

  • "required"
  • "optional"
  • "disabled"

Type: array of enum (of string)

Pre-land hook chain - runs on each batch before destination write.

No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "dlp_scan"
  • "tokenize_pii"
  • "quality_gate"
  • "emit_lineage_input"

Type: object

Pre-land quality gates + anomaly signals.

No Additional Properties

Type: array of object
No Additional Items

Each item of this array must be:

Type: object

Type: enum (of string)

Must be one of:

  • "not_null"
  • "unique"
  • "regex"
  • "range"
  • "row_count_anomaly"
  • "freshness"

Type: array of string
No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "ewma"
  • "iqr"
  • "exact"

Type: enum (of string)

Must be one of:

  • "info"
  • "warn"
  • "error"

Additional Properties of any type are allowed.

Type: object

Type: enum (of string) Default: "route_to_dlq"

Must be one of:

  • "route_to_dlq"
  • "abort_run"
  • "best_effort"

Type: array of object
No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "record_count_drop"
  • "record_count_surge"
  • "bytes_per_record_outlier"
  • "latency_outlier"
  • "dlq_rate_spike"
  • "cursor_stalled"
  • "schema_fingerprint_changed"

Type: enum (of string)

Must be one of:

  • "ewma"
  • "iqr"
  • "exact"

Type: enum (of string)

Must be one of:

  • "info"
  • "warn"
  • "error"

Type: object

Cost tracking + budget enforcement.

No Additional Properties

Type: object
No Additional Properties

Type: object
No Additional Properties

Type: integer

Value must be greater or equal to 0

Type: string

Human-readable size with unit suffix (e.g., '50GB', '500MB').

Type: integer

Value must be greater or equal to 0

Type: enum (of string) Default: "warn"

Must be one of:

  • "warn"
  • "abort"

Type: object

Additional Properties of any type are allowed.

Type: object

Type: object

Catalog auto-registration on first apply.

No Additional Properties

Type: array of enum (of string)
No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "datahub"
  • "openmetadata"
  • "datamesh_manager"
  • "unity"
  • "glue"
  • "snowflake_horizon"

Type: enum (of string) Default: "auto"

Must be one of:

  • "auto"
  • "manual"
  • "none"

Type: object

Single-flight concurrency control.

No Additional Properties

Type: object
No Additional Properties

Type: enum (of string) Default: "product"

Must be one of:

  • "product"
  • "build"

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: enum (of string) Default: "abort"

Must be one of:

  • "abort"
  • "queue"
  • "replace"

Type: object
No Additional Properties

Type: boolean Default: true

Type: object

Type: array of string
No Additional Items

Each item of this array must be:

Additional Properties of any type are allowed.

Type: object

Type: object

Type: object

Connector image supply-chain verification.

No Additional Properties

Type: enum (of string) Default: "cosign"

Must be one of:

  • "cosign"

Type: enum (of string) Default: "optional"

Must be one of:

  • "required"
  • "optional"
  • "disabled"

Type: object

Engine deployment mode and target.

No Additional Properties

Type: enum (of string) Default: "embedded"

Must be one of:

  • "embedded"
  • "bring-your-own"
  • "managed"

Type: string

URL for bring-your-own mode.

Type: object

Additional Properties of any type are allowed.

Type: object

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "docker"
  • "kubernetes"
  • "terraform"
  • "opentofu"

Type: enum (of string) Default: "small"

Must be one of:

  • "small"
  • "medium"
  • "large"

Type: object

Additional Properties of any type are allowed.

Type: object

Type: object
No Additional Properties

Additional Properties of any type are allowed.

Type: object

Type: object

Type: object

Engine deployment mode and target.

Same definition as deployment

Additional Properties of any type are allowed.

Type: object

Type: object

Additional Properties of any type are allowed.

Type: object

Type: object

Type: integer Default: 1

Value must be greater or equal to 1

Type: object

Confluent-compatible Schema Registry config. When url is set, the runner injects key.converter/value.converter for Avro into the emitted connector config.

No Additional Properties

Type: stringFormat: uri

Schema Registry HTTP endpoint, e.g. http://schema-registry:8081

Type: object

Additional Properties of any type are allowed.

Type: object

Type: object

Connector image supply-chain verification.

Same definition as image_signature

Type: boolean

Opt-in: derive the Iceberg sink connector config. Defaults OFF when a hand-written sinkconnectorconfig is present (RFC §6.2).

Type: array of string

Explicit topics the derived Iceberg sink consumes (else derived from source streams).

No Additional Items

Each item of this array must be:

Type: object

Operator escape hatch: connector config keys merged LAST over the derived Iceberg sink config.

Each additional property must conform to the following schema

Type: string

Type: object

Optional Iceberg streaming-sink tuning (RFC §6.2). All keys optional.

No Additional Properties

Type: integer

Value must be greater or equal to 1

Additional Properties of any type are allowed.

Type: object

Type: object

Type: enum (of string)

Must be one of:

  • "initial"
  • "schema_only"
  • "never"
  • "when_needed"
  • "always"

Type: object

Engine deployment mode and target.

Same definition as deployment

Additional Properties of any type are allowed.

Type: object

Type: string

Build identifier for multi-build scenarios (e.g., 'batch-processing', 'ml-training').

Same definition as id

Type: string

Human-readable description of this build configuration.

Type: enum (of string) Default: "hybrid-reference"

Build pattern: hybrid-reference (dbt-style), embedded-logic (raw SQL/code), multi-stage (complex pipelines), or acquisition (source-aligned ingestion from external systems).

Must be one of:

  • "hybrid-reference"
  • "embedded-logic"
  • "multi-stage"
  • "acquisition"

Default: "dbt"

Build/ingestion engine. Transformation engines: dbt, sql, python, spark, glue, custom. Adapter-qualified dbt engines (dbt-<adapter>, e.g. dbt-glue, dbt-snowflake, dbt-bigquery) are accepted too and route through the dbt build runner, which derives the adapter from the suffix. Ingestion engines (acquisition pattern only): duckdb (zero-infra files/JDBC), airbyte (350+ SaaS), meltano (Singer 600+ taps), dlt (Python-native), kafka-connect (streaming), debezium (CDC). AWS Glue: glue (Spark ETL jobs managed by Glue).

Type: enum (of string)

Must be one of:

  • "dbt"
  • "sql"
  • "python"
  • "spark"
  • "glue"
  • "custom"
  • "duckdb"
  • "airbyte"
  • "meltano"
  • "dlt"
  • "kafka-connect"
  • "debezium"
Type: object
Must match regular expression: ^dbt-[a-z0-9]+([_-][a-z0-9]+)*$

Type: array of enum (of string)

Capabilities the build asks for (acquisition pattern). Validation enforces capabilities ⊆ runner.declared_capabilities.

All items must be unique

No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "full_refresh"
  • "incremental_append"
  • "incremental_dedup"
  • "incremental_merge"
  • "cdc"
  • "streaming"
  • "schema_discovery"
  • "schema_evolution"
  • "dlp_scan"
  • "at_most_once"
  • "at_least_once"
  • "exactly_once"

Type: string

Type: object

Pattern-specific build properties with conditional validation.

Type: object

Build execution configuration (triggers, runtime, retries).

No Additional Properties

Type: object

Type: enum (of string)

Must be one of:

  • "schedule"
  • "event"
  • "manual"
  • "dependency"
  • "dataset"
  • "schedule_and_dataset"
  • "timetable"

Type: array

NEW in v0.7.0: Can reference data products directly via exposeRef for strong typing and auto-URI generation. Backward compatible with raw URIs.

No Additional Items

Each item of this array must be:


Type: string

Raw dataset URI (legacy, e.g., 'dataset://gcp/project/dataset/table')

Type: object

NEW in v0.7.0: Data product reference with strong typing

Type: enum (of string) Default: "all"

Must be one of:

  • "any"
  • "all"

Type: string

Cron expression for schedule trigger

Type: string Default: "UTC"

Type: object

Custom timetable configuration

Type: object

Type: object

Each additional property must conform to the following schema

Type: string

Type: enum (of string)

Must be one of:

  • "gcp"
  • "aws"
  • "azure"
  • "local"
  • "kubernetes"
  • "composer"
  • "mwaa"
  • "databricks"
  • "snowflake"
  • "athena"
  • "glue"
  • "redshift"

Type: enum (of string)

Must be one of:

  • "LocalExecutor"
  • "CeleryExecutor"
  • "KubernetesExecutor"
  • "SequentialExecutor"

Type: string

Container image for execution

Type: string

Service account for cloud execution

Type: object

Type: integer

Value must be greater or equal to 1

Type: enum (of string)

Must be one of:

  • "fixed"
  • "exponential"
  • "linear"

Type: array
No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "email"
  • "slack"
  • "webhook"
  • "pagerduty"

Type: enum (of string)

Must be one of:

  • "success"
  • "failure"
  • "always"

Type: object

Type: enum (of string)

Must be one of:

  • "airflow"
  • "dagster"
  • "prefect"
  • "kubeflow"
  • "custom"
  • "none"

Type: enum (of string) Default: "generated"

Must be one of:

  • "generated"
  • "manual"
  • "hybrid"

Type: boolean Default: true

Type: object

Type: string
Must match regular expression: ^[a-z0-9_][a-z0-9_.-]*[a-z0-9_]$|^[a-z0-9_]$

Type: object

Type: integer

Value must be greater or equal to 1

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: array of string

Airflow DAG tags (different from FLUID tags)

No Additional Items

Each item of this array must be:

Type: object

Default configuration for all tasks (can be overridden per task)

Type: integer

Value must be greater or equal to 0

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: enum (of string)

Must be one of:

  • "all_success"
  • "all_failed"
  • "all_done"
  • "one_success"
  • "one_failed"
  • "none_failed"
  • "none_skipped"

Type: object

NEW in v0.7.0: Enhanced error categorization and handling

Type: enum (of string) Default: "exponential_backoff"

Must be one of:

  • "fixed"
  • "exponential_backoff"
  • "linear_backoff"

Type: array of string

Error types that should trigger retries

No Additional Items

Each item of this array must be:


Example:

[
    "TemporaryFailure",
    "RateLimitExceeded",
    "ConnectionTimeout",
    "DeadlineExceeded"
]

Type: array of string

Error types that should fail immediately

No Additional Items

Each item of this array must be:


Example:

[
    "ValidationError",
    "SchemaViolation",
    "PermissionDenied",
    "InvalidCredentials"
]

Type: array of object
No Additional Items

Each item of this array must be:

Type: object

Type: enum (of string)

Must be one of:

  • "notify"
  • "create_incident"
  • "log"
  • "custom"

Type: enum (of string)

Must be one of:

  • "low"
  • "medium"
  • "high"
  • "critical"

Type: enum (of string)

Must be one of:

  • "always"
  • "maxAttemptsExceeded"
  • "nonRetryableError"

Type: array

Must contain a minimum of 1 items

No Additional Items

Each item of this array must be:

Type: object

Type: object

Backward compatibility: If 'operator' is specified but not 'type', map operator to type

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.


Must not be:

Type: object

The following properties are required:

  • type

The following properties are required:

  • operator
Type: object

Operator field is deprecated but still works. Maps: FluidExecuteOperator→fluid_execute, BashOperator→bash, etc.

Type: object

NEW in v0.7.0: Validate provider_action tasks have required fields

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: object

The following properties are required:

  • provider
  • action
  • params
Type: object

Validate fluid_execute tasks

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: object

Validate bash tasks

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: object

Validate python tasks

If the conditions in the "If" tab are respected, then the conditions in the "Then" tab should be respected. Otherwise, the conditions in the "Else" tab should be respected.

Type: string
Must match regular expression: ^[a-z0-9_][a-z0-9_.-]*[a-z0-9_]$|^[a-z0-9_]$

Type: enum (of string)

NEW in v0.7.0: Simplified task type taxonomy. Replaces 'operator' field (backward compatible). Types: provideraction (NEW!), fluidvalidate, fluidplan, fluidapply, fluidexecute, fluidverify, fluiddqcheck, bash, python, sensor, or provider-specific operators.

Must be one of:

  • "provider_action"
  • "fluid_validate"
  • "fluid_plan"
  • "fluid_apply"
  • "fluid_execute"
  • "fluid_verify"
  • "fluid_dq_check"
  • "bash"
  • "python"
  • "branch_python"
  • "sensor"
  • "email"
  • "http"
  • "snowflake_query"
  • "bigquery_query"
  • "bigquery_job"
  • "glue_job"
  • "databricks_job"
  • "custom"

Type: string

DEPRECATED in v0.7.0: Use 'type' instead. Maintained for backward compatibility with v0.6.1 contracts. Maps to 'type' automatically (FluidExecuteOperator → fluid_execute, BashOperator → bash).

Type: enum (of string)

NEW in v0.7.0: Provider name when type=provider_action. Examples: aws, gcp, azure, snowflake, databricks.

Must be one of:

  • "aws"
  • "gcp"
  • "azure"
  • "snowflake"
  • "databricks"
  • "kafka"
  • "kubernetes"
  • "local"
  • "custom"

Type: string

NEW in v0.7.0: Provider action when type=provideraction. Format: service.operation (e.g., s3.ensurebucket, table.ensure, kinesis.create_stream).

Must match regular expression: ^[a-z0-9_]+\.[a-z0-9_]+$
Examples:

"s3.ensure_bucket"
"table.ensure"
"database.ensure"
"kinesis.create_stream"
"glue.create_job"
"bigquery.create_table"

Type: string

NEW in v0.7.0: Reference to transformation step in builds[].transformations[]. Links orchestration tasks to build steps for clearer mapping.

Type: array of string
No Additional Items

Each item of this array must be:

Type: object

Additional Properties of any type are allowed.

Type: object

Type: array of object

NEW in v0.7.0: Declares what exposes[] this task produces. Enables automatic dataset registration and lineage tracking.

No Additional Items

Each item of this array must be:

Type: object

Type: string

The exposeId from exposes[] that this task produces

Same definition as id

Type: string

Optional: Airflow dataset URI. Auto-generated from binding.location if not specified.

Type: enum (of string) Default: "replace"

How this task updates the data

Must be one of:

  • "replace"
  • "append"
  • "merge"
  • "upsert"

Type: array of object

NEW in v0.7.0: Tasks can declare dependencies on other data products with version constraints and freshness requirements.

No Additional Items

Each item of this array must be:

Type: object

Task-specific overrides for taskDefaults

Type: object

XCom configuration for inter-task communication (from v0.6.1)

Type: array of object
No Additional Items

Each item of this array must be:

Type: object

Cost tracking (enhanced in v0.7.0)

Type: boolean Default: false

NEW in v0.7.0: Track actual costs vs estimate

Type: number

NEW in v0.7.0: Alert if actual > threshold * estimate (e.g., 1.5 = 150%)

Type: array
No Additional Items

Each item of this array must be:

Type: object

Type: enum (of string)

Must be one of:

  • "FileSensor"
  • "ExternalTaskSensor"
  • "TimeSensor"
  • "HttpSensor"
  • "S3KeySensor"
  • "GCSObjectSensor"
  • "custom"

Type: integer Default: 60

Value must be greater or equal to 1

Type: integer Default: 3600

Value must be greater or equal to 1

Type: enum (of string) Default: "poke"

Must be one of:

  • "poke"
  • "reschedule"

Type: array

List of exposeIds produced by this build.

No Additional Items

Each item of this array must be:

Type: string

Unified identifier pattern: starts/ends with alphanumeric or underscore, allows dots and hyphens in middle. Both casing conventions accepted (snake_case / dotted lowercase / PascalCase / UPPER) so existing catalog ids round-trip unchanged.

Same definition as id

Type: array of object

Dependencies on other builds (for multi-build orchestration).

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Unified identifier pattern: starts/ends with alphanumeric or underscore, allows dots and hyphens in middle. Both casing conventions accepted (snake_case / dotted lowercase / PascalCase / UPPER) so existing catalog ids round-trip unchanged.

Same definition as id

Type: enum (of string)

Must be one of:

  • "success"
  • "completion"
  • "always"

Type: array

Legacy transformations array for backward compatibility.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Path/script identifier (dbt model, sql file, etc.)

Type: array

List of exposeIds materialized by this step. VALIDATION: Tools must validate that every output exists in exposes[].exposeId.

No Additional Items

Each item of this array must be:

Type: string

Unified identifier pattern: starts/ends with alphanumeric or underscore, allows dots and hyphens in middle. Both casing conventions accepted (snake_case / dotted lowercase / PascalCase / UPPER) so existing catalog ids round-trip unchanged.

Same definition as id

Type: array of string

Transformation step tags.

Same definition as tags

Type: array of string

Simple string tags for categorization, discovery, and automation. Consistent pattern used throughout FLUID objects.

Same definition as tags

Type: object

Key-value labels for structured metadata and automation. Consistent pattern used throughout FLUID objects.

Same definition as labels

Type: object

Single build configuration (legacy). Use 'builds' array for multi-modal.

Same definition as builds_items

Type: object

Optional lineage tracking for better data governance.

No Additional Properties

Type: enum (of string) Default: "table_level"

Level of lineage tracking granularity.

Must be one of:

  • "table_level"
  • "field_level"

Type: array of object

Upstream dependencies and their field mappings.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Upstream data product ID.

Same definition as id

Type: string

Upstream expose ID being consumed.

Same definition as id

Type: array of object

Field-level lineage mappings (optional).

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: object
No Additional Properties

Type: enum (of string)

Must be one of:

  • "direct_mapping"
  • "aggregation"
  • "calculation"
  • "lookup"

Type: string

Transformation logic or SQL expression.

Type: enum (of string)

Type of data relationship.

Must be one of:

  • "direct_consumption"
  • "lookup_enrichment"
  • "aggregation"

Type: array of string

Upstream relationship tags.

Same definition as tags

Type: object

Upstream relationship labels.

Same definition as labels

Type: array of object

Known downstream consumers (optional).

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Downstream data product ID.

Same definition as id

Type: enum (of string)

Impact level if this data product changes.

Must be one of:

  • "critical"
  • "high"
  • "medium"
  • "low"

Type: array of string

Downstream relationship tags.

Same definition as tags

Type: object

Downstream relationship labels.

Same definition as labels

Type: array of string

Lineage configuration tags.

Same definition as tags

Type: object

Lineage configuration labels.

Same definition as labels

Type: object

Optional schema evolution strategy for managing changes.

No Additional Properties

Type: enum (of string)

Versioning strategy for schema changes.

Must be one of:

  • "semantic_versioning"
  • "date_based"
  • "sequential"

Type: enum (of string)

Compatibility approach for schema evolution.

Must be one of:

  • "backward_compatible"
  • "forward_compatible"
  • "full_compatible"
  • "breaking"

Type: object
No Additional Properties

Type: integer

Advance notice period for breaking changes.

Value must be greater or equal to 0

Type: boolean

Whether schema changes require approval.

Type: array of string

List of approvers for schema changes.

No Additional Items

Each item of this array must be:

Type: array of string

Change policy tags.

Same definition as tags

Type: object

Change policy labels.

Same definition as labels

Type: array of string

Schema evolution tags.

Same definition as tags

Type: object

Schema evolution labels.

Same definition as labels

Type: object

Optional ML model specifications for MLPipeline kind.

No Additional Properties

Type: boolean Default: false

Type: enum (of string)

Must be one of:

  • "mlflow"
  • "kubeflow"
  • "sagemaker"
  • "vertex_ai"
  • "custom"

Type: array of object
No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Semantic version (semver.org).

Same definition as version

Type: enum (of string)

Must be one of:

  • "classification"
  • "regression"
  • "clustering"
  • "recommendation"
  • "other"

Type: array of string

List of feature names used by this model.

No Additional Items

Each item of this array must be:

Type: string

Target variable for supervised learning.

Type: object
No Additional Properties

Type: array of string

Validation metrics (e.g., accuracy, auc_roc).

No Additional Items

Each item of this array must be:

Type: object

Minimum acceptable metric values.

Each additional property must conform to the following schema

Type: number

Type: array of string

Model validation tags.

Same definition as tags

Type: array of string

ML model tags.

Same definition as tags

Type: array of string

ML configuration tags.

Same definition as tags

Type: object

ML configuration labels.

Same definition as labels

Type: object

Optional environment-specific overrides (dev, staging, prod).

Each additional property must conform to the following schema

Type: object
No Additional Properties

Type: object

Environment-specific metadata overrides.

No Additional Properties

Type: object
No Additional Properties

Type: array of string

Environment-specific metadata tags.

Same definition as tags

Type: object

Environment-specific metadata labels.

Same definition as labels

Type: array of object

Environment-specific expose overrides.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Unified identifier pattern: starts/ends with alphanumeric or underscore, allows dots and hyphens in middle. Both casing conventions accepted (snake_case / dotted lowercase / PascalCase / UPPER) so existing catalog ids round-trip unchanged.

Same definition as id

Type: array of string

Environment-specific expose tags.

Same definition as tags

Type: object

Environment-specific expose labels.

Same definition as labels

Type: array of string

Environment configuration tags.

Same definition as tags

Type: object

Environment configuration labels.

Same definition as labels

Type: object
No Additional Properties

Type: enum (of string)

Unified lifecycle state vocabulary.

Same definition as state

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: object
No Additional Properties

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: string

Reference to replacement data product or expose.

Type: array of string

Deprecation policy tags.

Same definition as tags

Type: object

Deprecation policy labels.

Same definition as labels

Type: array of string

Lifecycle tags for automation.

Same definition as tags

Type: object

Lifecycle labels for governance.

Same definition as labels

Type: object
Same definition as docs

Type: object

NEW in v0.7.1: Jurisdiction and data residency requirements for compliance enforcement.

No Additional Properties
Examples:

{
    "jurisdiction": "EU",
    "allowedRegions": [
        "eu-west-1",
        "eu-central-1"
    ],
    "dataResidency": true,
    "crossBorderTransfer": false,
    "regulatoryFramework": [
        "GDPR"
    ],
    "enforcementMode": "strict"
}
{
    "jurisdiction": "US",
    "allowedRegions": [
        "us-east-1",
        "us-west-2"
    ],
    "dataResidency": true,
    "regulatoryFramework": [
        "CCPA",
        "HIPAA"
    ],
    "enforcementMode": "strict"
}

Type: enum (of string)

Required legal jurisdiction for data storage and processing. Used to validate binding.location matches sovereignty intent.

Must be one of:

  • "EU"
  • "US"
  • "UK"
  • "CA"
  • "AU"
  • "JP"
  • "CN"
  • "IN"
  • "BR"
  • "Global"
  • "Multi-Region"

Examples:

"EU"
"US"
"Global"

Type: array of string

Explicit list of allowed cloud regions. Example: ['eu-west-1', 'eu-central-1'] for EU-only.

All items must be unique

No Additional Items

Each item of this array must be:


Examples:

[
    "eu-west-1",
    "eu-central-1"
]
[
    "us-east-1",
    "us-west-2"
]

Type: array of string

Explicit list of prohibited cloud regions. Takes precedence over allowedRegions.

All items must be unique

No Additional Items

Each item of this array must be:

Type: boolean Default: true

Whether data must remain within jurisdiction boundaries at rest and in transit. True = strict residency.

Type: boolean Default: false

Whether cross-border data transfer is permitted. False = data never leaves jurisdiction.

Type: array of enum (of string)

Allowed legal mechanisms for cross-border transfer (if permitted). Example: ['SCCs', 'BCRs', 'Adequacy'].

All items must be unique

No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "SCCs"
  • "BCRs"
  • "Adequacy"
  • "DPF"
  • "Consent"
  • "Derogation"

Type: array of enum (of string)

Applicable regulatory frameworks. Example: ['GDPR', 'CCPA', 'HIPAA'].

All items must be unique

No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "GDPR"
  • "CCPA"
  • "CPRA"
  • "HIPAA"
  • "PIPEDA"
  • "LGPD"
  • "PDPA"
  • "POPIA"
  • "DPA"
  • "APPI"

Examples:

[
    "GDPR"
]
[
    "GDPR",
    "CCPA"
]
[
    "HIPAA"
]

Type: enum (of string) Default: "strict"

How sovereignty violations are handled. strict = block deployment, advisory = warn, audit = log only.

Must be one of:

  • "strict"
  • "advisory"
  • "audit"

Type: boolean Default: true

Whether binding.location must be validated against sovereignty rules before deployment.

Type: array of string

Sovereignty policy tags.

Same definition as tags

Type: object

Sovereignty policy labels.

Same definition as labels

Type: object

Root-level access policy for automated IAM binding generation. Defines principals, permissions, and resources for data product access control.

No Additional Properties
Example:

{
    "grants": [
        {
            "principal": "group:data-analytics@company.com",
            "permissions": [
                "read",
                "select",
                "query"
            ]
        },
        {
            "principal": "serviceAccount:pipeline@project.iam.gserviceaccount.com",
            "permissions": [
                "write",
                "insert",
                "update",
                "delete"
            ]
        }
    ]
}

Type: array of object

List of access grants to principals (users, groups, service accounts).

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Identity receiving access. Format: 'user:email@domain.com', 'group:name@domain.com', 'serviceAccount:name@project.iam.gserviceaccount.com'


Examples:

"group:data-analytics@company.com"
"serviceAccount:pipeline@project.iam.gserviceaccount.com"
"user:analyst@company.com"

Type: array of enum (of string)

Permissions to grant. Will be mapped to provider-specific roles (e.g., BigQuery roles).

All items must be unique

No Additional Items

Each item of this array must be:

Type: enum (of string)

Must be one of:

  • "read"
  • "select"
  • "query"
  • "write"
  • "insert"
  • "update"
  • "delete"
  • "create"
  • "admin"
  • "manage"

Examples:

[
    "read",
    "select"
]
[
    "write",
    "insert",
    "update"
]

Type: array of string

Resources this grant applies to. JSONPath expressions referencing exposes[] items. If omitted, applies to all exposed resources.

No Additional Items

Each item of this array must be:


Examples:

"$.exposes[?(@.exposeId=='customer_table')]"
"$.exposes[?(@.kind=='table')]"

Type: object

Optional conditions for conditional access (e.g., IP restrictions, time windows).

Additional Properties of any type are allowed.

Type: object

Type: object

Top-level orchestration configuration for scheduling and workflow engines.

Type: enum (of string)

Must be one of:

  • "airflow"
  • "dagster"
  • "prefect"
  • "kubeflow"
  • "custom"
  • "none"

Type: enum (of string) Default: "generated"

Must be one of:

  • "generated"
  • "manual"
  • "hybrid"

Type: boolean Default: true

Type: object

Type: object

Type: object

NEW in v0.7.3: Retention durations for run state, run logs, lineage events, and DLQ records. Honored by the retention sweeper invoked from policy-apply.

No Additional Properties

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: string

ISO-8601 duration (e.g., P1D, PT15M, P2Y6M).

Same definition as window

Type: array

NEW in v0.7.6: Declared downstream consumers of this data product — the business artifacts built on it (dashboards, notebooks, analyses, ML apps). Shape follows dbt exposures so existing dbt exposure definitions map field-for-field. Purely declarative and additive: consumers never affect plan/apply. RESERVED, not yet consumed — no code reads this key today; it is carried verbatim into plan.json and the contract COMMENT so it survives round-trip, and is intended to feed lineage terminal nodes and impact statements ('Affects: Revenue dashboard') in a later release.

No Additional Items

Each item of this array must be:

Type: object
No Additional Properties

Type: string

Stable identifier for this consumer (unique within the contract).

Same definition as id

Type: string

Human-facing display name, e.g. "Weekly Revenue Dashboard".

Type: enum (of string)

What kind of artifact consumes this product.

Must be one of:

  • "dashboard"
  • "notebook"
  • "analysis"
  • "ml"
  • "application"

Type: object
No Additional Properties

Type: string

Owning team for this consumer (routable identity, as in metadata.owner).

Type: stringFormat: email

Contact address for the consumer's owner.

Type: string

Link to the live artifact (dashboard URL, notebook, app).

Type: enum (of string)

How production-hardened the consumer is (dbt exposures semantics).

Must be one of:

  • "high"
  • "medium"
  • "low"

Type: array

Which output ports this consumer reads. Absent = all exposes.

No Additional Items

Each item of this array must be:

Type: string

Unified identifier pattern: starts/ends with alphanumeric or underscore, allows dots and hyphens in middle. Both casing conventions accepted (snake_case / dotted lowercase / PascalCase / UPPER) so existing catalog ids round-trip unchanged.

Same definition as id

Type: object

Contract-level governance: account/project-wide settings (e.g. AWS Lake Formation admins and LF-tag definitions). Per-resource grants and tag associations live under binding.governance.

No Additional Properties

Type: object

AWS Lake Formation account-wide settings: data-lake admins and LF-tag (TBAC) definitions. Applies to the AWS account the contract's IaC apply targets.

No Additional Properties

Type: array of string

IAM principal ARNs (roles or users) granted Lake Formation admin privileges. Emitted as awslakeformationdatalakesettings.admins. AUTHORITATIVE, not additive: Lake Formation's PutDataLakeSettings replaces the account's admin list with the one sent, so an admin NOT listed here is REMOVED on apply. List every principal that must stay a data lake admin, including the role or user that runs the apply: left out, it loses Lake Formation admin on that apply, and the Lake Formation grants and registrations that need an admin can then fail. The terraform-provider-aws resource also clears the data lake settings its configuration omits, and this block sets only the admins, so the account's create-database and create-table default permissions (the IAMAllowedPrincipals default for new databases and tables), trusted resource owners and parameters are cleared too. Destroying the resource empties the admin list and resets CROSSACCOUNTVERSION to 1. Re-applying the same list is a no-op.

All items must be unique

No Additional Items

Each item of this array must be:

Type: string
Must match regular expression: ^arn:aws[a-z0-9-]*:iam::

Type: object

LF-TBAC tag-key definitions. Each entry is a tag key mapped to its allowed string values. Emitted as one awslakeformationlf_tag per key; values are the tag's allowed-values list. Field idiom borrowed from OpenMetadata's classification-label model — see ODCS roles + OpenMetadata data contracts spec.

Each additional property must conform to the following schema

Type: array of string

Must contain a minimum of 1 items

All items must be unique

No Additional Items

Each item of this array must be:

Type: object

NEW in v0.7.6: Contract-wide packaging default — declarative container ownership (isolated = this product creates and owns its infrastructure containers; shared = containers are pre-existing, platform-owned pools the product writes into but does not own). Overridable per exposure via binding.packaging. An ABSENT block means legacy behavior: the IaC emit is byte-identical to pre-packaging releases.

Same definition as packaging