v1.4.0 Phase 2: SPC fire-weather Day 2 (#63) #108
No reviewers
Labels
No labels
area:ai
area:ci-cd
area:notifications
area:observability
area:public-pages
backlog
bug
duplicate
enhancement
help wanted
invalid
question
type:decision
type:feature
type:infra
type:maintenance
type:security
v1.0.1
v1.1.0
v1.2.0
v1.3.0
v2.0.0
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
rbrooks/WeatherBot!108
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/v1.4.0-phase2-firday2"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Resolves the dead SPC fire-weather Day-2 plumbing (F-24). Decision: add Day 2 (recorded on #63), matching the Day 1/2/3 convective coverage — rather than removing the dead text fetch.
Before: only Day-1 fire geometry was fetched and
_parse_fire_featurehardcodedday=1, so no fire outlook could ever match Day 2 — yetfetch_spc_fire_outlook_text(2)ran every poll into a dict slot day-2 could never index (dead work).SPC_FIRE_LAYER_URLSmaps day 1 → MapServer layer 1 and day 2 → layer 4 ("Day 2 Outlook"), verified against the live SPC firewx service metadata (layers 0/3 are the broader "Fire Weather Outlook", 2/5 are "Dry Thunderstorm" — the categorical ELEV/CRIT/EXTR outlook is 1/4)._parse_fire_feature(day, feature)takes the day;product_idis nowD{day}_FIRE_...mirroring the convectiveD{day}_convention.fetch_fire_outlooks()loops both layers with per-day freshness recording and per-day try/except (one day's failure won't abort the other).spc_processor.pychange: it already threadsoutlook.daythrough dedup/dispatch and itsfire_outlook_textsdict already held both{1, 2}slots, so Day-2 outlooks (and the previously-dead Day-2 text) now flow through automatically.Transition note
The Day-1 fire
product_idchanges fromFIRE_...toD1_FIRE_..., so its dedup id changes. If a CRIT/EXTR Day-1 fire outlook happens to be active at deploy time, it could be re-notified once. Fire CRIT/EXTR outlooks are rare and issued daily, so this one-time transition is low-risk.Testing
Full suite green on the dev server: 661 passed (3 new SPC tests: Day-1 and Day-2 parse/product_id, and
fetch_fire_outlooksfetching both layers).Closes #63
🤖 Generated with Claude Code
F-24: only Day-1 fire geometry was fetched (_parse_fire_feature hardcoded day=1), so no fire outlook could ever match Day 2 — yet fetch_spc_fire_outlook_text(2) was fetched every poll into a dict slot day-2 could never index. Decision was to ADD Day 2 (matches the Day 1/2/3 convective coverage), making that fetch live. - SPC_FIRE_LAYER_URLS now maps day 1 -> MapServer layer 1 and day 2 -> layer 4 ("Day 2 Outlook"), verified against the SPC firewx service metadata. - _parse_fire_feature(day, feature) takes the day (was hardcoded 1); product_id is now D{day}_FIRE_... mirroring the convective D{day}_ convention. - fetch_fire_outlooks() loops both layers with per-day freshness recording and per-day try/except so one day's fetch failure doesn't abort the other. - spc_processor.py needs no change: it already threads outlook.day through dedup/dispatch and its fire_outlook_texts dict already had the {1,2} slots, so Day-2 outlooks (and the previously-dead Day-2 text) now flow through. - README: fire coverage documented as Day 1-2. Transition note: the Day-1 fire product_id changes from FIRE_... to D1_FIRE_..., so a CRIT/EXTR Day-1 fire outlook active at deploy could be re-notified once. Fire CRIT/EXTR outlooks are rare and daily, so this one-time transition is low-risk. Full suite green on the dev server: 661 passed (3 new SPC tests). Closes #63 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>