Virridy Home | Lume — Water Quality Sensing Water for Carbon

New TLF cohort: intake QA/QC

24 units · snapshot 2026-09-10 00:15 UTC · the drift half of this test has not started

Every number here is an intake check. No drift figure is quoted, because the cohort has only been ingesting for about an hour. /barrel's own floor for a drift term is 12 h (MIN_FIT_H) with at least 4 °C of temperature range, below which it calls the slope “a coin flip”.

These 24 units arrived unprovisioned: 23 of them had no Notehub serial, so no barcode and no pumphaus gateway, so every sweep they sent was being dropped at the ingestion boundary. They were provisioned on 2026-09-09 by writing the modem and gateway rows directly, keyed on the Notehub device UID. Data started arriving within 90 seconds and all 23 were reporting inside 15 minutes.

What 876 sweeps say

CORRECTED. An earlier version of this page called the short sweeps on 500189, 500131 and 500140 a fault, on the grounds that the amplitude estimator refuses to fit them. With 28 to 84 sweeps per unit rather than four, that reading does not hold. The sweeps are short because those units are the highest-gain of the cohort, and the bias ramp stops when the signal approaches the top of the range. The auto-range is behaving correctly.

Every unit starts its bias ramp at the same place, 2798–2824, reading essentially zero. What differs is where it stops: 2970 on 500189 against 3606 on 500191. The number of cells returned is that stop point and nothing else, at corr(cells, top bias) = 1.00.

Measured at a matched bias of 2950, the cohort spans 18× in gain, 107 to 1876 net counts. The units that stop early are the strong ones: corr(cells returned, gain at 2950) = −0.87. 500189 reads 1521 net where 500191 reads 123 at the same bias.

The operational problem is real even though the cause is not a fault. Three units (500189, 500131, 500140) return six or seven usable points at LED 512, which is too few for the canonical estimator to fit a shape against, so they currently yield no amplitude at all. The fix is to start their ramp lower rather than to treat them as broken: their useful bias window sits below where the sweep begins.
500112's ToF reads 421 kcps/SPAD against 28–58 for every other unit, an order of magnitude out on a channel that is otherwise tightly grouped. Unrelated to the gain spread, and still unexplained.
50083 has never produced a sweep. It is provisioned, named, firmware-targeted and sending payloads, but no measurement has arrived. It is the one unit on this page with nothing to show.

The per-unit cell count is stable across every sweep taken, not scattered: 500189 returns six every time, 500131 and 500140 seven, 500191 twenty-six. That stability is what rules out a transient and points at a fixed property of each unit.

The standard diagnostic set

The same four traces every campaign page carries, plus the bias sweep, which is where the gain spread shows. One line per unit. The record is about two and a half hours long, so it is still far short of the 12 h /barrel requires before a rate can be fitted.

Bias response at LED 512

Net counts against SiPM bias on each unit's most recent sweep, with the number of points in the legend. All 22 start at the same bias and climb the same curve; they differ in where the ramp stops, which is set by how much gain the unit has. The steep short traces belong to the high-gain units.

Brightest cell, per sweep

The peak net response in each sweep, model-free. It answers whether the optics are alive before any estimator is involved.

SiPM temperature

The channel every quench coefficient is fitted against. A drift window needs real excursion here: /barrel will not fit a cubic below 4 °C of range.

ToF signal

Turbidity and fouling proxy. 500112 sits an order of magnitude above the rest.

Battery

/barrel treats a supply change as a confound to keep drift windows away from, so the charge state is recorded rather than corrected for.

Per unit

Amplitude yield is the share of sweeps the canonical S-TLF estimator fits. Lag-1 noise is the Allan-style successive-difference figure /barrel uses as its noise floor, in percent; on four sweeps it is indicative only. Peak, dark and ToF are medians.

BarcodeUIDProvisionedSweepsCells Amp yieldLag-1 %Peak netDarkToF
500194…5934922026-07-02no sweeps yet
500106…5982852026-09-01592100%0.60295317131
500112…5969742026-09-01474100%0.322963172421
500120…5996482026-09-01487100%0.31300017433
500131…6002632026-09-014530%n/a305217235
500138…5983922026-09-01595100%0.56298717243
500140…5930882026-09-014530%n/a312016853
500158…5984752026-09-01459100%0.06299316847
500164…5979312026-09-01492100%0.22299216936
500186…5977172026-09-01492100%0.36309716942
500189…5992912026-09-014460%n/a309417028
500191…5990692026-09-01496100%0.38298917358
500104…5987152026-09-04468100%0.08304416934
500114…5922962026-09-04594100%0.68304417037
500115…5969902026-09-04494100%0.21295917540
500135…5943262026-09-04494100%0.26301317049
500145…5977742026-09-04488100%0.27300416946
500172…5931612026-09-04596100%0.64302317146
500180…5997212026-09-04491100%0.43298117045
500200…5980462026-09-04493100%0.22302317442
500203…5922472026-09-04494100%0.29300217347
500229…5935832026-09-04491100%0.21312316346
50080…5898622026-09-04493100%0.26297616630
50083…5979642026-09-04no sweeps yet

500194 is the one unit that was already provisioned; it has been reporting since 3 July and is listed here for continuity. Its firmware was pinned to a different build (20-1, the opposite cadence), so its history before this cohort is not directly comparable.

Firmware

The cohort shipped on v0.1.18. All 24 are targeted at tlf-main-log-unsafe-1m-20m-v0_1_20$20260821202810.binpack (1 minute sampling, 20 minute sync), set per device rather than on the fleet.

The fleet-level route would have hit 44 other units. All 23 sit in the Notehub fleet New Devices, which holds 67 devices including the whole barrel and burn-in cohort (500156, 500225, 500196, 500220, 500146, 500108, 500103, 500155, 500192, 500230 among them), several mid-campaign. Setting _fw on the device overrides the fleet and touches only the intended units.

Confirmed on all 24 by reading the value back, and the Notehub serial number is now set on all 24 as well, through the reserved _sn variable. Setting a target is not the same as running it, so the sampling cadence is what confirms pickup: the old build sampled every ~900 s, the new one every 92–286 s.

⚠️ Which build a unit was on during a window is exactly the kind of thing a drift record has to carry rather than assume, so the state above is measured from the data, not from the write that requested it.

What the drift test needs before it can start

Taken from what /barrel and /findings established the hard way:

Once those are in place this page gains the drift, quench and split-half reliability panels that /barrel carries.

Provenance

Sweeps read from api_samplesraw.raw_payload joined through api_payload.modem_id to api_gateway, selected on the cohort's provisioning description. Amplitudes from the canonical estimator in shared/tlf-amp.js, each unit's shape built on its own sweeps. Firmware and provisioning state from the Notehub API. Snapshot taken 2026-09-10 00:15 UTC; the figures move as data arrives.