Skip to content

Event labeler - #16

Merged
hellais merged 6 commits into
mainfrom
event-labeler
Aug 7, 2026
Merged

Event labeler#16
hellais merged 6 commits into
mainfrom
event-labeler

Conversation

@hellais

@hellais hellais commented Aug 6, 2026

Copy link
Copy Markdown
Member

No description provided.

@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview Aug 7, 2026 10:48am

Request Review

The third grain, built from the design note in INTERVAL-CORPUS.md. The
measurement queue calibrates scoring and the event editor says whether
the detector finds things; neither can say how often it shouts when
nothing is there, because that is a rate and neither grain has a
denominator in it.

A cell-week at a time, drawn from the new interval sampler, blinded
until commit: Q quiet, E event present, U can't call it, X unusable,
plus confidence and a rationale. The verdict is quiet_observed rather
than quiet throughout, in the schema and in the UI copy, because the
week is judged from the same OONI data the detector reads — an
unmeasured block is indistinguishable from calm, and a better candidate
that finds subtle real events must not be charged a false alarm for it.

Mostly assembled from what the other two labellers already have. The
event editor's timeline renders the cell, gaining one optional prop for
the changepoint markers the reveal draws; the shell, rails, dialogs and
reveal styling come from the measurement labeller's stylesheet; storage,
gate and export follow the same copy-paste contract, so there is still
no write endpoint and no auth surface.

Two things the design note did not anticipate. The chart pads the week
on both sides, because a week inside a long-running block contains no
change and reads as quiet from its own shape alone — judge the week,
look at the fortnight. And the queue takes an imported event corpus and
flags cell-weeks a known event overlaps, which is the contamination
cross-check the note asked for; flagged rows are meant to be committed
as event_present rather than skipped, since dropping one shrinks the
denominator with nothing on the record to say why. That corpus is
external ground truth rather than detector output, so showing it before
commit is not unblinding.

The note itself is updated to match, marking the two places the design
changed in the building: the strata became a partition, and the
near-miss draw became a stratum of its own.
hellais added 3 commits August 6, 2026 20:44
The detector scorecard moved out of the oonipipeline CLI and into
docs/detector-evaluation.ipynb, alongside the scoring one. Three places
in the labeller copy told analysts to run the command their export fed,
so they now name the notebook instead.

The event export's caption also stops promising a false-alarm number
from that file. Events are curated, so no quiet time is counted in
them; the rate comes from the interval corpus, which is the whole
reason that grain exists.
Two changes to the interval labeller, plus the alignment they imply.

`blocked_throughout` is a fifth verdict. The original four conflated
state with change on a common case — a week in the middle of a
long-running block. A changepoint detector can only be right or wrong
about a transition, and that week has none, so it belongs in the
false-alarm denominator alongside genuinely quiet weeks. But it is not
quiet, and both available labels were wrong for it: `quiet_observed`
asserts "no interference visible" about a blocked week and feeds the
pool later mined as clean negatives, while `event_present` credits a
detection nobody earned and removes the week from the denominator, so a
detector that re-fires through a long block scored clean on both
metrics. The overlap check used to steer analysts to exactly that,
which turned a six-month event into twenty-six corrupted weeks; it now
reads whether the event's span covers the whole window and says which
verdict follows.

The commit reveal gained analysis panels: blocking probability,
per-layer scores, the DNS triple and the outcome strip, on the
observation chart's time axis. That is where an analyst sees why the
detector did or did not fire on a week they have already judged on the
evidence. Per-layer values are drawn as independent lines, never
stacked — they are componentwise maxima and routinely sum above one,
which is the misreading user-guide §3.5 exists to prevent. The chart
geometry constants and the layer palette move out of the event editor's
timeline so the two charts share an axis exactly.

Aligned with that: the gate and judgment copy now ask whether the state
*changed* rather than whether there was interference, and the design
note's UI section covers the fifth verdict, the padding's role as
evidence for the Q/B distinction, and the new panels.
@hellais
hellais merged commit ed7a3e1 into main Aug 7, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant