Roasting & QC

Every roast, recorded at one sample a second

Live curves from any bridge, cupping panels that report the spread as well as the mean, and gradings that actually quarantine a lot.

The problem

A roast log that a Wi-Fi dropout can silently truncate is not a record. Neither is a cupping score of 85 that came from an 80 and a 90.

A roast survives the network

Bridges stream to a session that buffers durably. When the uplink drops, the bridge replays from its own ring buffer and the curve comes back byte-identical to one that never dropped.

  • Rate of rise as a least-squares slope, not finite differencing — noise becomes ±6 °C/min of garbage otherwise
  • First crack is an operator mark, because it is a sound somebody hears
  • A roaster who walks away from a crashed bridge finds the batch in the log, flagged, not vanished

Scores with their spread

An 85 where every cupper was within half a point is a confident result. The same 85 from an 80 and a 90 is not, and reporting only the mean hides which one you have.

  • Blind protocols with per-cupper scores
  • Outliers found by median absolute deviation — standard deviation is inflated by the very outlier it should catch

A failed grading stops the coffee

Physical grading quarantines the lot and blocks it from being reserved. Releasing it requires a reason, recorded — a decision someone should have to own.

Everything here is in the API

This area is production.roast.* — the same operations the console calls.