Materializations
A materialization is the record that an attempt produced a version of an asset. The attempt is the work. The materialization is the result: where the rows were written, the columns that were observed, the row count, the upstream materialization ids it read, and the check results.
The record is appended. A later run writes a new materialization. The old one stays. The fields that change afterwards are checks, when a check result is recorded, and verified_at, when a later attempt confirms the current result is still current.
Inspect an asset
Section titled “Inspect an asset”latest is a pointer on the asset. It names the materialization readers treat as current.
puppi assetspuppi assets core/customerpuppi assets prints every asset in the active deployment: role, dependencies, the latest id, the row count, the staleness verdict, and the next scheduled run. puppi assets <key> adds the materialization history.
The engine keeps the data for the newest two materializations of an asset. Older records remain as history. puppi rollback will not point at them.
A run that fails its checks can still write a materialization. If a blocking check fails, that row is quarantined and latest stays on the previous one. See Quarantine.
When a source writes nothing new
Section titled “When a source writes nothing new”A source runs when a run or a schedule reaches it. Afterwards the engine may decide nothing arrived.
An append source writes no materialization when the cursor did not advance and the attempt emitted no rows. A full_refresh source writes no materialization when its content hash matches the hash on the current latest. The attempt is skipped, and verified_at is stamped on the current latest.
The first run of an asset always writes a materialization, including an empty one. An empty asset and an asset that has never run are different records. A full_refresh source whose adapter returns no content hash writes a materialization on every run.
What a local run skips
Section titled “What a local run skips”puppi run --local prints rows and the contract verdict. It writes no materialization, moves no latest, and records no lineage. Those happen on a run the engine planned.