diff --git a/docs/claude/probe-readings.md b/docs/claude/probe-readings.md index a8f9093..a40e93f 100644 --- a/docs/claude/probe-readings.md +++ b/docs/claude/probe-readings.md @@ -196,7 +196,7 @@ Two lines of the self-check output are assertions in disguise: "the app placed them and they are on screen". - `[measures-probe]` + the dump's `measure N: 'sig' type thr=..% above=D show=D -> ok|invalid value text=[..] [duty=..] [marks=..]` and `measures pane: n=N revealed=D marks_shown=M pane_rows=R pane_w=W - pane_h=H` + pane_h=H switch_on=X reset_sensitive=Y` (stderr, `UDPSCOPE_PROBE_MEASURES_MS`) — adds one measurement of every type on the first plottable signal and lets the tick compute them, so what it prints is what a user reads. On the test stream's 1 Hz ±1 sine the values must be: average ≈ 0, `top` ≈ 0.64 and @@ -213,7 +213,10 @@ Two lines of the self-check output are assertions in disguise: *and* a marker at the first sample that reached it — two level marks at both extremes was the bug), `time:A,time:B` for pulse/period/frequency. `text=` is the pane's own string with its unit, so `frequency` must read `Hz` (not the signal's unit), `period`/`pulse duration` - seconds, and the rest the channel's unit. `marks_shown` counts two per shown measurement + seconds, and the rest the channel's unit. `switch_on` and `reset_sensitive` are the panel's *frame* read back: the switch widget against + `measure_stats_on`, which the code drives, and the Reset button that follows it. Either disagreeing with + `[stats-probe] on=` is a `.ui` that lost the widget, or lost the wiring to it; `pane_rows=R` is what + proves the readout rows landed in the frame's `measures_list` rather than nowhere. `marks_shown` counts two per shown measurement (a min/max showing both its marks counts two of its own). `measures window:` is the timeliness assertion -- the window the numbers were computed over against the one on screen. **The reading that must hold is `marks_in_window=K/K`**: every *time* mark inside the window