Drift Mechanism — rate & duty factorial
Four TLF units in one room-temperature DI tank for a week, configured over Notehub (v0.1.21) into a 2×2 of sample rate (60 s vs 600 s) × LED duty (full sweep vs LED 512 only), bracketed by 24 h “bookends” at one identical config. The question the archive cannot answer (count and time collinear at r ≥ 0.997): is burn-in drift a function of sample count, elapsed time, or LED events? Started 2026-09-11, fully automated through 2026-09-18.
Design
| Unit | Target | Split config | Arm | Notes |
|---|---|---|---|---|
| 50091 | FDOM puck (12.94 RFU) | 600 s · LEDs 32/128/512 | slow / full — rate arm | arm swapped 9/12 (cycle-skipping); chamber_override=1 from 9/12 eve (sampling wedged after the shake) |
| 500214 | FDOM puck (13.59 RFU) | 60 s · LEDs 32/128/512 | fast / full — rate arm (swapped 9/12: holds 60 s cleanly) | quench well characterized |
| 500220 | bare DI | — | REMOVED 9/18 | firmware sampling stall from 9/13 07:31Z (modem alive, zero samples; config pushes did not revive); excluded from all analysis |
| 50084 | bare DI (regular lid) | 600 s · LED 512 only | slow / lean | rails at LED512 top bias → read at bias≈3000 (sub-rail) |
Within-unit analysis only. These four sensors differ in baseline offset, gain, intrinsic drift rate, and temperature dependence, so nothing is compared across units in absolute terms. Every trace below is each unit’s pedestal-subtracted net signal normalized to its own Bookend-1 median (log scale), and the verdicts come from each unit’s own rate change across its config transitions: a slow unit’s drift-per-hour should fall ~10× during the split if drift is per-cycle (unchanged if per-hour); 500220’s should fall ~3× if drift tracks LED events. 50091 never changes — it monitors the tank itself. Cross-arm deltas are corroboration only.
| Phase | Window (MDT) | Config |
|---|---|---|
| Bookend 1 | Fri 9/11 ~5:00 PM → Sat 9/12 5:10 PM | all four: 60 s, LEDs 32/128/512 × 36 steps, 34–48 V |
| Split | Sat 9/12 5:10 PM → Thu 9/17 5:10 PM | per-arm configs above (applied automatically over Notehub) |
| Bookend 2 | Thu 9/17 5:10 PM → Fri 9/18 5:10 PM | all four back to the identical Bookend-1 config |
Loading dataset…
Findings — test complete (2026-09-18)
The dominant drift this week was a decaying post-disturbance transient tied to elapsed time — not to accumulated sample cycles. The within-unit test that settles it: 50091 ran the split at 600 s (134 cycles/day, −1.00 ± 0.01 %/day temp-adjusted) and Bookend 2 at 60 s (1,399 cycles/day). Cycle-driven drift predicts ~−10 %/day in Bookend 2; observed: −0.43 ± 0.05 %/day — the rate fell despite 10× the cycling, because the settling transient had decayed in calendar time. The constant-config control corroborates: 500214, at an unchanged 60 s all week, decayed from −4.2 %/day (split) to −0.13 %/day (Bookend 2). Both units flattened together in calendar time despite a 10× difference in banked cycles (5,415 vs 636).
A smaller, persistent current-dependent LED-aging component is real: on both full-sweep units the net512:net32 ratio tilted down steadily (500214 −0.87 %/day, 50091 −0.35 %/day) — the high-current signal fading faster than low-current, the classic LED-wear signature, and larger on the unit firing 10× the LED events. This is the component the S-TLF shape correction exists for.
Implications: (1) the linear per-cycle drift term in drift_correction.mjs is a local
approximation for a settled deployment — after any handling, redeployment, or re-immersion, expect a days-scale
decaying transient in elapsed time; do not extrapolate a linear rate across handling events (this also explains the
archive's “drift is a step between tests”). (2) Good operational news: fast cadence does not burn
calibration 10× faster — the dominant component doesn’t count cycles. (3) The LED-wear tilt is the
cycle-linked part; the proposed 512-vs-2048 drive-current experiment targets it directly, and it should be run on
settled units so the transient doesn’t mask it.
Mechanism (open) — and the probe now running: the time-based transient needs a physical carrier, and the electronics have none at days-scale. Candidates, all in the optical path: (1) microbubble regrowth on the windows after each disturbance (the 9/12 shake steps of +16/+37% are direct evidence bubbles modulate the signal); (2) particulate settling in the shared water (most of every unit's signal is water-path blank); (3) water uptake by window/optical materials after immersion — the only candidate that is true instrument behavior. The week's data cannot separate them. Probe: units re-shaken 2026-09-18 2:46 PM on settled signals — if the step-then-decay reproduces on demand, the transient is bubble/particle dynamics (a tank artifact, not sensor drift); if signals step and hold flat, the original decline was immersion chemistry, not disturbance.
Probe result (2026-09-18, temp-corrected): 50091 stepped UP ~+7% and held flat over 4.5 h (raw data showed a false “decay” that was purely the −3.6 %/°C quench on a warming tank). The diagnostic feature is the direction: a shake restored signal. Mechanical disturbance recovering signal is incompatible with water uptake into the window material (a shake can’t reverse bulk chemistry) and points instead to removable surface accumulation — bubbles, particles, or film on the optics — that agitation clears and that re-accumulates over days (matching the week’s downward decline). Flat-over-4.5 h is consistent with days-scale re-accumulation, not against it. Limitations: one unit only — 500214 went dark at shake+10 min when its Notecard 11.3.2 update (fleet GPS-bug remediation) landed simultaneously; confirmation is now passive — watch whether 50091 drifts back down toward its pre-shake level over the coming days.
Caveats: one week; single unit per arm; the 9/12 shake reset the transient mid-Bookend-1 (50091 also stalled through post-shake B1, so its within-unit contrast uses split vs Bookend 2); 50084’s battery died with 3 h of Bookend 2 (its bookend delta is temperature-dominated and not used); 500220 removed; pucks contribute 20–35% over the wet blank, so “puck arm” = partially stabilized target. Preliminary 9/17 cross-unit read (“per-hour dead, 3.8× ratio”) is superseded by the within-unit result: that ratio reflected 500214 being earlier in its settling curve, not cycle count.