S

Experiment Capture

experiment mode
a guided bench instrument · plan → capture → notes · raw readings preserved · isolated from the living log
app v0.7.1
{{ port }} ESP32 · 4 probes 115200 baud {{ ownerLabel }}
provenance {{ expId }} {{ startLocal }} {{ durationLabel }} {{ rateLabel }} auto-stop {{ durationLabelPlanned }} {{ sourceLabel }} fw {{ fwVersion }} app v0.7.1 raw {{ rawRangeLabel }}
{{ row.label }} {{ row.val }}
Fields marked — unavailable are designed-in but not yet emitted by the capture stream; they fill in when their slice lands (no redesign). Times: local Chicago for the human, UTC for machines.
S
A plan is waiting for you drafted by {{ draftBy }} · review before arming
suggestion
subject
{{ draftSubject }}
rate
{{ draftRateLabel }}
duration
{{ draftDurationLabel }}
{{ c.id }} · {{ c.label }}
hypothesis
{{ draftHypothesis }}
{{ draftNote }}
✓ loaded {{ draftBy }}'s draft Everything below is editable — it's yours now. Nothing records until you arm and confirm.
Draft dismissed — building the plan by hand.
What you're capturing
Probe labels
what each probe is, and where it sits
{{ p.id }} {{ p.gpio }} primary
Labels travel with the capture — they tag the live channel cards, the chart legend, and the saved readings. They're notes, not calibration.
Sample rate
faster → finer detail, bigger file
Why {{ rateLabel }}? {{ rateWhy }}
Duration
a bounded session — it auto-stops here
Auto-stops at {{ durationLabelPlanned }} (≈{{ plannedSamples }} samples at {{ rateLabel }}). The capture process owns the stop — it ends even if the browser closes.
Source
Synthetic data is excluded from evidence and never used for real bench work. The capture is tagged source=synthetic so it can't be mistaken for a reading.
Destination
🛡{{ destPath }}
Isolated — your living monitor log is never touched. {{ overwriteNote }}
{{ ownerLabel }}
The Monitor logger holds {{ port }} for the living baseline. Capture needs exclusive ownership so the two streams can't silently contaminate each other.
{{ armBlockReason }}
ARMEDreview, then begin — nothing is recorded until you confirm.
subject
{{ subject }}
rate
{{ rateLabel }}
duration
{{ durationLabelPlanned }}
source
{{ sourceShort }}
writes to
{{ destPath }}
{{ p.id }} · {{ p.labelOrDash }}
{{ statusLabel }}
{{ curRaw }}raw · {{ primaryTag }}
{{ curBandName }}
{{ elapsedLabel }} · {{ sampleCount }} samples auto-stops in {{ autoStopIn }}
Live channels
your four labelled probes · raw counts
{{ c.label }}primary
{{ c.id }}{{ c.gpio }}
{{ c.raw }}
{{ c.bandName }}±{{ c.spread }}
raw ADC · 12-bit (0–4095) · HIGH = drier · no calibrated %, ever
primary {{ primaryLabel }} · {{ primaryTag }}
305022001750 14501080900 waiting for {{ port }} …
{{ b.name }}
{{ m.label }}
{{ m.val }}
raw preserved continuously → {{ destPath }}readings.csv {{ stopReasonLabel }} · {{ sampleCount }} samples kept
The readings 🔒 raw · immutable {{ sampleCount }} samples · {{ durationLabel }} · {{ stopReasonLabel }}
{{ m.label }}
{{ m.val }}
{{ p.id }} · {{ p.labelOrDash }}
time in each band · primary {{ primaryLabel }} · seconds, not %
{{ b.name }} {{ b.label }}
Your reading of it interpretation — kept separate from the raw {{ autosaveLabel }}
{{ savedLabel }} drafts autosave locally — they survive a reload or a lost connection
raw + band are the reading · interpretation stays in the notes layer · times: local Chicago + UTC tend well.
{{ confirmTitle }}
{{ confirmBody }}