Background
To answer "is model B actually better than model A?" we need a fixed evaluation suite and honest metrics, not vibes. This becomes the gate every model version — and every future OTA push — must pass. (Design discussion #58; epics #28 / #37.)
The task
- A frozen set of labelled scenarios (synthetic from the generator issue + held-out samples from the dataset-adapter issue).
- Compute and report: recall (don't miss real events), false-alarm rate / precision (the metric that prevents alarm fatigue), per-class confusion, and latency-to-detect.
- A simple report output (CLI / Markdown) so a PR can show before → after.
- Structure it so it can later run in CI as a regression gate.
Acceptance criteria
Guardrails / notes
- This is the structural enforcement of "false alarm > no alarm — but keep false alarms cheap": false-alarm rate is a first-class metric, not an afterthought.
- Report the train/test distribution honestly — a model validated only on synthetic data must say so (promise the mechanism, never the outcome).
Why this is a good first issue
Bounded scope, high leverage — it's the yardstick everything else is measured against. Part of the on-device acute-detector epic.
Background
To answer "is model B actually better than model A?" we need a fixed evaluation suite and honest metrics, not vibes. This becomes the gate every model version — and every future OTA push — must pass. (Design discussion #58; epics #28 / #37.)
The task
Acceptance criteria
Guardrails / notes
Why this is a good first issue
Bounded scope, high leverage — it's the yardstick everything else is measured against. Part of the on-device acute-detector epic.