Example Cold-chain logistics

A temperature log releases or quarantines a shipment. See which reading moved, and the decision after it.

A shipment's temperature logger gives a reading every ten minutes, with a gap or two where it missed one. The pipeline fills the gaps, lists every reading outside the allowed range, and releases or quarantines the shipment.

Invented example data, recorded when the demo was built. The demo records and compares; it controls nothing. The screenshots are from a build of the same demo: each build gives its runs new fingerprints and times, so those differ from the live demo's, and what the screenshots show is the same.

The pipeline

Three steps, from a logger's file to a release decision.

  • fill_gaps reads the logger's file and fills each gap with the reading before it.
  • excursion_check lists every reading outside the allowed range.
  • release releases the shipment where there is no excursion, and quarantines it where there is.

What the demo plants

The runs, and what was changed in each.

RunWhat was changed
p7-39-cold-chain-baselineNothing: the baseline.
p7-40-cold-chain-one-reading-changedOne reading in the logger's file, 4.6 °C to 9.4 °C at minute 30.
p7-41-cold-chain-decision-tamperedIts recorded decision, one byte of it, after the run was recorded.

What onetrace shows

Each change, located in the record.

One reading changed: release becomes quarantine

The logger's file is an input from outside the pipeline, kept beside its digest, so the page shows it changed and the reading that did. fill_gaps is the first difference: minute 30 reads 9.4 °C, and the gap at minute 40 is filled with it. excursion_check lists both, and release quarantines where it released.

The live demo's comparison of p7-39-cold-chain-baseline and p7-40-cold-chain-one-reading-changed. First difference at fill_gaps; excursion_check and release are marked Changed after it.
Comparison page: first difference at fill_gaps.
The text diff for fill_gaps: the logger's kept input text, with the reading at minute 30 changed from 4.6 to 9.4, and filled.json, where minute 30 and the filled minute 40 both read 9.4.
The text diff: the changed reading, and the filled gap that carries it.

A decision altered after the fact: it contradicts its record

One byte of the recorded decision was changed after the run closed. The run's page says its records do not agree: the release step's output no longer matches the digest its receipt holds. The step-by-step comparison is not shown for a record that does not hold up.

The live demo's page for run p7-41-cold-chain-decision-tampered: Records agree: No. An incident names receipts/03-release.json, whose output artifact decision.json does not match the digest the receipt expected. Contradicts its record.
Run page: contradicts its record, with the receipt it fails against.

What it doesn't say

A located change, not a reason.

The comparison shows which reading moved and the decision that followed. It doesn't say whether the shipment was in fact spoiled, or whether filling a gap with the last reading is the right rule. See what each verdict means and what onetrace does not claim.

Try it yourself: this pipeline in the live demo, or on your machine with pip install onetrace-console and onetrace-console demo --open.