Decide and finish SPC fire-weather Day 2 — geometry never fetched, text plumbing dead #63

Closed
opened 2026-07-18 05:31:27 +00:00 by claude-bot · 2 comments
Contributor

Only the Day 1 fire layer URL exists (app/services/spc.py:28) and
_parse_fire_feature hardcodes day=1 (:209-225), so no fire outlook can ever
match day 2 — yet fetch_spc_fire_outlook_text(2) is called every poll
(spc_processor.py:109-113, 722-729) into a dict that day-2 can never index.
Either add the Day 2 fire layer (+parse day=2, tests), or remove the Day 2
text fetches and document Day-1-only scope in README. Recommend adding it —
same rationale as the Day 1/2/3 convective fix.

Acceptance criteria:

  • Decision recorded; implementation matches it
  • No dead per-poll fetches remain

Filed from the 2026-07-17 codebase audit (docs/.internal/report-2026-07-17.md), finding F-24.

Only the Day 1 fire layer URL exists (app/services/spc.py:28) and `_parse_fire_feature` hardcodes day=1 (:209-225), so no fire outlook can ever match day 2 — yet `fetch_spc_fire_outlook_text(2)` is called every poll (spc_processor.py:109-113, 722-729) into a dict that day-2 can never index. Either add the Day 2 fire layer (+parse day=2, tests), or remove the Day 2 text fetches and document Day-1-only scope in README. Recommend adding it — same rationale as the Day 1/2/3 convective fix. **Acceptance criteria:** - [ ] Decision recorded; implementation matches it - [ ] No dead per-poll fetches remain --- _Filed from the 2026-07-17 codebase audit (`docs/.internal/report-2026-07-17.md`), finding F-24._
Author
Contributor

Decision (SPC fire-weather Day 2)

Decision: ADD Day 2 rather than remove the dead text plumbing. Rationale matches the audit recommendation and the earlier Day 1/2/3 convective fix — the fetch_spc_fire_outlook_text(2) call is already made every poll, so the intent was always Day-2 coverage; the gap is only the missing geometry layer + a hardcoded day=1 in _parse_fire_feature. Adding the Day 2 fire layer URL, parsing day=2, and tests makes the existing per-poll fetch meaningful instead of dead. Implemented in v1.4.0 Phase 2.

Picking this milestone up now (v1.4.0 — codebase health).

## Decision (SPC fire-weather Day 2) **Decision: ADD Day 2** rather than remove the dead text plumbing. Rationale matches the audit recommendation and the earlier Day 1/2/3 convective fix — the `fetch_spc_fire_outlook_text(2)` call is already made every poll, so the intent was always Day-2 coverage; the gap is only the missing geometry layer + a hardcoded `day=1` in `_parse_fire_feature`. Adding the Day 2 fire layer URL, parsing `day=2`, and tests makes the existing per-poll fetch meaningful instead of dead. Implemented in v1.4.0 Phase 2. Picking this milestone up now (v1.4.0 — codebase health).
Author
Contributor

Done in #108 (merged). Added SPC fire-weather Day 2: SPC_FIRE_LAYER_URLS now maps day 1→MapServer layer 1 and day 2→layer 4 (verified against the SPC firewx service metadata), _parse_fire_feature(day, feature) takes the day (was hardcoded 1) with D{day}_FIRE_... product ids, and fetch_fire_outlooks() loops both layers with per-day freshness recording. No spc_processor.py change needed — it already threads outlook.day and had both {1,2} fire-text slots, so the previously-dead Day-2 text fetch is now live. README updated to Day 1-2 fire coverage. Full suite 661 passed on the dev server. (Transition: the Day-1 fire dedup id changes FIRE_D1_FIRE_, so a rare active CRIT/EXTR Day-1 fire outlook could re-notify once at deploy.)

Done in #108 (merged). Added SPC fire-weather Day 2: `SPC_FIRE_LAYER_URLS` now maps day 1→MapServer layer 1 and day 2→layer 4 (verified against the SPC firewx service metadata), `_parse_fire_feature(day, feature)` takes the day (was hardcoded 1) with `D{day}_FIRE_...` product ids, and `fetch_fire_outlooks()` loops both layers with per-day freshness recording. No `spc_processor.py` change needed — it already threads `outlook.day` and had both `{1,2}` fire-text slots, so the previously-dead Day-2 text fetch is now live. README updated to Day 1-2 fire coverage. Full suite 661 passed on the dev server. (Transition: the Day-1 fire dedup id changes `FIRE_`→`D1_FIRE_`, so a rare active CRIT/EXTR Day-1 fire outlook could re-notify once at deploy.)
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/WeatherBot#63
No description provided.