The old `phase=` field compared `trigger_time()` against the mock's absolute
`glitch_at + glitch_width` target. The app's stream epoch is the first packet
it received, not the mock's t = 0; the two clocks differ by however many
packets the CONNECT handshake cost, making the comparison meaningless.
Replace it with a snapshot-relative measurement: scan backwards from x = 0 in
the held event snapshot for the most recent upward crossing of `condition.level`
(the same `prev < level && val >= level` test the detector uses) and negate the
crossing's stamp to get the measured pulse width. A `measured` near 0.002 s is
the glitch caught exactly; near 0.200 s means an ordinary edge was latched.
Remove the now-dead `glitch_at`, `glitch_width`, `square_period` fields from
`ConditionProbe`. No other files changed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>