Magnus Hedemark and factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
ce5f34a33d
fix(tempest): honor --dry-run on udp listen without binding a socket
...
udp listen ignored the universal --dry-run flag and bound UDP 50222,
hanging when no hub is on the LAN. Add a dry-run plan branch that
describes the listen parameters (bind address, port, timeout, show-all)
and exits 0 without creating any socket, so doc claims of universal
--dry-run support stay universal and true.
Four regression tests pin the plan shape, the defaults/--show-all
propagation, and prove no socket is constructed (and no token demanded).
Recipe 5 documents the udp listen plan object alongside the other plans.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-30 01:52:10 -04:00
Magnus Hedemark and factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
a31381bd37
docs(tempest): thicken weather station skill against current API research
...
Full skill-builder rebuild of tempest per issue #407 :
- references/: four dense files replacing the single layouts crib sheet -
rest-api-and-auth.md (personal-use token via tempestwx.com Settings ->
Data Authorizations, token-as-query-parameter auth, StationSet wrapper,
device_type HB/AR/SK/ST enum, observation parameters day_offset vs
time_start/time_end, better_forecast unit-selection, error signatures),
udp-broadcast-protocol.md (port 50222 listen-only broadcast, dispatch-
by-type rule, obs_st 18-position UDP record, rapid_wind ob, evt_precip/
evt_strike, hub_status/device_status named fields), observation-layouts-
and-units.md (REST 22-position obs_st vs UDP 18, obs_air 8, obs_sky 17
vs 14, daily obs_*_ext summaries, metric-native unit tables), and cli-
worked-recipes.md (six executable pipelines). Every file ends with a
Sources footer citing live-verified official docs (apidocs.tempestwx.com,
weatherflow.github.io/Tempest).
- scripts/tempest: fixed researched bugs - rapid_wind handler iterated the
single ob array element-wise (TypeError on real datagrams), hub_status
printed undocumented freq field, forecast human display double-converted
Fahrenheit stations (units_temp=f is documented and honored), SK/AR
device types now matched alongside SKY/AIR, StationSet unwrap handles
stations/locations/bare-list shapes, missing ~/.tempest.env fallback
implemented as documented, dry-run stations plan, handler-owns-flags
dispatch. Added decode_message()/handle_datagram() type-dispatch layer
covering all seven UDP message families.
- scripts/test_tempest.py: 42 offline tests (pytest + unittest green,
proxy-trap clean) - canned UDP datagram bytes fed to the decoder with no
sockets, mocked REST transport, help/arg-error/dry-run classes, and the
documented pipelines (stations->current, obs day totals, forecast units).
- SKILL.md: lastfm-model rewrite (275 lines) - Setup, intent-grouped
commands, UDP family dispatch table, pipeline recipes, jq guidance, ten
grounded gotchas, when-to-use/when-not-to-use boundaries, reference
routing table.
- README.md: human-format refresh with hub-on-LAN prerequisite.
- evals/evals.json: 8 schema-v1 cases incl. two negative probes
(Shakespeare The Tempest, generic city forecast).
- Root README blurb and references/skill-triggers.md row synced to the new
description; .claude-plugin/marketplace.json and llms.txt regenerated
(both embed descriptions; check modes exit 0; codex artifact unaffected).
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-29 23:04:37 -04:00