Incident dedup / merge keys (entity, episode, network, region+title)v4Checked in order against open same-domain incidents (never an aggregate-titled bucket): (1) ENTITY key, region-independent, incident active <14d (updated_at): shared CVE id, OR (cyber) >=2 shared distinctive vendor/product tokens (1 suffices when it carries a digit, i.e. a product model), OR (travel, agents-039) same travel operator/system key (travelSystemKey — airline/ATC/GDS/rail identity with a disruption cue), OR same network/AS key (agents-022). (2) EPISODE key (weather/environmental/disaster + travel per agents-039 + environmental air-quality per agents-040), incident active <7d: same hazard family (weather: heat/tornado/flood/cyclone/winter/wildfire/storm; travel: strike/ground_stop/airspace/it_outage/transit; environmental air-quality: air_quality/smoke — a multi-day wildfire-smoke wave, split cleanly from the weather wildfire FIRE family) AND same macro-region (eu | us/<census region> | country code) — a multi-day strike series, rolling ground stop, or smoke wave refreshes ONE incident, not dailies. (3) Legacy region-overlap + title-word dedup, active <24h (v5 unchanged). Merge unions affected_regions + related_signal_ids + material_event_keys, bumps event_count, renders the merged regions into the description ("Affected regions:" trailer), logs stage=declare decision=merge (engine deterministic), and unions the evidence projection’s signal sources. agents-046 (v4): a merge advances the material clock (last_material_event_at) ONLY when it brings GENUINELY-NEW material event keys (newMaterialKeys over the incident's material_event_keys, agents-010 Fault B) — an EVOLVING situation. Re-emission / continued press coverage of already-tracked events accumulates ids/regions/event_count but HOLDS the material clock (agents-019 §C), so a wallpaper advisory's quiet clock can finally elapse toward close. This is the evolving-vs-wallpaper discriminator the earned-rights lifecycle backstop (incident_lifecycle v1) reads.