From 6770c6a648ebfd6b21e5b29e89ea0d8e0ef50167 Mon Sep 17 00:00:00 2001 From: Martino Ferrari Date: Wed, 7 Oct 2026 11:09:52 +0200 Subject: [PATCH] docs: a zero-width trigger band is refused, not degraded to an edge The spec claimed a window condition with equal levels degrades to an edge trigger on that level. It does not: the band test is a change of side, so equal levels make the signal "inside" only on exact float equality and the condition silently never fires. Special-casing the detector into an edge trigger would conflate two state machines that answer different questions -- the divergence the shared evaluator exists to prevent. The panel refuses the degenerate band instead. Co-Authored-By: Claude Opus 4.6 --- .../specs/2026-10-07-scope-features-design.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/superpowers/specs/2026-10-07-scope-features-design.md b/docs/superpowers/specs/2026-10-07-scope-features-design.md index d80f083..fd4dbc1 100644 --- a/docs/superpowers/specs/2026-10-07-scope-features-design.md +++ b/docs/superpowers/specs/2026-10-07-scope-features-design.md @@ -165,8 +165,14 @@ for the same reason every readout in this app quotes a stored sample: t0 has to buffer holds, because the cut is a binary search over the time ring and the axis is pinned to what the cut got. -A `Window` condition with `level == level2` degrades to an edge on that level, and must — a -band of zero width is not a special mode. +**A zero-width band is refused by the panel, not special-cased in the detector.** The band test +is `v >= lo && v <= hi` and the event is a change of side, so with `level == level2` the signal +is "inside" only on exact float equality — which a crossing essentially never lands on, making +the condition one that silently never fires. That is a worse failure than a refusal, and it +cannot be fixed by special-casing the detector into an edge trigger: the two state machines +answer different questions and conflating them is the divergence this design exists to prevent. +So the second level spin is clamped to differ from the first by at least its own increment, the +panel says why, and `EventDetector` keeps one unconditional band test. ### Panel and session