{
  "_about": "Qualification and expiry rules for ActSmall Signal (docs/actsmall-signal.md). Read by the apex Lambda's signals module (infra/lambda/apex/signals.mjs, copied into the asset by scripts/build-lambdas.mjs) and served at /data/signal-thresholds.json for transparency. Signals derive exclusively from GDACS events already present in the topic snapshots; this file controls which qualify and how long they live.",
  "_fields": {
    "minAlertLevel": "Lowest GDACS alert level that qualifies as a signal. Green is routine and never surfaces.",
    "ttlHours": "A signal whose event has not been re-seen in the GDACS feed within this window expires and is dropped, even if the owning topic's snapshot is missing (soft-fail must not create zombie signals).",
    "maxActive": "Cap on concurrently published signals, kept worst-first (Red before Orange, then GDACS alertscore). More than this is a feed of noise, not signal.",
    "feedHistoryItems": "How many items (active + recently resolved) the signals.xml RSS replays.",
    "eventTopics": "GDACS event type to owning ActSmall topic. An event publishes exactly once under its owning topic even when several topic snapshots carry it. Types not listed (EQ, VO) have no owning topic site and are not surfaced."
  },
  "minAlertLevel": "Orange",
  "ttlHours": 72,
  "maxActive": 8,
  "feedHistoryItems": 30,
  "eventTopics": {
    "WF": "fire",
    "FL": "water",
    "DR": "food",
    "TC": "ocean",
    "TS": "ocean"
  },
  "eventActionLeads": {
    "WF": { "id": "donate-fire-relief", "verb": "donate" },
    "FL": { "id": "emergency-donate", "verb": "donate" },
    "DR": { "id": "recurring-gift", "verb": "donate" },
    "TC": { "id": "emergency-disaster-relief", "verb": "donate" },
    "TS": { "id": "emergency-disaster-relief", "verb": "donate" }
  }
}
