docs: help pages, probe reference and session docs updated for the three new features
- 08-trigger.txt: names all four condition shapes and the buffer search; fixes the first paragraph and 'How to reach it' to match what the panel actually contains (fix 3). - 10-measurements.txt: adds a Statistics bullet — one observation per recompute, what resets the history, what does not (fix 3). - probe-readings.md: re-quotes condition-probe lines with level2= and mode= fields; corrects leg-2 window geometry (0.2 s / 10 % pre, not 1.0 s / 50 %); moves the wide-window reason to legs 1 and 3; fixes the search-probe scheduling note (search_probe calls condition_probe directly; do not also set CONDITION_MS) (fix 6). - verification.md: corrects shape-2 window geometry to match the code (fix 7). - invariants-session-and-export.md, README.md: document the measure_stats session key — position, type, default false (fix 8). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
090b6bb57d
commit
728e7fbda5
6 files changed
+62
-22
No files matched your search
@@ -9,7 +9,9 @@ Part of [CLAUDE.md](../../CLAUDE.md). These are rules that cost a defect to lear
|
||||
signals**, **the chosen trace colours** (`[[color]]`, `name` + `rgb = "#RRGGBB"` — only the
|
||||
*overrides*, so a stream's new signals still take the positional palette and a saved session does
|
||||
not freeze a colour that is meant to follow the signal list), **the math channels with their
|
||||
graphs** and **the measurements pane**. Signal identity
|
||||
graphs**, **the measurements pane**, and **`measure_stats`** — the measurements statistics
|
||||
toggle; written as a bare top-level boolean (`measure_stats = true/false`), defaults to `false`
|
||||
when absent. Signal identity
|
||||
is the *name* throughout (a CONFIG renumbers channels), 'enabled' is read off the channels the
|
||||
model built -- an enabled signal is exactly one that produced a channel -- and `apply_layout()`
|
||||
installs the graphs **before** assigning the rows, since a row may hold a math channel's name and
|
||||
|
||||
@@ -600,32 +600,40 @@ Four legs, selected by `UDPSCOPE_PROBE_CONDITION_SHAPE`. Every leg prints one li
|
||||
[condition-probe] type=T cmp=C width=W t0=T0 measured=M at0=A earlier=E level2=L2 mode=D
|
||||
```
|
||||
|
||||
Measured readings (`--rate 10000 --freq 5`, each on a fresh port):
|
||||
Measured readings (`--rate 10000 --freq 5`, each on a fresh port). Shape 0's `level2=` and
|
||||
`mode=` fields are from the `[search-probe]` run in `.superpowers/sdd/progress.md`; shapes 1–3
|
||||
were measured before those fields were added and their `level2=0.500000 mode=2` is read from
|
||||
the probe arm code (`condition_probe_arm` always sets `level2` to `0.5` and the mode after a
|
||||
latch is `Held=2`):
|
||||
|
||||
```
|
||||
shape=0 type=1 cmp=0 width=0.010000 t0=1.842100 measured=0.002000 at0=nan earlier=nan
|
||||
shape=1 type=1 cmp=1 width=0.010000 t0=2.160100 measured=0.200000 at0=nan earlier=nan
|
||||
shape=2 type=2 cmp=0 width=0.010000 t0=1.706700 measured=nan at0=-0.500907 earlier=-0.498185
|
||||
shape=3 type=3 cmp=0 width=0.010000 t0=4.120200 measured=0.300100 at0=nan earlier=nan
|
||||
shape=0 type=1 cmp=0 width=0.010000 t0=1.710000 measured=0.004000 at0=nan earlier=nan level2=0.500000 mode=2
|
||||
shape=1 type=1 cmp=1 width=0.010000 t0=2.160100 measured=0.200000 at0=nan earlier=nan level2=0.500000 mode=2
|
||||
shape=2 type=2 cmp=0 width=0.010000 t0=1.706700 measured=nan at0=-0.500907 earlier=-0.498185 level2=0.500000 mode=2
|
||||
shape=3 type=3 cmp=0 width=0.010000 t0=4.120200 measured=0.300100 at0=nan earlier=nan level2=0.500000 mode=2
|
||||
```
|
||||
|
||||
`measured` is the reading, not a phase. It is the pulse width read back from the held snapshot's
|
||||
own stamps, which are edge-relative: the snapshot is the ground truth, not the mock's absolute
|
||||
clock. Three things are worth knowing before calling a reading wrong:
|
||||
|
||||
- **Leg 0**: `measured=0.002` is the injected glitch width. A `measured` near the signal's own
|
||||
half-period means the width qualifier did not qualify — the trigger caught a normal edge instead
|
||||
of the runt.
|
||||
- **Leg 0**: `measured=0.004` is the injected glitch width (here the search-probe run used
|
||||
`--glitch-width 0.004`; the earlier standalone probe run read `0.002` with `--glitch-width 0.002`).
|
||||
A `measured` near the signal's own half-period means the width qualifier did not qualify — the
|
||||
trigger caught a normal edge instead of the runt.
|
||||
- **Leg 1**: `measured=0.200` is an ordinary square half-period; every square pulse satisfies
|
||||
`> 0.010`.
|
||||
`> 0.010`. **Use a 1.0 s window with 50 % pre** so the opening edge of a 0.2 s pulse lies within
|
||||
the pre window.
|
||||
- **Leg 2**: `at0` must lie **outside** `[-0.5, +0.5]` and `earlier` **inside** it — those are the
|
||||
two sample values around the band crossing. The probe prints `nan` for any field a leg cannot
|
||||
measure. **This leg uses `sine`**, not `square`: the square is exactly ±1 and has no sample
|
||||
inside the `[-0.5, +0.5]` band, so a window condition on the square can never fire. **Use a
|
||||
1.0 s window with 50 % pre** or the probe cannot reach the opening edge of a 0.2 s pulse.
|
||||
inside the `[-0.5, +0.5]` band, so a window condition on the square can never fire. This leg
|
||||
uses a **0.2 s window with 10 % pre** — short enough to capture the crossing, because the event
|
||||
is the band exit, which lands at x = 0 in the held snapshot.
|
||||
- **Leg 3**: `measured=0.300` is the dropout timeout. **This leg also uses `sine`**. A timeout of
|
||||
0.050 s against a sine crossing zero every 0.1 s latches on a healthy signal, so use 0.300 s
|
||||
or longer; **use a 1.0 s window with 50 % pre** as for leg 2.
|
||||
or longer; **use a 1.0 s window with 50 % pre** so the last crossing before the outage lies
|
||||
within the pre window.
|
||||
|
||||
The channel-selection line `[condition-probe] <name>=<index> of <N> channels` is printed before
|
||||
the trigger fires; if the channel is not found this reads `-1` and the probe fails immediately.
|
||||
@@ -664,7 +672,9 @@ phase=2 … n=1 mean=-4.84467e-14 | n=1 mean=0.63662 | n=1 mean=2 | n=1 mean=1
|
||||
|
||||
## `[search-probe]`
|
||||
|
||||
`UDPSCOPE_PROBE_SEARCH_MS`, scheduled after `UDPSCOPE_PROBE_CONDITION_MS`. Run with
|
||||
`UDPSCOPE_PROBE_SEARCH_MS`. The handler calls `condition_probe()` directly — the condition is
|
||||
set in exactly one place for both the live trigger and the search, so `UDPSCOPE_PROBE_CONDITION_MS`
|
||||
must **not** also be set (two arms on the same port race). Run with
|
||||
`--rate 2000 --batch 64 --freq 5 --glitch-at 0.25 --glitch-width 0.004` and
|
||||
`UDPSCOPE_EXIT_AFTER_MS=12000`.
|
||||
|
||||
|
||||
@@ -180,9 +180,10 @@ precedent, not an exception.
|
||||
- `UDPSCOPE_PROBE_CONDITION_MS` — arms a qualified trigger against the mock and reports the latched
|
||||
`t0`, the measured pulse or band width, and sample values for the window condition. Schedules its
|
||||
own arm and report stages. `UDPSCOPE_PROBE_CONDITION_SHAPE` picks the leg: `0` pulse width `<`
|
||||
(the glitch, the default, needs `--glitch-at`/`--glitch-width`), `1` pulse width `>`, `2` window
|
||||
(uses `sine` with a 1.0 s window and 50 % pre), `3` dropout (needs `--quiet-at`; also uses
|
||||
`sine` with a 1.0 s window and 50 % pre).
|
||||
(the glitch, the default, needs `--glitch-at`/`--glitch-width`), `1` pulse width `>` (uses a
|
||||
1.0 s window and 50 % pre so the opening edge of a 0.2 s pulse is captured), `2` window
|
||||
(uses `sine` with a 0.2 s window and 10 % pre), `3` dropout (needs `--quiet-at`; uses `sine`
|
||||
with a 1.0 s window and 50 % pre so the last crossing before the outage is captured).
|
||||
- `UDPSCOPE_PROBE_STATS_MS` — reports every measurement's accumulator (`n`, mean, sd, lo, hi),
|
||||
pauses, reports again with `dn=` per measurement, then resets and reports a third time. Three
|
||||
phases: `phase=0`, `phase=1` (after pause) and `phase=2` (after Reset). Needs
|
||||
|
||||
Reference in new issue
Block a user