fix(native): promote decider severity/category onto Event + make silent severity-floor drop observable (counter+log) (#97)

CHANGE 1 (store.py): after applying gate.data_patch into event.data, promote
_severity_override and category keys onto event.severity / event.category.
Previously, decider overrides (e.g. fire: "priority" on every New/Update)
landed only in event.data, leaving event.severity at the adapter's raw value
("routine" for fires >=25 km from an anchor). This silently failed the
toggle/matrix min_severity floor. Native and Central now share identical
broadcast decisions at the shared choke point.

CHANGE 2 (dispatcher.py + v27 migration): both the toggle-path and
matrix per-cell severity-floor drop paths now emit a WARN log and
increment a new persisted counter (severity_floor_dropped) in
dispatcher_state, following the existing drop-counter pattern exactly.
v27.sql adds the column; the counter restores on restart and appears
in dispatch_stats().

Co-authored-by: Matt Johnson <mj@k7zvx.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
malice 2026-07-08 14:42:20 -06:00 committed by GitHub
commit 099cec783c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 439 additions and 7 deletions

View file

@ -358,6 +358,6 @@ def test_dispatch_stats_exposes_all_counters():
stats = d.dispatch_stats()
assert set(stats.keys()) == {
"stale_dropped", "cooldown_dropped", "dedup_dropped",
"cold_start_dropped", "cold_start_anchor_at",
"cold_start_dropped", "severity_floor_dropped", "cold_start_anchor_at",
"cooldown_keys", "dedup_lru_size",
}