meshai/work/tests
malice 0c76a806b8
feat(env): native adapters broadcast only newly-RECEIVED items (no backlog) (#43)
Replace the native path's "scan accumulated state + suppress what we've
already broadcast" model with "broadcast only what newly arrived from the
API this poll." Storage is unchanged (self._events + firms_pixels etc. are
populated for EVERY received item, so the LLM/get_active backlog is intact);
only the BROADCAST decision changes.

- env/store.py: per-adapter in-memory seen-set (_seen) + _seeded. First
  data-bearing poll for an adapter seeds keys and emits NOTHING (that batch
  is pre-existing backlog); later polls emit only keys not seen before.
  Restart => empty sets => next poll re-seeds silently. Structurally
  impossible to broadcast backlog on cold start / restart / re-enable.
  Key = external_id -> event_id -> content hash, namespaced per adapter.
  self._events[key]=evt still runs unconditionally (storage preserved).
- Fixes the ~175 (roads511) / ~782 (wzdx) cold-start bursts AND the latent
  quake/nws version (they only looked safe because Central pre-populated
  their broadcast tables).
- env/satpass.py: broadcast on AOS IMMINENCE (now < aos <= now+lead,
  broadcast_lead_seconds default 3600), future-only; window_hours still
  governs prediction depth. Strict norad_ids post-filter + fixed
  _parse_norad_ids char-iteration bug (cause of GOES/METEOR leak).
- Central path + broadcast-state tables untouched (native-only gate).

13 new tests; full suite at 10-failure baseline (1697 passed).

Co-authored-by: Matt Johnson <mj@k7zvx.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-05 14:38:40 -06:00
..
fixtures refactor(phase2): migrate nws + incident/roads to formatter+decider (tier-a) (#30) 2026-07-04 18:16:34 -06:00
harness refactor(phase0): source-agnostic formatter/gating scaffold + harness (inert) (#28) 2026-07-04 12:55:48 -06:00
conftest.py refactor(phase0): source-agnostic formatter/gating scaffold + harness (inert) (#28) 2026-07-04 12:55:48 -06:00
test_adapter_avalanche.py feat(broadcast): fit all mesh message formats to the packet budget (#8) 2026-07-02 16:49:33 -06:00
test_adapter_config_api.py feat(broadcast): fit all mesh message formats to the packet budget (#8) 2026-07-02 16:49:33 -06:00
test_adapter_config_foundation.py feat(broadcast): fit all mesh message formats to the packet budget (#8) 2026-07-02 16:49:33 -06:00
test_adapter_ducting.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_adapter_fires.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_adapter_firms.py fix(firms): native adapter attribution-only — never broadcast raw hotspots (#36) 2026-07-05 01:18:44 -06:00
test_adapter_nws.py refactor(phase2): migrate nws + incident/roads to formatter+decider (tier-a) (#30) 2026-07-04 18:16:34 -06:00
test_adapter_roads511.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_adapter_swpc.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_adapter_traffic.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_adapter_usgs.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_adapter_usgs_quake.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_adapter_wzdx.py fix: WZDx registry nested-url crash + composer "None" leak (dry-run findings) (#42) 2026-07-05 10:10:09 -06:00
test_avalanche_refactor.py refactor(phase1): quake + swpc(Kp+flare) + avalanche, behind staged-cutover gate (#29) 2026-07-04 15:58:46 -06:00
test_avalanche_v057.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_band_conditions.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_bool_roundtrip.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_budget_shim.py refactor(phase0): source-agnostic formatter/gating scaffold + harness (inert) (#28) 2026-07-04 12:55:48 -06:00
test_capture_script_importable.py refactor(phase0): source-agnostic formatter/gating scaffold + harness (inert) (#28) 2026-07-04 12:55:48 -06:00
test_central_boot_guard.py fix(central): don't crash boot when Central is unreachable at startup (#26) 2026-07-04 01:13:50 -06:00
test_central_consumer.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_central_envelope_to_wire_v057.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_central_normalizer.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_central_region_routing.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_central_sub_adapter_routing.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_channel_rendering.py feat(routing): MeshCore as first-class delivery types (meshcore_broadcast/dm) (#11) 2026-07-02 22:42:14 -06:00
test_clock_seam.py refactor(phase0): source-agnostic formatter/gating scaffold + harness (inert) (#28) 2026-07-04 12:55:48 -06:00
test_cold_start_grace.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_composite_transport.py refactor(transport): derive active transports from config, drop transport setting (#13) 2026-07-03 00:18:53 -06:00
test_config_loader.py feat(dashboard): MeshCore transport + per-family routing GUI controls (#10) 2026-07-02 16:49:59 -06:00
test_config_source_field.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_consumer_default_deny.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_context_hot_reload.py feat(context): GUI control for chat-context retention (days) + live apply (#20) 2026-07-03 19:03:37 -06:00
test_curation.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_cutover_gate.py refactor(phase1): quake + swpc(Kp+flare) + avalanche, behind staged-cutover gate (#29) 2026-07-04 15:58:46 -06:00
test_danger_zone_correlator.py refactor(danger-zones): drop min_severity + position_max_age; table snow (grayed/inert) 2026-06-21 06:56:22 +00:00
test_dashboard_config_save.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_dispatcher_persistence.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_env_reporter.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_env_reporter_fire_recency.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_fire_age_gate.py feat(danger-zones): configurable infra-node hazard correlation + fire age-gate 2026-06-21 06:33:54 +00:00
test_fire_digest_broadcast_gate.py feat(broadcast): fit all mesh message formats to the packet budget (#8) 2026-07-02 16:49:33 -06:00
test_fire_digest_recency.py feat(transport): CompositeTransport for dual Meshtastic+MeshCore (Phase 4) (#6) 2026-07-02 12:33:17 -06:00
test_fire_refactor.py refactor(phase3c): migrate FIRMS fusion broadcasts to formatter+decider (#34) 2026-07-04 23:18:51 -06:00
test_fire_tracker_phase1.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_fire_tracker_phase2.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_fire_tracker_phase3.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_fire_tracker_phase4.py feat(transport): CompositeTransport for dual Meshtastic+MeshCore (Phase 4) (#6) 2026-07-02 12:33:17 -06:00
test_fire_v057.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_firms_handler.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_firms_native_fusion.py feat(env): native adapters broadcast only newly-RECEIVED items (no backlog) (#43) 2026-07-05 14:38:40 -06:00
test_firms_refactor.py refactor(phase3c): migrate FIRMS fusion broadcasts to formatter+decider (#34) 2026-07-04 23:18:51 -06:00
test_fix_meshcore_save_and_llm_test.py fix(meshcore): deliver DM replies (flood/ACK), save meshcore_context, test-llm, inbound logging (#21) 2026-07-03 19:54:16 -06:00
test_formatter_scaffold.py refactor(phase3b): migrate WFIGS fire to formatter+decider (tier-a) (#33) 2026-07-04 22:51:26 -06:00
test_formatters_no_clock.py refactor(phase0): source-agnostic formatter/gating scaffold + harness (inert) (#28) 2026-07-04 12:55:48 -06:00
test_harness_selftest.py refactor(phase0): source-agnostic formatter/gating scaffold + harness (inert) (#28) 2026-07-04 12:55:48 -06:00
test_hydro_refactor.py refactor(phase3a): migrate hydro/nwis to formatter+decider (tier-a) (#32) 2026-07-04 22:22:33 -06:00
test_import_smoke.py refactor(phase0): source-agnostic formatter/gating scaffold + harness (inert) (#28) 2026-07-04 12:55:48 -06:00
test_incident_handler.py feat(broadcast): fit all mesh message formats to the packet budget (#8) 2026-07-02 16:49:33 -06:00
test_incident_refactor.py refactor(phase2): migrate nws + incident/roads to formatter+decider (tier-a) (#30) 2026-07-04 18:16:34 -06:00
test_include_roundtrip.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_itd_511_work_zone.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_llm_reply_cap.py feat(reply): cap interactive LLM replies to 3 mesh packets (#7) 2026-07-02 16:49:10 -06:00
test_llm_scoping.py feat(meshcore): decouple per-mesh LLM DM gate + mesh-scoped chat context (#19) 2026-07-03 18:39:26 -06:00
test_mesh_send_api.py MeshCore Contacts roster + Companion status (read-only) (#17) 2026-07-03 16:14:10 -06:00
test_meshcore_context_config.py Phase A — 4-section nav; move Scheduled Broadcasts + Danger Zones off Routing (#15) 2026-07-03 14:57:24 -06:00
test_meshcore_context_filter.py feat(meshcore): decouple per-mesh LLM DM gate + mesh-scoped chat context (#19) 2026-07-03 18:39:26 -06:00
test_meshcore_dm_delivery.py fix(meshcore): reply to DMs via discovered DIRECT route, not flood (#23) 2026-07-03 22:25:40 -06:00
test_meshcore_transport.py fix(meshcore): reply to DMs via discovered DIRECT route, not flood (#23) 2026-07-03 22:25:40 -06:00
test_notification_toggles.py feat(routing): MeshCore as first-class delivery types (meshcore_broadcast/dm) (#11) 2026-07-02 22:42:14 -06:00
test_nwis_handler.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_nws_dedup_relaxation.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_nws_handler.py fix(nws): tighten hazard wording across all product types; kill dangling '— …' in L4 (#16) 2026-07-03 15:22:07 -06:00
test_nws_refactor.py refactor(phase2): migrate nws + incident/roads to formatter+decider (tier-a) (#30) 2026-07-04 18:16:34 -06:00
test_observer_locations.py feat(phase4c): native SGP4 satpass — standalone satellite passes, no Central (#39) 2026-07-05 02:25:55 -06:00
test_or_arch_continuous.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_persistence.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_pipeline_digest.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_pipeline_grouper.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_pipeline_inhibitor_grouper.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_pipeline_persistence.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_pipeline_scheduler.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_pipeline_skeleton.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_pipeline_toggle_filter.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_quake_handler.py feat(broadcast): fit all mesh message formats to the packet budget (#8) 2026-07-02 16:49:33 -06:00
test_quake_refactor.py refactor(phase1): quake + swpc(Kp+flare) + avalanche, behind staged-cutover gate (#29) 2026-07-04 15:58:46 -06:00
test_reminders.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_renderers.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_rf_v057.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_router_env_scope.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_satpass_broadcast_safety.py feat(phase4a): peak_compass end-to-end + repair stale satpass test suite (#35) 2026-07-05 01:06:29 -06:00
test_satpass_command.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_satpass_compass_fallback.py feat(phase4a): peak_compass end-to-end + repair stale satpass test suite (#35) 2026-07-05 01:06:29 -06:00
test_satpass_event_path.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_satpass_handler.py feat(phase4a): peak_compass end-to-end + repair stale satpass test suite (#35) 2026-07-05 01:06:29 -06:00
test_satpass_native.py feat(env): native adapters broadcast only newly-RECEIVED items (no backlog) (#43) 2026-07-05 14:38:40 -06:00
test_satpass_persisted_timer.py feat(phase4c): native SGP4 satpass — standalone satellite passes, no Central (#39) 2026-07-05 02:25:55 -06:00
test_satpass_registration.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_satpass_wire_fields.py feat(phase4a): peak_compass end-to-end + repair stale satpass test suite (#35) 2026-07-05 01:06:29 -06:00
test_save_section_secret_preserve.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_seismic_v057.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_shadow_inert.py refactor(phase3b): migrate WFIGS fire to formatter+decider (tier-a) (#33) 2026-07-04 22:51:26 -06:00
test_store_received_delta.py feat(env): native adapters broadcast only newly-RECEIVED items (no backlog) (#43) 2026-07-05 14:38:40 -06:00
test_swpc_handler.py refactor(phase1): quake + swpc(Kp+flare) + avalanche, behind staged-cutover gate (#29) 2026-07-04 15:58:46 -06:00
test_swpc_refactor.py refactor(phase1): quake + swpc(Kp+flare) + avalanche, behind staged-cutover gate (#29) 2026-07-04 15:58:46 -06:00
test_tail_followups.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_tle_fetch.py feat(phase4c): native SGP4 satpass — standalone satellite passes, no Central (#39) 2026-07-05 02:25:55 -06:00
test_tombstone_broadcast.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_tracking_v057.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_traffic_v057.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_transport_abstraction.py refactor(transport): derive active transports from config, drop transport setting (#13) 2026-07-03 00:18:53 -06:00
test_uniform_sizing.py refactor(transport): derive active transports from config, drop transport setting (#13) 2026-07-03 00:18:53 -06:00
test_v052_dispatcher.py fix: WZDx registry nested-url crash + composer "None" leak (dry-run findings) (#42) 2026-07-05 10:10:09 -06:00
test_v064_guard_commit.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_water_v057.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_weather_v057.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_wfigs_handler.py feat(broadcast): fit all mesh message formats to the packet budget (#8) 2026-07-02 16:49:33 -06:00
test_work_zone_renderer.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00