Makoto
Menu
Integration field note

Dagster: materialization is the hook; exact artifacts are the evidence.

Dagster’s asset graph identifies logical dependencies and materialization events. Makoto needs a narrower claim: which exact input artifacts and signed predecessor statements produced the exact output now being handed off.

Implementation boundary. The Dagster asset graph is useful context, not a Makoto graph, and no sensor or UI integration ships today.

The attachment point

Asset materializationAfter storage commits, resolve exact output bytes or a deterministic dataset manifest and append a transformation statement.
Asset observationUse an observation as source context only when the integration can bind it to exact observed bytes.
PartitionsDeclare one bounded artifact identity per partition or partition set; avoid treating an open-ended logical asset as immutable.
MetadataCarry run ID, asset key, partition key, code version, and checks as operation metadata without assuming they authenticate the data.

Control flow

@asset
def curated_orders(context):
    output = write_committed_dataset()
    # After commit: resolve exact input and output digests.
    # Then invoke the checked-out reference CLI from a resource or op.
    return output

uv run makoto attest transform --help

A real resource must define key custody, retries, idempotency, predecessor lookup, and where the DSSE envelope is stored. “Wrap Dagster metadata in DSSE” is insufficient because the subject and graph bindings are the core evidence.

What the evidence can say

It can bind one committed materialization to exact inputs, output, and selected Dagster context. It cannot prove the asset function executed as claimed or convert every logical asset dependency into a complete signed history automatically.

Start with one materialization fixture.

Contribute a tested asset boundary with exact partition bytes, retry behavior, and a receiver-visible denial when the output changes.