meshai/work/tests
malice 61ca0057e2
fix(nws): tighten hazard wording across all product types; kill dangling '— …' in L4 (#16)
Special Weather Statements (and other SPS/WSW/FFW/FLW products) rendered a
verbose raw hazard sentence on L3 that ate the packet budget, collapsing L4 to
a dangling 'Moving SW 24 mph —…' with every town lost (seen live in the
Activity Log).

- Add _tighten_hazard(): compacts free-form NWS hazard text into the terse SVR
  idiom for ALL branches — 'Wind gusts in excess of 45 mph' -> '45mph gusts',
  'in excess of' -> '>', '45 mph' -> '45mph', 'pea size hail' -> '0.25" hail'.
  Applied to the FFW/FLW and SPS/WSW/else branches (SVR already terse).
- Rework L4 assembly to be budget-aware BEFORE the final hard cap: try location
  forms richest->poorest (full list -> first->mid->last -> first->last ->
  first-only -> none) and only attach '— {locs}' when the whole message fits.
  If no location fits, degrade to motion-only; if even that overflows, drop L4.
  A dangling '— …' / trailing '—' is now structurally impossible.
- Tests: SPS worst-case (tightened + no dangling), WSW, pathological
  motion-only degrade, SVR no-dangling re-verify; shared dangling-separator
  assertion.

Co-authored-by: Matt Johnson <mj@k7zvx.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-03 15:22:07 -06:00
..
fixtures/central_envelopes refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
conftest.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00: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 refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00:00
test_adapter_nws.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00: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_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_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_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_curation.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00: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_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_incident_handler.py feat(broadcast): fit all mesh message formats to the packet budget (#8) 2026-07-02 16:49:33 -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_mesh_send_api.py feat(dashboard): send-test-message + MeshCore channel list (#14) 2026-07-03 01:06:31 -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 Phase A — 4-section nav; move Scheduled Broadcasts + Danger Zones off Routing (#15) 2026-07-03 14:57:24 -06:00
test_meshcore_transport.py refactor(transport): derive active transports from config, drop transport setting (#13) 2026-07-03 00:18:53 -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_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_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 refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00: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 refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00: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(broadcast): fit all mesh message formats to the packet budget (#8) 2026-07-02 16:49:33 -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 refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00: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_swpc_handler.py refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00: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_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 refactor: move source tree into work/, multi-stage Docker build, fix satpass 2026-06-16 03:40:31 +00: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