fix(dispatcher): disable staleness filter for fire events

Fire events are always relevant regardless of age (a wildfire burning
for 9 hours is not stale — it's ongoing). The staleness filter was
designed for incidents with time_validity semantics, not persistent
fire state.

- defaults.py: add wfigs.freshness_seconds = 0 (disabled)
- dispatcher.py: for fire toggle family, read from adapter_config
  instead of toggle; skip staleness check when freshness_s == 0

Fixes Blue Ridge fire being dropped after LAST_PER_SUBJECT replay.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Matt Johnson (via Claude) 2026-06-06 18:34:15 +00:00
commit 87cce0048d
2 changed files with 10 additions and 1 deletions

View file

@ -61,6 +61,11 @@ REGISTRY: dict[tuple[str, str], dict[str, Any]] = {
"type": "bool",
"description": "Re-broadcast when containment percent increases (forward-only).",
},
("wfigs", "freshness_seconds"): {
"default": 0,
"type": "int",
"description": "Staleness gate for wfigs events (0 = disabled). Fire events are always relevant regardless of age.",
},
# =================================================================
# NWS -- 3 settings (severity gate, tombstone msgTypes, suffix-promote toggle)

View file

@ -340,7 +340,11 @@ class Dispatcher:
# inner Event.timestamp; for native adapters it's the upstream API's
# timestamp. Receive-time is NOT used (it's meshai-side and tells us
# nothing about how stale the underlying alert is).
freshness_s = int(getattr(tog, "freshness_seconds", 600) or 600)
# v0.6-3b: fire toggle uses wfigs adapter_config freshness (0 = disabled)
if fam == "fire":
freshness_s = int(adapter_config.wfigs.freshness_seconds)
else:
freshness_s = int(getattr(tog, "freshness_seconds", 600) or 600)
if event.timestamp and freshness_s > 0:
age = time.time() - event.timestamp
if age > freshness_s: