# Collection checks


Setup: the imports every example on this page uses

``` python
import tempfile
from typing import Annotated

import dagster as dg
import dataframely as dy
import polars as pl

import dagster_dataframely as dd
from dagster_dataframely.data import OrdersSchema, ParquetIOManager, storefront_orders
```


A Dataframely `Collection` groups several tables. Its `@dy.filter` methods are its collection filters. They state the relations between the tables. A foreign key is one such relation. `dd.build_collection_checks` reports each collection filter as an asset check on assets you already declare.

The checks never change a table. A row that fails a collection filter stays in its table, and the collection filter's check fails.


# Declaring the checks

Declare one asset per member, each with the member's own schema. Then pass the Collection and its member assets to `dd.build_collection_checks`:


``` python
class CustomersSchema(dy.Schema):
    email = dy.String(primary_key=True)


class Shop(dy.Collection):
    orders: dy.LazyFrame[OrdersSchema]
    customers: Annotated[
        dy.LazyFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        """Every order's customer exists."""
        return self.orders.join(self.customers, on="email", how="semi")


@dd.asset(CustomersSchema)
def customers() -> pl.DataFrame:
    return (
        storefront_orders
        .select("email")
        .unique()
        .filter(pl.col("email") != "jo@example.com")
    )


@dd.asset(OrdersSchema)
def orders() -> pl.DataFrame:
    return storefront_orders


shop_checks = dd.build_collection_checks(
    Shop, members={"orders": orders, "customers": customers}
)

[
    (spec.asset_key.to_user_string(), spec.name, spec.description)
    for spec in shop_checks.check_specs
]
```


    [('orders',
      'dy_filter__order_references_customer',
      "Every order's customer exists.")]


`members` maps each member's name to its asset: the `dg.AssetsDefinition` that `dd.asset` returns, or a `dg.AssetSpec`. `dd.build_collection_checks` returns one `dg.AssetChecksDefinition`, which goes in `dg.Definitions(asset_checks=[...])`. Dagster runs every check in it in one step, named after the Collection in snake case unless you pass `name=`.

Each collection filter has one check on each member without `ignored_in_filters=True`:

- **Its name is `dy_filter__<name>`.** [Naming](naming.md) lists the other names in the reserved `dy_` namespace.
- **It depends on the other members in `members`**, so the asset graph shows the check reading `customers`.
- **Its description is the collection filter's docstring**, or the collection filter's name when it has none.


## A foreign key needs `ignored_in_filters=True` on the table it references

Dataframely compares members only on their common primary key. Dataframely raises when you define a Collection that has a collection filter and whose members without `ignored_in_filters=True` have no primary-key column in common:


``` python
try:

    class NoSharedKey(dy.Collection):
        orders: dy.LazyFrame[OrdersSchema]
        customers: dy.LazyFrame[CustomersSchema]

        @dy.filter()
        def order_references_customer(self) -> pl.LazyFrame:
            return self.orders.join(self.customers, on="email", how="semi")

except dy.exc.ImplementationError as error:
    print(error)
```


    Members of a collection must have an overlapping primary key if they use filters or failure-propagation, but did not find any.


So `Shop` sets `ignored_in_filters=True` on `customers`. The common primary key is then `order_id` and `line_no`, and the collection filter returns the order lines to keep. Only `orders` has a check.


## Members that share a primary key each have a check

A child table's primary key includes its parent's, so neither member needs `ignored_in_filters=True`:


``` python
class InvoicesSchema(dy.Schema):
    invoice_id = dy.Int64(primary_key=True)


class InvoiceLinesSchema(dy.Schema):
    invoice_id = dy.Int64(primary_key=True)
    line = dy.Int64(primary_key=True)


class InvoiceBook(dy.Collection):
    invoices: dy.LazyFrame[InvoicesSchema]
    lines: dy.LazyFrame[InvoiceLinesSchema]

    @dy.filter()
    def invoice_has_lines(self) -> pl.LazyFrame:
        return self.invoices.join(self.lines, on="invoice_id", how="semi")


book_checks = dd.build_collection_checks(
    InvoiceBook,
    members={"invoices": dg.AssetSpec("invoices"), "lines": dg.AssetSpec("lines")},
)

[(spec.asset_key.to_user_string(), spec.name) for spec in book_checks.check_specs]
```


    [('invoices', 'dy_filter__invoice_has_lines'),
     ('lines', 'dy_filter__invoice_has_lines')]


An invoice with no lines fails the check on `invoices`, and a line whose invoice does not exist fails the check on `lines`.


# What a run reports

The run below writes order `ORD-0010`, whose customer does not exist. It also selects `order_count`, an asset downstream of `orders`:


``` python
@dg.asset
def order_count(orders: pl.DataFrame) -> int:
    return orders.height


with tempfile.TemporaryDirectory() as storage:
    result = dg.materialize(
        [customers, orders, order_count, shop_checks],
        resources={"io_manager": ParquetIOManager(base_dir=storage)},
        raise_on_error=False,
    )
    orders_table = pl.read_parquet(f"{storage}/orders.parquet")

[evaluation] = [
    evaluation
    for evaluation in result.get_asset_check_evaluations()
    if evaluation.check_name.startswith("dy_filter__")
]
metadata = evaluation.metadata
{
    "passed": evaluation.passed,
    "severity": evaluation.severity,
    "description": evaluation.description,
    "dataframely/failed_row_count": metadata["dataframely/failed_row_count"].value,
    "dataframely/failed_examples": [
        dict(record.data) for record in metadata["dataframely/failed_examples"].records
    ],
}
```


    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_START - Started execution of step "customers".
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - customers - Writing file at: /tmp/tmpnxrxpzq2/customers.parquet using ParquetIOManager...
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - ASSET_MATERIALIZATION - Materialized value customers.
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_schema__columns" of type "Any". (Type check passed).
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'customers' passed. Description: 'Every column matches.'
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__primary_key" of type "Any". (Type check passed).
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'customers' passed. Description: 'No row failed.'
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__email__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'customers' passed. Description: 'No row failed.'
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - customers - STEP_SUCCESS - Finished execution of step "customers" in 42ms.
    2026-10-22 02:11:19 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_START - Started execution of step "orders".
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - orders - Writing file at: /tmp/tmpnxrxpzq2/orders.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_MATERIALIZATION - Materialized value orders.
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_schema__columns" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'orders' passed. Description: 'Every column matches.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__paid_orders_have_amount" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__paid_orders_have_amount' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_numbers_are_dense" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_numbers_are_dense' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__primary_key" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__regex" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__regex' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__min" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__check__lowercase" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__check__lowercase' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__max_length" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__max_length' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__min" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__min" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__max" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__max' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__priority__is_in" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__priority__is_in' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__status__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__status__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tracking_id__unique" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tracking_id__unique' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__is_gift__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__is_gift__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__ordered_at__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__ordered_at__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__max_length" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__max_length' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__inner_nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__inner_nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__note__check" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__note__check' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - orders - STEP_SUCCESS - Finished execution of step "orders" in 134ms.
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_START - Started execution of step "shop".
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - shop - Loading file from: /tmp/tmpnxrxpzq2/customers.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - LOADED_INPUT - Loaded input "customers" using input manager "io_manager", from output "result" of step "customers"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - shop - Loading file from: /tmp/tmpnxrxpzq2/orders.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - LOADED_INPUT - Loaded input "orders" using input manager "io_manager", from output "result" of step "orders"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_INPUT - Got input "customers" of type "LazyFrame". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_INPUT - Got input "orders" of type "LazyFrame". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_OUTPUT - Yielded output "orders_dy_filter__order_references_customer" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - ASSET_CHECK_EVALUATION - Asset check 'dy_filter__order_references_customer' on 'orders' did not pass. Description: '1 row failed.'
    2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - shop - STEP_FAILURE - Execution of step "shop" failed.

    dagster._core.errors.DagsterAssetCheckFailedError: 1 blocking asset check failed with ERROR severity:
    orders: dy_filter__order_references_customer

    Stack Trace:
      File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_plan.py", line 243, in dagster_event_sequence_for_step
        yield from check.generator(step_events)
      File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_step.py", line 543, in core_dagster_event_sequence_for_step
        raise DagsterAssetCheckFailedError(

    2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - order_count - Dependencies for step order_count failed: ['shop']. Not executing.
    /home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
      pass
    RuntimeWarning: Enable tracemalloc to get the object allocation traceback
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 223ms
    2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 6376b21c-ee30-4898-8e30-be0bd7ca029e - 3818 - RUN_FAILURE - Execution of run for "__ephemeral_asset_job__" failed. Steps failed: ['shop'].


    {'passed': False,
     'severity': <AssetCheckSeverity.ERROR: 'ERROR'>,
     'description': '1 row failed.',
     'dataframely/failed_row_count': 1,
     'dataframely/failed_examples': [{'order_id': 'ORD-0010',
       'line_no': 1,
       'email': 'jo@example.com',
       'amount': '512.40',
       'quantity': 6,
       'priority': 1,
       'status': 'shipped',
       'tracking_id': 'TRK-ORD-0010-1',
       'is_gift': False,
       'ordered_at': '2026-08-05 15:30:00',
       'fulfilled_in': '1 day, 6:00:00',
       'tags': "['bulk', 'priority']",
       'note': 'Split across two pallets.'}]}


The check reads each member's table as the member's asset wrote it. It evaluates only the collection filters, not the rules of each member's schema. So check each member's rules on the member's own asset: declare it with `dd.asset`, or check it with [`dd.build_rule_checks`](rule-checks.md).

A failing check's metadata has up to three keys:

| key | value |
|----|----|
| `dataframely/filter` | the collection filter's name, which a passing check has too |
| `dataframely/failed_row_count` | how many of the member's rows failed the collection filter |
| `dataframely/failed_examples` | up to `max_failure_examples` of those rows |

A passing check's description is `No row failed.`

**A run writes the failure examples to the Dagster event log unredacted.** `max_failure_examples=` sets how many, and [Settings](settings.md) lists its sources.


## A failing row stays in its table

A failing `"error"` check fails the run and stops the assets downstream of `orders` in that run, so the run does not materialize `order_count`:


``` python
(
    result.success,
    sorted(
        event.asset_key.to_user_string()
        for event in result.get_asset_materialization_events()
    ),
)
```


    (False, ['customers', 'orders'])


Order `ORD-0010` is still in the `orders` table:


``` python
orders_table
```


shape: (12, 13)

| order_id | line_no | email | amount | quantity | priority | status | tracking_id | is_gift | ordered_at | fulfilled_in | tags | note |
|----|----|----|----|----|----|----|----|----|----|----|----|----|
| str | i32 | str | decimal\[10,2\] | i32 | i32 | enum | str | bool | datetime\[μs\] | duration\[μs\] | list\[str\] | str |
| "ORD-0001" | 1 | "ada@example.com" | 125.00 | 2 | 1 | "shipped" | "TRK-ORD-0001-1" | false | 2026-08-01 09:00:00 | 1d 2h | \["priority"\] | null |
| "ORD-0001" | 2 | "ada@example.com" | 18.50 | 1 | 1 | "shipped" | "TRK-ORD-0001-2" | false | 2026-08-01 09:00:00 | 1d 2h | \["priority"\] | null |
| "ORD-0002" | 1 | "bo@example.com" | 340.00 | 4 | 2 | "paid" | "TRK-ORD-0002-1" | true | 2026-08-01 14:30:00 | 3h | \["gift", "fragile"\] | "Leave with the neighbour." |
| "ORD-0003" | 1 | "cyd@example.com" | 12.99 | 1 | null | "new" | "TRK-ORD-0003-1" | false | 2026-08-02 08:15:00 | null | null | null |
| "ORD-0004" | 1 | "dev@example.com" | 89.95 | 3 | 3 | "shipped" | "TRK-ORD-0004-1" | false | 2026-08-02 11:45:00 | 2d 2h | \["bulk"\] | null |
| … | … | … | … | … | … | … | … | … | … | … | … | … |
| "ORD-0006" | 2 | "fay@example.com" | 75.00 | 1 | 1 | "paid" | "TRK-ORD-0006-2" | true | 2026-08-03 19:05:00 | 1h 30m | \["gift"\] | null |
| "ORD-0007" | 1 | "gus@example.com" | 45.00 | 2 | null | "new" | "TRK-ORD-0007-1" | false | 2026-08-04 07:40:00 | null | null | null |
| "ORD-0008" | 1 | "hal@example.com" | 199.00 | 1 | 3 | "shipped" | "TRK-ORD-0008-1" | true | 2026-08-04 12:10:00 | 3d | \["gift"\] | null |
| "ORD-0009" | 1 | "ivy@example.com" | 6.75 | 1 | 2 | "paid" | "TRK-ORD-0009-1" | false | 2026-08-05 09:55:00 | 2h | null | null |
| "ORD-0010" | 1 | "jo@example.com" | 512.40 | 6 | 1 | "shipped" | "TRK-ORD-0010-1" | false | 2026-08-05 15:30:00 | 1d 6h | \["bulk", "priority"\] | "Split across two pallets." |


A later run that selects only `order_count` reads order `ORD-0010`.


## A run evaluates the checks of the members it selects

A run that selects `orders` alone evaluates the check on `orders`, and reads `customers` as the last run wrote it. A run that selects `customers` alone evaluates no check on `orders`, because Dagster selects a check by the asset it is on:


``` python
def list_evaluated_checks(selection: str, storage: str) -> list[str]:
    run = dg.materialize(
        [customers, orders, shop_checks],
        resources={"io_manager": ParquetIOManager(base_dir=storage)},
        selection=selection,
        raise_on_error=False,
    )
    return [
        f"{evaluation.asset_key.to_user_string()}/{evaluation.check_name}"
        for evaluation in run.get_asset_check_evaluations()
        if evaluation.check_name.startswith("dy_filter__")
    ]


with tempfile.TemporaryDirectory() as storage:
    list_evaluated_checks("*", storage)
    by_selection = {
        selection: list_evaluated_checks(selection, storage)
        for selection in ("orders", "customers")
    }

by_selection
```


    /home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/definitions/antlr_asset_selection/antlr_asset_selection.py:97: BetaWarning: Parameter `include_sources` of function `AssetSelection.all` is currently in beta, and may have breaking changes in minor version releases, with behavior changes in patch releases.
      return AssetSelection.all(include_sources=self.include_sources)
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_START - Started execution of step "customers".
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - customers - Writing file at: /tmp/tmp5vp6w4tr/customers.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - ASSET_MATERIALIZATION - Materialized value customers.
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_schema__columns" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'customers' passed. Description: 'Every column matches.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__primary_key" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'customers' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__email__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'customers' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - customers - STEP_SUCCESS - Finished execution of step "customers" in 32ms.
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_START - Started execution of step "orders".
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - orders - Writing file at: /tmp/tmp5vp6w4tr/orders.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_MATERIALIZATION - Materialized value orders.
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_schema__columns" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'orders' passed. Description: 'Every column matches.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__paid_orders_have_amount" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__paid_orders_have_amount' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_numbers_are_dense" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_numbers_are_dense' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__primary_key" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__regex" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__regex' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__min" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__check__lowercase" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__check__lowercase' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__max_length" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__max_length' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__min" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__min" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__max" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__max' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__priority__is_in" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__priority__is_in' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__status__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__status__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tracking_id__unique" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tracking_id__unique' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__is_gift__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__is_gift__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__ordered_at__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__ordered_at__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__max_length" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__max_length' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__inner_nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__inner_nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__note__check" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__note__check' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - orders - STEP_SUCCESS - Finished execution of step "orders" in 138ms.
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_START - Started execution of step "shop".
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - shop - Loading file from: /tmp/tmp5vp6w4tr/customers.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - LOADED_INPUT - Loaded input "customers" using input manager "io_manager", from output "result" of step "customers"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - shop - Loading file from: /tmp/tmp5vp6w4tr/orders.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - LOADED_INPUT - Loaded input "orders" using input manager "io_manager", from output "result" of step "orders"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_INPUT - Got input "customers" of type "LazyFrame". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_INPUT - Got input "orders" of type "LazyFrame". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_OUTPUT - Yielded output "orders_dy_filter__order_references_customer" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - ASSET_CHECK_EVALUATION - Asset check 'dy_filter__order_references_customer' on 'orders' did not pass. Description: '1 row failed.'
    2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - shop - STEP_FAILURE - Execution of step "shop" failed.

    dagster._core.errors.DagsterAssetCheckFailedError: 1 blocking asset check failed with ERROR severity:
    orders: dy_filter__order_references_customer

    Stack Trace:
      File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_plan.py", line 243, in dagster_event_sequence_for_step
        yield from check.generator(step_events)
      File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_step.py", line 543, in core_dagster_event_sequence_for_step
        raise DagsterAssetCheckFailedError(

    /home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
      pass
    RuntimeWarning: Enable tracemalloc to get the object allocation traceback
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 211ms
    2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - b64d8cd9-5b57-4e33-b553-9ee8f3e2d7ac - 3818 - RUN_FAILURE - Execution of run for "__ephemeral_asset_job__" failed. Steps failed: ['shop'].
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_START - Started execution of step "orders".
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - orders - Writing file at: /tmp/tmp5vp6w4tr/orders.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_MATERIALIZATION - Materialized value orders.
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_schema__columns" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'orders' passed. Description: 'Every column matches.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__paid_orders_have_amount" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__paid_orders_have_amount' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_numbers_are_dense" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_numbers_are_dense' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__primary_key" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__regex" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__regex' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__min" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__check__lowercase" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__check__lowercase' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__max_length" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__max_length' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__min" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__min" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__max" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__max' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__priority__is_in" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__priority__is_in' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__status__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__status__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tracking_id__unique" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tracking_id__unique' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__is_gift__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__is_gift__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__ordered_at__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__ordered_at__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__max_length" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__max_length' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__inner_nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__inner_nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__note__check" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__note__check' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - orders - STEP_SUCCESS - Finished execution of step "orders" in 132ms.
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_START - Started execution of step "shop".
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - shop - Loading file from: /tmp/tmp5vp6w4tr/customers.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - LOADED_INPUT - Loaded input "customers" using input manager "io_manager"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - shop - Loading file from: /tmp/tmp5vp6w4tr/orders.parquet using ParquetIOManager...
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - LOADED_INPUT - Loaded input "orders" using input manager "io_manager", from output "result" of step "orders"
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_INPUT - Got input "customers" of type "LazyFrame". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_INPUT - Got input "orders" of type "LazyFrame". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_OUTPUT - Yielded output "orders_dy_filter__order_references_customer" of type "Any". (Type check passed).
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - ASSET_CHECK_EVALUATION - Asset check 'dy_filter__order_references_customer' on 'orders' did not pass. Description: '1 row failed.'
    2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - shop - STEP_FAILURE - Execution of step "shop" failed.

    dagster._core.errors.DagsterAssetCheckFailedError: 1 blocking asset check failed with ERROR severity:
    orders: dy_filter__order_references_customer

    Stack Trace:
      File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_plan.py", line 243, in dagster_event_sequence_for_step
        yield from check.generator(step_events)
      File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_step.py", line 543, in core_dagster_event_sequence_for_step
        raise DagsterAssetCheckFailedError(

    /home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
      pass
    RuntimeWarning: Enable tracemalloc to get the object allocation traceback
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 169ms
    2026-10-22 02:11:20 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 04913b79-c72d-4d72-b016-c96fd3c1cc15 - 3818 - RUN_FAILURE - Execution of run for "__ephemeral_asset_job__" failed. Steps failed: ['shop'].
    2026-10-22 02:11:20 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_START - Started execution of step "customers".
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - customers - Writing file at: /tmp/tmp5vp6w4tr/customers.parquet using ParquetIOManager...
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - ASSET_MATERIALIZATION - Materialized value customers.
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_schema__columns" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'customers' passed. Description: 'Every column matches.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__primary_key" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'customers' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__email__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'customers' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - customers - STEP_SUCCESS - Finished execution of step "customers" in 33ms.
    /home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
      pass
    RuntimeWarning: Enable tracemalloc to get the object allocation traceback
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 42ms
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 8fe6e5fd-3eea-4d55-a436-bdfd2d3e7800 - 3818 - RUN_SUCCESS - Finished execution of run for "__ephemeral_asset_job__".


    {'orders': ['orders/dy_filter__order_references_customer'], 'customers': []}


To check the foreign key in a run that rewrites `customers`, select the check on `orders` too.


# Severity

A collection filter's severity is `"error"` unless the Collection declares `"warn"`, in the class attribute `__dagster_dataframely__`. It takes the forms a schema's attribute takes: one value for every collection filter, or a mapping from collection filter name to value. Write it without an annotation, because Dataframely raises for any Collection annotation that is not a frame:


``` python
class LenientShop(dy.Collection):
    __dagster_dataframely__ = {"severity": {"order_references_customer": "warn"}}

    orders: dy.LazyFrame[OrdersSchema]
    customers: Annotated[
        dy.LazyFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        return self.orders.join(self.customers, on="email", how="semi")


lenient_checks = dd.build_collection_checks(
    LenientShop, members={"orders": orders, "customers": customers}
)

[(spec.name, spec.blocking) for spec in lenient_checks.check_specs]
```


    [('dy_filter__order_references_customer', False)]


An `"error"` check is blocking and fails at `ERROR`. A `"warn"` check is not blocking and fails at `WARN`, as dagster-dbt sets a dbt test. [Rule severity](rule-severity.md) covers the declaration on a schema.


# How the checks read the members

**Each input has the type the Collection declares.** A `dy.LazyFrame[...]` member is a `pl.LazyFrame` input, which [ParquetIOManager](../reference/data.ParquetIOManager.md#dagster_dataframely.data.ParquetIOManager) loads as a scan. A `dy.DataFrame[...]` member is a `pl.DataFrame` input. A pickling IO manager such as `dg.FilesystemIOManager` loads the `pl.DataFrame` the asset wrote. Dagster then fails the step with `DagsterTypeCheckDidNotPass` for a lazy member, so declare eager members when you use one:


``` python
class EagerShop(dy.Collection):
    orders: dy.DataFrame[OrdersSchema]
    customers: Annotated[
        dy.DataFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        return self.orders.join(self.customers, on="email", how="semi").lazy()


eager_checks = dd.build_collection_checks(
    EagerShop, members={"orders": orders, "customers": customers}
)

with tempfile.TemporaryDirectory() as storage:
    eager_result = dg.materialize(
        [customers, orders, eager_checks],
        resources={"io_manager": dg.FilesystemIOManager(base_dir=storage)},
        raise_on_error=False,
    )

[
    (evaluation.check_name, evaluation.passed)
    for evaluation in eager_result.get_asset_check_evaluations()
    if evaluation.check_name.startswith("dy_filter__")
]
```


    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - RUN_START - Started execution of run for "__ephemeral_asset_job__".
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - ENGINE_EVENT - Executing steps in process (pid: 3818)
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - RESOURCE_INIT_STARTED - Starting initialization of resources [io_manager].
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - RESOURCE_INIT_SUCCESS - Finished initialization of resources [io_manager].
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - LOGS_CAPTURED - Capturing logs for process (pid: 3818).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_START - Started execution of step "customers".
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - customers - Writing file at: /tmp/tmp2ultxsp1/customers using PickledObjectFilesystemIOManager...
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - ASSET_MATERIALIZATION - Materialized value customers.
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_schema__columns" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'customers' passed. Description: 'Every column matches.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__primary_key" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'customers' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_OUTPUT - Yielded output "customers_dy_rule__email__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'customers' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - customers - STEP_SUCCESS - Finished execution of step "customers" in 32ms.
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_START - Started execution of step "orders".
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "result" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - orders - Writing file at: /tmp/tmp2ultxsp1/orders using PickledObjectFilesystemIOManager...
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_MATERIALIZATION - Materialized value orders.
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - HANDLED_OUTPUT - Handled output "result" using IO manager "io_manager"
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_schema__columns" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_schema__columns' on 'orders' passed. Description: 'Every column matches.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__paid_orders_have_amount" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__paid_orders_have_amount' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_numbers_are_dense" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_numbers_are_dense' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__primary_key" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__primary_key' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__order_id__regex" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__order_id__regex' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__line_no__min" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__line_no__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__check__lowercase" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__check__lowercase' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__email__max_length" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__email__max_length' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__amount__min" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__amount__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__min" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__min' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__quantity__max" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__quantity__max' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__priority__is_in" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__priority__is_in' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__status__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__status__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tracking_id__unique" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tracking_id__unique' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__is_gift__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__is_gift__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__ordered_at__nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__ordered_at__nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__max_length" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__max_length' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__tags__inner_nullability" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__tags__inner_nullability' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_OUTPUT - Yielded output "orders_dy_rule__note__check" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - ASSET_CHECK_EVALUATION - Asset check 'dy_rule__note__check' on 'orders' passed. Description: 'No row failed.'
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - orders - STEP_SUCCESS - Finished execution of step "orders" in 137ms.
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_START - Started execution of step "eager_shop".
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - eager_shop - Loading file from: /tmp/tmp2ultxsp1/customers using PickledObjectFilesystemIOManager...
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - LOADED_INPUT - Loaded input "customers" using input manager "io_manager", from output "result" of step "customers"
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - eager_shop - Loading file from: /tmp/tmp2ultxsp1/orders using PickledObjectFilesystemIOManager...
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - LOADED_INPUT - Loaded input "orders" using input manager "io_manager", from output "result" of step "orders"
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_INPUT - Got input "customers" of type "DataFrame". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_INPUT - Got input "orders" of type "DataFrame". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_OUTPUT - Yielded output "orders_dy_filter__order_references_customer" of type "Any". (Type check passed).
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - ASSET_CHECK_EVALUATION - Asset check 'dy_filter__order_references_customer' on 'orders' did not pass. Description: '1 row failed.'
    2026-10-22 02:11:21 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - eager_shop - STEP_FAILURE - Execution of step "eager_shop" failed.

    dagster._core.errors.DagsterAssetCheckFailedError: 1 blocking asset check failed with ERROR severity:
    orders: dy_filter__order_references_customer

    Stack Trace:
      File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_plan.py", line 243, in dagster_event_sequence_for_step
        yield from check.generator(step_events)
      File "/home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/plan/execute_step.py", line 543, in core_dagster_event_sequence_for_step
        raise DagsterAssetCheckFailedError(

    /home/runner/work/dagster-dataframely/dagster-dataframely/.venv/lib/python3.12/site-packages/dagster/_core/execution/context_creation_job.py:273: RuntimeWarning: coroutine 'BaseEventLoop.shutdown_asyncgens' was never awaited
      pass
    RuntimeWarning: Enable tracemalloc to get the object allocation traceback
    2026-10-22 02:11:21 +0000 - dagster - DEBUG - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - ENGINE_EVENT - Finished steps in process (pid: 3818) in 209ms
    2026-10-22 02:11:21 +0000 - dagster - ERROR - __ephemeral_asset_job__ - 9084f5ea-9f8f-4259-aabe-7af637931a13 - 3818 - RUN_FAILURE - Execution of run for "__ephemeral_asset_job__" failed. Steps failed: ['eager_shop'].


    [('dy_filter__order_references_customer', False)]


**The checks read every member's whole table**, so `dd.build_collection_checks` raises [InvalidMembersError](../reference/errors.InvalidMembersError.md#dagster_dataframely.errors.InvalidMembersError) for a partitioned member. A collection filter evaluated in each partition alone would fail an order whose customer is in another partition.

**An optional member can be left out of `members`**, and the checks then do not read it:


``` python
class PromosSchema(dy.Schema):
    email = dy.String(primary_key=True)


class ShopWithPromos(dy.Collection):
    orders: dy.LazyFrame[OrdersSchema]
    customers: Annotated[
        dy.LazyFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]
    promos: Annotated[
        dy.LazyFrame[PromosSchema] | None, dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        return self.orders.join(self.customers, on="email", how="semi")


promo_checks = dd.build_collection_checks(
    ShopWithPromos, members={"orders": orders, "customers": customers}
)

[input_def.name for input_def in promo_checks.node_def.input_defs]
```


    ['customers', 'orders']


**A collection filter that returns a primary key twice can make another collection filter's check count a row twice.** Dataframely's `@dy.filter` docstring states that duplicate primary keys "might introduce duplicate rows". Return each primary key once, as a semi-join does.


# Errors

`dd.build_collection_checks` raises when you call it. It raises [InvalidMembersError](../reference/errors.InvalidMembersError.md#dagster_dataframely.errors.InvalidMembersError) for four mistakes in `members`:

- a required member left out, including a member with `ignored_in_filters=True`, which Dataframely still requires;
- a name that is not a member of the Collection;
- a definition of several assets, such as a `@dg.multi_asset`, in place of the member's `dg.AssetSpec`;
- a partitioned asset.


``` python
@dg.multi_asset(specs=[dg.AssetSpec("orders"), dg.AssetSpec("customers")])
def warehouse(): ...


daily = dg.DailyPartitionsDefinition("2026-01-01")
mistakes = {
    "left out": {"orders": orders},
    "unknown": {"orders": orders, "customers": customers, "refunds": orders},
    "several assets": {"orders": warehouse, "customers": customers},
    "partitioned": {
        "orders": dg.AssetSpec("orders", partitions_def=daily),
        "customers": customers,
    },
}

for mistake, members in mistakes.items():
    try:
        dd.build_collection_checks(Shop, members=members)
    except dd.errors.InvalidMembersError as error:
        print(f"{mistake}: {error}")
```


    left out: `members` lacks the required member 'customers' of Shop. The members of Shop are 'orders', 'customers'.
    unknown: `members` names 'refunds', which is not a member of Shop. The members of Shop are 'orders', 'customers'.
    several assets: `members` maps 'orders' to a definition of several assets. Pass the member's `dg.AssetSpec` from its `specs`. The members of Shop are 'orders', 'customers'.
    partitioned: `members` maps 'orders' to a partitioned asset, and the checks read every member's whole table. Pass unpartitioned assets. The members of Shop are 'orders', 'customers'.


It raises [FailurePropagationError](../reference/errors.FailurePropagationError.md#dagster_dataframely.errors.FailurePropagationError) for a member with `propagate_row_failures=True` and without `ignored_in_filters=True`:


``` python
class Propagating(dy.Collection):
    invoices: dy.LazyFrame[InvoicesSchema]
    lines: Annotated[
        dy.LazyFrame[InvoiceLinesSchema],
        dy.CollectionMember(propagate_row_failures=True),
    ]


try:
    dd.build_collection_checks(
        Propagating,
        members={"invoices": dg.AssetSpec("invoices"), "lines": dg.AssetSpec("lines")},
    )
except dd.errors.FailurePropagationError as error:
    print(error)
```


    Member 'lines' of Propagating sets `propagate_row_failures=True`, which `dd.build_collection_checks` cannot check. A row that fails its member's own rules is not in the member's table, so a check over the tables would always pass. Remove the setting, or write a collection filter that states the condition.


`dd.build_collection_checks` does not raise [FailurePropagationError](../reference/errors.FailurePropagationError.md#dagster_dataframely.errors.FailurePropagationError) for a member left out of `members`, because the checks do not read it.

It raises [InvalidSeverityError](../reference/errors.InvalidSeverityError.md#dagster_dataframely.errors.InvalidSeverityError) when `__dagster_dataframely__` names something that is not a collection filter:


``` python
class Misdeclared(dy.Collection):
    __dagster_dataframely__ = {"severity": {"order_has_customer": "warn"}}

    orders: dy.LazyFrame[OrdersSchema]
    customers: Annotated[
        dy.LazyFrame[CustomersSchema], dy.CollectionMember(ignored_in_filters=True)
    ]

    @dy.filter()
    def order_references_customer(self) -> pl.LazyFrame:
        return self.orders.join(self.customers, on="email", how="semi")


try:
    dd.build_collection_checks(
        Misdeclared, members={"orders": orders, "customers": customers}
    )
except dd.errors.InvalidSeverityError as error:
    print(error)
```


    `__dagster_dataframely__` on Misdeclared names 'order_has_customer', which is not a collection filter of Misdeclared. The collection filters of Misdeclared are 'order_references_customer'.
