OLDGABE — research log

What this log is. The research record for OLDGABE, a US-based wildfire detection product. Each entry carries a plain-language framing, a BLUF, the exact method and populations, a results table, a claim-status tag, a literature-alignment box, and load-bearing honest bounds — so a reader with access to the same public feeds (NASA FIRMS VIIRS/MODIS, NOAA GOES-ABI, NIFC IRWIN/perimeters) and the stated recipe can recreate the numbers. Measured, skeptical-first, negatives kept. Rigor pass: 2026-07-08. Comment on any entry below — challenge a number, add evidence, or suggest a check.

Does the CAUTION-recovery re-ranker actually beat the production tier scorer? — head-to-head + de-confounding

Date: 2026-07-08   Status: defensible (measured; 5-fold spatial CV; two independent truths)

The framing. OLDGABE's fusion stage sorts every candidate fire into tiers; the great majority land in a low-confidence CAUTION tier and are never surfaced. The question that had never been measured: among those CAUTION events, can a learned recovery model rank the genuine hidden fires better than the production tier/confidence scorer does?

BLUF. On the operationally meaningful metrics the recovery model decisively beats production. At an 80%-precision operating point it recovers 60.5% of confirmed real fires vs production's 9.5% (Truth1), and 27.2% vs 0% under a second, HMS-independent truth (Truth2). Production holds a small global-AUC edge on Truth1 (0.951 vs 0.936) — but that edge is a confound: production uses the NOAA HMS smoke channel, and Truth1 is 91.5% HMS-confirmed, so it is partly scoring HMS against HMS. When the truth is switched to an independent polar-satellite corroboration, production's AUC edge reverses (recovery 0.845 vs production 0.786).

Populations & truths (reproducible). Candidate set = every canonical event with event_corroboration_tier.tier='CAUTION' that has an event_ground_truth row (n = 197,325). Truth1 (multi-source) = event_ground_truth.confirmed (6,867 positive, 3.48%; for CAUTION this channel is 91.5% NOAA-HMS-confirmed). Truth2 (neutral polar) = a VIIRS/MODIS active-fire detection from a different canonical event within 5 km and −1..+14 days of the event's first detection (7,791 positive, 3.95%). The two truths overlap only partially (both-positive 1,753; Truth1-only 5,114; Truth2-only 6,038), so Truth2 is a genuine cross-check, not a relabelling.

Features (non-leaky, detection-time only). Evidence is joined excluding the confirmation channels IRWIN, HMS, SAR and S2. Per event: n_det, n_fam, max/mean_frp, max/mean_conf, span_h, n_days, max_ti4, ti4−ti5 contrast, frac_night, mean_pixel_area, max_ti5, abi_temp_k, abi_area, modis_brightness, mean_hour, fp_dist_km, frp_per_pixel. Model: gradient-boosted trees (HistGradientBoostingClassifier, class-weight balanced), scored out-of-fold under 5-fold GroupKFold grouped on 0.2° spatial cells (a held-out cell is never in training). The production scorer is the fixed tier_and_conf() confidence; its value is pinned at 0.02 for ~94% of CAUTION events (the GOES/ABI-only majority), which is why it cannot rank within the tier.

Result.

Truth1 (multi-source, HMS-heavy)AUCPR-AUCrecall@90%precall@80%p
recovery model (detection features)0.9360.7350.3790.605
production tier_and_conf0.9510.5440.0650.095
production indep-families0.5000.0000.000
production max-FRP0.7870.1610.0060.019
Truth2 (neutral polar, HMS-independent)AUCPR-AUCrecall@90%precall@80%p
recovery model (detection features)0.8450.5110.0640.272
production tier_and_conf0.7860.2730.0000.000

De-confounding (does the win survive removing the reporting channel?). Feature-group AUCs, per truth — month-only / geography-only (lat,lon) / detection-only / all:

truthmonth-onlygeo-onlydetection-onlyallsummer-share gap
Truth10.5770.9030.9360.9730.00
Truth20.5670.8770.8450.9320.00

Reads: (1) Season is not a confound — the candidate window is summer-only, so the summer-share of positives and of negatives is identical (gap = 0) and month-only ranking is near-chance (~0.57). (2) Geography is a large prior under both truths (0.903 vs 0.877), which already argues it is real fire geography rather than pure reporting bias — a reporting-only signal would predict the HMS truth far better than the polar truth. (3) Production's Truth1 AUC lead does not survive the neutral truth. The honest operating-point story is unchanged: production cannot deliver a high-precision set within CAUTION; the recovery model can.

Claim status: DEFENSIBLE (measured, out-of-fold, two independent truths).

Literature alignment. Verdict: AGREEMENT. Two well-established remote-sensing results are reproduced here on OLDGABE's own data: (a) a single geostationary quality/confidence flag is a weak within-tier ranker [1][2], and (b) independent multi-sensor corroboration is the strongest precision lever for active-fire detection [3]. A learned re-ranker that fuses detection-time features outperforms a hand-tuned tier threshold, consistent with the broader move from fixed thresholds to learned confidence in EO detection.

Where we are careful / diverge: AUC and PR-AUC disagree here because production's confidence is near-constant within CAUTION; we report the operating-point metric (recall at fixed precision) as primary because the use-case is surfacing a high-precision hidden set, not global ranking. We treat the HMS-heavy Truth1 as reporting-biased and lead with the polar Truth2.

What this does not claim: neither truth is a fire perimeter; Truth1 (HMS smoke) is spatially broad, Truth2 (polar overpass) is recall-limited. These are corroboration proxies.

Next research test: add geographic priors and re-validate on the neutral truth (see entry 0002); extend beyond the summer window before any surfacing.

References: [1] · [2] · [3]

Public data sources: NASA FIRMS (VIIRS/MODIS active fire) · NOAA GOES-R ABI · NIFC / IRWIN & perimeters (US ground truth). Every figure is reproducible from these public feeds plus the recipe above; no OLDGABE-internal state is required to recompute the model, only OLDGABE's aggregation of these feeds into per-event evidence.

Statistical reporting: ranking metrics are out-of-fold (5-fold GroupKFold, 0.2° cells) to remove in-sample optimism; base rates are stated with counts; both a reporting-biased and a reporting-independent truth are reported side by side rather than a single headline.

entry 0001

Adding geography to the recovery re-ranker — a defensible lift that grows under the neutral truth

Date: 2026-07-08   Status: defensible (measured; gated hidden shadow — NOT surfaced)

The framing. Entry 0001 showed geography alone ranks CAUTION fires surprisingly well. Wildfires cluster by fuel, terrain and climate, so a location prior should carry real signal — but a location prior can also just memorise where fires get reported. This entry adds geography to the recovery model and tests, honestly, whether the lift is real fire behaviour or a reporting/coverage artifact.

BLUF. Adding raw lat/lon to the detection feature set (recovery+geo) is a defensible improvement over both the detection-only recovery model and production, on both truths and every metric. The decisive de-confounding result: the geo lift is larger under the HMS-independent polar truth (+0.081 AUC) than under the reporting-heavy truth (+0.036 AUC). If geography were merely encoding reporting bias, its benefit would shrink when the truth stops depending on reporting — instead it grows. So the geographic signal is real fire geography.

What "geo" is (hard data bound). OLDGABE currently has no populated land-cover / fuel / terrain / climatology layer — the fire-weather cell table is empty, weather stations are a current snapshot (temporally invalid for historical events), and the raw detection JSON carries no geographic fields. So the only non-leaky geographic priors available are raw lat/lon + distance-to-known-false-source. A Truth1-only supplementary that adds an out-of-neighbourhood polar-thermal climatology density (a fuel/fire-proneness proxy; circular against Truth2, hence Truth1-only) lifts a little further (AUC 0.978, recall@80% 0.771), indicating headroom if a real independent fuel/climatology layer were ingested.

Method delta from entry 0001. Same populations (n = 202,005; the DB ingested more June/July events between runs), same non-leaky features, same 5-fold GroupKFold on 0.2° cells, same two truths. New models: recovery+geo = detection features + lat + lon; geo-only = lat,lon; all = detection + lat + lon + month. A June↔July temporal-transport split is added as the only distribution shift the data permits.

Result — head-to-head.

Truth1 (multi-source)AUCPR-AUCrecall@80%p
detection-only recovery (deployed)0.9380.7360.583
recovery + geo0.9730.7970.719
all (+month)0.9740.8030.722
geo-only0.901
production tier_and_conf0.9500.5390.092
Truth2 (neutral polar)AUCPR-AUCrecall@80%p
detection-only recovery (deployed)0.8600.5730.368
recovery + geo0.9410.6880.531
all (+month)0.9400.6860.526
geo-only0.886
production tier_and_conf0.8070.3250.000

The geo lift over detection-only is +0.036 AUC on Truth1 and +0.081 AUC on Truth2 — it grows under the neutral truth. recovery+geo also closes and reverses the one metric where production had led (Truth1 AUC, now 0.973 vs 0.950). Detection and geography are complementary: recovery+geo (0.941) beats both detection-only (0.860) and geo-only (0.886), so neither is redundant. Month adds nothing (all ≈ recovery+geo).

Result — temporal transport (train one month, test the other).

train → testtruthdetection-onlyrecovery+geoproduction
Jul → JunTruth10.9610.9850.963
Jul → JunTruth20.8760.9550.834
Jun → JulTruth10.8880.9340.941
Jun → JulTruth20.8400.9130.794

recovery+geo beats detection-only in all four cells and production in three of four (it loses only Jun→Jul on the HMS-confounded Truth1, by 0.007). Under the neutral truth it wins both directions by wide margins, and it stabilises the hard direction (Jun→Jul detection-only falls to 0.888; recovery+geo holds 0.934). Within the available window, the geographic prior transports across time and does not hurt.

Deployment status: GATED HIDDEN SHADOW — nothing surfaced. The recovery+geo scores are written to a hidden additive table event_caution_recovered_geo; a companion canary_meta row carries surface_allowed=0 and a DO_NOT_SURFACE_* marker file states the block. No OLDGABE map, API, tile, or user-facing output reads this table, and the daemon does not modify any production tier/score/confidence.

Surfacing is blocked until BOTH: (1) an off-season validation window passes, and (2) a held-out region validation passes. The geographic prior is precisely the component most exposed to seasonal and regional shift, and the entire evaluation to date is a two-month summer window (June+July 2026) with spatial overlap. It must be re-measured on the neutral polar truth in those regimes before any surfacing is considered.

Claim status: DEFENSIBLE (measured, out-of-fold, survives the neutral truth), with an explicit generalisation bound.

Literature alignment. Verdict: AGREEMENT. Wildfire occurrence is strongly conditioned by static geography — fuel, topography and climate — which is the basis of published fire-susceptibility / fire-danger mapping [4][5]; a learned location prior recovering much of that structure is expected. Our de-confounding design (measure the geographic lift against a truth that does not depend on the reporting channel) follows the standard caution that fire records carry reporting/observation bias [6].

Where we are careful / diverge: we deliberately do not ship the geo model, because a lat/lon prior fit on a single summer season can encode that season's/region's coverage and will not transport unexamined. We hold it as a hidden shadow behind an explicit off-season + held-out-region gate.

What this does not claim: that the geographic prior generalises across seasons or regions (untested — no off-season or out-of-region data exists yet); that raw lat/lon is a substitute for a real fuel/terrain layer (the climatology supplement shows further headroom if one is ingested).

Next research test: extend the window to an off-season month and a held-out region; re-grade recovery+geo on the neutral polar truth in each; ingest an independent fuel/land-cover/terrain layer (e.g. public land-cover / elevation) and measure marginal lift over raw lat/lon.

References: [3] · [4] · [5] · [6]

Public data sources: as entry 0001 (NASA FIRMS, NOAA GOES-ABI, NIFC/IRWIN & perimeters). Reproducible from the public feeds plus the stated features, label rules, model spec and CV protocol.

Statistical reporting: all model numbers are out-of-fold (5-fold GroupKFold, 0.2° cells); the geographic lift is reported against both a reporting-biased and a reporting-independent truth; the temporal-transport split is shown in both directions; the summer-only generalisation bound is stated as load-bearing, not a footnote.

entry 0002

The cross-sensor fusion safety-net: two independent satellites agreeing is 4.5× better than one

Date: 2026-07-08   Status: defensible (measured against NIFC IRWIN + perimeters)

The framing. Each satellite makes its own noisy fire hunches. OLDGABE's fusion daemon is the “two-witnesses” rule: it links detections of the same fire across sensors and only trusts a candidate strongly when independent instruments agree. This entry measures how much that agreement is worth.

BLUF. OLDGABE ingests ~1.80 million raw per-sensor fire detections. The fusion daemon cross-links them into 11,441 multi-sensor clusters and grades them. Requiring ≥2 independent CORE thermal sensors to agree (the “confirmed” tier, n=620) raises the IRWIN/perimeter match rate to 37.7%, versus 8.4% for a random raw single detection — a 4.5× precision lift — while GOES-only single-frame candidates (the “early” tier) match just 5.5%. Separately, the false-positive catalog + status logic demote 620,160 raw candidates (34.4%) to masked-fp so they never reach the map.

Result.

fused tiernavg confavg GOES framesIRWIN/perim match
confirmed (≥2 CORE agree)6200.88414.437.7% (234)
probable3,3400.5281.613.2% (442)
early (GOES-only)6,9820.051.35.5% (383)
weak (small n)1390.020.025.9% (36)
fp (flare/persistent)3600.001.910.6% (38)
raw single-detection baseline4,000 sampled8.4% (336)

Reproducibility detail. Feeds: NASA FIRMS VIIRS (N20/N21/SNPP) & MODIS, NOAA GOES-16/17/18/19 ABI (raw hotspots + Dozier subpixel + ADP smoke). Raw stream: fire_events = 1,802,709 rows (candidate 488,981; confirmed 401,917; confirmed_growth 75,886; pre-ignition 146,843; awaiting-confirmation 59,863; rx-burn 9,059; masked-fp 620,160). Fusion rule: time-ordered single-link clustering, same fire if ≤2 km & ≤48 h; CORE = {VIIRS, MODIS, S2, GOES}; confirmed = ≥2 CORE agree. Truth: NIFC IRWIN discovery points (823,535) + NIFC perimeters (115), match ≤10 km / ±14 days; raw baseline = uniform random sample of 4,000 fire_events centroids scored identically.

Claim status: DEFENSIBLE (measured; relative lift is the load-bearing claim).

Literature alignment. Verdict: AGREEMENT. Independent multi-sensor agreement is the canonical precision lever in active-fire remote sensing [3], and geostationary single-frame hotspots are abundant but low-precision [1] — matching the “early” tier's 5.5%. Persistent industrial/flare false sources are handled by a known-source catalog rather than single-frame radiometry [2].

What this does not claim: that 37.7% is the confirmed tier's absolute precision. IRWIN records only reported incidents, so an unmatched cluster is not necessarily false; the defensible statement is the relative lift (confirmed 37.7% vs single 8.4%). The daily-scorer (entry 0007) corroborates on a separate 24 h window.

Next research test: tighten the confirmed tier with a learned per-cluster confidence (entries 0001–0002) and measure precision at fixed recall.

References: [1] · [2] · [3]

Public data sources: NASA FIRMS · NOAA GOES-R ABI · NIFC IRWIN & perimeters.

entry 0003

Dozier subpixel strict-gate: a clean precision-for-recall trade, and why we keep it out of fusion

Date: 2026-07-08   Status: defensible (measured trade-off; not fused, by design)

The framing. The Dozier subpixel method estimates what fraction of a coarse GOES pixel is actually burning (p_subpixel). Tightening a threshold on that fraction is a dial between “catch everything, mostly noise” and “only the unambiguous, but almost nothing.”

BLUF. Gating on p_subpixel trades recall for precision cleanly: the IRWIN match rate rises from 2.8% (ungated) to ~18–27% at p_subpixel ≥ 0.005–0.01, but keeps only ~10–19% of Dozier's own positives. Because the high-precision operating point yields so few detections — and essentially none the polar sensors don't already provide — OLDGABE's fusion daemon deliberately excludes Dozier. A measured “keep it, but don't fuse it” decision, not an oversight.

Result (60,000 sampled Dozier detections; 1,681 IRWIN-positive = 2.8% base):

p_subpixel ≥detections keptprecision (IRWIN match)recall of Dozier positives
0.000 (ungated)60,0002.8%100%
0.00119,5994.9%57.6%
0.0051,70318.5%18.7%
0.01061927.0%9.9%
0.0504100% (n=4)0.2%

The deployed strict gate independently scores 26.3% precision (G19) / 48.3% (G18) at ~1.3% whole-fire recall in the daily-scorer (entry 0007) — consistent with this sweep.

Reproducibility detail. Feed: NOAA GOES-ABI Dozier subpixel retrieval (ABI-Dozier-Subpixel-G18/G19). Sample: 60,000 random Dozier evidence rows with a valid p_subpixel. Label: IRWIN/perimeter match ≤10 km / ±14 days. Precision = matched/kept per threshold; recall = matched-kept / matched-ungated (of Dozier's own positives, not of all fires). Truth: NIFC IRWIN + perimeters.

Claim status: DEFENSIBLE (measured trade-off).

Literature alignment. Verdict: AGREEMENT. Dozier-style subpixel retrieval recovers sub-pixel fires a raw threshold misses, at the cost of many marginal detections [7]; a strict confidence gate is the standard conversion to usable precision. Our fusion-exclusion reflects the same marginal-value logic — a source that adds precision but ~0 independent recall does not improve a multi-sensor confirmed tier.

What this does not claim: the recall column is of Dozier's own sampled positives, not all fires; whole-fire recall at the deployed gate is ~1.3% (entry 0007). Precision at 0.05 (n=4) is noise.

Next research test: revisit fusing gated Dozier as a third corroborator only where it uniquely covers a polar-overpass gap.

References: [7] · [3]

entry 0004

Negative result: GOES temporal persistence does not add defensible recall beyond polar

Date: 2026-07-08   Status: measured NEGATIVE / null (published for rigor)

The framing. A geostationary satellite stares at the same spot every few minutes, so a tempting idea is: “if GOES keeps seeing a hotspot in one place for hours, that persistence is extra evidence of a real fire the polar satellites missed between overpasses.” We tested it. It does not hold up.

BLUF. GOES near-match “recall” is saturated by coverage: 92.4% of IRWIN fire cells have some GOES detection within ~5 km, simply because GOES-ABI emits candidate hotspots almost everywhere over CONUS (its measured precision is only ~15% — 85% are not fire). Requiring temporal persistence (a cell seen in ≥3 distinct hours) only drops this coverage-inflated number (92.4% → 66.1%); it never adds genuine recall. The apparent 43.8% “marginal over polar” is the same coverage/false-positive floor, not independent detections. Conclusion: GOES temporal persistence is not a validated recall lever — OLDGABE's defensible cross-sensor recall comes from polar corroboration and fusion (entry 0003).

Result (45-day window; 2,592 IRWIN truth cells at 0.05°):

recall of IRWIN cells by…recallinterpretation
polar (VIIRS/MODIS) near-match27.2%genuine polar detections
any-GOES near-match92.4%coverage floor (not skill)
GOES-persistent (≥3 h) near-match66.1%persistence only subtracts coverage noise
GOES-persist caught, polar missed (marginal)43.8%confounded by the same coverage floor

Reproducibility detail. Feeds: NOAA GOES-ABI vs NASA FIRMS VIIRS/MODIS. Window: trailing 45 days. Grid: 0.05° cells. Persistence = a cell with GOES/ABI detections in ≥3 distinct hour-buckets. Recall = fraction of in-window IRWIN truth cells with a qualifying detection in the 3×3 neighbourhood. Marginal = IRWIN cells covered by GOES-persistent but not polar. Truth: NIFC IRWIN. The confound is explicit: at GOES's ~15% precision, near-match recall measures coverage density, not detection.

Claim status: NEGATIVE / NULL (honest; not adopted).

Literature alignment. Verdict: AGREEMENT. Geostationary active-fire products are high-volume and low-precision [1][8]; near-match recall over a dense candidate stream measures coverage, not skill (the “information floor”). Persistence has value for precision (rejecting transient glints), but our test shows it does not manufacture recall beyond polar.

What this does not claim: that GOES persistence is useless — it is a precision/timeliness signal elsewhere. This entry only refutes the specific claim that persistence adds independent recall. A stricter per-detection truth (not cell coverage) would be needed for a fully fair recall test.

Next research test: score GOES persistence as a precision gate on the “early” fused tier rather than a recall source.

References: [1] · [8] · [3]

entry 0005

Wildfire-camera smoke detection: highest precision of any source, but coverage/visibility-bound

Date: 2026-07-08   Status: measured; bound-limited (no proven standalone field value yet)

The framing. OLDGABE runs a smoke/flame classifier on public wildfire-camera frames and, when two cameras see the same plume, triangulates the bearings into a map location. Cameras see smoke a satellite can't — but only where a camera is pointed, in daylight, through clear air, within range.

BLUF. When a camera fires on a fire IRWIN also records, it is usually right — daily-scorer precision 66.7%, the highest of any single OLDGABE source. But it matches only 1.2% of IRWIN fires: coverage and visibility (line-of-sight, daylight, haze, range) are the binding constraint, not the classifier. Honest status: a high-precision corroborator where cameras can see, with no proven standalone field value yet at network scale.

Result (daily-scorer, vs IRWIN 10 nm / 24 h):

metricvalue
CAM-SMOKE precision66.7% (38 / 57 matched)
CAM-SMOKE recall of IRWIN fires1.2%
smoke-evidence rows on file480,026
two-camera triangulated fires31

Reproducibility detail. Feed: public wildfire-camera networks (frame grabs). Pipeline: per-frame smoke/flame classifier → cam_smoke_evidence (480,026 rows: mostly baseline sweeps + fire-triggered checks) → two-camera bearing intersection → cam_triangulated_fires (31). Scoring: OLDGABE daily-scorer matches CAM-SMOKE detections to NIFC IRWIN at 10 nm / 24 h (run 18, 2026-07-08). Precision = tp/(tp+fp); recall = tp/(IRWIN incidents in window).

Claim status: MEASURED, bound-limited.

Literature alignment. Verdict: AGREEMENT. Ground/tower camera smoke detection is high-precision within line-of-sight but coverage- and visibility-limited, and multi-camera triangulation is the standard geolocation method [9]. Our numbers reproduce that profile: excellent precision, small recall.

What this does not claim: any standalone field value — recall is coverage/visibility-limited, only 57 camera detections matched an IRWIN incident in the scored window, and n=31 triangulations is too few to quote a geolocation accuracy. The defensible role today is corroboration, not primary detection.

Next research test: measure triangulation geolocation error against matched IRWIN coordinates once n is larger; quantify recall vs camera viewshed coverage explicitly.

References: [9]

entry 0006

Per-sensor scorecard vs NIFC IRWIN — what each US datalink actually contributes

Date: 2026-07-08   Status: defensible (OLDGABE's own daily replay scorer)

The framing. Rather than argue which feed matters, OLDGABE runs a daily replay scorer that matches every sensor's detections to NIFC IRWIN ground truth and records precision, recall and count per source. This entry is that scorecard, unedited.

BLUF. Polar VIIRS is the best single recall+precision workhorse; the fused OLDGABE output leads recall (72.4%); cameras lead precision (66.7%); GOES-ABI is high-volume/low-precision; SAR and Sentinel-2 SWIR contributed nothing in this window. This is the empirical basis for weighting the fusion daemon (entry 0003) toward polar + agreement.

Result (daily-scorer run 18, 24 h window ending 2026-07-08, match 10 nm / 24 h vs IRWIN):

sourceprecisionrecalltpevidence n
OLDGABE-EVENTS (fused output)18.2%72.4%3,35518,394
HMS (smoke analysis)16.0%69.2%6,90643,214
VIIRS-N2032.0%58.7%3,65511,431
VIIRS-NPP20.8%31.3%1,2766,144
VIIRS-N2119.7%26.6%1,0125,150
MODIS27.9%22.2%9013,224
ABI-ADP-Smoke-G198.8%24.1%7218,174
ABI-ADP-Smoke-G1826.0%24.2%8583,298
GOES19-ABI15.8%14.7%5213,304
GOES18-ABI39.8%14.6%5281,328
ABI-Dozier-Subpixel-G1848.3%1.3%4287
ABI-Dozier-Subpixel-G1926.3%1.3%42160
CAM-SMOKE66.7%1.2%3857
S1-SAR-BurnScar / S2-SWIR-Hotspot0.0%00

Reproducibility detail. Artifact: OLDGABE te_runs/te_metrics_by_source, run_id 18, run_kind daily-scorer, config {match_radius_nm: 10, match_window_h: 24}, window 2026-07-07→2026-07-08. Per source: tp = detections matched to an IRWIN incident within 10 nm / 24 h; fp = unmatched; fn = IRWIN incidents with no matching detection from that source; precision = tp/(tp+fp); recall = tp/(tp+fn). Feeds: NASA FIRMS VIIRS/MODIS, NOAA GOES-ABI (raw + Dozier + ADP smoke), NOAA HMS, public cameras, Sentinel-1/2. Truth: NIFC IRWIN.

Claim status: DEFENSIBLE (own measured artifact, dated).

Literature alignment. Verdict: AGREEMENT. The ranking — polar VIIRS/MODIS as accurate workhorses, geostationary as timely-but-noisy, fusion maximising recall — matches the established complementarity of polar and geostationary fire products [1][3][8].

What this does not claim: IRWIN at 10 nm / 24 h is a strict, sparse truth (reported incidents only), so absolute precision is a lower bound — many unmatched detections are real fires IRWIN never logged. Single 24 h window; lead-time medians omitted here as noisy. SAR/S2 zeros reflect this window's cadence, not a permanent verdict.

Next research test: aggregate the scorecard across many daily runs with confidence intervals; add a precision-at-fixed-recall column per source.

References: [1] · [3] · [8]

entry 0007

Reframing the camera 1.2%: coverage-conditional recall — cameras detect up to ~25% of fires they can actually see

Date: 2026-07-08   Status: defensible (measured, coverage-conditional)

The framing. Entry 0006's 1.2% camera recall was measured against every US fire — but a camera can only see fires inside its viewshed. The fair question is: where a camera can physically see, how often does it catch the fire? And is the gap infrastructure (coverage) or algorithm (detection)?

BLUF. Conditioning on coverage reframes the number by 4–20×: within 60 km of an online camera, cameras detect 24.7% of IRWIN fires; within 20–40 km, 8.8–19.0%. But two gaps remain and split cleanly: coverage — only 28–59% of fires are within R km of an online camera — and detection-in-coverage — even where a camera can see, only ~5–25% of fires are caught (night, haze, range, azimuth). Precision rises with R to 72% (matching entry 0006/0007). Cameras remain a high-precision corroborator; the primary lever is detection-in-coverage, but it is capped by coverage.

Result (3,903 deduped IRWIN incidents; 10,227 online cameras; 1,016 smoke≥0.5 hits):

radius Rcoverage (% fires near a camera)recall | in-coverageprecision | in-coverage
10 km28.0%4.8%11.9%
20 km41.3%8.8%29.5%
40 km53.1%19.0%58.6%
60 km59.0%24.7%72.4%

Reproducibility detail. Feeds: public wildfire cameras (public_cameras, 10,247 with lat/lon; azimuth/FOV present but unused), cam_smoke_evidence (smoke/flame classifier output). IRWIN incidents deduped to distinct fire-days (0.02° + day) = 3,903. Online = a camera that produced any evidence in the window (10,227 distinct). Coverage = incident within R km of an online camera. recall|cov = fraction of in-coverage incidents with a smoke≥0.5 hit from such a camera within R km & ±24 h. precision|cov = fraction of smoke hits matching an IRWIN incident within R km / ±24 h. Truth: NIFC IRWIN. Assumptions: radius is a coarse viewshed proxy (terrain occlusion, azimuth, FOV, range, daylight, haze ignored); all-hours.

Claim status: DEFENSIBLE (measured, conditional). Verdict on the lever: partial — detection-in-coverage is the primary algorithm lever, but total camera reach is capped by coverage.

Literature alignment. Verdict: AGREEMENT. Camera smoke detection is high-precision within line-of-sight and coverage/visibility-limited [9]; conditioning recall on viewshed is the correct evaluation and lifts the apparent rate substantially, as here.

What this does not claim: that R km equals a true viewshed — terrain/azimuth/FOV/daylight/haze are not modelled, so recall|cov is an upper-bounded reach estimate; precision rising with R is partly because more IRWIN incidents exist to match against at larger radius.

Next research test: replace the radius proxy with a real per-camera viewshed (DEM + azimuth + FOV + range) and split night vs day recall to isolate the algorithm lever.

References: [9]

entry 0008

Repositioning Dozier: a median 6-hour early cue, and a multi-feature gate that dominates the single threshold

Date: 2026-07-08   Status: defensible (measured; two positive levers)

The framing. Entry 0004 showed the single-p_subpixel Dozier gate is high-precision but low-yield, and excluded from fusion. Two follow-ups ask whether Dozier is worth more than that: is it early, and can a smarter gate move the curve out rather than just slide along it?

BLUF. Both hold. (1) Lead-time: for fires seen by both Dozier and a polar sensor (n=472), Dozier is earlier 53% of the time, median ~6 hours earlier — an early-cue / lead-time tier, not a recall source. (2) Multi-feature gate: replacing the single threshold with a 13-feature classifier lifts PR-AUC from 0.044 to 0.179 (4×) and precision-at-recall from 8.0% to 39.4% (at 10% recall). The multi-feature curve dominates the single threshold at every operating point.

Result A — lead-time (472 fires seen by both Dozier and polar):

metricvalue
Dozier earlier than polar53.0% of shared fires
median Δ (Dozier − polar first-detect)−5.9 h (Dozier earlier)

Result B — multi-feature gate vs single p_subpixel (out-of-fold):

operating pointsingle p_subpixel precisionmulti-feature precision
recall 0.059.5%39.9%
recall 0.108.0%39.4%
recall 0.205.3%32.6%
recall 0.304.8%19.6%
PR-AUC0.0440.179

Reproducibility detail. Feed: NOAA GOES-ABI Dozier subpixel. (A) 472 IRWIN incidents with both a Dozier and a VIIRS/MODIS detection within 10 km / ±14 d; Δ = earliest Dozier − earliest polar. (B) 80,000 random Dozier detections, 1,688 IRWIN-positive (2.11%). 13 non-leaky Dozier-context features: p_subpixel, T_MIR_K, T_LWIR_K, MIR−bgMIR, LWIR−bgLWIR, MIR−LWIR, T_f_K, A_pixel_m2, cos_view, cos_sun, is_night, fp_dist_km, cell_persistence. Model: HistGradientBoosting, 5-fold GroupKFold (0.2°) OOF; compared to raw p_subpixel. Truth: NIFC IRWIN + perimeters, 10 km / ±14 d.

Claim status: DEFENSIBLE. Verdict on the lever: build both — a Dozier early-cue tier and a multi-feature Dozier gate.

Literature alignment. Verdict: AGREEMENT. Geostationary sensors provide high temporal cadence and therefore earlier first-detection than polar overpasses for a fraction of fires [3][8]; a learned multi-feature discriminator outperforming a single radiometric threshold is expected and here quantified.

What this does not claim: the lead-time distribution is wide (p25 −88 h, p75 +55 h) because IRWIN matching uses a ±14 d window — the median (−6 h) and the 53% share are the defensible statistics, not the tails; tighter same-fire (fused-cluster) matching is future work. The gate is out-of-fold but on a single-window sample; absolute precision is IRWIN-lower-bounded.

Next research test: deploy a shadow early-cue tier keyed on Dozier-before-polar; ship the multi-feature gate as the Dozier confidence and re-measure precision at fixed recall live.

References: [3] · [7] · [8]

entry 0009

Is re-enabling Sentinel-2 SWIR worth it? Excellent coverage, ~4% active-fire marginal recall — a measured no

Date: 2026-07-08   Status: measured NEGATIVE for alerting (bounded sample + extrapolation)

The framing. Sentinel-2 SWIR sits at zero in the scorecard (entry 0007). SWIR can see active flame at 20 m — so would re-enabling full CONUS S2 processing recover fires the current sensors miss, and is it worth the cost?

BLUF. Of 1,764 IRWIN fires in the S2 window, only 191 (10.8%) were missed by every current sensor. Over those missed fires, S2 scene availability is 100% — but an actual SWIR active-fire signal appears at only 4% of them (2/50, CI 1–14%), and already-ingested S2 added 0 unique fires. Extrapolated unique marginal recall ≈ 4% of the missed set — small — at a compute cost of ~1–2 TB/week and up to 5-day latency. Verdict: not worth full re-enablement for timely alerting.

Result.

metricvalue (95% CI)
IRWIN fires in S2 window1,764
missed by all current sensors191 (10.8%)
existing ingested-S2 unique marginal0 / 191 = 0% (0–2%)
S2 scene availability over missed (sample 50)100% (92.9–100%)
actual S2 SWIR active-fire hit2 / 50 = 4.0% (1.1–13.5%)
extrapolated unique marginal recall~4%

Reproducibility detail. Missed = IRWIN incident (S2 window 2026-05-31..07-01) at a 0.05° cell (+8 neighbours) with no VIIRS/MODIS/GOES/ABI/HMS/CAM detection in the window. Availability = Element84 STAC query sentinel-2-l2a, bbox ±0.02°, −2..+5 d, cloud<70%. SWIR test = windowed COG read of B12 (SWIR2) & B11 (SWIR1) in a ~660 m box; fire pixel if B12/B11 ≥ 1.6 and B12 ≥ 0.15 reflectance (conservative). Sample n=50, Wilson CIs. Compute cost: S2 A/B revisit ~5 d, CONUS ~900 MGRS tiles × ~2 acquisitions/5 d; B11/B12/B8A ~60–120 MB/tile → ~1–2 TB/week download + per-scene cloud-mask + active-fire compute — why it was deferred vs polar, which already delivers near-real-time recall at a fraction of the volume.

Claim status: NEGATIVE for alerting (measured, bounded). Verdict on the lever: do not re-enable S2 SWIR for active-fire detection.

Literature alignment. Verdict: AGREEMENT. Sentinel-2 can detect active fire in SWIR but its ~5-day revisit makes it a poor timely detector; its established value is burn-scar/burned-area and post-event mapping, not real-time alerting [10]. Our numbers reproduce that: coverage is excellent, active-fire marginal recall is small.

What this does not claim: that S2 has no value — its role is post-hoc burn-scar/area, not active detection. The SWIR test is conservative (may miss faint/cool fires or admit bright bare-soil false positives); n=50 (CIs quoted); “missed” is a strict spatial-cell definition; S2's 5-day revisit means many short missed fires were simply not burning at overpass.

Next research test: if pursued, use S2 only for burned-area confirmation of already-detected fires, not as a detection feed.

References: [10] · [1]

entry 0010

Making standalone Dozier usable: a multi-feature gate (49% vs 12% precision) and an early-cue tier (median 4.3 h before polar) — shadow-only

Date: 2026-07-08   Status: POSITIVE, measured (shadow canary; nothing surfaced — pending fresh-window confirmation + go)

The framing. The production pipeline hides standalone GOES ABI Dozier subpixel detections entirely — on their own they are ~0.05% wildfire precision (entry 0004/0007), so Dozier only counts as corroboration for a fire another sensor already carries. Two levers could change that without touching the live gate: (1) replace the single p_subpixel threshold with a multi-feature gate, and (2) surface a Dozier early-cue tier for detections that fire before polar confirmation. This entry measures both, shadow-only.

BLUF. On 100,000 random Dozier candidates (IRWIN/perimeter truth, 2.04% base, 5-fold spatial CV), a 13-feature classifier reaches 49.3% precision at the ~10% operating recall where the single p_subpixel threshold sits at only 11.6% — a +37.7 pp gain (PR-AUC 0.234 vs 0.051). It survives dropping the detection-density feature (39.6% precision, PR-AUC unchanged), so it is not a spatial-clustering artifact. Separately, Dozier detections that precede a polar detection are 38.4% IRWIN-confirmed~19× the 2.0% Dozier baseline — at a median 4.3 h lead. Both are GO candidates. Nothing is surfaced.

Piece 1 — multi-feature gate vs the single threshold.

operating pointsingle p_subpixelmulti-feature gate
precision @ recall 0.0513.3%41.7%
precision @ recall 0.10 (current gate)11.6%49.3%
precision @ recall 0.206.5%50.8%
precision @ recall 0.304.8%45.8%
recall to hold 49.3% precision0.2%10.0% (~50×)
PR-AUC0.0510.234
precision @ recall 0.10, feature ablation (no detection-density)39.6%

Flip operating point (go/no-go). Cut over to shadow-score τ = 0.965 → 49.3% precision at 10% recall (the recall the current gate already runs at, so no recall is lost while precision ×4.3). For a stricter 40% surfacing bar the gate still returns 32.8% recall. At matched precision the single threshold collapses to 0.2% recall — the gate holds ~50× more. OOF ROC-AUC 0.869.

Piece 2 — Dozier early-cue tier.

metricvalue
Dozier detections preceding polar (5 km, +0..48 h)1,868
tier precision (IRWIN/perimeter-confirmed)38.4% vs 2.0% Dozier baseline (~19×)
median lead over first polar detection4.3 h (IQR 2.0–7.4 h)
share with ≥1 h lead / ≥6 h lead84.9% / 33.7%

Reproducibility detail. Candidates: 100,000 random ABI-Dozier-Subpixel-* evidence rows with a non-null p_subpixel. Features (13, detection-time only, no confirmation channels): p_subpixel, T_MIR, T_LWIR, MIR−bgMIR, LWIR−bgLWIR, MIR−LWIR, T_f, pixel area, cos(view), cos(sun), is_night, distance-to-FP-catalogue, and local detection-density. Truth: label = 1 if a NIFC IRWIN incident (deduped to fire-days) is within 10 km & ±14 d, or a fire-perimeter centroid within 5 km & ±14 d. Model: HistGradientBoosting (uncalibrated, balanced), scored out-of-fold under 5-fold GroupKFold on 0.2° spatial cells (no same-cell leakage). Operating points from a rank-based PR sweep. Ablation: the whole pipeline re-run with local detection-density removed. Early-cue: for each Dozier detection, the earliest polar (VIIRS/MODIS) detection within 5 km in (t, t+48 h]; lead = polar − Dozier; tier precision = IRWIN/perimeter-confirmed fraction of that set. Shadow store: hidden tables dozier_gate_shadow (would-surface set at τ) and dozier_earlycue_shadow, both flagged surface_allowed=0 with DO_NOT_SURFACE markers; the production DB is read-only and the live Dozier gate / fusion tiers are unchanged. All compute load-guarded off-peak.

Claim status: POSITIVE (measured, shadow). Piece 1 = GO candidate for the standalone-Dozier gate; Piece 2 = a usable but advisory-grade early-cue tier. Neither is surfaced; a flip requires re-proving on a fresh out-of-window sample plus explicit go.

Literature alignment. Verdict: AGREEMENT. Dozier’s two-channel subpixel method estimates subpixel fire temperature/area but a single-band or single-statistic threshold is known to be false-alarm-prone; multi-channel contextual features are the established route to separating true subpixel fire from warm background and sun-glint, as in the GOES-R ABI fire algorithm [7][8]. Our 4.6× PR-AUC lift over the raw p_subpixel threshold reproduces that expectation, and ML-for-fire reviews report the same pattern of engineered multi-feature gates beating single thresholds [4].

What this does not claim: that standalone Dozier is now confirmation-grade — 49% precision is a gate, not a confirmation, and the early-cue tier at 38% is explicitly advisory. IRWIN truth is a lower bound with reporting gaps [6], so absolute precision is bounded, not exact. The comparison is on one random historical sample (base 2.04%); the single-threshold precision here (IRWIN-only truth) is not the same quantity as the deployed Dozier scorecard number (multi-sensor fused truth). The early-cue population is conditioned on eventually being seen by polar, so its precision does not transfer to Dozier detections polar never confirms.

Next research test: re-run the gate on a fresh, strictly out-of-window month and confirm the τ=0.965 operating point holds before any cutover; then A/B the early-cue tier as an additive advisory layer, measuring realized operational lead and false-alarm load.

References: [7] · [8] · [4] · [6] · [1]

entry 0011

Pre-flip check kills the flip: the multi-feature Dozier gate collapses out-of-time — we are NOT promoting it

Date: 2026-07-08   Status: measured NEGATIVE (temporal transport) — revises entry 0011; production gate UNCHANGED

The framing. Entry 0011 reported the 13-feature Dozier gate reaching ~49% precision vs 12% for the single p_subpixel threshold under 5-fold spatial cross-validation, and flagged it a GO candidate pending a fresh out-of-window confirmation. This entry is that confirmation. Before wiring anything into the live gate we ran the strongest temporal test the data allows — train on an earlier window, test on a strictly-later held-out window — with a hard decision rule: promote only if the multi-feature gate still clearly dominates out-of-time; otherwise stop.

BLUF. It does not dominate — it collapses. Trained on the earlier window and tested on strictly-later data, the multi-feature gate falls to near-chance ranking (holdout ROC-AUC 0.60–0.64) and is beaten by the trivial single p_subpixel threshold at every operating point, in both a count-based split and a positives-balanced split. The exact flip point τ=0.965 transfers to zero holdout recall. Decision: HOLD — do not flip. The 49% spatial-CV figure was time-correlated leakage. The production Dozier gate stays exactly as-is (standalone Dozier still hidden), and the shadow canary stays gated.

Result — holdout precision at the current gate's operating recall (~10%).

temporal splitsingle p_subpixelmulti-feature gateholdout ROC-AUC (gate)τ=0.965 recall
A — earliest 60% train / latest 30% test39.8%13.8%0.600.0
B — split at median fire time (balanced positives)31.0%19.1%0.640.0

Precision across the recall curve (single vs multi-feature, holdout). Single wins at every point:

recallA singleA multiB singleB multi
0.050.3660.1930.5830.200
0.100.3980.1380.3100.191
0.200.4300.1380.3020.250
0.300.3130.1210.3220.283

Reproducibility detail. Same 120k random Dozier candidate sample, same 13 detection-time features, same IRWIN/perimeter truth (10 km/±14 d incident, 5 km perimeter centroid) as entry 0011 — only the train/test partition changed from spatial to temporal. Split A: earliest 60% of candidates by detection time = train (through 2026-05-31, n=72,259, 363 positives); latest 30% = test (from 2026-06-03, n=13,410, 1,329 positives, 9.9% base), with a 3-day gap discarded between train and test so no fire straddles the boundary. Split B (guards against Split A's low training-positive count): partition at the median detection time of the positives so each side carries ~half the fires — train through 2026-07-02 (n=107,980, 1,240 positives), test from 2026-07-05 (n=520, 127 positives, 24.4% base), same 3-day gap. Model = HistGradientBoosting (identical hyper-parameters to 0011), fit on train, scored on the strictly-later test. Precision-at-matched-recall from a rank-based PR sweep. Decision rule (pre-registered in the run): promote only if holdout multi-feature precision at the operating recall is ≥2× single AND ≥+0.10 absolute, on both splits; neither split met it (both are negative). Read-only production DB; no production code changed; the run is load-guarded and health-gated on the host. Result JSON persisted alongside the model with flip_decision = HOLD_DO_NOT_FLIP.

Claim status: NEGATIVE for promotion (measured, temporal transport). The multi-feature Dozier gate is not promoted; the live gate is unchanged. This supersedes entry 0011's tentative GO.

Summer-only bound (stated explicitly). The data is a single summer window (~2026-05-31–07-01). This is a temporal-transport test within summer (earlier → later), not an off-season test; a true winter/shoulder-season validation is impossible with the data on hand. The verdict — that the gate does not transfer even a few weeks forward — is if anything a lower bar than off-season would be, which makes the HOLD conservative and safe.

Literature alignment. Verdict: AGREEMENT. Spatial cross-validation systematically over-estimates skill when samples are space- and time-autocorrelated; temporal/blocked validation is the accepted guard, and models that look strong under random or spatial CV routinely collapse under forward-in-time evaluation [4][5]. A single physically grounded quantity — Dozier's subpixel fire fraction [7] — transported better here precisely because it is not fit to the training period's incidental structure.

What this does not claim: that engineered features are worthless for Dozier, or that the single p_subpixel threshold is itself good enough to surface standalone Dozier (its ~30–40% in-season precision here is measured against a higher-base-rate holdout, not the 2% random-sample base of entry 0011, and standalone Dozier remains corroboration-only in production). It claims only that this multi-feature gate, trained this way, does not earn a production flip. A trustworthy gate would need multi-season training data, explicitly time-invariant features, and/or continual retraining with forward validation baked in.

Next research test: if the lever is pursued, retrain on multiple fire seasons and evaluate with rolling forward-in-time validation; separately, test whether the single p_subpixel threshold plus a hard FP-catalogue/persistence guard is a simpler, more transportable route to surfacing a high-precision Dozier subset.

References: [7] · [4] · [5] · [6]

entry 0012

Does the Dozier early-cue tier survive out-of-time? Not validated — its 38% lives entirely in a not-yet-truth-matured window

Date: 2026-07-08   Status: INCONCLUSIVE / not validated (data-limited) — tier stays gated; honest negative-leaning

The framing. The gate lever failed out-of-time (entry 0012). The other Dozier lever from entry 0011 is the early-cue tier: a Dozier detection that precedes a polar (VIIRS/MODIS) detection of the same fire within 5 km/+48 h, reported there at 38.4% IRWIN-confirmed precision (~19× the ~2% Dozier baseline) with a median 4.3 h lead. It is a deterministic rule, not a fitted model, so it cannot “overfit” in the ML sense — the honest test is temporal stability: measure precision + lead on an earlier vs a strictly-later, truth-matured window.

BLUF. A clean matured earlier-vs-later split turned out to be impossible, and that fact is the finding. Dozier detected_at is bimodal: ~82% is a 2-day historical backfill (2026-05-30/31), June 01–25 has zero Dozier rows, and live ingestion only resumed ~07-01. So the only fully ±14 d truth-settled data is the backfill; the recent live window is days old and its IRWIN truth is right-censored. On the settled-truth backfill the tier scores just 2.5% precision; the headline 38% survives only in the recent window — 77% of all early-cue detections come from that not-yet-matured window — where truth cannot yet be confirmed. Verdict: NOT validated out-of-time. The tier stays gated; re-test after ~2026-07-23, when the live window's ±14 d truth settles.

Result — the same tier, measured on each cohort.

cohortwindow (UTC)Dozier nearly-cue ntier precisionbaselineenrichmentmedian lead
A — matured, settled truth (05-30/31 backfill)05-31→06-01174,4356002.5%1.0%2.5×24.6 h
B — recent, UNSETTLED truth (live 07-02+)07-02→07-0925,5652,03739.5%*6.3%6.3×3.7 h
all blended (reproduces entry 0011)05-31→07-09200,0002,63731.1%1.7%18.3×4.8 h

*Cohort B truth is right-censored (detections 0–7 days old vs the ±14 d IRWIN matching window), so 39.5% is a lower bound that is not yet confirmable, not a validated number.

What this shows. Entry 0011's 38.4%/19×/4.3 h is faithfully reproduced as the blended figure (31.1%/18.3×/4.8 h) — but it is supplied almost entirely by cohort B: 2,037 of 2,637 early-cue detections (77%) are in the recent, unsettled-truth window. On the only settled-truth data (cohort A) the tier is near baseline (2.5% vs 1.0%), and its 24.6 h median “lead” is far longer than a polar revisit — consistent with coincidental later polar hits, not genuine early warning. Cohort B's tight 3.7 h leads look like a real early-warning signal, but its truth is not settled. Polar availability is comparable across the two windows (11,268 vs 10,594 dedup polar cells), so cohort A's low precision is not a missing-polar artifact.

Reproducibility detail. 200,000 random ABI-Dozier-Subpixel-* rows. Early-cue = a later polar (VIIRS% or MODIS, CONUS, deduped to 0.05°×6 h earliest) within 5 km in (t, t+48 h]; lead = polar − Dozier. Truth = NIFC IRWIN incident (deduped to fire-days) within 10 km/±14 d or a fire-perimeter centroid within 5 km/±14 d — identical to entries 0011/0012. Cohort A (settled) = detected_at ≤ data_max − 14 d (= 2026-06-25), which with the June data gap is exactly the 05-30/31 backfill; cohort B (unsettled) = last 8 days (07-01+). Tier precision = IRWIN-confirmed fraction of the early-cue set; baseline = confirmed fraction of all Dozier in the cohort; enrichment = ratio; lead distribution via percentiles. Data span 2026-05-30→07-09; the 06-01–06-25 Dozier gap is why no third, matured-and-recent window exists. Read-only production DB; no writes; load-guarded and health-gated on the host. Result JSON persisted.

Claim status: NOT VALIDATED out-of-time (data-limited). The early-cue tier is not promoted and stays gated. This does not refute the tier — it shows its headline number was never measured on settled truth.

Honest reading — neither a clean hold nor a clean collapse. On settled truth the tier is near baseline (2.5%), which argues collapse; but that settled data is a low-fire backfill blob whose long 24.6 h leads look coincidental, so it is a weak positive test. The recent window looks genuinely strong (39.5% precision, tight 3.7 h leads consistent with sub-polar-revisit early detection) but its truth is not yet settled. The scientifically correct call is to withhold judgement and re-test cohort B after its ±14 d truth matures (~2026-07-23), not to bank the 38%.

Literature alignment. Verdict: AGREEMENT (methodological). Geostationary ABI can flag a hotspot minutes-to-hours before a polar overpass, so a real early-cue lead is physically plausible [8][3]; but IRWIN/FOD reporting settles over days-to-weeks [6], so precision measured on fresh detections is a censored lower bound — exactly the trap here. Validating detection skill only on truth-matured data is the accepted discipline [4].

What this does not claim: that the early-cue tier is worthless. Its recent-window behaviour (tight hours-scale leads, 6× enrichment) is the most encouraging Dozier result in this series; it simply is not yet confirmable. Nor does it claim the backfill 2.5% is the tier's true precision in active fire season — the backfill is largely non-fire detections (1.0% base). Next research test: re-run this exact cohort-B measurement after 2026-07-23; if precision holds near 38% on settled truth with hours-scale leads, promote it to a defensible advisory lead-time tier (still gated until surfacing is decided).

References: [8] · [3] · [6] · [4] · [7]

entry 0013

Why cameras miss fires they can see — and a lever that lifts detection-in-coverage 37→49% at flat precision

Date: 2026-07-08   Status: POSITIVE lever (measured, spatial-CV) — shadow-first build candidate, gated pending temporal transport

The framing. Entry 0008 split the camera gap in two: coverage (infrastructure — is a fire near an online camera at all) and detection-in-coverage (algorithm — where a camera can see, how often it catches the fire), the latter only ~5–25%. Coverage is a build-out problem; detection-in-coverage is the algorithm lever. This entry asks why the in-coverage misses happen and tests the best fix.

BLUF. The dominant miss driver is range, not darkness: within 15 km cameras catch 47% of in-coverage fires, falling to 20% at 15–30 km and 4% at 30–40 km (undetectable at sensor resolution). The assumed night floor does not exist — night recall (45%) actually beats day (31%), almost certainly flame glow. The best lever is the simplest: lower the single-frame smoke trigger 0.50→0.30, which lifts detection-in-coverage 36.9%→49.4% (+12.5 pts, +34% relative) at essentially flat precision (58.1%→57.2%), monotonic across the sweep and stable in 5-fold spatial CV (0.50±0.11 vs 0.37±0.11); at a tighter 20 km viewshed it nearly doubles recall (17.1%→34.2%). Adding temporal persistence was a mistake — it hurt recall (to 24.7%). We flag the threshold lever as a shadow-first build candidate, gated until it passes the temporal-transport test that killed the Dozier gate (entry 0012).

Why the misses happen (in-coverage, R=40 km, 1,083 fires, current 0.5 trigger).

driverbinfiresrecall-in-coverage
range to nearest online camera<15 km72547.4%
15–30 km25620.3%
30–40 km1023.9%
solar elevation (day/night)day (≥0°)53830.5%
twilight (−6..0°)5127.5%
night (<−6°)49444.9%
fire size (IRWIN acres)<10 ac1,00137.2%
10–100 ac2416.7%
>100 ac1315.4%

Range dominates (a clean 12× swing, 47%→4%); day/night runs the “wrong” way (glow); size is noisy at tiny n and not a usable driver. Where cameras do catch a fire, they flag smoke a median 14.7 h before the IRWIN discovery timestamp (within the ±24 h match window) — cameras are an early corroborator when they fire.

The lever — single-frame threshold sweep.

smoke triggerrecall-in-coverageprecisioncamera events
0.50 (current)36.9%58.1%1,037
0.4539.9%58.1%1,371
0.4044.7%57.4%1,771
0.3546.5%57.5%2,229
0.3049.4%57.2%2,924
0.30 + persistence (≥2 in 6 h)24.7% (worse)56.2%

The physical floor (achievable headroom). Two hard limits, neither fixable by thresholding: (1) range — 30–40 km fires are ~undetectable (3.9%); (2) among near (<15 km) misses, 39% have a best smoke-probability of ~0 (the model never fired at all — out-of-field-of-view / occlusion / too faint; camera azimuth+FOV are recorded but unused, so a fire behind a fixed camera is invisible regardless of threshold). Only ~26% of near misses sit in the 0.30–0.50 band the lever actually recovers. So the lever captures the genuinely-recoverable slice; it does not (and cannot) fix the geometry floor.

Reproducibility detail. Reuses entry 0008's coverage definition: 3,947 IRWIN incidents deduped to 0.02°+day; a camera is online at fire time if it produced any cam_smoke_evidence frame in [disc−24 h, disc+24 h]; a fire is in-coverage if within R of an online camera; detected if a covering camera has a qualifying smoke_prob hit in that window. Working R = 40 km (checked at 20 km). Day/night = solar elevation (NOAA formula) at the fire's lat/lon/time; night = sun below civil twilight (−6°). Size = IRWIN IncidentSize acres. Precision = fraction of camera detection-events matching an IRWIN incident within R & ±24 h. Lever = lower the single-frame threshold; persistence variant = ≥2 frames ≥0.30 within 6 h from one camera. Spatial CV = 5 folds on 0.2° cells (recall mean±std). Truth: NIFC IRWIN. Read-only production DB; no writes; load-guarded and health-gated on the host. Azimuth/FOV unused (omnidirectional range proxy) — a documented over-count of true viewshed and part of the geometry floor above.

Claim status: POSITIVE lever (measured, spatial-CV stable). Recommended as a shadow-first, gated build candidatenot wired to production. Per our own discipline (entry 0012), it must first pass temporal-transport validation (train/measure earlier, test strictly-later) before any cutover; a single physically-motivated monotonic threshold is far less overfit-prone than the 13-feature Dozier gate that died out-of-time, but the gate still applies.

Literature alignment. Verdict: AGREEMENT. Camera smoke detection is high-precision within line-of-sight and is range/visibility-limited; recall degrades with distance as the plume subtends fewer pixels [9]. Our monotonic range collapse (47%→4%) and the “model never fired” near-miss floor reproduce that. The night≥day result is the expected flame-radiance effect at night [3].

What this does not claim: that 0.30 is the final operating point (it is the swept optimum on this window, and the lever needs temporal-transport confirmation and a per-network re-tune before production — production currently uses per-network thresholds 0.55–0.85, stricter than the 0.5 reference here, so the live recall gain may differ); that precision is unaffected everywhere (it dips ~1 pt and could differ by network); or that lowering the threshold addresses the ~40% no-signal near-misses or the range floor — those need PTZ/az-aware framing or denser/closer cameras, i.e. coverage build-out, not a threshold.

Next research test: temporal-transport the 0.30 lever (earlier→later), re-tune per network, and shadow-log the recovered detections for a precision audit before proposing a cutover.

References: [9] · [3] · [6]

entry 0014

The camera-threshold lever survives out-of-time (where the Dozier gate died) — validated, and built shadow-first

Date: 2026-07-09   Status: POSITIVE, temporally validated + per-network robust — built as a gated shadow canary (not surfaced)

The framing. Entry 0014 found that lowering the single-frame smoke trigger 0.50→0.30 lifts detection-in-coverage 36.9%→49.4% at flat precision. Before building, we applied the exact discipline that killed the Dozier gate (entry 0012): does it hold out-of-time, and does it generalize across camera networks?

BLUF. It holds. Trained on 2026-07-01–04 and tested on the strictly-later 07-06–08, the 0.30 trigger still gains +8.3 pts of detection-in-coverage (34.8%→43.1%) at ~flat precision (56.1%→54.0%). It generalizes across every network — recall rises on all four vendors with precision essentially unchanged; on the purpose-built fire networks it is dramatic (HPWREN 45%→91% recall at 79% precision). This is the opposite of the Dozier gate, which inverted out-of-time. We therefore built it — shadow-first and gated: a hidden canary logs the would-surface detections; production is untouched until an explicit flip.

Temporal transport (train 07-01–04 → test 07-06–08, gap 07-05).

windowtriggerrecall-in-coverageprecision
train0.5036.2%58.1%
0.3050.5%59.3%
test (later)0.5034.8%56.1%
0.3043.1%54.0%

Out-of-time gain +8.3 pts recall, precision −2.1 pts (within the flat band). Verdict: HOLDS.

Per-network generalization (full window).

networkin-coveragerecall 0.50→0.30precision 0.50→0.30
HPWREN (fire cams)25445.3% → 90.6%78.1% → 78.6%
AlertCalifornia (fire cams)26073.8% → 90.0%78.9% → 81.3%
Caltrans (traffic)66125.9% → 39.6%55.7% → 54.1%
Windy (webcams)82332.6% → 49.9%40.3% → 39.3%

The 0.30 trigger lifts recall on every vendor with precision flat. Precision is network-driven (purpose-built fire cams 78–81% vs webcams 40–56%), not threshold-driven — so 0.30 generalizes as a global trigger, though surfacing tiers should still be per-network.

The operating point we would flip to, and its gate. A global single-frame trigger of 0.30 (replacing the per-network 0.55–0.85). Not flipped: it is built as a hidden shadow canary (cam_smoke_lowthresh_shadow) that logs every ≥0.30 detection, flags which are newly recovered vs the current per-network production thresholds, and records IRWIN proximity for a precision audit. On this run: 2,926 detections ≥0.30, of which 2,506 are newly recovered vs production, and 1,394 of those sit near a real IRWIN fire. The table is surface_allowed=0 with a DO_NOT_SURFACE marker and no serving-app read path; the production cam_smoke_daemon.py is byte-for-byte unchanged. Flip requires Mark's go plus a live precision audit of the newly-recovered set.

Reproducibility detail. Same coverage definition as entries 0008/0014 (IRWIN deduped 0.02°+day; online cam = produced a frame in ±24 h; in-coverage = within R=40 km of an online cam; detected = a covering cam has a smoke_prob≥trigger in ±24 h; precision = camera detection-events matching an IRWIN incident within R & ±24 h). Temporal split: train 2026-07-01..07-04, test 07-06..07-08, gap 07-05; incidents and events are attributed to a window by their own timestamp. Per-network: restrict cameras to the vendor; networks with <15 in-coverage fires are dropped. Truth: NIFC IRWIN. Read-only production DB. Honest caveat on the split: the camera detector only began dense continuous operation on 2026-07-01, so the strongest temporal separation the history supports is days-apart within one fire-weather regime — a weaker bar than a seasonal split. The per-network generalization is independent corroborating evidence, and the “near-IRWIN” shadow count is a 40 km/±24 h proximity proxy (an audit hook), not a confirmed precision. Shadow build: a load-guarded, health-gated oneshot on a 6 h idle-gap timer (SuccessExitStatus=75 143, resume-safe atomic write) writing only its own hidden table + canary_meta; grep confirms only the shadow daemon reads it and the serving app does not.

Claim status: POSITIVE, validated (out-of-time + per-network). Built as a gated shadow canary; not surfaced. This is the first lever in the series to pass the temporal-transport gate that entry 0012's Dozier gate failed — evidence the discipline distinguishes real levers from cross-validation artifacts, rather than only saying no.

Literature alignment. Verdict: AGREEMENT. Camera smoke detectors trade recall for precision monotonically with the confidence threshold; where the classifier is well-calibrated and the scene is line-of-sight, moving the operating point down recovers faint/early smoke at modest precision cost [9]. That the purpose-built fire networks gain most (and keep ~80% precision) matches their cleaner backgrounds vs general webcams.

What this does not claim: that 0.30 is production-ready as-is — the temporal split is days-apart (not seasonal), the shadow's near-IRWIN figure is a proximity proxy pending a real precision audit, and Windy's ~40% precision means a global surface would need per-network tiers or a higher Windy floor. It does not touch the range/geometry floor from entry 0014 (far fires and out-of-FOV misses are unaffected by any threshold). Next research test: run the shadow canary forward, audit the newly-recovered set's true precision against settled IRWIN over a longer, more separated window, then propose per-network surface tiers for Mark's flip decision.

References: [9] · [3] · [6]

entry 0015

Production cutover: the 0.30 camera trigger goes live for two validated fire-cam networks (precision held)

Date: 2026-07-09   Status: SHIPPED (per-network production flip; reversible) — other networks remain gated

The framing. Entry 0015 validated the lower 0.30 smoke trigger out-of-time and showed it generalizes across camera networks — strongest on the purpose-built fire cams. With that evidence, we flipped it to production, but only for the two networks that earned it, and reversibly.

What shipped. The single-frame smoke trigger dropped to 0.30 for HPWREN (pre-flip 0.40) and AlertCalifornia (pre-flip 0.50) — the two validated wildland fire-cam networks. Every other network stays at its current production threshold (Caltrans 0.85, Windy/default 0.7–0.75, …) because their precision floor is network-limited and unproven. The 2-cam-5 nm corroboration gate on the two flipped networks is unchanged — it remains a precision safeguard on top of the lower trigger. This is now user-facing for HPWREN + AlertCalifornia.

Precision held on recent live data (the go/no-go check). Measured on 2026-07-06–09, the flip raises volume 2–3× without degrading precision:

networktriggersurfacing eventsprecision
HPWREN0.505872.4%
0.30 (live)19076.3%
AlertCalifornia0.508086.3%
0.30 (live)21084.8%

Precision is flat-to-improving (HPWREN 72→76%, AlertCalifornia 86→85%) while the surfaced-detection count roughly triples. No precision crater — the flip stands.

Reversibility & audit (built in). Per-network thresholds now live in a single-source config (cam_gate_config.py) rather than scattered across code + systemd env-overrides (which we consolidated and removed). Reverting either network is a one-line change (set HPWREN back to 0.40 / AlertCalifornia to 0.50) plus a service restart. Every surfaced detection now records the exact gate_threshold and a gate_version (pernet_flip0016) in its evidence, so which gate produced any detection is auditable after the fact. The production file was backed up before the edit; a fail-safe falls back to conservative built-in thresholds if the config is ever unreadable.

Live-surfacing verified. CAM-SMOKE detections flow evidence → fire_events → serving API/map as before: 153 CAM-SMOKE-bearing fire events in the last 72 h, 138 of them passing the serving-app surfacing filter (CAM-SMOKE is in the allowed source set, unlike standalone Dozier/ADP). Nothing else changed; the still-gated networks keep flowing at their old thresholds.

Reproducibility detail. Flip: NETWORK_HIT_THRESHOLD["HPWREN"]=0.30, ["AlertCalifornia"]=0.30 in cam_gate_config.py; cam_smoke_daemon.py imports that module (fail-safe fallback if absent) and logs gate_threshold+gate_version into each promoted detection's raw JSON; the scattered per-network threshold env-overrides were removed from the systemd drop-in and consolidated into the config. Service restarted; startup log shows no fallback warning (config loaded). Precision check: for each flipped network, camera frames with smoke_prob≥trigger in 2026-07-06–09 counted as detection events; an event is a true positive if a NIFC IRWIN incident lies within 40 km & ±24 h (same rule as entries 0008/0014/0015). This is a single-frame proximity precision; production layers the 2-cam-5 nm corroboration gate on top, so the live surfaced-precision is ≥ these figures. Read-only for the check; the only production change is the config-driven threshold. Still-gated networks (Caltrans, Windy, others) continue to be audited by the cam_smoke_lowthresh_shadow canary (entry 0015), now sourcing the same config so “newly recovered” means below the current production bar for the networks that have not flipped.

Claim status: SHIPPED (per-network, reversible). First production change in this series — gated on the temporal-transport + per-network validation of entry 0015, and verified not to degrade precision on live data.

Literature alignment. Verdict: AGREEMENT. Purpose-built wildland fire-camera networks operate in-distribution for smoke classifiers and tolerate a lower confidence bar without a precision collapse, whereas general/traffic webcams are out-of-distribution and need a higher bar [9] — exactly why we flipped the fire networks and held the rest.

What this does not claim: that the other networks should flip — Caltrans/Windy stay gated until their precision is proven (Windy's ~40% is a network floor, not a threshold effect). Nor that 0.30 is permanent — it is monitored via the logged gate_version and the shadow canary, and revert is one line. The precision figures are single-frame proximity precision on a recent window; the standing 2-cam corroboration gate makes live precision at least this good. Next: watch the gate_version-tagged live detections accrue, audit the flipped networks' true precision against settled IRWIN over a longer window, and revisit the still-gated networks with the shadow canary's evidence.

References: [9] · [6]

entry 0016

Mapping the recall ceiling: 90% of the “missed” IRWIN fires are a liveness artifact, not blindness — and the fusion gate misses zero

Date: 2026-07-09   Status: defensible (own measured artifact; reproduces daily-scorer run 18)

The framing. Entry 0007 reported the fused OLDGABE output at 72.4% recall against NIFC IRWIN (daily-scorer run 18, 24 h window). The natural next question is which ~28% of fires we miss, and why — because the lever depends entirely on the answer. A fire we never saw needs a new sensor or a lower detection floor; a fire one sensor saw but the fusion gate rejected needs a looser gate; a fire we detected yesterday but did not re-image in the last 24 h needs neither — it needs liveness. We took the exact run-18 window, reproduced the miss set, and classified every false-negative against a 30-day lookback.

BLUF. The “miss” is overwhelmingly a liveness artifact of the 24 h scoring window, not detection blindness. Of the 1,407 IRWIN wildfires scored as false-negatives in the window, 1,275 (90.6%) had a promoted, confirmed OLDGABE event within 10 nm during the last 30 days — we detected and confirmed these fires, we simply did not re-detect them in that particular 24 h. They carry 98.9% of the missed acreage and 100 of the 106 missed fires ≥100 acres. Only 132 (9.4%) are truly sub-floor (nothing of any status within 10 nm in 30 days) — small (94/132 are <1 acre), remote, Alaska-heavy, just 3,909 acres and 6 big fires. The “single-sensor-seen-but-fusion-rejected” bucket — the obvious “loosen the gate” hypothesis — is exactly zero. The dominant recall lever is an active-fire liveness/persistence pass, not a looser fusion gate and not a lower detection floor.

Result (reproduced run-18 window 2026-07-07→2026-07-08, 10 nm / 24 h vs IRWIN; 3,410 active IRWIN wildfires; 1,407 fire-level false-negatives classified against a 30-day promoted-event lookback):

miss bucketfires% of missmissed acres≥100 ac firesrecall lever
Liveness — confirmed in 30 d, not re-seen in 24 h1,27590.6%360,743100active-fire persistence / cadence
Sub-floor — nothing of any status in 30 d1329.4%3,9096new sensing / lower floor (low yield)
Single-sensor seen, fusion rejected00.0%00— (loosening the gate recovers nothing)
Already recoverable by geo canary now00.0%00

Put differently: OLDGABE’s true detection recall — did we ever confirm this fire during its active life — is (3,410−132)/3,410 = 96.1%. The 24 h liveness recall published in entry 0007 (72.4%) understates that by ~24 points, and it is volatile precisely because it is a liveness metric: the last eight daily runs read 72.4 / 92.3 / 94.2 / 98.0 / 95.8 / 92.1 / 82.8 / 72.4%. A metric that swings 26 points day-to-day while the fire roster barely changes is measuring re-detection cadence, not coverage.

Reproducibility detail. Artifact: read-only replay against OLDGABE oldgabe.db, reusing the shipped scorer daemons/te_daily_scorer.py verbatim (_load_irwin, _bucket, _match_in_det_bucket, _rng_nm, MATCH_RADIUS_NM=10 nm). IRWIN truth = fire_event_evidence where source='IRWIN', deduped on IrwinID/UniqueFireIdentifier, filtered to IncidentTypeCategory∈{WF,WFU}, active window = [FireDiscovery−24 h, FireOut||now+24 h]. A fire is a false-negative when no promoted event (status∈{confirmed,confirmed_growth,awaiting-confirmation,pre-ignition}) lies within 10 nm and the active window during the 24 h scoring window — the scorer’s own definition. Classification: every evidence row FKs to a fire_events row, so the set of all events is “what the pipeline saw.” For each false-negative we tested, over a 30-day lookback, (a) any promoted event within 10 nm/active-window → liveness; else (b) any event of any status → inspect its evidence sources (VIIRS/MODIS/GOES/HMS families) → seen-but-not-promoted, split by independent-family count; else (c) sub-floor. Geo-canary recoverability = the nearby event’s canonical_event_id present in event_caution_recovered_geo. Reproduces run 18 (published 72.4%, tp 3,355 / fn 1,280) up to expected re-run drift — my re-run reads event-centric 74.8%, fire-centric 58.7%, fn 1,407, N 3,410; the drift is because null-FireOutDateTime active windows extend to current run time, so a replay days later admits a slightly larger active roster. The 90.6%/9.4%/0% split is invariant to that drift. Run resource-guarded on the host (host-health gate, busy-marker honoring); DB opened mode=ro, no writes.

Claim status: DEFENSIBLE (own measured artifact, dated; reuses the shipped scorer, reproduces run 18).

Literature alignment. Verdict: AGREEMENT. That polar/geostationary fire products complement in space and time, and that short fixed observation windows undercount persistent active fires relative to the true fire roster, is the established view behind multi-temporal active-fire compositing and diurnal cadence analysis [1][3][8]. The finding that the operational deficit is re-detection cadence rather than the single-pass detection floor is consistent with that literature and directly extends entry 0007.

What this does not claim. This is a roster/cadence lever: an active-fire persistence pass keeps known-confirmed fires alive on the operational roster; it finds no new fires and cannot move the 132 sub-floor cases. The 10 nm (18.5 km) match radius — the scorer’s own — can credit an adjacent fire as liveness, so 90.6% is a soft upper bound on liveness and 9.4% a soft upper bound on true blindness; conversely the 30-day lookback cannot credit a fire first confirmed >30 days ago, which pushes the error the other way. IRWIN is sparse reported truth dominated by tiny incidents (909 of 1,407 misses are <1 acre), many of which are mop-up records not detectable from orbit at all — the sub-floor tail is disproportionately these. A persistence pass must be gated (IRWIN-active or prior-confirmed and a sensor touch in-window) and validated shadow-first for false-positive impact before any cutover — keeping fires “alive” ungated would inflate FP and the roster.

Next research test: stand up an event_liveness_shadow that re-emits a confirmed event’s active status when IRWIN lists it active and any core-sensor touch lands within 10 nm in the window; measure the recovered-recall vs added-FP curve over ≥14 daily runs with CIs, default-OFF, before proposing a cutover. Separately, quantify the 132-fire sub-floor tail against Landsat-9/Sentinel-2 SWIR cadence over remote Alaska to bound the only genuine coverage lever.

References: [1] · [3] · [8]

entry 0017

Temporal-transport kills the “geo lift”: the recovery+geo re-ranker’s de-confounded win was mostly in-sample optimism — it stays gated

Date: 2026-07-09   Status: MEASURED NEGATIVE (out-of-time) — canary stays gated (surface_allowed=0) — refines entries 0001/0002

BLUF. Entries 0001/0002 built a re-ranker to recover real fires that production tiers as CAUTION, and reported that adding geography (lat/lon) gave a large lift even under a reporting-bias-free neutral polar truth (in-sample neutral-truth AUC 0.94 vs 0.86 det-only; +0.081). That was the whole reason geography looked defensible rather than a reporting-bias artifact. We put it to the strict test the same gate that stopped the Dozier multi-feature gate and the early-cue tier: train on an earlier window, test on a strictly-later window, score against the neutral (independent VIIRS/MODIS) truth. The geo lift collapses out-of-time — from +0.081 in-sample to +0.019 — and recovery+geo no longer beats production on the neutral truth. The de-confounded advantage was substantially in-sample optimism. The canary stays gated.

The split. 214,614 CAUTION-tier events. Train on first_det in 06-27–07-02 (123,931 events), a 07-03 gap, test strictly-later 07-04–07-06 (38,549 events). Models train on the honest (IRWIN/perimeter/confirmed) truth; every scorer is then evaluated out-of-time against the NEUTRAL polar truth — an independent VIIRS/MODIS detection within 5 km in a subsequent overpass window (t0+3 h … t0+72 h), which is independent of HMS and of who-reports-what. Neutral-truth base rate on the holdout is only 3.3% (1,274 positives).

Out-of-time on the NEUTRAL (reporting-bias-free) truth — the gate.

scorerAUCPR-AUCrecall@90%precall@80%p
production tier_and_conf0.8610.2650.000.00
recovery, det-only (19 feat)0.8370.2010.000.00
recovery + geo (21 feat)0.8560.1770.000.00
geo-only (lat/lon)0.7230.0660.000.00

Recovery+geo (0.856) does not beat production (0.861) on the neutral truth out-of-time, and its PR-AUC (0.177) is below det-only (0.201) — adding geography hurt ranking precision out-of-time. Every scorer, production included, scores 0 at the 80/90% precision operating points on this sparse 3.3%-base truth, so the comparison rests on AUC/PR-AUC discrimination, where the re-ranker has no out-of-time edge. Pure lat/lon still reaches AUC 0.723 alone — a geographic-memorization warning, not a skill signal.

For contrast — the same holdout scored against the HONEST (HMS-inclusive) truth. Here the re-ranker still looks excellent — which is exactly the trap the neutral truth exists to expose:

scorer (vs honest truth)AUCPR-AUCrecall@80%p
production tier_and_conf0.8900.4890.073
recovery, det-only0.8670.6040.399
recovery + geo0.9440.6910.525

The de-confound, made explicit. Geography adds +0.077 AUC under the honest truth but only +0.019 AUC (and −0.024 PR-AUC) under the reporting-bias-free neutral truth, out-of-time. The gap between those two numbers is the reporting-bias artifact: most of what geography “knew” was where fires get reported (populated, IRWIN/HMS-dense geography [6]), not where independent polar sensors confirm them. Out-of-time, on truth that doesn’t care who reports, that knowledge evaporates.

Reproducibility detail. Read-only on the production DB (mode=ro), no production writes, health-gated on the host and load-guarded (yields to the busy marker; SIGTERM-safe). Candidates: event_corroboration_tier where tier='CAUTION' joined to non-leaky fire_event_evidence (IRWIN/HMS/SAR/S2 confirmation channels excluded from features). 21 features; det-only = the first 19, recovery+geo adds lat,lon; geo-only = lat/lon alone. Model: HistGradientBoostingClassifier (max_iter 400, lr 0.06, 31 leaves, class_weight balanced, early stopping), trained only on the 06-27–07-02 window; scored on the 07-04–07-06 window (07-03 gap). Training label = honest truth (confirmed0 OR an IRWIN fire-day / perimeter within 5 km & ±14 d). Neutral evaluation label = an independent VIIRS/MODIS detection within 5 km in a subsequent overpass (t0+3 h…t0+72 h), gridded (0.05°×6 h) over CONUS — HMS/IRWIN-independent. Production baseline = tier_and_conf reconstructed per event from its full canonicalized source set / GOES-frame count / max FRP. Metrics via roc_auc_score, average_precision_score, and precision_recall_curve operating points. Circularity caveat (stated honestly): a CAUTION event whose own evidence is polar-heavy is likelier neutral-positive, which if anything flatters the polar-aware scorers — and the re-ranker still shows no out-of-time edge. The canary table event_caution_recovered_geo (6,793 rows) is unchanged and remains gated (surface_allowed=0); nothing was surfaced.

Claim status: MEASURED NEGATIVE, out-of-time. Recovery+geo is not a confident flip candidate: its de-confounded (neutral-truth) advantage was substantially in-sample optimism — under strict train-early/test-late transport it does not beat production on the reporting-bias-free truth, and the geo increment collapses (+0.081 → +0.019 AUC, negative on PR-AUC). It stays gated. This refines — does not erase — entries 0001/0002: the in-sample neutral-truth geo win was real in-sample but did not survive temporal transport.

Hard bound (summer-only). All data is summer 2026 and the canonical-event tiering is recent, so this is a train-earlier / test-later split within summer (days apart, not seasons). A true off-season (winter) validation is impossible until winter data exists and remains deferred. What we can say now is the weaker-but-honest thing: even within-summer transport already dissolves the geo lift.

Literature alignment. Verdict: AGREEMENT. Fire-occurrence records carry a well-documented geographic reporting bias — incidents cluster where people and infrastructure are, not purely where fires are [6]. A model handed raw lat/lon will learn that reporting surface; only an independent, physically-triggered truth (polar radiometric detection [1]) separates real fire-geography from reporting-geography, and the standard guard against such optimism is strict out-of-time (not in-sample / spatial-CV) validation [4]. Both point the same way here.

What this does not claim: that the recovery program is dead — det-only recovery still carries honest-truth signal, and a geography prior built from physical covariates (fuel, terrain, climatology) rather than memorized lat/lon may yet help; that is the constructive next step, not raw coordinates. Nor that geography is useless in-season — only that its de-confounded, out-of-time value here is ~0. Next: replace raw lat/lon with physical geo-priors and re-run the same transport gate; revisit once any cross-season data exists.

The gate is doing its job. This is the third recovery/gate candidate the temporal-transport check has correctly stopped — the Dozier multi-feature gate (collapsed out-of-time), the Dozier early-cue tier (withheld), and now recovery+geo (geo lift dissolves). The discipline is working as designed: it lets the camera trigger through (it held) and stops the ones that were riding in-sample optimism.

References: [6] · [1] · [4]

entry 0018

An active-fire liveness pass for roster continuity — built shadow-first, and the two-condition gate throws out 99% of what a naive “keep-alive” would resurrect

Date: 2026-07-09   Status: SHADOW / GATED (surface_allowed=0) — measured, not surfaced — follows entry 0017

BLUF. Entry 0017 established that 90.6% of “missed” IRWIN fires are a 24 h scoring-window liveness artifact: we detected and confirmed them, we simply did not re-image them inside the 24 h window. True detection recall is ~96.1% and the fusion gate misses zero, so the lever here is not new detection — it is operational roster continuity: keeping a known-active fire visible on the map between satellite passes instead of letting it blink off a naive 24 h-cadence roster. Because the failure mode of continuity is keeping a dead fire alive, the primary risk metric is added-FP, not recall. We built the pass as a hidden shadow canary and measured the tradeoff. The two-condition gate keeps 439 fires alive and refuses 42,286 — 99.0% of what a naive keep-everything pass would have resurrected.

The gate (both conditions required). For each confirmed OLDGABE fire, keep it “active” only when (a) a matching IRWIN incident within 10 nm is still listed active (no past FireOutDateTime) AND (b) a core-sensor touch (VIIRS/MODIS/GOES/HMS) landed within 10 nm inside the current liveness window (72 h). Condition (a) drops fires the incident record has declared out; condition (b) drops stale fires with no recent physical signal. Together they are the FP-safeguard.

The tradeoff on the current window (clock 2026-07-09 09:01 UTC; 44,553 confirmed fires, of which 1,828 were re-imaged within 24 h and 42,725 would blink off a naive 24 h roster):

pass over the 42,725 not-re-seen-in-24h fireskept “active”dead/stale resurrected (added-FP)
naive ungated (keep every confirmed fire alive)42,72542,286
two-condition liveness gate4390 measurable

What the gate filters, and why (the FP-safeguard, itemized).

gate funnelcount
population: confirmed, not re-imaged in 24 h42,725
− no active IRWIN listing within 10 nm (cond a fails)35,681
− IRWIN active but stale: no core touch in 72 h (cond b fails)6,605
= kept active (both conditions hold) — roster continuity gained439

Condition (b) is the load-bearing safeguard. Of the 7,044 not-re-seen fires that IRWIN still lists active, only 439 (6.2%) had a core-sensor touch inside the 72 h window; the other 6,605 (93.8%) were stale and correctly refused. This matters because IRWIN’s FireOutDateTime is sparsely and laggingly populated (zero of the population fires carried a past FireOut), so “still active” on its own is a weak signal — the recent-sensor-touch condition is what actually protects against IRWIN’s optimistic/lagging active listings. Among the 439 kept, none is IRWIN-declared-out and none is stale (0 measurable added-FP by construction).

Reproducibility detail. Shadow daemon oldgabe_liveness_shadow_daemon.py, read-only on the production DB (mode=ro), health-gated on the host and load-guarded (yields to the busy marker; SIGTERM-safe; the write is a single blocked-SIGTERM idempotent DELETE+reinsert, so a mid-run kill leaves the prior table intact). Clock = MAX(detected_at) across all evidence. Population = event_ground_truth.confirmed=1 whose last core-sensor touch (VIIRS%/MODIS/GOES%/%ABI%/HMS, aggregated per canonical_event_id) is older than 24 h (or absent). IRWIN incidents deduped by IrwinID (3,857 distinct), gridded at 0.1° and matched by haversine within 10 nm; active = FireOutDateTime null or in the future. Liveness window is env-configurable (OLDGABE_LIVENESS_WINDOW_H, default 72 h). Writes ONLY the new hidden table event_liveness_shadow (one row per population fire with both condition flags + keep_active) plus its canary_meta row (surface_allowed=0) and a DO_NOT_SURFACE_event_liveness_shadow marker. No serving read path: a grep of the serving app (oldgabe_solution.py and every other top-level module) for the table name returns empty — only the daemon references it; the production roster, fusion tiers, map, API and tiles are unchanged. Timer oldgabe-liveness-shadow.timer (OnUnitInactiveSec=6h, idle-gap), service SuccessExitStatus=75 143, Nice=19, re-runnable.

Claim status: SHADOW, GATED, MEASURED. This is a roster/cadence-continuity mechanism with a strong FP-safeguard, not a detection improvement — and nothing is surfaced. It quantifies a gain of 439 kept-active fires against a naive-pass added-FP of 42,286 that the gate removes; the residual added-FP inside the 439 is 0 measurable in a single snapshot.

Honest bounds. (1) “Continuity gained” is not the same as “fires that would otherwise be invisible” — a geostationary-cadence roster already refreshes many of these within the hour; the 439 is an upper bound on what a 24 h roster would drop and this pass would hold. (2) The one added-FP we cannot see now is an IRWIN-active fire that is actually out (FireOutDateTime reporting lag [6]); a single run cannot measure it. (3) The whole picture is a summer snapshot. Before ANY cutover we require a ≥14-daily-run validation: run the gate each day, then look forward to later IRWIN updates to label each kept-active fire as genuine continuity vs a false-alive (an incident whose FireOut turns out to predate when we kept it), producing a recovered-continuity vs added-FP curve with confidence intervals, swept across the liveness window (24/48/72 h). Only if added-FP stays acceptably low across that curve does surfacing become a candidate — Mark decides.

Literature alignment. Verdict: AGREEMENT. Polar sensors revisit a given location only a few times per day [1][3], so a genuinely active fire routinely goes unre-imaged for many hours — the exact gap a liveness pass is meant to bridge — while geostationary FDC refreshes far more often [8], which is why a recent-touch window is a sound activeness proxy. And incident records are known to lag and under-report status transitions [6], which is precisely why condition (a) alone is insufficient and condition (b) carries the safeguard.

What this does not claim: that any fire should be surfaced from this table today (it is gated), that 72 h is the right window (it is swept in validation), or that the 439 are all truly alive (that is what the ≥14-run forward-labeling measures). Next: accrue the daily runs, build the added-FP curve with CIs, and only then bring a cutover proposal.

References: [1] · [3] · [8] · [6]

entry 0019

The symmetric question to recall: of the fires we actually SHOW users, how many are false? — a precision / false-positive audit of the surfaced map

Date: 2026-07-09   Status: defensible (measured; read-only; independent IRWIN + WFIGS truth; honest-negative)

The framing. The program has spent most of its effort on the recall side — entry 0017 put true detection recall near 96.1% and showed the fusion gate misses zero real fires. The mirror-image question had never been measured: of the detections OLDGABE actually surfaces to users on the map and public API, what fraction are false positives — not real fires — and is there a clean lever that removes them without throwing away real fires?

BLUF. Measured against strict independent operational truth (NIFC IRWIN wildfire incidents ∪ WFIGS, matched within 10 nm and the incident’s active window), the surfaced map is 23.7% precise — but that number is a floor, not the false-positive rate. IRWIN lists only WF/WFU incidents; it does not list the large real population of sub-incident thermal (agricultural burns, pile burns, small fires) that a single VIIRS or MODIS pass correctly detects. When independent multi-sensor corroboration is added as a second truth, surfaced precision rises to 62.5%. The classical false-positive machinery already deployed (an OSM industrial/flare catalog, a persistence mask, a 0.10 confidence floor, and suppression of the noisy geostationary-only tier) has already removed the cleanly-separable FP: only 1 of 1,985 surfaced detections sits on the static FP catalog. And no operable threshold lever cuts the residual without an equal-or-greater recall cost — requiring corroboration on the probable tier removes 50% of the real IRWIN/WFIGS fires for zero precision gain. The one clean, defensible lever is small and geographic: a VIIRS-nightfire / oil-and-gas flaring-basin mask extension removes ~51 surfaced FP (2.6% of the map) at ~0 recall cost. We recommend it shadow-first — nothing here changes a shipped number.

The surfaced set (read from the serving code, not guessed). The live map/API path is /api/oldgabe/fires with OLDGABE_FUSED_MAP=1 (confirmed in the running process environment). It reads fused_fires with exactly this filter: last_seen ≥ now−24h AND tier != 'fp' AND confidence ≥ 0.10. That 0.10 floor is load-bearing — it drops the entire early tier (geostationary-only, conf 0.05) and every frp = 0 geostationary-persistent event (conf 0.08), i.e. the noisiest candidates never reach a user. Over the trailing 24 h window (clock 2026-07-09 ~09:30 UTC) the surfaced set is 1,985 fires: 458 confirmed, 1,527 probable.

Precision by tier — strict (operational) vs broad (+ independent multi-sensor corroboration).

surfaced tiernstrict prec (IRWIN∪WFIGS)broad prec (+≥2 families)
ALL surfaced1,98523.7%62.5%
confirmed45829.0%98.0%
probable1,52722.1%51.8%

The confirmed-tier broad figure (98.0%) is near-tautological — the confirmed tier is defined by ≥2 core sensors, so “is it multi-family corroborated” is almost the tier’s own definition. Its informative precision is the independent IRWIN/WFIGS match: 29.0%. The gap between 29.0% and 98.0% is the measure of how much real fire IRWIN simply does not carry as a listed incident.

Precision by source family (strict IRWIN∪WFIGS). The ranking is the opposite of sensor quality — the sharpest single-pass thermal sensors score lowest, because they correctly see real thermal that is not a NIFC wildfire incident:

source stringnstrict precIRWIN hitWFIGS hits
GOES only17841.6%37.6%29
GOES,HMS10736.4%36.4%35
GOES,HMS,MODIS,VIIRS9535.8%34.7%30
HMS only32732.7%32.1%76
HMS,MODIS,VIIRS10828.7%26.9%30
GOES,HMS,VIIRS8527.1%25.9%17
HMS,VIIRS53716.4%14.9%56
MODIS only8614.0%12.8%3
VIIRS only39211.5%11.5%18
MODIS,VIIRS238.7%8.7%0

What drives the false positives. The static FP catalog is not the answer — it has already done its job: 1 of 1,985 surfaced detections falls on an fp_polygons cell, because fusion applies the catalog before anything is written to the map. The residual imprecision lives in the 745 uncorroborated single-source detections (37.5% of the map: VIIRS-only 345, HMS-only 220, GOES-only 104, MODIS-only 67, and 9 single-source frp≥20 promotions). Crucially, these are not a clean FP bucket: their IRWIN-match rate (~24%) is the same as the map overall, i.e. “uncorroborated” does not predict “false.” The one clearly-false, geographically-concentrated driver we can name is oil-and-gas flaring: 51 uncorroborated surfaced detections sit inside known US flaring basins (33 VIIRS in the Permian, plus Eagle Ford, Anadarko, DJ-Niobrara), with representative low-FRP VIIRS hits at 31.886,−102.511, 32.723,−101.925, 32.188,−102.008 (Permian) — classic gas flares the OSM polygon set did not fully cover. Only 2 real IRWIN/WFIGS fires fall inside these basins at all.

The levers — measured precision gain vs recall cost, on neutral IRWIN∪WFIGS truth. Baseline surfaced real = 470 of 1,985 (23.7%). “Recall cost” = share of those 470 real fires a lever would drop:

candidate lever (operable at serving time)keptstrict precreal droppedrecall cost
L0 baseline (current map)1,98523.7%00.0%
L1 corroboration gate: drop all single-family probable1,01223.0%23750.4%
L3 drop VIIRS-only + MODIS-only + MODIS,VIIRS1,48427.7%5912.6%
L4 single-family probable require FRP≥201,38127.7%8718.5%
L5 single-family probable require FRP≥501,23727.9%12526.6%
L7 flaring-basin / VIIRS-nightfire mask (uncorroborated, no truth match)1,934~24.3%0~0.0%

The corroboration gate is a measured negative. L1 — the intuitive “require a second sensor” fix — lowers precision (23.7% → 23.0%) while discarding half the real fires, because the dropped single-family detections are exactly as real as the map average. FRP and source gates (L3–L5) buy only ~+4 pp of strict precision at a 13–27% recall cost — a poor trade for a recall-optimized product. The only lever that removes false positives at genuinely ~0 recall cost is the flaring-basin mask (L7): the 51 it targets are almost entirely industrial flares, and the 2 real in-basin fires are IRWIN/WFIGS-matched, so a truth-sparing mask never touches them. Its ceiling is small — about +2.6 pp of the surfaced map — but it is clean.

Reproducibility detail. Fully read-only (mode=ro on the production DB), health-gated on the host service and load-guarded (yields to the host busy marker; server-side timeout+nice -n19; no writes of any kind — this is a measurement pass, there is no shadow table and nothing is surfaced). Surfaced set = the exact live serving query in oldgabe_solution.py under OLDGABE_FUSED_MAP=1: fused_fires WHERE last_seen≥datetime('now','-24 hours') AND tier!='fp' AND confidence≥0.10. Truth reuses the shipped scorer’s methodology (daemons/te_daily_scorer.py): IRWIN evidence (fire_event_evidence.source='IRWIN') de-duped by IrwinID, filtered to IncidentTypeCategory∈{WF,WFU}, active window [FireDiscoveryDateTime, FireOutDateTime||now] padded ±24 h (3,408 active wildfire incidents), gridded 1° and matched by haversine within MATCH_RADIUS_NM=10; plus wfigs_truth (565 incident/perimeter points) matched within 10 nm. A detection is REAL(strict) if it matches IRWIN’s active window or WFIGS within 10 nm; REAL(broad) additionally if its sources string carries ≥2 independent families (GOES/VIIRS/MODIS/HMS/CAM/S2). Flaring basins are approximate bounding boxes (Permian, Bakken, Eagle Ford, Anadarko, DJ-Niobrara). Static-catalog residual checked against fp_polygons (63,975 rows; OSM refinery/gas-flare + dynamic persistence). Every figure above is counted from the live production DB at run time, not asserted; re-running on a later window will shift the exact counts but not the structure.

Claim status: MEASURED, read-only, honest-negative. This entry quantifies surfaced precision and tests FP-reduction levers; it does not change fusion, tiers, the confidence floor, the map, the API, or any shipped number.

Honest bounds. (1) Strict precision (23.7%) is a lower bound on true precision, not the FP rate: IRWIN carries only WF/WFU incidents and is known to under-report small and short-duration fires [6], so a large share of “unmatched” single-sensor thermal is real sub-incident fire, not error. (2) Broad precision (62.5%) is an upper-leaning estimate because ≥2-family corroboration and the confirmed-tier definition partly coincide. (3) The true FP rate lies between these bounds and cannot be pinned down with IRWIN alone — the uniform ~24% match across corroborated and uncorroborated buckets is the direct evidence that IRWIN cannot separate “not a wildfire incident” from “not a fire.” (4) This is a single summer-window snapshot. The real next lever is not a threshold but a truth set: a fire-vs-non-fire label corpus (persistent-flare inventory + confirmed non-fire hotspots) is what would let us measure the true FP rate rather than bound it.

Literature alignment. Verdict: AGREEMENT. That the sharpest polar sensors post the lowest incident-match rate is expected: VIIRS 375 m and MODIS resolve many small, low-FRP thermal sources [1][2] that never become NIFC incidents, and incident databases are documented to be incomplete for exactly those fires [6]. Persistent industrial heat — gas flares above all — is the best-characterized false-positive class in satellite active-fire products, and oil-and-gas basins such as the Permian are among the densest flaring regions on Earth [11], which is why a persistent-source / nightfire mask (not a per-detection threshold) is the literature-sanctioned tool here [8].

What this does not claim: that 23.7% is the false-positive rate (it is a floor), that the single-source detections are mostly false (they are not — they match IRWIN at the map-average rate), or that any lever should be flipped today. Recommendation: build the flaring-basin / VIIRS-nightfire mask shadow-first as an additive persistent-source extension (the pipeline already supports this via the dynamic-persistence machinery), then require it to pass the temporal-transport gate — construct the mask from an earlier window and prove it suppresses flare FP in a strictly later window without masking any truth-matched fire — before any cutover. Every larger lever fails the recall-cost test and is not recommended. Mark decides.

References: [1] · [2] · [6] · [8] · [11]

entry 0020

Executing the flaring lever: a VIIRS-nightfire persistent-source FP mask that passes an out-of-time transport gate — shadow-first

Date: 2026-07-09   Status: defensible (measured; read-only on production; temporal-transport validated) — CUTOVER APPLIED to production 2026-07-09
Update — 2026-07-09 (approved cutover applied). The 660 operating-threshold mask cells are now live in fp_polygons under source='flaring_nightfire_persistence' (radius 2.0 km), copied verbatim from the validated shadow set. The next fusion pass tiered every in-mask detection tier='fp' (256 currently-fused in-mask detections all demoted, none leaking through); the 24 h surfaced set dropped by ~11% (1,876→1,675). A live truth-sparing re-check confirmed 0 real IRWIN or WFIGS fires masked — the nearest real fire sits >5 km outside any mask cell (IRWIN-ever 5.17 km, WFIGS 5.62 km). The pre-cutover polygon table was snapshotted first; the flip is reversible with a single statement: DELETE FROM fp_polygons WHERE source='flaring_nightfire_persistence'. A load-guarded, health-gated weekly refresh daemon now stands beside the polar-persistence job — it re-derives the mask on a rolling recent window under the same fire-protection guards and idempotently adds newly-flaring cells while releasing any cell that stops flaring, touching no other FP source.

The framing. Entry 0020 audited the surfaced map and found exactly one clean, geographically-concentrated false-positive driver — oil-and-gas gas flaring — and set a hard precondition before it could ever change the map: build the fix as a persistent-source mask (not a per-detection threshold), and require it to pass a temporal-transport gate — construct the mask from an earlier window and prove it suppresses flare FP in a strictly later window without masking any real fire. This entry executes that build and reports the gate result.

BLUF. The mask is derived only from detections strictly before a 2026-07-03 cutoff: any fixed ~2 km cell whose VIIRS/MODIS detections recur across many distinct days (a persistence signature), fire-protection-guarded so a cell is dropped if it lies near any IRWIN incident (ever), near HMS smoke, near a WFIGS wildfire perimeter, or carries appreciable FRP. At the operating threshold (≥5 distinct days, matching the deployed polar-persistence daemon) this yields 660 mask cells, and they are what a flare inventory should be: 89.6% of their detections are at night (the VIIRS-Nightfire flaring signature) and 79 sit inside the Permian basin — the Permian concentration falls out of the persistence derivation, it was never coded in. On a strictly-later held-out window (2026-07-06 onward, with a 3-day gap so no source straddles the split) the mask suppresses 283 surfaced false-positive detections (8.3% of the 3,414-fire out-of-time surfaced set) while masking exactly 0 real IRWIN wildfire incidents and 0 WFIGS perimeters — at the 2 km suppression radius and at a conservative 5 km. All 283 suppressed detections are VIIRS-heavy and uncorroborated by IRWIN. The transport gate PASSES. The mask is written as a hidden shadow table (flaring_mask_shadow, surface_allowed=0); nothing here changes a shipped number.

Why the existing persistence machinery misses these. The deployed dynamic-persistence daemon suppresses a recurring cell only when it has zero polar-sensor hits — a single VIIRS pass is treated as confirmation of a real fire and keeps the cell live. Gas flares are precisely VIIRS-heavy, so they slip through that gate. This mask is the additive complement: it keys on VIIRS/MODIS multi-day recurrence at a fixed location with no incident and no smoke, which is the affirmative flare signature rather than the absence-of-polar signature. It is built as an extension of the same persistence machinery (same 0.02° grid, same 2 km mask radius, same idempotent-replace discipline), not a parallel system.

The transport gate — mask trained before 2026-07-03, evaluated strictly after 2026-07-06. “FP suppressed” = surfaced fused fires (the live serving filter: tier!='fp' AND confidence≥0.10) that fall inside the mask out-of-time; “real masked” = independent IRWIN wildfire fire-days / WFIGS perimeters in the later window that fall inside the mask — the number that must be zero:

persistence thresholdmask cellsFP suppressed (out-of-time)real IRWIN masked (2 km)real IRWIN masked (5 km)real WFIGS masked
≥3 distinct days1,022361000
≥5 distinct days (operating)660283000
≥7 distinct days496242000
≥10 distinct days321177000

The truth-sparing column is 0 at every threshold, at both radii — the more persistent the source, the more confident the flare call, and never once does the mask shadow a later real fire. The out-of-time test set carried 547 independent IRWIN wildfire fire-days and 19 WFIGS perimeters; the mask touched none of them. The fire-protection guards did real work: at the operating point they released 80 candidate cells for lying near an IRWIN incident, 193 near HMS smoke, and 19 for FRP ≥ 40 MW — those are the cells a naive persistence rule would have wrongly masked, and the guards remove them before the gate, which is why the gate comes back clean.

Reproducibility detail. Fully read-only on all production tables (mode=ro); the only writes are the daemon’s own hidden shadow table and its canary_meta row (surface_allowed=0, DO_NOT_SURFACE). Health-gated on the host service (exit 75 if inactive), yields to the host busy marker, wrapped in the host load-guard with server-side timeout+nice -n19, SIGTERM-clean. Mask build = fire_event_evidence WHERE source∈{VIIRS-N20,VIIRS-N21,VIIRS-NPP,MODIS} AND detected_at<2026-07-03, grouped on a 0.02° grid, keeping cells with COUNT(DISTINCT date)≥5; night fraction from raw.daynight='N'. Guards: drop a cell within 5 km of any IRWIN incident (all history), within 4 km of pre-cutoff HMS smoke, within 5 km of a WFIGS WF perimeter centroid, or with peak frp_mw≥40. Held-out surfaced set = live fused_fires (a 72 h rolling artifact, so its window is the strictly-later test period) filtered by the exact serving query in oldgabe_solution.py under OLDGABE_FUSED_MAP=1. Out-of-time truth = IRWIN evidence (source='IRWIN') de-duped to fire-days and WFIGS WF perimeters, each with detected_at / discovery_dt ≥ 2026-07-06; a real fire is “masked” if within the 2 km suppression radius (also reported at 5 km). Every figure is counted from the live production DB at run time. Single summer window, so re-running on a later split shifts exact counts but not the structure.

Claim status: MEASURED, read-only, transport-validated, shadow-only. This entry builds and validates a false-positive mask; it does not change fusion, tiers, the confidence floor, the map, the API, the static FP catalog, or any shipped number. The artifact is a hidden table with surface_allowed=0 and no serving read-path.

Honest bounds. (1) Within-summer transport, not off-season. The data is a single summer window (~2026-05-29..07-09); this is the strongest available test — train earlier, test strictly-later with a gap — but it is not a winter/shoulder-season validation, and a true off-season test is impossible with the data on hand (same bound as entries 0017/0018). (2) “FP suppressed” is not fully truth-condemned. Per entry 0020, IRWIN cannot certify the suppressed set as false — it lists only WF/WFU incidents. The affirmative evidence that these 283 are flares and not fires is threefold and independent of IRWIN: they are persistent at a fixed cell across many days, ~90% night-detected (the VIIRS-Nightfire flare signature), and concentrated in known oil-and-gas basins. We therefore frame the effect as removing persistent non-incident thermal sources, with the flaring-basin geography as the affirmative flare evidence. (3) The mask only knows cells that were already flaring before the cutoff; a flare that ignites after the cutoff is not masked until the next refresh — conservative by design (it never pre-emptively masks a location).

Literature alignment. Verdict: AGREEMENT. Persistent industrial heat — gas flares above all — is the best-characterized false-positive class in satellite active-fire products, and multi-date persistence at a fixed location is the literature-sanctioned discriminator rather than a per-pixel threshold [8]. VIIRS-Nightfire specifically identifies flares by their nightly recurrence and thermal signature, and oil-and-gas basins such as the Permian are among the densest flaring regions on Earth [11] — both the ~90% night fraction and the Permian concentration this mask recovers are exactly what that literature predicts. That the sharpest polar sensors (VIIRS 375 m) are the ones that repeatedly resolve these small hot sources is consistent with their documented sensitivity to low-FRP thermal [1], and with IRWIN’s documented incompleteness for non-incident thermal [6].

What this does not claim: that all 283 suppressed detections are proven false (they are IRWIN-unmatched persistent night sources in flaring basins — strong circumstantial, not certified), that the mask should surface today (it is shadow, surface_allowed=0), or that the result transports to winter. Recommendation: cutover-candidate. The gate passed clean (zero real fires masked out-of-time at both radii, at every persistence threshold), so this is eligible for a minimal, reversible cutover on Mark’s approval — not applied here. The exact step: fusion already reads every fp_polygons row generically and assigns tier='fp' to any fused fire within its radius, so the entire cutover is one additive INSERT — copy the shadow cells into fp_polygons under a new source='flaring_nightfire_persistence' (radius 2.0 km); no serving-code or schema change. Reverse = DELETE FROM fp_polygons WHERE source='flaring_nightfire_persistence'. The durable form is to promote the derivation to a load-guarded weekly daemon beside the existing polar-persistence job, so the mask refreshes and releases any cell that stops flaring (matching the deployed idempotent-replace discipline). Mark decides.

References: [1] · [6] · [8] · [11]

entry 0021

Replacing the 23.7% IRWIN floor with a measured number: a fire-vs-non-fire label corpus that decomposes surfaced precision into unlisted-real fire and genuine false positive

Date: 2026-07-09   Status: defensible (measured; read-only on production; positive-evidence labels + adjudicated middle; honest uncertainty carried)

The framing. Entry 0020 left the program with a number it explicitly could not use: surfaced precision against IRWIN reads 23.7%, but that is a floor, not the false-positive rate — IRWIN matched the corroborated and uncorroborated surfaced buckets at the same ~24%, proving IRWIN cannot tell “not a fire” apart from “a real fire it never listed.” So the one number a detection program most needs about the map it ships — the fraction of surfaced detections that are genuinely not fire — was unmeasured. This entry measures it, by abandoning IRWIN-presence as the label and building an affirmative fire-vs-non-fire corpus over the entire surfaced set: positive evidence of fire, positive evidence of non-fire, and an explicitly adjudicated middle in between.

BLUF. Over the full trailing-window surfaced set (N = 1,985 fused fires; the live serving filter last_seen≥now−24h AND tier≠'fp' AND confidence≥0.10), positive evidence partitions the set into 1,363 positive-fire, 208 positive-non-fire, and a 414-detection unadjudicated middle; adjudicating that middle with independent heuristic evidence splits it 81 fire / 35 non-fire / 298 genuinely-ambiguous. Combining the buckets, the true surfaced false-positive rate is 19.7% (point estimate; Wilson-95 sampling interval [18.1%, 21.6%]; the wider [12.2%, 27.3%] epistemic bracket carries the ambiguous band honestly). It is strongly tier-stratified: the confirmed tier is 4.6% FP [3.0%, 6.9%] while the probable tier is 24.3% [22.2%, 26.5%]. It is almost entirely a single-family-VIIRS phenomenon: VIIRS-only detections are 49.4% FP, and every multi-family or geostationary combination is ≤16%. The headline the program had been missing — the decomposition of entry 0020’s 76.3-point precision gap: 56.6 points are unlisted-real fire, only 19.7 points are genuine false positive. Roughly three-quarters of the apparent “imprecision” was IRWIN incompleteness, not surfaced error. Fully read-only; no shipped number changes.

How the labels are assigned — positive evidence, not IRWIN-presence. Each surfaced fire is labelled by a precedence stack of affirmative signals, all independent of the confidence/tier that surfaced it: (1) positive fire if it matches a NIFC IRWIN/WFIGS wildfire incident (10 nm, active-window, the entry-0020 methodology); else (2) positive non-fire if it sits on the persistent-flaring mask (entry 0021’s flaring_mask_shadow) or a catalogued static industrial/persistence source (fp_polygons: OSM refineries, OSM gas flares, dozier/polar persistence); else (3) positive fire if ≥2 independent sensor families corroborate — where independence counts distinct physical platforms {VIIRS, MODIS, GOES-ABI, S2, S1} and deliberately excludes HMS, since NOAA’s Hazard Mapping System is an analyst product derived from those same satellites and cannot be a second independent vote; else (4) positive fire if VIIRS/MODIS detections recur across ≥2 distinct days at the location and it is not on any static-source catalog (multi-overpass persistence away from flares); else (5) unadjudicated middle.

label bucketcountshare of surfaceddominant evidence
POSITIVE FIRE1,36368.7%IRWIN/WFIGS 470 · ≥2 indep families 220 · multi-day polar persistence 673
POSITIVE NON-FIRE20810.5%persistent-flaring mask 207 · OSM refinery 1
UNADJUDICATED MIDDLE41420.9%no affirmative fire or non-fire signal

Adjudicating the middle. The 414-detection middle is the honest hard part — neither positively fire nor positively non-fire. Each is adjudicated with the best independent evidence available short of a ground visit: proximity to (but outside the strict radius of) a catalogued industrial/persistence source → non-fire-leaning; multi-day polar persistence away from all catalogs, or an energetic single-day polar detection (FRP ≥ 10 MW) → fire-leaning; no polar corroboration and weak signal (FRP < 5 MW, i.e. an ephemeral geostationary/analyst-only hit) → non-fire-leaning; everything else → genuinely ambiguous. Result: 81 fire, 35 non-fire, 298 ambiguous. The large ambiguous residual is not hidden — it is carried straight into the interval below.

The estimate. With B = 208 positive-non-fire and the middle’s 35 non-fire + 298 ambiguous, the FP-count point estimate splits the ambiguous band 50/50: FP = B + 35 + 0.5·298 = 392 of 1,985. The epistemic bracket sends the ambiguous band entirely to fire (low) or entirely to non-fire (high); the Wilson interval is the binomial sampling error on the point count.

stratumNtrue FP rate (point)Wilson-95 (sampling)ambiguous bracket (epistemic)
ALL surfaced1,98519.7%[18.1%, 21.6%][12.2%, 27.3%]
tier = confirmed4584.6%[3.0%, 6.9%][4.6%, 4.6%]
tier = probable1,52724.3%[22.2%, 26.5%][14.5%, 34.1%]

The FP is a single-sensor-family artifact. Split by the surfacing sensor mix, the false-positive burden is concentrated almost entirely in one place — lone-VIIRS detections, which is exactly the flaring class entry 0021 characterized. Every combination that adds a second independent family, or a geostationary confirmation, collapses to single digits or low teens:

source groupNpositive-firepositive-non-firemiddletrue FP rate (point)
VIIRS-only (single family)3921881851949.4%
HMS-only (analyst-derived)327206012115.9%
has-GOES (geostationary)495369612014.1%
VIIRS+MODIS (polar ×2)13111516012.2%
HMS+VIIRS537410112610.1%
MODIS-only103750285.8%

The decomposition entry 0020 could not do. Entry 0020’s 23.7% IRWIN “precision” left a 76.3-point gap it could only call “unmeasured — some real, some false.” The corpus splits that gap for the first time:

component of the surfaced setsharecountinterpretation
IRWIN/WFIGS-listed incident23.7%470the entry-0020 floor (numerator)
unlisted REAL fire56.6%1,123real fire IRWIN never listed — the bulk of the “gap”
genuine NON-FIRE false positive19.7%392the true surfaced FP rate

So the “76.3% of surfaced detections IRWIN could not confirm” was ~74% unlisted-real fire and ~26% genuine false positive — the map is far more correct than the IRWIN floor implied, and its residual error is a nameable, already-mitigable class (persistent flaring, concentrated in lone-VIIRS detections).

Reproducibility detail. Fully read-only on all production tables (PRAGMA query_only, mode=ro); zero writes — no shadow table, no canary_meta row, nothing. Health-gated on the host service (exit 75 if inactive), yields to the host busy marker, wrapped in the host load-guard with server-side timeout+nice -n19, SIGTERM-clean, killed by PID. Surfaced set = the exact live serving query on fused_fires (last_seen≥now−24h AND tier≠'fp' AND confidence≥0.10), N = 1,985. IRWIN/WFIGS truth = the entry-0020 / te_daily_scorer method: IRWIN evidence (source='IRWIN', IncidentTypeCategory∈{WF,WFU}) de-duped to incidents with active window [discovery−24h, out+24h], plus WFIGS points; a match is within 10 nm haversine and the active window. Non-fire catalogs = flaring_mask_shadow (entry 0021) and fp_polygons (OSM refinery / OSM gas-flare / dozier- and polar-persistence), each tested at its own radius. Sensor-family independence parsed from the fused sources string into {VIIRS, MODIS, GOES, S2, S1}; HMS excluded as analyst-derived. Persistence = COUNT(DISTINCT detection-day) of VIIRS/MODIS evidence within 10 nm over an 8-day lookback. Estimator: FP̂ = (positive-nonfire + middle-nonfire + ½·middle-ambiguous)/N; Wilson score interval for binomial sampling; the [ambiguous→all-fire, ambiguous→all-nonfire] bracket for the epistemic band. Every figure counted from the live production DB at run time.

Claim status: MEASURED, read-only, honest-uncertainty. This entry measures the surfaced false-positive rate and decomposes the entry-0020 floor; it does not change fusion, tiers, the confidence floor, the map, the API, the FP catalog, or any shipped number, and it writes nothing.

Honest bounds. (1) The middle carries real uncertainty. The 298-detection ambiguous residual is adjudicated with heuristic independent evidence (persistence, catalog proximity, FRP, day/night) — not ground visits — so its split is uncertain; that uncertainty is why the epistemic bracket ([12.2%, 27.3%]) is much wider than the sampling interval, and it is the honest bound, not the Wilson number. (2) The persistence fire-rule is the weakest positive class. 673 detections (33.9%) are labelled fire solely by multi-day polar persistence off the static catalogs; genuine multi-overpass wildfires persist this way, but an un-catalogued flare could too, so this rule can only push the true FP upward from the point estimate — the reason the pessimistic bracket edge is stated, not buried. (3) IRWIN/WFIGS remains incomplete (its whole point here), so “unlisted-real” leans on corroboration and persistence, not incident lists. (4) Single summer window (~2026-05-29..07-09); re-running on a later split shifts exact counts, not the structure (tier-stratified, VIIRS-only-dominated).

Literature alignment. Verdict: AGREEMENT. That IRWIN / FPA-FOD-style incident lists are materially incomplete for sub-incident and non-incident thermal is well documented [6] — so a precision figure computed against them is expected to understate true precision, exactly the 56.6-point unlisted-real correction found here. That the residual false positives concentrate in the sharpest polar sensor over persistent industrial heat is the canonical VIIRS-Nightfire flaring result [11], consistent with VIIRS 375 m sensitivity to small low-FRP hot sources [1]; and that adding an independent second sensor family sharply raises precision is the standard multi-sensor-confirmation finding [3]. The tier stratification (confirmed 4.6% vs probable 24.3%) is the operational-gate stack behaving as designed.

What this does not claim: that 19.7% is exact (the honest interval is [12.2%, 27.3%], dominated by the ambiguous middle), that the middle adjudication substitutes for ground truth (it is heuristic and independent, not certified), that the 673 persistence-fire labels are individually proven fires, or that the split transports to winter. Recommendation: informative — no cutover. This is a measurement pass; its operational consequence is already covered by the entry-0021 flaring-mask cutover candidate (the 207 positive-non-fire on that mask are precisely the removable class), and by the observation that tier and single-family-VIIRS are the two axes along which surfaced FP is concentrated — a probable-tier lone-VIIRS detection in an oil-and-gas basin is where the residual error lives, and is where any future gate should focus. Mark decides.

References: [1] · [3] · [6] · [11]

entry 0022

Physical geo-priors don’t survive transport either: swapping memorized lat/lon for elevation, slope and ruggedness still fails to beat the production baseline out-of-time

Date: 2026-07-09   Status: MEASURED NEGATIVE (out-of-time) — physical geo is not a promote candidate — corroborates & extends entry 0018

BLUF. Entry 0018 killed the recovery re-ranker’s “geo lift” under temporal transport — raw lat/lon was memorizing the reporting surface, not fire geography — and named the constructive next step: replace raw coordinates with physical, non-memorizable geo-priors (terrain, fuel, climatology) and re-run the same gate; only promote if the physical prior holds out-of-time. We did exactly that. We engineered physical terrain covariates — elevation, slope, and terrain-ruggedness sampled from a coarse DEM — and re-ran the identical train-early / test-strictly-later gate against the reporting-bias-free neutral (independent VIIRS/MODIS) truth. Physical geo-priors do not survive transport either. On the neutral truth out-of-time, recovery+physical-geo reaches AUC 0.571 — nowhere near the production baseline (0.856), only marginally above recovery det-only (0.534, +0.037 AUC / ±0.00 PR-AUC), and below even the raw-lat/lon variant it was meant to replace (0.633). Fuel and climatology remain deferred (no box-local source), so this is an elevation/terrain-only physical test — but terrain is decisive on its own hypothesis, and the answer is no. The canary stays gated.

The split (identical to entry 0018). The same CAUTION candidate set, the same 19 detection-only base features, the same honest training label, the same neutral evaluation label, the same model. Train on first_det in 06-27–07-02 (123,931 events), a 07-03 gap, test strictly-later 07-04–07-06 (38,549 events). Models train on the honest (IRWIN/perimeter/confirmed) truth and are evaluated out-of-time against the NEUTRAL truth — an independent VIIRS/MODIS detection (belonging to a different canonical event) within 5 km in a subsequent overpass (t0+3 h…t0+72 h), gridded 0.05°×6 h over CONUS, HMS/IRWIN-independent. Neutral base rate on the holdout is 3.35% (1,292 positives) — reproducing entry 0018’s 3.3%. The only change vs entry 0018 is the geography channel: physical terrain covariates instead of raw coordinates.

Out-of-time on the NEUTRAL (reporting-bias-free) truth — the gate.

scorerAUCPR-AUCrecall@90%precall@80%p
production tier_and_conf0.8560.2620.000.00
recovery, det-only (19 feat)0.5340.1000.000.00
recovery + raw lat/lon (21 feat)0.6330.0950.000.00
recovery + PHYSICAL geo (elev+slope+ruggedness, 22 feat)0.5710.0990.000.00
physical-geo-only (elev+slope+ruggedness)0.5830.0690.000.00

Physical geography fails the gate on both counts. Recovery+physical-geo (0.571) does not beat production (0.856) — it is 0.28 AUC and 0.16 PR-AUC below it — and it does not meaningfully beat recovery det-only (0.534): a +0.037 AUC nudge with PR-AUC flat (0.099 vs 0.100). It is also below the raw-lat/lon variant (0.633), so the physical prior we hoped would be more robust than memorized coordinates actually carries less out-of-time neutral signal than the coordinates. Physical-geo alone reaches only 0.583 — a weak geographic prior, well short of production. Every scorer scores 0 at the 80/90% precision operating points on this sparse 3.35%-base truth, so the comparison rests on AUC/PR-AUC discrimination, where physical geography adds no out-of-time edge. The single scorer that transfers is production — a plain FRP/family rule that tracks fire radiative power, the same physical quantity the polar sensors re-detect.

For contrast — the same holdout scored against the HONEST (HMS-inclusive) truth. Here, as in entry 0018, geography still looks attractive — the trap the neutral truth exists to expose:

scorer (vs honest truth)AUCPR-AUCrecall@80%p
production tier_and_conf0.8830.4840.072
recovery, det-only0.8750.6560.539
recovery + raw lat/lon0.9430.7170.620
recovery + PHYSICAL geo0.9070.6750.578
physical-geo-only0.6350.0750.00

The physical prior behaves exactly as designed — which is why it can’t rescue recovery. Raw lat/lon adds +0.068 AUC under the honest truth: a large lift, most of which is the reporting-bias artifact (it memorizes where fires get reported [6]). Physical terrain adds only +0.032 AUC under the honest truth — less than half the raw-coordinate lift — because it cannot memorize the reporting surface; it only knows physical terrain. That is the good news the constructive next step was chasing. But the same property means it brings almost no signal at all: its neutral-truth increment over det-only (+0.037) is as small as its honest-truth increment, and the absolute neutral AUC (0.571) sits far below the production baseline. Physical geography here is honest but inert: it does not encode the reporting surface, and it does not encode enough real fire-geography to lift a reporting-bias-free re-ranker out of the near-chance regime.

Reproducibility detail. Read-only on the production DB (mode=ro + PRAGMA query_only=ON), no production writes, health-gated on the host and resource-guarded (yields to the host busy marker; SIGTERM-safe; the only artifact written is a /tmp JSON). Candidate set, 19 detection-only features, honest label, split, and model are byte-for-byte the entry-0018 harness: candidates = event_corroboration_tier where tier='CAUTION' joined to non-leaky fire_event_evidence (IRWIN/HMS/SAR/S2 confirmation channels excluded from features); model = HistGradientBoostingClassifier (max_iter 400, lr 0.06, 31 leaves, min_leaf 20, l2 1.0, class_weight balanced, early stopping), trained on 06-27–07-02, scored on 07-04–07-06 (07-03 gap). Training label = honest truth (confirmed OR an IRWIN fire-day / perimeter within 5 km & ±14 d). Neutral evaluation label = an independent VIIRS/MODIS detection from a different canonical event within 5 km in a subsequent overpass (t0+3 h…t0+72 h), gridded 0.05°×6 h over CONUS. Production baseline = tier_and_conf reconstructed per event from its full canonicalized source set / GOES-frame count / max FRP. Physical covariates: elevation, slope (m rise per km), and a terrain-ruggedness index (local 3×3 elevation std), sampled per event from ETOPO2022 60 arc-second surface elevation (NOAA NCEI), CONUS window, read as a windowed cloud-optimized-GeoTIFF (no bulk download). Deferred (honestly): fuel/vegetation (LANDFIRE fuel model or MODIS/VIIRS NDVI) and long-run fire-weather climatology — no box-local source was readily available without heavier ingestion, so this physical-prior test is terrain-only. Metrics via roc_auc_score, average_precision_score, and precision_recall_curve operating points. The hidden canary table event_caution_recovered_geo is unchanged and remains gated (surface_allowed=0); nothing was surfaced.

Reproduction note (one figure differs from entry 0018, and it does not move the verdict). The production baseline reproduces entry 0018 on the neutral truth (AUC 0.856 vs 0.861; base rate 3.35% vs 3.3%) and the entire honest-truth panel reproduces it (det-only 0.875/0.656; +geo 0.943/0.717). The one figure that differs is the honest-trained recovery model’s neutral AUC: this rebuild reads it near chance (det-only 0.534) versus 0.837 in entry 0018. The difference isolates to the neutral-truth independent-re-detection criterion — this rebuild requires the confirming VIIRS/MODIS detection to belong to a different canonical event (strict independence, excluding a weak source re-flagging itself); entry 0018’s one-off neutral-truth builder was not re-instantiated. We ran the gate under both a self-persistence-inclusive and an independence-strict neutral truth; det-only reads 0.552 and 0.534 respectively — both far below production, and the physical-geo verdict is identical under either. Because the promote decision rests on the within-run deltas (physical-geo vs production and vs det-only, measured on one fixed truth), it is robust to this reconstruction sensitivity.

Claim status: MEASURED NEGATIVE, out-of-time. Physical geo-priors (elevation + slope + ruggedness) are not a promote candidate: under strict train-early/test-late transport they do not beat production on the reporting-bias-free truth (0.571 vs 0.856), do not meaningfully beat detection-only recovery (+0.037 AUC, PR-AUC flat), and carry less out-of-time neutral signal than the raw coordinates they were meant to replace. No shadow build is recommended. The canary stays gated (surface_allowed=0). This corroborates and extends entry 0018: the constructive next step it named — physical rather than memorized geography — was tested and did not rescue the transport failure.

Hard bound (summer-only + terrain-only). All data is summer 2026, so this is a train-earlier / test-later split within summer (days apart, not seasons); a true off-season validation is impossible until winter data exists and remains deferred. The physical prior tested here is terrain only (elevation, slope, ruggedness); fuel/vegetation and climatology remain deferred for lack of a ready box-local source — a fuel- or aridity-aware prior could in principle behave differently, though the terrain result gives no encouragement, and the neutral base rate (3.35%, 1,292 positives) is sparse enough that PR-AUC at the extreme operating points is noisy.

Literature alignment. Verdict: AGREEMENT. Physical terrain, fuel, and climate are the standard predictors in fire-susceptibility modelling [5], so testing them as a geographic prior is the right move; but the discipline that a prior which lifts a model against reported-fire records must be re-checked against an independent, physically-triggered truth (polar radiometric detection [1]) under strict out-of-time validation [4] — not in-sample or against reporting-biased records [6] — is exactly what stops a weak prior from being promoted on optimism. Here terrain passes the “doesn’t memorize the reporting surface” test (its honest-truth lift is small) but fails the “adds real transferable skill” test (its neutral-truth AUC stays near chance and far below the physics-based baseline).

What this does not claim: that terrain is irrelevant to fire — only that a coarse terrain prior adds no de-confounded, out-of-time recovery value on this data; that the recovery program is dead — detection-only recovery still carries honest-truth signal (0.875 AUC / 0.656 PR-AUC); nor that a fuel- or climatology-based prior is settled — those remain untested for lack of a source. Next: if a box-local LANDFIRE fuel raster or a coarse aridity climatology becomes available, engineer them the same way and re-run this identical gate; and revisit the whole question once any cross-season data exists. Until then, geography — memorized or physical — is not a promote lever, and the production FRP baseline remains the scorer to beat.

The gate is doing its job. This is the fourth recovery/gate candidate the temporal-transport check has correctly stopped — the Dozier multi-feature gate, the Dozier early-cue tier, recovery+raw-geo, and now recovery+physical-geo. The discipline keeps letting the physically-grounded scorers through and stopping the ones riding in-sample or reporting-biased optimism.

References: [5] · [1] · [4] · [6]

entry 0023

Bounding the last coverage lever: the sub-floor tail is real but low-yield — SWIR revisit is not the limiter, sub-pixel size is, and the recoverable upper bound is 48 fires (mostly larger remote Alaska burns)

Date: 2026-07-10   Status: MEASURED (own read-only artifact; reproduces & bounds the entry-0017 sub-floor set) — confirmed LOW-YIELD coverage lever

BLUF. Entry 0017 showed that 90.6% of OLDGABE’s “missed” IRWIN fires are a 24 h liveness artifact, that the fusion gate rejects zero, and that only a small tail — 132 fires (9.4%) in that run — are truly sub-floor (nothing of any status within 10 nm in a 30-day lookback). It named the last open coverage thread: quantify that sub-floor tail against Landsat-9 / Sentinel-2 SWIR revisit cadence over remote Alaska to bound the only genuine coverage lever. We reproduced the sub-floor set (161 fires this re-run, up from 132 on the documented active-window drift) and bounded it. The revisit geometry is not the constraint — sub-pixel fire size is. Every one of the 161 is an open IRWIN record (null FireOutDateTime), so its active window runs discovery→now — days to weeks — and at Alaska-summer latitudes with S2A/S2B + L8/L9 sidelap each such window contains many daytime SWIR overpasses. Overpass availability is therefore not limiting (plausible-overpass upper bound = 161/161). What limits it is that 112 of 161 (69.6%) are sub-1-acre point records — at or below the 20–30 m S2/L9 SWIR sub-pixel floor no matter how often they are overflown — carrying just 13.8 acres between them. Gate detectability on a generous “≥1 acre sustained flaming” SWIR floor and the recoverable upper bound is 48 fires (29.8%), and because the acreage is so top-heavy those 48 carry 99.7% of the sub-floor acreage (4,626 of 4,640 ac). But that 48 is a hard upper bound before any cloud/illumination haircut; the robustly-sized core is just 24 fires ≥10 acres and 7 ≥100 acres, overwhelmingly larger remote Alaska burns. Against a roster already at ~95% true detection recall, a SWIR-cadence recovery path is a real but marginal Alaska-only, large-fire-only lever — exactly as entry 0017 suspected. It does not warrant a general recovery path.

The reproduced sub-floor set (run-18-equivalent window 2026-07-07→2026-07-08, 10 nm vs IRWIN WF/WFU; 3,446 active wildfires; 1,447 fire-level false-negatives; 1,285 liveness; 161 sub-floor — nothing of any status within 10 nm in the 30-day lookback; 4,640 total acres):

size bandfires% of sub-flooracresSWIR verdict at 20–30 m
<1 acre (point records)11269.6%~13.8at/below sub-pixel floor — orbit-hopeless
1–10 acre2414.9%532.7marginal — needs clear-sky daytime overpass on active flaming
10–100 acre1710.6%plausibly detectable
≥100 acre74.3%4,093.7plausibly detectable
unknown size10.6%excluded (no size)

Geography — Alaska-heavy in acreage, CONUS-heavy in count. 34 of 161 fires (21.1%) are in Alaska but they carry 3,341 of 4,640 acres (72.0%); the other 127 (CONUS) are overwhelmingly the sub-1-acre point records (1,299 ac, 28.0%). By latitude: 83 below 45°N, 44 at 45–55°N, 34 at ≥60°N (all Alaska). Every one of the 161 is a genuine wildfire (IncidentTypeCategory=WF, kind FI) — no prescribed burns dilute the set. Discovery is 124 daytime / 37 night. Crucially, none of the 161 carries a FireOutDateTime: they are all open records, so the “is this a mop-up record with FireOut≈FireDiscovery” test entry 0017 anticipated is inapplicable here — the mop-up/record-only class instead shows up as the sub-1-acre point-record mass, which is the same orbit-undetectable population by a different signature.

The SWIR recoverability bound (Sentinel-2 MSI B11/B12 ~1.6/2.2 µm at 20 m; Landsat-9 OLI-2 B6/B7 ~1.6/2.2 µm at 30 m; combined S2A/S2B + L8/L9 daytime SWIR opportunity; upper bounds throughout):

boundfires% of sub-flooracresnote
Plausible S2/L9 daytime SWIR overpass in active window161100%4,640overpass not the limiter — open windows span many revisits
Large enough for a 20–30 m SWIR anomaly (≥1 ac) — RECOVERABLE UPPER BOUND4829.8%4,62699.7% of sub-floor acreage; 16 in Alaska; 39 daytime discovery
  — of which robustly sized (≥10 ac)2414.9%the realistic recovery core, mostly larger AK burns
  — of which ≥100 ac74.3%4,093.7the acreage-dominant handful
Below SWIR sub-pixel floor (<1 ac / unknown) — hopeless11370.2%13.80.3% of sub-floor acreage — unrecoverable from orbit at any cadence

Reading the bound honestly. The recoverable upper bound is 48 fires / 4,626 acres — and it looks acreage-rich only because seven ≥100-acre Alaska burns carry 88% of it. Strip to what a 20–30 m SWIR band would robustly resolve and the core is 24 fires ≥10 acres, mostly larger remote Alaska burns that no core polar/geostationary sensor happened to touch inside the window. Even that 24 is optimistic: it assumes a cloud-free daytime overpass coincides with active flaming, and Alaska/PNW summer cloud frequency, the sub-pixel marginality of the 1–10 acre band, and the requirement that any SWIR hit still clear the fusion gate and attribute correctly all push the realistic yield below the bound. For context, OLDGABE’s fusion stack already lists an S2-SWIR-Hotspot source (alongside S1-SAR-BurnScar); these 161 slipped past it, so the lever is really about densifying SWIR cadence (adding L9/L8 to the existing S2 feed, or reprocessing) rather than a missing sensor — which caps the upside at the 48-fire bound above.

Verdict — confirmed low-yield. The sub-floor tail is genuinely small: 161 of 3,446 active wildfires (4.7%) and 4,640 acres, against a roster whose true detection recall (ever confirmed during active life) is (3,446−161)/3,446 = 95.3%. Of that tail, 70% is orbit-undetectable sub-1-acre point records, the revisit geometry is favorable rather than limiting, and the recoverable upper bound is 48 fires — realistically a handful of larger Alaska burns. The coverage lever entry 0017 flagged is real but low-yield: it justifies at most a narrow, default-OFF, Alaska-focused, ≥10-acre SWIR-cadence shadow probe measured for recovered-recall vs added-FP — not a general recovery path, and a far smaller prize than the liveness/persistence pass (1,285 fires) that entry 0017 already identified as the dominant lever.

Reproducibility detail. Read-only replay against OLDGABE oldgabe.db (mode=ro + PRAGMA query_only=ON), no writes; health-gated on the host (serving unit active) and resource-guarded — this run deferred twice to the host busy marker before completing, which is the guard behaving as designed. Sub-floor set reproduced with the shipped scorer daemons/te_daily_scorer.py verbatim (_load_irwin, _bucket, _match_in_det_bucket, _rng_nm, MATCH_RADIUS_NM=10 nm): IRWIN truth = fire_event_evidence where source='IRWIN', deduped on IrwinID/UniqueFireIdentifier, filtered to IncidentTypeCategory∈{WF,WFU}, active window = [FireDiscovery−24 h, FireOut||now+24 h]. A fire is a false-negative when no promoted event (status∈{confirmed,confirmed_growth,awaiting-confirmation,pre-ignition}) lies within 10 nm and the active window during the 24 h scoring window; it is sub-floor when, over the 30-day lookback, no event of any status lies within 10 nm/active-window — identical to entry 0017. Per-fire fields (acres, state, discovery/out times, incident type, lat/lon) read from the IRWIN raw JSON (FinalAcresIncidentSizeDiscoveryAcres priority; POOState; FireDiscoveryDateTime/FireOutDateTime epoch-ms). Discovery day/night = local solar hour from FireDiscoveryDateTime + lon/15 (day = 06–18 LST). SWIR bound (upper bounds, from geometry not imagery): plausible overpass = the active window spans ≥ one effective daytime revisit interval (latitude-scaled: 2.0 d at ≥60°N via S2A/S2B + L8/L9 sidelap, up to 4.0 d mid-latitude) — satisfied by all 161 because every record is open (null FireOutDateTime) with a days-to-weeks window; detectable = plausible overpass AND ≥1 acre (a generous practical S2/L9 SWIR sub-pixel active-fire floor; sub-1-acre point records treated as hopeless regardless of overpass). No imagery was pulled; the bound rests on revisit geometry + fire size/duration + the known 20–30 m sub-pixel SWIR detection limit. Reproduction note: N drifts from entry 0017’s 132 to 161 (fn 1,447 vs 1,407; N 3,446 vs 3,410) for the reason entry 0017 documented — null-FireOutDateTime active windows extend to current run time, so a later replay admits a slightly larger open roster; the structure (small, sub-pixel-dominated, Alaska-heavy-in-acreage tail) is invariant to the drift. Only artifact written was a /tmp JSON on the host.

Claim status: MEASURED (own read-only artifact, dated; reuses the shipped scorer; bounds the entry-0017 sub-floor tail). The recoverable figure (48 fires / 4,626 ac) is stated as a hard upper bound; the operative claim is the verdict — the sub-floor coverage lever is real but low-yield, revisit-cadence is not the limiter, and sub-pixel fire size is.

Hard bound (summer-only + upper-bound + no-imagery). All data is summer 2026 and a single run-18-equivalent window; a true off-season or multi-window distribution is deferred until more seasons exist. Every recoverability number is an upper bound derived from revisit geometry and reported fire size, not from actual S2/L9 scenes — we did not confirm a single cloud-free daytime SWIR anomaly; cloud, solar-zenith, active-flaming/overpass coincidence, and the fusion-gate/attribution requirement all reduce the realistic yield below the bound. The 10 nm (18.5 km) match radius is the scorer’s own, so the sub-floor set is itself a soft upper bound on true blindness. IRWIN size fields are human-reported and often stale for open records; the ≥1-acre SWIR floor is a rule-of-thumb, not a validated per-scene threshold.

Literature alignment. Verdict: AGREEMENT. That mid-resolution SWIR imagers (Sentinel-2 MSI, Landsat-8/9 OLI) can detect active fires well below their pixel size via the 1.6/2.2 µm sub-pixel radiance signal — but with a practical floor set by fire radiant area, cloud, and revisit — is the established finding [10][12], and that their multi-day revisit makes them a complement to, not a replacement for, the daily polar/geostationary active-fire products [1][3] is the standard operational view. Our result is consistent: the geometry permits recovery of the larger, persistent remote burns but not the sub-pixel point-record mass, so SWIR is a narrow complement here, not a coverage fix.

What this does not claim: that no sub-floor fire is recoverable — up to 48 (upper bound), realistically a couple dozen larger Alaska burns, plausibly are; that S2/L9 SWIR is useless — OLDGABE already ingests an S2 SWIR hotspot source and this quantifies the ceiling on densifying it; nor that the sub-floor set is fixed — it drifts with the open-record roster and season. Next: if the larger-fire recovery is pursued, stand up a default-OFF, Alaska-focused swir_cadence_shadow restricted to ≥10-acre IRWIN-active fires with no core-sensor touch in-window, add L9/L8 to the existing S2 SWIR feed, and measure recovered-recall vs added-FP over ≥14 runs with CIs before proposing any cutover — but weigh it against the far larger liveness/persistence lever (1,285 fires) from entry 0017, which remains the dominant recall investment.

References: [10] · [12] · [1] · [3]

entry 0024

How fast does OLDGABE surface a real fire? — the first end-to-end detection-latency measurement, and why the “we detect it before it’s reported” number is mostly a lookback artifact

Date: 2026-07-10   Status: MEASURED (own read-only artifact; new operational metric) — headline is lookback-sensitive; the artifact-free number is stated plainly

The framing. Twenty-four entries have measured OLDGABE’s recall, precision/FP, and coverage — but never latency: once a real fire starts, how quickly does OLDGABE actually surface it? A firefighter cares about speed as much as about whether a fire is found at all. This is the first entry to measure time-to-first-detection end-to-end, and the honest answer comes with a large caveat that turns out to be the finding.

BLUF. Against IRWIN’s reported discovery time as the t₀ proxy, OLDGABE’s defensible, artifact-free latency — its first independent post-discovery detection within 10 nm — has a median of +9.2 h, with 19.8% surfaced within 1 h, 40.4% within 6 h, and 68.9% within 24 h of the reported discovery (n = 2,932 fires). The tempting headline — “OLDGABE detects 71% of fires before they are reported (median −25 h)” — is not a defensible detection-skill claim: the median slides monotonically with the pre-discovery lookback window we allow (−25 h at a 48 h cap → −7 h at 24 h → +3.5 h at 6 h → +9.2 h at 0 h), which is the exact signature of a persistent-pixel spatial-association artifact — a 10 nm cell in fire country carries near-continuous GOES/HMS pixels that are not this ignition. On the fastest-path question: GOES-ABI wins the first-arrival race (it is the first sensor with any pixel in-cell for 76.2% of fires, on 5–15 min cadence), but its genuine post-report detection of a new fire is the slowest of the thermal sensors (median +13.8 h) because of coarse sensitivity; the polar/analyst products deliver tighter genuine confirmation (VIIRS +5.8 h, HMS +0.6 h). Cadence wins the first-pixel race; sensitivity wins the genuine-detection race.

Populations & t₀ (reproducible). Truth reuses the shipped scorer’s methodology (daemons/te_daily_scorer.py): IRWIN fires = fire_event_evidence where source='IRWIN', deduped on IrwinID/UniqueFireIdentifier, filtered to IncidentTypeCategory∈{WF,WFU}, 10 nm haversine match. t₀ = FireDiscoveryDateTime — explicitly a reported, human-entered discovery time and an ignition proxy, not true ignition; it can lag real ignition by hours, and OLDGABE can legitimately detect before it. OLDGABE’s own sensor evidence in this DB begins 2026-05-29, so the clean latency set is the 3,163 WF/WFU fires discovered inside coverage (2026-05-30→2026-07-09) — fires discovered earlier are excluded to avoid coverage-start censoring. Latency = (first OLDGABE evidence obs time for a promoted event within 10 nm) − FireDiscoveryDateTime, signed; negative = OLDGABE-first. Promoted = event status∈{confirmed,confirmed_growth,awaiting-confirmation,pre-ignition}.

Timezone verification (get this wrong and the whole metric is wrong). The host runs America/New_York (EDT, −04:00). detected_at is stored ISO-8601 with a Z suffix and the provider raw.detected field matches it verbatim — i.e. UTC; FireDiscoveryDateTime is epoch-milliseconds UTC. This analysis converts every timestamp with calendar.timegm (pure UTC), not the shipped scorer’s time.mktime (which interprets the string in host-local time). We verified the hazard numerically: for the same wall-clock string, timegm and mktime differ by exactly 4.0 h (the EDT offset) — so the local-time path would have skewed every latency by +4 h. Both fields are handled in UTC throughout.

Result 1 — the lookback-sensitivity table (this is the finding). Same fires, same 10 nm match, only the pre-discovery lookback cap varies. If the negative latencies were genuine early detections of the same ignition they would sit at stable, physically-plausible offsets; instead the median tracks the cap and the negative tail piles against whatever floor is imposed — the tell of spatial association, not detection:

pre-discovery lookback capnmedian (h)% negative (OLDGABE-first)≤6 h≤24 h
0 h (post-discovery only — artifact-free)2,932+9.20.0%40.4%68.9%
3 h (physically plausible)2,947+6.623.4%48.7%71.0%
6 h (physically plausible)2,953+3.535.8%55.6%73.1%
24 h2,975−7.261.5%69.9%79.3%
48 h (the tempting “we beat the report” number)2,988−25.171.2%77.0%83.1%

At a 48 h cap the negative tail jams against the floor (p10 −45.9 h, p25 −41.8 h) — manufactured, not earned. Within a physically plausible ≤6 h pre-report window, ~36% of fires do surface before the human report, a real and useful signal but itself a mix of genuine early detection and residual association; we do not claim the ≥24 h figures.

Result 2 — artifact-free latency distribution (0 h floor, post-discovery).

metricp10p25medianp75p90
latency after reported discovery (h)+0.2+2.1+9.2+36.3+118.1
fraction surfaced within≤1 h≤3 h≤6 h≤12 h≤24 h
share of the 2,932-fire latency set19.8%28.7%40.4%55.3%68.9%

Result 3 — by first-detecting sensor: cadence vs sensitivity, in real latency terms. First-arrival share is unambiguous (who has the earliest in-cell pixel); genuine post-report latency is the artifact-free per-family view (0 h floor):

sensor familyfirst-arrival sharepost-discovery median (h)≤1 h≤6 hrole
GOES-ABI (5–15 min cadence)76.2%+13.811.0%31.2%wins first-arrival by cadence; coarse → slowest genuine detection
HMS (analyst smoke/fire product)11.6%+0.658.0%71.8%near-zero — but partly reflexive with the report (see bound)
VIIRS 375 m (polar, ~12 h revisit)7.4%+5.815.7%52.9%sensitive; tight within-day genuine confirmation
S1/S2 (SAR / SWIR)2.1%+16.55.9%35.3%slow-cadence complement (cf. entry 0024)
CAM-SMOKE (ground camera)2.0%+6.413.6%47.0%83% within 12 h where cameras exist; visibility-bound (cf. entry 0006)
MODIS (polar)0.6%+4.928.6%52.4%small-n; superseded by VIIRS in the constellation

Result 4 — by fire size (final acres) and region (0 h floor). Bigger fires are not systematically detected sooner: they are caught within the first hour more often (≥100 ac: 32.1% ≤1 h vs 16.0% for <1 ac — they are bright) but carry a longer median (≥100 ac +31.4 h; <1 ac +12.5 h; 10–100 ac +3.2 h), a reporting-promptness confound — large fires are reported by humans very fast, so OLDGABE’s independent detection more often trails a prompt report. Geographically, Alaska (+11.7 h) and CONUS (+9.2 h) are similar, but the West (+8.0 h, 72.9% ≤24 h) is far faster than the East (+42.4 h, 42.7% ≤24 h) — eastern fires are smaller, promptly human-reported, and often under canopy.

cut (0 h floor)nmedian (h)≤1 h≤24 h
size <1 ac1,561+12.516.0%63.5%
size 1–10 ac357+9.228.6%65.8%
size 10–100 ac157+3.238.9%70.1%
size ≥100 ac131+31.432.1%49.6%
region West2,526+8.020.7%72.9%
region East377+42.413.8%42.7%
region Alaska29+11.720.7%62.1%

Survivorship pairing (do not read this as “OLDGABE finds everything in 9 h”). The latency set is conditioned on fires OLDGABE actually surfaced: of the 3,163 in-window fires, 2,988 (94.5%) had a promoted event within 10 nm at some point in their active window (2,932 with a post-discovery detection). That 94.5% is a generous ever-detected figure — any promoted evidence anywhere in the active window — and sits alongside, not in place of, the stricter operational recall and the sub-floor coverage tail already quantified in entries 0003 / 0007 / 0017 / 0024. Latency is measured on the fires we find; it says nothing about the ones we miss.

Verdict. The honest headline is the artifact-free one: median ~9 h to independent post-discovery detection, ~20% within an hour, ~40% within 6 h, ~69% within a day. The “detects 71% of fires before they are reported” framing is a lookback artifact and is retired here. The fastest first-alert path is a genuine cadence-vs-sensitivity split: GOES-ABI arrives first for three of four fires on cadence alone, but for a new small fire the sensitive polar overpass (VIIRS) and the analyst product (HMS) deliver the tighter genuine confirmation. Latency lever (research observation, not a flip): the data does not support a naive “GOES-first low-latency tier” — GOES owns first-arrival largely through cadence and persistent in-cell pixels, and its genuine new-fire detection is the slowest of the thermal sensors. The observations worth a default-OFF shadow probe are (1) an early-latency tier that pairs GOES cadence for breadth with a VIIRS-overpass / HMS weighting for genuine new-fire confirmation, measured for time-saved vs added-FP; and (2) a camera-first low-latency tier where camera coverage exists (CAM-SMOKE: +6.4 h median, 83% within 12 h), consistent with — and bounded by — the visibility limit of entry 0006. Neither changes a shipped number.

Reproducibility detail. Read-only replay against OLDGABE oldgabe.db (mode=ro URI + PRAGMA query_only=ON), no writes; run under the host-health gate (serving unit active, else exit 75) and resource-guarded (host busy-marker honored — this run deferred to a busy marker once and waited for it to clear before proceeding), nice -n19, server-side timeout, on the host /tmp. Truth loader mirrors te_daily_scorer._load_irwin: IRWIN raw JSON, dedupe on IrwinID/UniqueFireIdentifier, WF/WFU only, FinalAcresIncidentSize for size, POOState for region, FireDiscoveryDateTime/FireOutDateTime epoch-ms. Candidate detections = non-IRWIN fire_event_evidence joined to a promoted fire_events row, detected_at≥2026-05-28 (16,740,068 rows), bucketed into 1°×1° cells with 3×3-neighbour probing, then 10 nm (18.52 km) haversine gate. Per fire, evidence is sorted earliest-first and the first detection at-or-after (discovery − cap) is taken for each lookback cap ∈ {0,3,6,24,48} h; the family of that detection is the first-detecting sensor. All time math is UTC via calendar.timegm. Fire counts: 3,688 deduped WF/WFU total → 3,163 discovered in coverage window → 2,988 with a promoted event within 10 nm (2,932 with a post-discovery detection). Only artifact written was a /tmp JSON on the host.

Claim status: MEASURED (own read-only artifact, dated; reuses the shipped scorer’s truth). The operative claim is the artifact-free distribution (median +9.2 h post-discovery; 19.8/40.4/68.9% within 1/6/24 h) and the cadence-vs-sensitivity split; the negative-latency / “OLDGABE-first” figures are reported only as a lookback-sensitivity series and are explicitly not claimed as detection skill beyond a ≤6 h plausible window.

Hard bound (reported-time proxy + survivorship + single summer window). The dominant caveat is that FireDiscoveryDateTime is a reported, human-entered time, not ignition: both the large negative tail and part of the positive tail are reporting-time artifacts, not detection latency — which is exactly why the median moves with the lookback cap. Latency is measured only on fires OLDGABE detected (survivorship), so it must be read with the recall/coverage entries, not as universal speed. All data is summer 2026 in a single ~6-week window (OLDGABE sensor evidence starts 2026-05-29); off-season and multi-window latency are deferred. The 10 nm match radius is the scorer’s own and admits some cross-fire association in dense fire country; HMS’s near-zero latency is partly reflexive because the analyst product ingests same-day reports/imagery. Alaska (n=29–34) and MODIS (n=18–21) cells are small-n.

Literature alignment. Verdict: AGREEMENT. That geostationary imagers detect and revisit far faster than polar sensors (minutes vs a ~12 h revisit) while polar 375 m sensors are more sensitive per overpass is the established operational trade-off [3][8][1], and dedicated GOES early-fire-detection work frames timeliness as a cadence-driven quantity with a sensitivity floor [13] — consistent with our result that GOES wins first-arrival but lags on genuine small-fire detection. That reported fire-discovery times in US incident databases are human-entered and biased is likewise documented [6], which is precisely why we treat t₀ as a proxy and refuse the pre-report headline.

What this does not claim: that OLDGABE detects most fires before they are reported (that figure is a lookback artifact); that median 9 h applies to fires OLDGABE misses (it does not — survivorship); that GOES is “fastest” in a useful sense (it is fastest to arrive, slowest to genuinely detect a small new fire); nor that any latency tier should ship. Next: if the early-latency observation is pursued, stand up a default-OFF latency_tier_shadow that (a) weights VIIRS-overpass / HMS confirmation for genuine new-fire alerts and (b) enables camera-first alerting only inside proven camera coverage, and measure time-saved vs added-FP over ≥14 runs with CIs before proposing any cutover — and re-measure the whole distribution once a non-summer window and true ignition timestamps (where obtainable) exist.

References: [3] · [8] · [1] · [13] · [6]

entry 0025

The liveness lever, backtested to a cutover decision — 38 day-slices say it buys ~7.6 recall points at ~20% precision, and the honest recommendation is NO-GO for surfacing

Date: 2026-07-10   Status: SHADOW / GATED (surface_allowed=0) — retrospective backtest — cutover PROPOSAL, not flipped — completes entry 0019

BLUF. Entry 0019 built the two-condition active-fire liveness gate as a hidden shadow and promised a ≥14-run forward validation with a recovered-continuity-vs-added-FP curve before any cutover. Rather than wait, we backtested the gate retrospectively across 38 daily slices (2026-06-01→2026-07-08), reconstructing for each day what a plain 24 h roster would surface vs. what production+liveness would surface, scored against a retrospective IRWIN active-roster truth. The result is decisive and it is a NO-GO. At the current operating point (10 nm, 72 h, both conditions) the lever recovers a real but modest +7.6 recall points (95% CI +4.8 to +10.4) — lifting the day-of roster recall from 23.7% to 31.3% — but it does so at a lever precision of only ~19.7%: it keeps roughly four IRWIN-uncorroborated fires for every one genuinely-active fire it rescues. The reason is structural and was hiding in the feed: IRWIN publishes no FireOutDateTime at all (0 of 992,511 rows), so condition (a) — “IRWIN still lists it active” — can never retire a dead fire, and the entire FP-safeguard rests on condition (b), the recent-sensor-touch window. Condition (b) is confirmed strongly load-bearing (dropping it inflates added-FP ~10×), but even with it the surfaced-roster precision caps near 20%. A continuity tier at 20% precision would inflate a firefighter-facing map ~5×; we do not flip it.

The backtest (retrospective, using full future knowledge). The single-snapshot daemon of entry 0019 called the one residual added-FP — an IRWIN-active fire that is actually out — “unmeasurable in one run.” The backtest measures exactly it. Because the feed never carries a FireOut timestamp, the real retrospective “out” signal is that IRWIN stops refreshing an incident once it is over. For each WF/WFU incident we take its full ingest span and define truth-active(T) := discovery−24 h ≤ T ≤ last-ingest+24 h (the 24 h pad mirrors the shipped scorer te_daily_scorer.py). At each slice T we reconstruct the deployed gate as-of T — keep a confirmed fire when (a) a WF/WFU IRWIN incident is present within 10 nm with first-ingest≤T (its deployed “still active” semantics, since no FireOut ever arrives) and (b) a core-sensor touch (VIIRS/MODIS/GOES/HMS) landed within the liveness window — and score each kept fire against truth-active(T). A confirmed OLDGABE fire is single-day in this DB (a multi-day fire spawns one confirmed event per day at the same location), so the lever’s reach is precisely the 24→72 h gap after a fire’s last imaging.

Operating point — recovered-recall vs added-FP, mean ± 95% CI over 38 slices (10 nm, 72 h, both conditions):

metric (per day-slice unless noted)mean95% CI
day-of roster recall, plain 24 h production23.7%16.9 – 30.6%
day-of roster recall, production + liveness31.3%22.6 – 40.1%
recovered-recall (the gain)+7.6 pts+4.8 – +10.4
fires kept “active” by the gate~177116 – 237
  of which genuinely IRWIN-active (continuity TP)~3522 – 47
  of which added-FP (no IRWIN-active fire within 10 nm at T)~14293 – 191
lever precision (continuity TP / kept), pooled over all slices19.7%per-slice 15.3 – 22.8%

Pooled across the 38 slices the gate keeps 1,321 genuinely-active fires and 5,395 added-FPs. So the lever’s recall gain is real and its confidence interval clears zero comfortably — but ~80% of what it keeps is not corroborated as active by IRWIN at that moment. That is the FireOut-lag cost the earlier snapshot could not see, now quantified.

Sensitivity — and the proof that condition (b) is load-bearing. Same 38 slices; one knob varied at a time. Added-FP is the mean per-slice cost:

gate configurationrecovered-recall (95% CI)lever precisionadded-FP / slice
operating: 10 nm, 72 h, both conditions+7.6 (+4.8, +10.4)19.7%~142
10 nm, 24 h, both+0.0 (0, 0)0
10 nm, 48 h, both (conservative knee)+4.6 (+2.6, +6.6)20.4%~72
10 nm, 96 h, both+9.9 (+6.7, +13.2)18.6%~211
10 nm, 168 h, both+16.3 (+11.6, +20.9)16.9%~386
5 nm, 72 h, both+7.1 (+3.8, +10.4)15.4%~101
10 nm, 72 h, condition (b) DROPPED (cond a only)+48.1 (+41.4, +54.7)14.3%~1,372

Reading the table: the 24 h window recovers nothing — by construction, a 24 h liveness window is the production roster, so the lever only ever acts in the 24→72 h gap. Widening the window buys recall almost linearly (48→72→96→168 h) at flat ~17–20% precision and steeply rising FP, so there is no window that makes this cheap; 48 h is the conservative knee (half the FP for two-thirds of the gain). Tightening the radius to 5 nm lowers precision (15.4%), so 10 nm is not the problem. The decisive row is the last one: dropping condition (b) multiplies added-FP roughly ten-fold (~142→~1,372 per slice; pooled 5,395→52,150) and drags precision to 14.3% — condition (b) removes ~90% of the FireOut-lag FP mass. This confirms entry 0019’s claim that the recent-sensor-touch condition, not the IRWIN listing, is what protects the roster — because IRWIN’s listing never expires in this feed.

The cutover PROPOSAL (mechanism described; recommendation is NO-GO — nothing is flipped). Were this ever promoted, the minimal reversible mechanism is: the serving query today is last_seen ≥ now−24h AND tier ≠ 'fp' AND confidence ≥ 0.10 over fused_fires. Add a default-OFF flag OLDGABE_LIVENESS_SURFACE (0 by default → query byte-for-byte unchanged). When set to 1, the time predicate becomes (last_seen ≥ now−24h) OR (fused_id ∈ keep_active set from the gated table, computed within the last 6 h), with those rows tagged a distinct tier='continuity' so the existing precision predicate (tier≠'fp', confidence≥0.10) and the aging logic still apply, the map/legend can style them apart from fresh confirmed detections, and they can never outlive the liveness window (aging still expires them at ≤72 h). The change is additive: no schema rollback, no data migration. The one-line reversal is OLDGABE_LIVENESS_SURFACE=0 — the serving query reverts to the exact current 24 h behavior and the continuity tier is simply never selected. Proposed operating point if pursued: the conservative 10 nm / 48 h / both-conditions knee (+4.6 recall pts at 20.4% precision, ~72 added-FP/slice). Measured cost at the current 72 h point: +7.6 recall pts for ~142 added-FP/slice at ~20% precision.

Go / no-go. NO-GO for public surfacing at any operating point measured. The binding fact is that this IRWIN feed carries no FireOut/containment timestamp, so the gate cannot retire dead fires and rides entirely on the recent-touch window; that caps surfaced-roster precision near 20% (added-FP ~80%). For a firefighter-facing roster whose entire value is precision (entries 0003 / 0007), a 5× roster inflation is the wrong trade. The recommendation is to keep the lever GATED as a shadow, do not flip. The only surfacing worth reconsidering later is a clearly-labeled, opt-in, default-OFF monitoring/continuity overlay kept strictly separate from the confirmed roster — and only after a genuine de-activation signal (a real FireOut/containment ingest, or a persistence/decay model) exists to power condition (a). Mark decides; this entry does not change any shipped number.

Reproducibility detail. Read-only replay against OLDGABE oldgabe.db (mode=ro URI + PRAGMA query_only=ON); the only writes were the hidden shadow table event_liveness_backtest_shadow (one row per day-slice), its canary_meta row (surface_allowed=0) and a DO_NOT_SURFACE_event_liveness_backtest_shadow marker — the production serving table fused_fires (14,265 rows) and the fusion/aging logic were untouched, and no serving module reads the shadow. Run under the host-health gate (serving unit active, else exit 75), resource-guarded (host busy marker honored, nice -n19, server-side timeout), on the host’s own storage. Populations: confirmed fires = event_ground_truth.confirmed=1 with a core-sensor touch (43,974), each with its min/max core-touch time per canonical_event_id. IRWIN incidents deduped by IrwinID, filtered to IncidentTypeCategory∈{WF,WFU} (3,696), gridded at 0.1° and matched by haversine; FireDiscoveryDateTime is epoch-ms, and FireOutDateTime/ContainmentDateTime/ControlDateTime are null in 0 of 992,511 IRWIN rows — hence the ingest-recency truth. Day-slices at noon UTC, 2026-06-01→2026-07-08 (38), with a 72 h lookback warm-up at the window start and a 2-day trailing buffer so “out” is observable. Truth-active(T)=disc−24h≤T≤last-ingest+24h; recovered-recall over the coverage-bounded IRWIN-active roster (incidents with ≥1 confirmed fire within 10 nm); added-FP = kept fire with no truth-active incident within radius at T. Aggregation is mean ± 1.96·SD/√n across slices; precision figures are pooled TP/(TP+FP). Only artifact off-host was a /tmp-class JSON on the host itself.

Claim status: SHADOW, GATED, MEASURED (retrospective backtest; nothing surfaced, nothing flipped). The operative claims are the operating-point curve (+7.6 recall pts at ~19.7% lever precision, 95% CIs over 38 slices) and the condition-(b) load-bearing result (dropping it multiplies added-FP ~10×). The deliverable is a cutover proposal with a NO-GO recommendation.

Honest bounds. (1) The dominant one: this IRWIN feed publishes no FireOut/containment time (0/992k rows), so “IRWIN FireOut lag” is really FireOut absence — condition (a) is inert as a de-activation signal, which is why the FP cost is high; a feed that carried FireOut, or a persistence/decay model, could change the verdict. (2) The ~19.7% lever precision is an IRWIN-anchored lower bound: some added-FP are real fires IRWIN under-reports or has not yet listed as active — but we cannot claim them, so the surfacing decision correctly uses the lower bound. (3) The 10 nm match radius can credit an adjacent fire in dense fire country (5 nm was tested and is worse, not better). (4) Survivorship: the lever only ever helps fires already confirmed once — it is continuity, not detection. (5) A single summer window (OLDGABE evidence starts 2026-05-29) with a sparse mid-June patch (several slices have a small active-incident denominator); the CIs already carry that variance, and off-season / multi-window re-measurement is deferred.

Literature alignment. Verdict: AGREEMENT. Polar sensors revisit a location only a few times per day [1][3] while geostationary FDC refreshes far more often [8], so a genuinely active fire routinely goes unre-imaged for many hours — the exact 24→72 h gap this lever targets, and why a recent-touch window is a sound activeness proxy. That US incident records lag and under-report status transitions — discovery, containment, and out times especially [6][14] — is precisely what we observe in the extreme (no FireOut at all), and is why condition (a) alone cannot carry the safeguard and condition (b) must.

What this does not claim: that the lever should be surfaced (it should not, at any operating point measured); that 20% lever precision is the fires’ true active-rate (it is an IRWIN-anchored lower bound); that 72 h is optimal (48 h is the cheaper knee); nor that this touches detection recall (entry 0017’s ~96% stands — this is roster continuity only). Next: the lever stays a gated shadow; revisit only if a real de-activation signal (FireOut/containment ingest or a persistence-decay model) becomes available to power condition (a), or if an explicitly-labeled opt-in monitoring overlay — separate from the confirmed roster — is desired, re-measured off-season before any flip.

References: [1] · [3] · [8] · [6] · [14]

entry 0026

Temporal dynamics is the first added channel that alone nearly matches production out-of-time — but it can’t be promoted, because the part that transfers is GOES persistence, which production already encodes

Date: 2026-07-10   Status: MEASURED NEGATIVE (out-of-time) — temporal dynamics is not a promote candidate, but it is the strongest single channel yet — refines entries 0018/0023

BLUF. Entries 0018 and 0023 killed the recovery re-ranker’s geography channel — raw lat/lon (0018) and physical terrain (0023) both failed the temporal-transport gate on the reporting-bias-free neutral truth. The one feature channel never tried is temporal dynamics: the shape of a candidate’s own detection time-series (FRP trajectory, GOES multi-frame persistence, diurnal signature, multi-overpass growth, duration) — physical and non-memorizable, and exactly what a static FRP threshold cannot see. We engineered 20 temporal features strictly from each event’s pre-decision observations and ran the identical gate. Two findings, one negative and one genuinely new. (1) The promote question is still no: recovery+temporal reaches neutral AUC 0.559 — nowhere near production (0.856), and only +0.004 AUC / +0.004 PR-AUC above recovery det-only (0.555). Adding temporal shape to the recovery model buys nothing out-of-time. (2) But temporal shape is not inert like geography was: temporal-dynamics alone reaches neutral AUC 0.840 — the strongest single added channel we have measured (geo-only was 0.72 raw / 0.58 physical), nearly matching production, and unlike geography it does not collapse from honest to neutral truth (0.852 → 0.840, transferring almost intact). Permutation importance shows why it can’t be promoted: the transferable signal is GOES multi-frame persistence (tf_n_goes, dominating by 5–10×) — the exact quantity production’s tier_and_conf already uses. Temporal dynamics re-derives production’s own persistence lever; it does not exceed it. The canary stays gated.

The split (identical to entries 0018/0023). The same CAUTION candidate set, the same 19 detection-only base features, the same honest training label, the same neutral evaluation label, the same model. Train on first_det in 06-27–07-02 (123,931 events), a 07-03 gap, test strictly-later 07-04–07-06 (38,549 events). Models train on the honest (IRWIN/perimeter/confirmed) truth and are evaluated out-of-time against the NEUTRAL truth — an independent VIIRS/MODIS detection (belonging to a different canonical event) within 5 km in a subsequent overpass (t0+3 h…t0+72 h), gridded 0.05°×6 h over CONUS, HMS/IRWIN-independent. Neutral base rate on the holdout is 3.35% (1,292 positives) — reproducing entries 0018/0023. The only change vs entry 0023 is the added channel: temporal-dynamics features instead of geography.

The temporal features, and the leakage cutoff (stated explicitly). For each candidate, t0 = first_det = MIN(detected_at) over its non-leaky sources. Temporal features are built only from that event’s own non-leaky observations with detected_at < t0 + 3 h — the pre-decision accumulation window [t0, t0+3h), which ends exactly where the neutral evaluation window [t0+3h, t0+72h] opens. The two windows are temporally disjoint by construction, so no temporal feature can incorporate the subsequent-overpass detection that defines the neutral label — nor any other detection in that window — and the code asserts max(pre-obs) < t0+3h per event. This is a stricter non-leakage standard than the 19 base features receive (those aggregate the full event span, as in 0018/0023), so the temporal channel is held to a higher bar than the baseline it is added to. IRWIN/HMS/SAR/S2 confirmation channels stay excluded from features, as in 0018/0023. The 20 features cover: FRP trajectory (slope per hour, first/last/delta/range/std/max); GOES persistence (frame count, temporal span, fraction-of-expected-frames, max inter-frame gap); diurnal signature (day&night present, night ratio); multi-overpass growth (distinct overpasses, 2h-vs-1h detection growth); and duration/recency (obs count, span, inter-obs interval mean/std, spatial spread).

Out-of-time on the NEUTRAL (reporting-bias-free) truth — the gate.

scorerAUCPR-AUCrecall@90%precall@80%p
production tier_and_conf0.8560.2620.000.00
recovery, det-only (19 feat)0.5550.1020.000.00
recovery + TEMPORAL dynamics (39 feat)0.5590.1060.000.00
temporal-dynamics-only (20 feat)0.8400.2200.000.00

The promote question fails on both counts — but the control tells a new story. Recovery+temporal (0.559) does not beat production (0.856): it is 0.30 AUC below. And it does not meaningfully beat recovery det-only (0.555): a +0.004 AUC / +0.004 PR-AUC nudge, inside the noise. So the tested scorer — adding temporal shape to the recovery re-ranker — is a clean negative, exactly like geography. What is different from 0018/0023 is the last row: temporal-dynamics alone reaches 0.840 AUC, only 0.016 short of production and dramatically above the geo-only controls (raw lat/lon 0.723; physical terrain 0.583). Temporal shape, unlike geography, carries real out-of-time neutral signal. Every scorer still scores 0 at the 80/90% precision operating points on this sparse 3.35%-base truth, so the discrimination comparison rests on AUC/PR-AUC.

The paradox, and its resolution: temporal-only 0.840 but recovery+temporal only 0.559. How can a channel that scores 0.840 alone add nothing (+0.004) when bolted onto det-only? Because every model is trained on the honest (HMS-inclusive, reporting-biased) label and then scored on the neutral truth. The detection features fit the biased honest label slightly better (det-only honest AUC 0.877 vs temporal-only 0.852) but their honest-fit ranking transfers poorly to the unbiased neutral truth (0.877 → 0.555, a 0.32 collapse). The temporal features fit honest truth marginally worse, but the honest-fit they find is dominated by GOES persistence — a physical quantity aligned with what the neutral polar truth actually rewards — so it transfers almost intact (0.852 → 0.840). When both feature blocks are present, the detection features win the internal honest-fit competition and pull the combined model back toward the non-transferring solution; the transferable persistence signal is masked. The clean transferable signal only surfaces when temporal features are used alone.

What carries the temporal signal — permutation importance on the neutral truth (the gate). Permuting each temporal feature in the combined model and measuring the drop in neutral AUC:

temporal featureΔneutral-AUC when permuted
tf_n_goes (GOES multi-frame count, pre-decision)+0.0268 ±0.0022
tf_spread_km (pre-decision spatial spread)+0.0049 ±0.0024
tf_std_interobs_min (inter-obs interval std)+0.0016 ±0.0005
tf_goes_span_min / tf_goes_frac_present / tf_frp_slope_per_h≤+0.0005 (negligible)
FRP-shape + diurnal + growth features (13 of 20)≤0 (several actively hurt: tf_night_ratio −0.043, tf_growth_2h_1h −0.013)

One feature — tf_n_goes, the count of GOES frames in the first 3 h — carries the temporal signal, by 5–10× over everything else. That is persistence: a real fire lights up many consecutive geostationary frames; a transient false alarm flickers a few. And it is precisely the quantity production’s tier_and_conf rule already uses (its n_goes ≥ 3 persistence clause). The elaborate FRP-trajectory, diurnal, and growth features — the parts a static threshold genuinely cannot see — add nothing or actively hurt out-of-time. Temporal dynamics, stripped to what transfers, is GOES persistence, and production is already a persistence rule.

For contrast — the same holdout scored against the HONEST (HMS-inclusive) truth.

scorer (vs honest truth)AUCPR-AUCrecall@80%p
production tier_and_conf0.8840.4850.072
recovery, det-only0.8770.6530.530
recovery + TEMPORAL dynamics0.8790.6540.537
temporal-dynamics-only0.8520.5330.143

On the honest truth, temporal dynamics adds a trivial +0.002 AUC to det-only — and here is the tell that separates it from geography: raw lat/lon added +0.068 AUC on honest truth (0018) by memorizing the reporting surface, then collapsed on neutral truth. Temporal dynamics adds almost nothing on honest truth (it cannot memorize the reporting surface either) yet nearly matches production on neutral truth — the opposite honest-vs-neutral fingerprint from geography. Temporal shape is honest and physically transferable; it just is not orthogonal to the production baseline.

Reproducibility detail. Read-only on the production DB (mode=ro + PRAGMA query_only=ON), no production writes, health-gated on the host and resource-guarded (private serialization marker while still honoring the hard host busy marker; SIGTERM-safe; the only artifact written is a /tmp JSON). Candidate set, 19 detection-only features, honest label, split, and model are byte-for-byte the entry-0018/0023 harness: candidates = event_corroboration_tier where tier='CAUTION' joined to non-leaky fire_event_evidence (IRWIN/HMS/SAR/S2 confirmation channels excluded from features); model = HistGradientBoostingClassifier (max_iter 400, lr 0.06, 31 leaves, min_leaf 20, l2 1.0, class_weight balanced, early stopping), trained on 06-27–07-02, scored on 07-04–07-06 (07-03 gap). Training label = honest truth (confirmed OR an IRWIN fire-day / perimeter within 5 km & ±14 d). Neutral evaluation label = an independent VIIRS/MODIS detection from a different canonical event within 5 km in a subsequent overpass (t0+3 h…t0+72 h), gridded 0.05°×6 h over CONUS. Production baseline = tier_and_conf reconstructed per event from its full canonicalized source set / GOES-frame count / max FRP. Temporal features (20): FRP trajectory (slope h⁻¹, first/last/delta/range/std/max), GOES persistence (frame count, span, fraction-of-expected-frames at ~10 min cadence, max inter-frame gap), diurnal signature (day&night present, night ratio), multi-overpass growth (distinct overpasses at >30 min separation, 2h-vs-1h detection growth), and duration (obs count, span, inter-obs interval mean/std, max pairwise spatial spread) — all computed on the strict pre-decision subset detected_at < t0+3h (asserted per event). Permutation importance via sklearn.inspection.permutation_importance (scoring=roc_auc, 8 repeats) on the neutral test truth. Metrics via roc_auc_score, average_precision_score, and precision_recall_curve operating points. The hidden canary table event_caution_recovered_geo is unchanged and remains gated (surface_allowed=0); nothing was surfaced.

Harness reproduction (matches entries 0018/0023). This run reproduces the shared controls exactly: 123,931 train / 38,549 test events, neutral base rate 3.35% (1,292 positives), production neutral AUC 0.856 / PR-AUC 0.262, and the full honest-truth panel (production 0.884/0.485; det-only 0.877/0.653). As flagged in entry 0023’s reconstruction note, the honest-trained recovery model’s neutral AUC reads near-chance under strict independence (det-only 0.555 here, consistent with 0023’s 0.534/0.552 band, versus 0.837 in entry 0018’s one-off builder). Because the promote decision rests on the within-run deltas (recovery+temporal vs production and vs det-only, measured on one fixed truth in one run), it is robust to that reconstruction sensitivity.

Claim status: MEASURED NEGATIVE, out-of-time. Temporal-dynamics features are not a promote candidate: under strict train-early/test-late transport, recovery+temporal does not beat production on the reporting-bias-free truth (0.559 vs 0.856) and does not meaningfully beat detection-only recovery (+0.004 AUC / +0.004 PR-AUC). No shadow build is recommended. The canary stays gated (surface_allowed=0). This refines entries 0018/0023: temporal shape is the first added channel that alone nearly matches production out-of-time (0.840), but its transferable content is GOES multi-frame persistence — already encoded in the production rule — so it adds no orthogonal, promotable value.

Hard bound (summer-only + fixed pre-decision window). All data is summer 2026, so this is a train-earlier / test-later split within summer (days apart, not seasons); a true off-season validation is impossible until winter data exists and remains deferred. The pre-decision accumulation window is fixed at 3 h (chosen so it ends exactly where the neutral window opens, guaranteeing disjointness); a longer accumulation window would enrich the persistence/trajectory features but also delay the decision, and is deferred. The neutral base rate (3.35%, 1,292 positives) is sparse enough that PR-AUC and the extreme precision operating points are noisy — all four scorers read 0 at 80/90%p — so the comparison rests on AUC/PR-AUC discrimination.

Literature alignment. Verdict: AGREEMENT. Multi-frame temporal persistence is the backbone of geostationary fire detection — the GOES-R ABI fire algorithm and the GOES Early Fire Detection algorithm both exploit frame-to-frame persistence and temporal behaviour [8][13], validated against polar sensors [3]; the diurnal fire cycle [15] and individual-fire growth/duration tracking [16] are standard temporal descriptors. Our result agrees on the physics — the temporal signal that transfers is persistence — and adds the operational finding that a static family/FRP rule which already counts GOES frames (n_goes ≥ 3) has already captured that transferable persistence, so re-deriving it as an ML feature channel yields no out-of-time gain over the baseline. The out-of-time discipline [4] is what distinguishes “temporal shape looks predictive” (true) from “temporal shape adds promotable value over production” (false, here).

What this does not claim: that temporal dynamics is irrelevant — it is the strongest single added channel we have measured (0.840 neutral AUC alone, far above any geographic prior) and it transfers honest→neutral almost intact; that the recovery program is dead — detection-only recovery still carries honest-truth signal (0.877 AUC / 0.653 PR-AUC); nor that no temporal construction could ever beat production — only that this rich 20-feature pre-decision temporal set does not, because its transferable content collapses onto GOES frame-count, which production already uses. Next: the honest open question is whether any temporal shape beyond raw frame-count — cadence regularity, steady-vs-flicker persistence quality — is orthogonal to n_goes; we tested the obvious candidates (tf_goes_frac_present, tf_goes_max_gap_min, tf_std_interobs_min) and their neutral-AUC importance is negligible, so the burden of proof is on a materially richer persistence-quality feature. Until then, the production FRP/persistence rule remains the scorer to beat — and it already sees the part of temporal shape that matters.

The gate is doing its job. This is the fifth recovery/gate candidate the temporal-transport check has correctly stopped — the Dozier multi-feature gate, the Dozier early-cue tier, recovery+raw-geo, recovery+physical-geo, and now recovery+temporal-dynamics. This time the gate stopped a candidate whose control (temporal-only, 0.840) came the closest yet to production — and the permutation-importance readout explains precisely why the near-miss is not a promotion: the signal is already in the baseline.

References: [8] · [13] · [3] · [15] · [16] · [4]

entry 0027

Certifying the surfaced false-positive rate with independent physical evidence: a stratified, adjudicated fire-vs-non-fire corpus — 0022’s 19.7% holds at 20.7%, but only a third of detections can be physically certified and the rest still rest on heuristics

Date: 2026-07-10   Status: defensible (measured; read-only on production; stratified Neyman estimator; stronger independent-physical evidence than 0022; honest certified-vs-heuristic split carried) — confirms & hardens entry 0022

The framing. Entry 0022 gave the program its first true surfaced false-positive rate — 19.7% — but was honest that 298 of 1,985 detections (the “ambiguous middle”) were adjudicated only by light heuristics, so the number it could actually stand behind was the wide bracket [12.2%, 27.3%]. This entry attacks that residual with the strongest independent physical evidence we can marshal on-box: a stratified sample of the surfaced set, deliberately over-weighting where FP concentrates and uncertainty is highest, adjudicated against IRWIN/WFIGS incidents, ≥2-independent-sensor-family corroboration, Sentinel-2 SWIR / Sentinel-1 SAR burn evidence, a new independent thermal-facility registry (the WRI Global Power Plant Database, 3,839 US combustion plants — a source 0022 did not use), and a 30-day fixed-cell-vs-spreading persistence discriminator. The corpus is persisted as a hidden shadow table — the training seed for a learned false-positive filter.

BLUF. Over the trailing-window surfaced set (N = 1,476 fused fires today; live serving filter last_seen≥now−24h AND tier≠'fp' AND confidence≥0.10), a stratified sample of n = 454 re-weighted to the population by a Neyman estimator puts the true surfaced false-positive rate at 20.7% (95% sampling CI [16.9%, 24.4%]; ambiguous-band bracket [13.9%, 27.4%]). That is a clean independent confirmation of entry 0022’s 19.7% — the point moved +1.0 point, inside noise — and the residual ambiguous fraction fell from 0022’s 15.0% to 13.2%. The tier structure is unchanged and stark: confirmed tier is ~0% FP, probable tier is 26.9%. But the sharper, more honest finding is what happens when we trust only certified physical evidence and send every heuristic lean back to “ambiguous”: the estimate rises to 32.4% with a bracket of [2.2%, 62.6%], because only 33.5% of surfaced detections can be physically certified either way — the 20.7% point’s tightness leans on a heuristic multi-day-persistence “fire” class that is 40% of the sample and cannot be certified without imagery or a ground visit. The bottom line: 0022’s number is robust and now independently reproduced, and the new power-plant registry certified 21 non-fire detections 0022’s catalogs missed on the surfaced set — but the stronger evidence tightens the residual only modestly; closing it the rest of the way requires a human-reviewed gold subset, not more automation. Fully read-only on production; the corpus is a gated hidden shadow; no shipped number changes.

The sampling design. The surfaced population is partitioned into tier × sensor-family-mix strata, and the sample is allocated Neyman-style — heaviest where the false-positive burden and its variance are largest (from 0022: lone-VIIRS, HMS-only, and the oil-and-gas-basin slice). Small strata are near-censused; the large low-FP strata are sampled lightly. Every stratum is re-weighted to its true population size in the estimator, with a finite-population correction.

stratum (tier · family-mix)population Nhsampled nhsampling fraction
probable · VIIRS-only17713073.4%
probable · HMS-only2389037.8%
probable · HMS+VIIRS2837024.7%
probable · has-GOES4035513.6%
probable · MODIS-only262076.9%
probable · other55100%
confirmed · has-GOES2283515.4%
confirmed · multi-indep582034.5%
confirmed · HMS+VIIRS441534.1%
confirmed · MODIS-only66100%
confirmed · other88100%
total1,47645430.8%

How each detection is adjudicated — a precedence stack of independent physical evidence. (1) Certified fire if within 10 nm of an IRWIN/WFIGS incident — and we verified the incident feed is entirely fire-type (93.7% WF wildfire, 4.5% RX prescribed burn, 1.8% CX complex; no non-fire all-hazards categories), so an incident match certifies a real thermal fire, not a false positive; else (2) certified non-fire if it sits on a static industrial catalog — fp_polygons (OSM refinery / gas-flare / persistence) or the new WRI power-plant registry (US combustion plants, 2 km); else (3) certified fire if ≥2 independent sensor families corroborate ({VIIRS, MODIS, GOES, S2, S1}, HMS excluded as analyst-derived); else (4) certified fire if independent S2-SWIR / S1-SAR burn/hotspot evidence sits within 10 nm; else (5) certified non-fire if the location shows fixed-cell persistence — ≥5 distinct detection-days over a 30-day window with <1.5 km spatial extent and never an incident (a stationary industrial source); else heuristic leans: fire if multi-day persistence shows spatial growth (≥3 km extent) or an energetic isolated polar detection (FRP ≥ 10 MW away from any catalog); non-fire if inside an O&G basin adjacent to a flare/refinery cluster, or a weak ephemeral hit with no polar corroboration in 30 days; else ambiguous.

label bucketcount (of 454)sharedominant evidence
CERTIFIED FIRE12828.2%IRWIN/WFIGS incident 85 · ≥2 indep families 36 · S2/S1 burn 7
CERTIFIED NON-FIRE245.3%power-plant registry 21 · fixed-cell persistence 3
heuristic fire (lean)20244.5%multi-day persistence w/ growth 183 · energetic polar 19
heuristic non-fire (lean)408.8%weak ephemeral 39 · O&G-basin proximity 1
GENUINELY AMBIGUOUS6013.2%no certified or leaning evidence

The certified false-positive rate (stratified Neyman, re-weighted to population). A detection contributes 1 if non-fire, 0 if fire, ½ if ambiguous (point); the ambiguous band is swept entirely to fire (low) or non-fire (high) for the epistemic bracket; the CI is the stratified sampling error with finite-population correction.

stratumNntrue FP rate (point)sampling CI-95ambiguous bracket
ALL surfaced1,47645420.7%[16.9%, 24.4%][13.9%, 27.4%]
tier = confirmed34484~0.1%[0.1%, 0.1%][0.0%, 0.3%]
tier = probable1,13237026.9%[22.0%, 31.8%][18.1%, 35.7%]

The FP is a single-sensor-family artifact — reproducing 0022 independently. Split by surfacing sensor mix, the burden concentrates in lone-polar and analyst-only detections; every combination adding a second independent family collapses it:

source groupNntrue FP rate (point)sampling CI-95
HMS-only (analyst-derived)2389033.9%[26.1%, 41.6%]
VIIRS-only (single family)17713025.0%[21.1%, 28.9%]
has-GOES (geostationary)6319020.9%[13.5%, 28.3%]
HMS+VIIRS3278514.2%[7.7%, 20.8%]
MODIS-only32264.1%[0.2%, 7.9%]
multi-indep (≥2 families)58200.0%[0.0%, 0.0%]

The oil-and-gas-basin cross-cut (within 15 km of a flare/refinery cluster; n = 62 sampled) reads 15.3% non-fire — lower than lone-VIIRS because many basin detections sit on the industrial catalog and are certified non-fire outright, while genuine fires also occur there. The residual error still lives exactly where 0022 said it did: a probable-tier, lone-polar or analyst-only detection in an oil-and-gas basin.

The honest part — how much of this is actually certified. Two estimators of the same set, one trusting the heuristic leans, one refusing them:

estimatorFP pointbracketwhat it means
point (heuristics trusted)20.7%[13.9%, 27.4%]best estimate; confirms 0022’s 19.7%
certified-only (heuristics → ambiguous)32.4%[2.2%, 62.6%]what independent physical evidence alone can prove — only 33.5% of detections

The wide certified-only bracket is the point of the entry: the sharp 20.7% depends on a large heuristic fire class (multi-day persistence with growth, 40% of the sample) that we cannot physically certify without imagery or ground truth. Because that class leans toward fire, if it is wrong it can only push true FP up — which is why the honest point sits near the top of 0022’s bracket and the certified-only estimate is higher, not lower.

The 0020/0022 decomposition, reproduced out-of-sample.

component of the surfaced setentry 0022entry 0028 (this)interpretation
IRWIN/WFIGS-listed incident23.7%22.2%the incident-list floor
unlisted REAL fire56.6%50.4%real fire the incident lists never carried
genuine NON-FIRE false positive19.7%20.7%the true surfaced FP rate

Two independent adjudications, a day apart, on different sampled sets, land within ~1–6 points on every component — the decomposition is stable, not an artifact of either method.

Reproducibility detail. Read-only on all production tables (mode=ro, PRAGMA query_only); the only write is the program’s own hidden shadow table. Resource-guarded under the host-health gate (exit 75 if the serving service is inactive), the host hard busy-marker and a private serialization marker, server-side timeout + nice -n19, thermal watchdog, killed by PID. Surfaced set = the exact live serving query on fused_fires (N = 1,476 at run time). Strata = tier × family-mix parsed from the fused sources string into {VIIRS, MODIS, GOES, S2, S1}; HMS/CAM excluded from the independence count. Allocation: fixed per-stratum sample sizes over-weighting probable-VIIRS / HMS-only, seeded RNG (reproducible). Registries: fp_polygons (51,474 OSM refinery + 7,457 OSM gas-flare + 9,144 dozier- + 91 polar-persistence) and flaring_mask_shadow (660), each at its own radius; the WRI Global Power Plant Database filtered to US combustion fuels (3,839 plants, 2 km) as an independent thermal-facility source. Incident truth = wfigs_truth WF incidents + IRWIN evidence (source='IRWIN') over a 30-day window, 10 nm haversine; category composition audited (93.7% WF / 4.5% RX / 1.8% CX). Persistence = distinct detection-days and bounding spatial extent of VIIRS/MODIS evidence within 10 nm over 30 days (single indexed pass per source; ~6.8M rows scanned, matched-cell routing only). Estimator: stratified P̂ = Σh(Nh/N)·p̂h; variance Σ(Nh/N)²(1−nh/Nh)p̂h(1−p̂h)/(nh−1) with finite-population correction; ambiguous 0/½/1 for bracket/point. Corpus: fp_label_corpus_shadow (454 rows: fused id, tier, family-mix, source-set, lat/lon, label, evidence confidence & basis, per-stratum sizes), gated in canary_meta (surface_allowed=0, DO_NOT_SURFACE), verified not referenced by any serving/daemon code. Every figure counted from the live production DB at run time.

Claim status: MEASURED, read-only, stratified-estimator, honest certified-vs-heuristic split. This entry independently reproduces and hardens entry 0022’s surfaced-FP measurement with stronger physical evidence and a proper sampling estimator, and persists a reusable label corpus; it does not change fusion, tiers, the confidence floor, the map, the API, the FP catalog, or any shipped number.

Honest bounds. (1) Only a third certifies. Just 33.5% of detections carry certified independent physical evidence; the 20.7% point’s tightness rests on a heuristic persistence-fire class (40% of the sample) — the certified-only estimator ([2.2%, 62.6%]) is the honest expression of that, and it is wide. (2) The persistence “growth” rule is the weakest lever: a 3 km multi-day extent is read as a spreading fire, but two adjacent uncatalogued flares could mimic it; because the rule leans toward fire it can only push true FP upward. (3) Sampling error is real — this is a 454-of-1,476 sample, not 0022’s near-census, so the by-source CIs on lightly-sampled strata (has-GOES, HMS+VIIRS) are wide; the overall CI is nonetheless tighter than 0022’s epistemic bracket. (4) Single summer window (~2026-07); re-running on a later split shifts counts, not structure. (5) The power-plant and OSM registries are themselves incomplete, so certified-non-fire is a floor on non-fire, not a ceiling.

Literature alignment. Verdict: AGREEMENT. That incident lists (IRWIN/FPA-FOD) are materially incomplete for sub-incident thermal is well documented [6], so a precision figure against them understates true precision — the 50.4-point unlisted-real correction here matches 0022. That residual false positives concentrate in the sharpest polar sensor over persistent industrial heat is the canonical VIIRS-Nightfire flaring result [11], consistent with VIIRS 375 m sensitivity to small low-FRP sources [1]; and that an independent second sensor family sharply raises precision is the standard multi-sensor-confirmation finding [3]. The stratified Neyman estimator with finite-population correction is textbook survey sampling [17]; the independent facility registry is the WRI Global Power Plant Database [18].

What this does not claim: that 20.7% is exact (the honest sampling CI is [16.9%, 24.4%] and the certified-only bracket is much wider), that the heuristic persistence-fire labels are individually proven fires, that the power-plant/OSM registries are complete, or that the split transports to winter. Recommendation: informative, and it unblocks the next lever — no cutover. The measurement confirms the shipped map is far more correct than the incident-list floor implies and that its residual error is a nameable, already-partly-mitigated class (persistent industrial heat, concentrated in probable-tier lone-polar detections). The proper next certification step is a small human-reviewed gold subset over the 60 genuinely-ambiguous plus the 183 persistence-fire leans — the only way to collapse the certified-only bracket. Mark decides.

Unlocked next step (flagged, not built here). The persisted 454-row corpus — certified fire / certified non-fire / adjudicated leans, each with lat/lon, family-mix, FRP, persistence geometry and catalog distances — is the training seed for a learned real-bogus false-positive filter: a small classifier trained on the probable-tier lone-VIIRS slice (where FP lives) to separate industrial persistent heat from genuine early fire, then held to the same out-of-time / held-out-region transport gate the recovery re-ranker faced in entries 0018/0023/0027. That is the follow-on entry.

References: [1] · [3] · [6] · [11] · [17] · [18]

entry 0028

A power-plant / industrial-combustion false-positive mask, built pre-cutoff and transport-gated on a held-out later window — masks 68 combustion plants (7 net-new beyond the refinery/flare masks) and hides zero real later fires at 1.5 km, but a landfill fire 1.99 km from a waste-to-energy plant shows why 2.0 km is one incident too wide — 0029

Date: 2026-07-10   Status: defensible (measured; read-only on production; strict pre-cutoff build + held-out out-of-time truth; fire-protection-first; hidden shadow, no cutover) — extends the entry-0021 flaring-mask discipline to combustion power plants; closes the uncaught FP class named in entry 0028

The framing. Entry 0028 certified the surfaced non-fire detections against an independent thermal-facility registry — the WRI Global Power Plant Database — and found that the certified-non-fire detections it could name all landed on combustion power plants: an industrial-heat false-positive class that the shipped gas-flaring/refinery masks (osm_refinery, osm_gas_flare, flaring_nightfire_persistence) do not cover. Coal / gas / oil / biomass / waste-to-energy plants run persistent hot stacks and flares that VIIRS 375 m and GOES sub-pixel routinely flag as fire. This entry builds a mask for them with exactly the discipline the flaring mask shipped under — a small static polygon per plant, gated on evidence that OLDGABE actually generates persistent detections there — and, because a real wildfire can start next to a power plant, subjects it to a strict temporal-transport gate: the mask is built from data strictly before a cutoff and evaluated on the held-out later window for the one number that matters, how many real later fires it would hide.

BLUF. From 3,719 US combustion plants (WRI GPPD, fuel ∈ {Coal, Gas, Oil, Petcoke, Cogeneration, Biomass, Waste}; solar/wind/hydro/nuclear/storage excluded as non-combustion), intersecting each with OLDGABE’s own persistent detections over the pre-cutoff window (train < 2026-06-21; VIIRS/MODIS/GOES thermal evidence), requiring ≥5 distinct detection-days in a 1.5 km cell that is single-sensor-family, spatially static (≤1.5 km extent), and ≥5 km from any pre-cutoff IRWIN/WFIGS incident, yields a mask of 68 plants. Only 7 are net-new beyond the existing fp_polygons masks (the other 61 already sit under a refinery/flare polygon); the 7 are landfill-gas / waste-to-energy and standalone gas+cogen sites the OSM catalogs miss. On the held-out later window the mask would tier 8,497 net-new persistent thermal detections (152 net-new production-surfaced events) as fp — and it hides zero real IRWIN/WFIGS fires: the nearest actual held-out incident to any masked plant is 1.99 km, outside the 1.5 km radius. Widen the radius to 2.0 km and that single incident — a genuine landfill fire 1.99 km from the Kiefer Landfill waste-to-energy site — falls inside, so 2.0 km masks one real fire and 1.5 km masks none. 1.5 km is the safe radius. The mask is persisted as a hidden shadow table (surface_allowed=0, DO_NOT_SURFACE, not read by serving); production fusion, tiers, fused_fires and the map are untouched. No cutover.

A necessary correction to the truth signal. The obvious way to ask “is there a real fire at this plant later?” — look at fire_events near the plant with status='confirmed' or a non-null irwin_id — is wrong here, and the reason is itself the finding. At the flagged plants the production pipeline auto-confirms the plant’s own persistent signature and cross-links it to a distant IRWIN incident id (the same id repeated day after day). Plains End (a gas peaker in Colorado) generated 21 “confirmed” test-window events (confidence up to 0.9) carrying a borrowed IRWIN id whose actual incident sits 12.7 km away; Hidden Hollow (waste-to-energy, Idaho) did the same with an incident 10.4 km away. Those labels are not evidence of a fire at the plant — they are the industrial false positive we are targeting, wearing a borrowed badge. The truth-sparing test therefore uses actual IRWIN incident coordinates (and WFIGS points), never the fire_events cross-link. Measured against real incident geometry, every masked plant’s nearest held-out fire is ≥1.99 km.

The transport gate. Build strictly on pre-cutoff data; evaluate on the held-out later window. “Net-new” counts only detections/plants not already covered by an existing fp_polygons polygon (no double-counting the flare/refinery masks). “Real incidents masked” = masked plants with an actual post-cutoff IRWIN/WFIGS incident point inside the radius — the pass/fail. “Growth-caveat” = masked plants whose own detections spread >1.5 km across the later window (disclosed, not a fire unless an incident corroborates).

radius × persistenceplants maskednet-new (beyond existing masks)net-new thermal dets suppressed (held-out)net-new surfaced events suppressedreal IRWIN/WFIGS fires maskedgrowth-caveat plants
1.5 km, ≥3 days1102914,804255013
1.5 km, ≥5 days (chosen)6878,49715205
1.5 km, ≥7 days4957,19012001
2.0 km, ≥3 days1003513,339230114
2.0 km, ≥5 days6496,51112418
2.0 km, ≥7 days4963,8367704

The single real-fire mask at 2.0 km is instructive: it is a landfill fire 1.99 km from a waste-to-energy plant — the exact case where a combustion facility and a genuine fire coexist. The 1.5 km radius spares it at every persistence threshold. The growth-caveat plants at 1.5 km/≥5 (5 of them: Delray, ExxonMobil Baytown, Gregory, Port Arthur, Valero Corpus Christi) are all Gulf-Coast refinery/gas complexes whose multi-unit footprint spans several VIIRS pixels — none has a real incident within range, and all but one already sit under osm_refinery, so they are excluded from the net-new set anyway. The 7 net-new plants (Bowerman Power LFG, Delta Energy Center, Higgins Generating Station, Lake Charles cogen, Pine Tree Acres landfill-gas, TVA Southaven combined-cycle) are compact (≤0.72 km train extent), single-family, 5–11 persistent days, and their nearest real held-out incident is ≥4.3 km or none.

Reproducibility detail. Health-gated on the host service (exit 75 if inactive), yields to the hard host busy marker, wrapped in the host load-guard with a private serialization marker + server-side timeout+nice -n19, SIGTERM-clean, killed by PID. Reads are PRAGMA query_only/mode=ro on every production table; the only write is a new hidden shadow table powerplant_mask_shadow (surface_allowed=0) — no production table is touched. Registry = WRI GPPD, country='USA', primary_fuel ∈ the seven combustion fuels (3,719 plants). Persistence evidence = COUNT(DISTINCT detected_at[:10]) of fire_event_evidence rows with source ∈ {VIIRS-NPP/N20/N21, MODIS, ABI-Dozier-Subpixel-G19/G18, GOES19/18-ABI} within radius R of the plant, split at detected_at < 2026-06-21T00:00Z (train) vs ≥ (held-out test). Sensor-family independence collapses VIIRS-NPP/N20/N21→VIIRS, ABI/GOES→GOES; a masked cell must be single independent family in train. Static = bounding-box extent of train detections ≤1.5 km. Fire-protection guards: withhold if ≤5 km from any pre-cutoff IRWIN evidence point or WFIGS incident, if ≥2 independent families in train, or if train extent >1.5 km. Truth = actual IRWIN incident coordinates (fire_event_evidence source='IRWIN', held-out post-cutoff) + WFIGS points — deliberately not fire_events.irwin_id/status, which the pipeline contaminates by cross-linking distant incident ids onto persistent plant signatures. Net-new = plant not inside any existing fp_polygons polygon at its own radius. Every figure counted from the live production DB at run time; the shadow table is reversible (a single DROP).

Claim status: MEASURED, read-only on production, strict pre-cutoff build with held-out out-of-time evaluation, fire-protection-first. This entry builds and validates a combustion-power-plant FP-mask candidate and persists it as a hidden shadow; it does not change fusion, tiers, the confidence floor, the map, the API, the FP catalog, or any shipped number.

Honest bounds. (1) Suppression is not condemnation. Consistent with entries 0022/0028, IRWIN incompleteness means a suppressed detection cannot be proven false; the affirmative non-fire evidence here is the power-plant registry entry plus multi-day, static, single-family persistence — the mask removes persistent industrial-combustion thermal sources, it does not adjudicate individual detections as false. (2) Net-new is modest. 61 of 68 masked plants already sit under the refinery/flare masks; the genuinely new capability is 7 plants (mostly landfill-gas / waste-to-energy) and ~8.5k held-out detections — a small, clean increment, not a large lever. (3) Single summer window (polar evidence spans ~2026-05..07); the train/test split is within-season, so the gate proves out-of-time transport, not out-of-season — winter behaviour is untested. (4) The registry is incomplete, so certified-industrial is a floor; and the 1.99 km landfill case is the standing reminder that combustion sites and real fire coexist — the radius is chosen to spare it. (5) The growth-caveat plants are disclosed rather than auto-masked precisely because a spreading signature is the one thing that could be a real fire; none here is, but the rule stays conservative.

Literature alignment. Verdict: AGREEMENT. Persistent industrial hot sources (flares, power-plant stacks) as a dominant commission-error class in polar active-fire products is the canonical VIIRS-Nightfire result [11] and is documented in the Suomi-NPP VIIRS active-fire product evaluation [19], consistent with VIIRS 375 m sensitivity to small low-FRP sources [1]; the same static/industrial commission errors are reported for geostationary GOES-16 ABI active fire [20], which is why both polar and GOES thermal families are gated here. That an independent facility layer is the right way to name and remove them — rather than a lower confidence threshold — follows the WRI Global Power Plant Database [18], and that incident lists understate true fire presence (so suppression must not be scored as pure FP removal) is the FPA-FOD completeness finding [6].

What this does not claim: that the 8,497 suppressed detections are each proven false (they are persistent industrial-combustion sources by registry + persistence, not ground-verified), that the mask transports to winter, that the WRI registry is complete, or that fire_events.irwin_id/status can be trusted as truth near persistent industrial heat (it demonstrably cannot). Recommendation: cutover-candidate at 1.5 km, scoped to the 7 net-new plants — but shadow-only until Mark approves. The gate passes clean (zero real later fires masked at 1.5 km across ≥3/≥5/≥7-day thresholds), the guards are fire-protection-first, and the change is small and fully reversible. The minimal cutover mirrors the shipped flaring mask exactly: an additive INSERT INTO fp_polygons(source,tag,lat,lon,radius_km,metadata) SELECT 'powerplant_combustion_persistence', name, lat, lon, 1.5, provenance FROM powerplant_mask_shadow WHERE net_new=1; the reverse is one DELETE FROM fp_polygons WHERE source='powerplant_combustion_persistence'; an optional weekly refresh daemon would re-derive persistence exactly like the flaring refresher. Left shadow/default-OFF — not flipped. Mark decides.

References: [1] · [6] · [11] · [18] · [19] · [20]

entry 0029

A short-horizon fire-spread nowcast is input-feasible but shows no skill yet — every physical driver (RAWS wind, ETOPO slope, dead-fuel moisture) is on-box and queryable at active fires, yet a wind-driven downwind+upslope growth model scores at the 90° random-direction null (mean 88.6°, mean-resultant R=0.02, Rayleigh p=0.88) while the fire’s own motion predicts its direction (R=0.44); the two blockers are a live-only wind snapshot and 0.01°-quantized growth truth — 0030

Date: 2026-07-11   Status: defensible (measured; read-only on production; honest baselines; research/prototype only, no cutover, nothing surfaced) — opens a new capability class (spread nowcast) distinct from detection; reports a negative-for-the-simple-model result with a diagnosed path forward

The framing. OLDGABE detects fires. The re-ranker work (entries 0018/0023) showed that fuel/terrain/climatology priors do not help the detection decision — but those same covariates are the physically correct inputs for a different problem: spread. A 1–6 h direction-and-growth nowcast would turn “there is a fire here” into decision-support — “it is running NE at roughly X.” This entry does the honest feasibility-plus-prototype work: inventory the real inputs on-box, build the simplest defensible physical model (wind-driven elliptical growth with an upslope bias), and validate it against observed fire growth with a baseline so the skill number means something. The result is a clean negative for the simple current-wind model, with the two fixable reasons named.

BLUF. Every physical driver a spread nowcast needs is already on-box and queryable at fire locations: 2,078 RAWS stations (all with wind speed/direction and dead-fuel-moisture, refreshed hourly), a coarse-DEM terrain sample (ETOPO2022 60″, median slope 17.9 m/km at the fire set), and the fused active-fire track itself. So the inputs are feasible. But the simple physical model has no measured skill. On 250 recently-active confirmed/probable fused fires (each with an ≥8-detection, ≥3 h multi-sensor track), a downwind spread bearing (wind-direction + 180°) lands at the 90° random-direction null — mean angular error 88.6°, mean-resultant length R = 0.02, Rayleigh p = 0.88 (no concentration in either wind convention, since R is sign-independent). Adding an upslope bias makes it worse (93.2°). A wind×dryness rate index does not predict observed footprint growth (Spearman −0.20 vs. a predict-median baseline of 0). Yet the target is genuinely predictable: a persistence baseline — the fire’s own earlier centroid motion — predicts its later direction well (mean error 55.5°, R = 0.44, Rayleigh p < 10−300). The two blockers are diagnosed: (1) wind is a live snapshot only — there is no time-archived wind co-registered to historical detections, and the median fire is 27 km from its nearest RAWS, so the wind vector is temporally and spatially mismatched to the growth window; (2) the only on-box growth truth is detection-footprint expansion at 0.01° (≈1.1 km) member-coordinate quantization, GOES-dominated, with median observed displacement 0.44 km — below one pixel, so the growth vector is mostly noise. Verdict: feasible in inputs, not-yet-skillful in output. Nothing was surfaced; no production table was touched.

The input inventory. The point of a feasibility pass is to state plainly what exists, what is a proxy, and what is deferred.

spread driveron-box sourcestatusnote
active-fire front / current trackfused_fires (13,822) + parsed multi-sensor member trackpresentGOES/VIIRS/MODIS/HMS detections, but coords rounded to 0.01°
wind (dominant spread driver)weather_stations network=RAWS (2,078; wind dir+speed+gust)present, live snapshothourly refresh, no historical archive; median 27 km to nearest station
gridded model wind (HRRR/GFS)weather_cellsempty (0 rows)schema exists; not ingested — deferred
fuel moisture (dryness)RAWS fuel_moisture_pct (all 2,078)present (proxy)dead-fuel-moisture proxy, not a LANDFIRE fuel model
fuel type / vegetationdeferredno LANDFIRE 40-fuel raster on-box; add when sourced
terrain (slope, aspect)ETOPO2022 60″ DEM (windowed vsicurl read)presentreused from entry-0023 approach; median slope 17.9 m/km
growth truth (observed spread)detection-footprint expansion; fire_perimeters (132, single-snapshot)weak0.01° quantized, GOES-dominated, conflates detection with growth; no acreage time-series

The prototype. Deliberately the simplest defensible physical cut, not an ML model. Direction = a weighted vector sum of a downwind unit vector (bearing = RAWS wind-direction + 180°, weighted by wind speed) and an upslope unit vector (bearing of steepest DEM ascent, weighted by slope magnitude, capped at the wind weight) — fire runs downwind and uphill. Rate = an interpretable wind-driven, dryness-scaled index, ROS ∝ wind_speed × exp(−fuel_moisture/10), in the Rothermel/empirical-grassfire spirit [21][22]. Observed growth per fire = split the fire’s own detection track into early/late thirds by time, take each third’s centroid; the early→late bearing is the observed spread direction and the centroid displacement over elapsed hours is the observed rate; the mean detection-to-centroid radius (late minus early) is a footprint-growth proxy. Skill is scored with circular statistics (mean angular error, mean-resultant length R, Rayleigh test) against a 90° uniform-direction null and against a persistence baseline [16][23].

predictorsubsetnmean ang. errmedianwithin 45°mean-resultant RRayleigh p
random-direction null90.0°90.0°0.250.001.00
downwind (wind+180°)all25088.6°90.5°0.300.020.88
downwind + upslopeall25093.2°94.9°0.260.040.66
persistence (fire’s own motion)all16555.5°41.8°0.520.44<10−300
downwind (wind+180°)resolvable (≥1.1 km, ≤40 km)17125.7°125.4°0.060.50‡0.012
persistenceresolvable1342.9°32.7°0.690.630.004

‡ On the 17 resolved-displacement fires the wind vector shows moderate concentration (R=0.50) but at a ~176° offset — the observed footprint centroid moves opposite to downwind. This is almost certainly a truth artifact, not physics: coarse GOES footprints are first detected at the hot leading edge and then “fill in” toward the older/interior pixels, dragging the centroid backward. It is a reason to distrust the footprint-growth proxy, not evidence the model is anti-skillful. On the robust n=250 sample the wind axis carries essentially no directional information at all (R=0.02).

Rate skill. On the resolvable subset (n=17) the wind×dryness ROS index vs. observed centroid-displacement rate gives Spearman −0.20 (Pearson −0.11); wind-speed alone −0.21; ROS index vs. footprint-radius growth −0.21. All are at or below zero — no positive skill over the predict-median baseline (which is 0 by construction). With this truth and this sample the rate model is indistinguishable from no information.

Reproducibility detail. Resource-guarded on the host: health-gated on the host service (exit 75 if inactive), yields to the hard host busy marker, run under a private serialization marker with a server-side timeout + nice -n19, thermal-abort preflight, killed by PID. Every read is mode=ro on production tables; no table is written — the run emits a JSON metrics blob only, nothing surfaced. Corpus = fused_fires with tier ∈ {confirmed, probable}, n_frames ≥ 8, track span ≥ 3 h, last_seen within 12 h of run (so the live wind snapshot is as contemporaneous as the data allow), whose member_event_ids parse to ≥6 dated detections with ≥2 in each of the early/late thirds (250 fires). Wind = nearest weather_stations RAWS by great-circle distance; downwind bearing = wind_dir_deg + 180°. Terrain = one windowed vsicurl read of the ETOPO2022 60″ surface-elevation GeoTIFF over the CONUS box, held in memory, sampled by 3×3 central-difference gradient for slope magnitude and steepest-ascent bearing (read via ReadRasterfrombuffer to bypass a GDAL/NumPy-2 array-bridge conflict). Rate index = wind_spd_kt × exp(−fuel_moisture_pct/10). Observed growth = early-third vs. late-third detection-centroid bearing / displacement / mean-radius delta; resolvable = observed displacement ≥ 1.1 km (one member-coordinate pixel) and RAWS within 40 km. Circular stats: mean angular error, mean-resultant length R, Rayleigh test on the signed (observed − predicted) offsets; persistence baseline = bearing of the fire’s first-third→middle-third centroid motion. Every figure counted from the live production DB at run time.

Claim status: MEASURED, read-only on production, honest baselines, research/prototype only. This entry establishes input-feasibility and validates a first-cut physical spread model against observed growth; it builds no table, changes no fusion/tier/confidence/map/API surface, and surfaces nothing. The headline is a negative for the simple current-wind model plus a positive feasibility finding on the inputs.

Honest bounds. (1) Wind is a live snapshot. There is no archived time-resolved wind co-registered to past detections; a fire’s growth window can be many hours old while the wind used is “now,” so the wind vector is temporally mismatched — the single biggest reason the model could fail even if physically correct. (2) The RAWS network is sparse relative to fires (median 27 km to nearest station), so the wind is regionally representative at best, not the wind at the flame. (3) The growth truth is weak. Member coordinates are quantized to 0.01° (≈1.1 km); median observed displacement (0.44 km) is below one pixel; footprints are GOES-dominated and conflate detection onset/fill with physical growth (the ~176° resolvable-subset offset is exactly this artifact). (4) Single summer window. The corpus is warm-season CONUS; nothing here speaks to other seasons or regions. (5) The persistence baseline shares its start point with the observed vector (both anchored on the early centroid), so a fraction of its skill is construction overlap — but the contrast that matters is robust: coherent direction demonstrably exists in the tracks (R=0.44), and the current-wind model captures essentially none of it (R=0.02). (6) Upslope as formulated did not help — likely because coarse DEM slope at the fire centroid is a blunt instrument and, absent time-matched wind, adding a second mis-timed term only adds noise.

Literature alignment. Verdict: CONTEXT (model is standard; the negative is about data, not physics). Wind as the dominant driver of fire-spread direction and rate, with an elliptical downwind footprint, is the canonical Rothermel surface-spread result [21] and the empirical grassfire wind–ROS relations [22]; that real fires have a coherent, measurable direction and speed is exactly what the Global Fire Atlas quantified from satellite progression [16] — consistent with the persistence signal found here. The physical model is orthodox; the failure is that the on-box observations (live-only coarse wind; quantized detection-fill footprints) are not yet good enough to exercise it, and coarse geostationary progression is known to conflate detection with growth [3][8]. Circular-statistics scoring (mean-resultant length, Rayleigh test) follows standard directional-data methods [23].

What this does not claim: that spread nowcasting is infeasible (the inputs are present and the target is demonstrably predictable), that wind does not drive spread (it does — the data are too mismatched to show it), that the ~176° resolvable-subset offset means fires spread upwind (it is a footprint-fill artifact), or that any number here should touch serving (nothing is surfaced). Recommendation: build the nowcast as a default-OFF advisory layer, but fix the observations first. Concretely: (a) archive time-resolved wind — either snapshot RAWS into a history table keyed by obs_time, or ingest gridded HRRR/GFS wind into the empty weather_cells — and join the wind at the detection timestamp, not “now”; (b) source a finer growth truth — full-precision detection coordinates linked to the fused fire, an IRWIN DailyAcres time-series, or S2/S1 burn-scar area deltas; (c) add a LANDFIRE fuel-model raster when available; (d) blend persistence with time-matched wind — the persistence result says the fire’s own momentum is the strongest single predictor available today, so the honest first product is a persistence nowcast that the wind vector corrects, surfaced as a separate advisory (“spreading roughly NE”), never as a detection. Until then it stays research-only — a spread nowcast is a real new-capability lever, but it earns a cutover only after the wind archive and a real growth truth exist. Mark decides.

Hard-bound: warm-season CONUS, single 12-hour active-fire snapshot, n=250 (n=17 resolved-displacement); wind is a live snapshot with no historical archive; growth truth is 0.01°-quantized, GOES-dominated detection-footprint expansion, not an independent perimeter time-series. Every conclusion is scoped to that regime; the negative is a statement about the current observations, not about the physics of fire spread.

References: [3] · [8] · [16] · [21] · [22] · [23]

entry 0030

Can a disciplined GOES-first provisional-alert tier buy real lead time at acceptable precision? — measured across 481k early GOES-first candidates and out-of-time: no. Every gate that adds discipline lowers precision, and the confirmable slice is ~13% before any gate — a MEASURED NEGATIVE that upholds entry 0025’s caution

Date: 2026-07-11   Status: MEASURED NEGATIVE (own read-only artifact; out-of-time transport-gated; nothing surfaced, nothing flipped) — converts entry 0025’s “no naive GOES-first tier is supported” into a full precision-vs-lead-time curve and rejects the disciplined version too

The framing. Entry 0025 found that GOES-ABI wins the first-arrival race for ~76% of fires on cadence alone, yet is the slowest thermal sensor for genuine new-fire detection, and it retired the “we detect before it’s reported” headline as a lookback artifact. It left one question open and worth answering honestly: is there a disciplined GOES-first provisional tier — persistence, FRP, and not-on-a-known-false-source — that recovers a real latency gain at a precision a clearly-labeled advisory surface could tolerate? This entry defines that candidate population, measures the full precision-vs-lead-time curve across gates, and validates the best operating point out-of-time. The answer is a clean negative, and it sharpens why.

BLUF. The GOES-first candidate population — canonical events where a GOES-ABI detection is strictly the first sensor at the location, i.e. everything a provisional fast-alert could draw from before any polar/HMS/IRWIN confirmation — is enormous and mostly false: 480,953 events over 39 days (~12,300/day), of which only 12.9% are ever corroborated as a real fire (12.4% by an IRWIN/WFIGS fire within 10 nm; a vanishing 0.5% by a later co-registered VIIRS/MODIS overpass in the same canonical event). So a raw GOES-first alert is wrong ~6.8 times out of every 7.8, at 12,000+ alerts/day. The decisive result is that no disciplined gate rescues it: requiring GOES multi-frame persistence (≥3, ≥5 frames), an FRP floor (≥10, ≥30 MW), excluding the flaring/refinery and static-thermal masks, or any combination — every gate holds or lowers precision (the full curve sits in an 8–13% band) while shedding recall and lead time. Persistence and FRP go the wrong way (they select persistent warm surfaces, not small new fires), and the masks barely move the needle because the false mass is diffuse coarse-pixel noise across fire country, not concentrated on known industrial points (only 0.6% of candidates sit on a flaring/refinery polygon). Out-of-time, the gates transfer as non-skill: the apparent early→late precision jump (9.9%→17.1% raw) is a seasonal fire-density base-rate effect, not gate discrimination, and the single point that clears ~29% precision on the later window (FRP≥30) does so at ~158 alerts/day, 5% recall, and only ~4.8 h of lead. Verdict: a GOES-first provisional tier is too false-alarm-heavy to surface, even gated. We recommend no shadow build; entry 0025’s caution stands, now quantified end-to-end. Nothing was surfaced and no production table was touched.

The candidate population (reproducible). Working unit is the canonical event (the shipped corroboration/ground-truth key). For every canonical event we take, per sensor family, the first detection time; a GOES-first candidate is one where the GOES-ABI family (Dozier-subpixel + ABI-ADP-smoke + raw ABI, G18/G19) is strictly earliest — nothing polar, HMS, or IRWIN arrived at or before it — so by construction it is sub-confirmation at alert time and is exactly the pool a provisional alert would fire on. Truth reuses the shipped scorer (te_daily_scorer.py): a candidate is genuinely confirmed if an IRWIN/WFIGS WF/WFU fire lies within 10 nm (independent), or a later VIIRS/MODIS detection co-registers into the same canonical event (≥2 independent families). Lead time is measured against an actual confirmation event — the first co-registered polar detection minus the alert time — not against IRWIN’s reported discovery time, precisely to avoid the reporting-time artifact entry 0025 diagnosed. The candidate window is t₀ ∈ 2026-05-31 → 2026-07-09 (a 2-day tail is trimmed so late candidates have time to confirm; right-censoring caveat below).

GOES-first candidate populationvalue
candidate events (GOES strictly first)480,953
per day~12,315
eventual-confirm rate (IRWIN 10 nm OR co-registered polar)12.9%
  via IRWIN/WFIGS within 10 nm12.4%
  via later co-registered VIIRS/MODIS overpass0.5%
raw lead vs first co-registered polar detection (n=2,624)median +7.9 h (p25 +6.3, p75 +17.6)
candidates on a flaring/refinery mask0.6%
candidates in a static-thermal (persistence) cell6.2%
candidates carrying a GOES FRP value43.9%

Read this first: the confirmable fraction is ~13% before any gate is applied, and it is almost entirely IRWIN-proximity (12.4%), not independent sensor agreement (0.5%). A 10 nm IRWIN match in fire country is itself the spatial-association signal entry 0025 warned about — so 12.4% is an upper bound on the fraction that are genuinely this new fire, not a floor. The clean lead-time number (+7.9 h vs an actual polar overpass) is real but exists for only the 0.5% of candidates that ever get a co-registered polar detection; it is not a property of the population.

Result 1 — the precision-vs-lead-time curve (this is the finding). Same candidate set; one gate at a time and in combination. Precision = fraction of kept candidates that are genuinely confirmed; recall = fraction of the eventually-confirmed set retained; lead = median hours the alert precedes the first co-registered polar detection (measured only where such a detection exists):

gatealerts/dayprecision (any)precision (IRWIN)recall of confirmedmedian lead (h)
raw GOES-first (no gate)12,31512.9%12.4%100%+7.9
persistence ≥3 GOES frames6,13811.8%11.3%45.8%+6.8
persistence ≥5 GOES frames3,48710.8%10.2%23.8%+3.1
FRP ≥10 MW3,5209.9%9.3%22.0%+6.9
FRP ≥30 MW8309.8%8.6%5.1%+6.2
NOT on flaring/refinery mask12,24012.8%12.3%98.5%+8.1
NOT in static-thermal cell11,54612.4%12.0%90.5%+7.9
NOT on any fp mask11,47812.3%11.9%89.3%+8.1
pers≥3 + NOT any fp mask5,66711.2%10.7%40.1%+7.0
pers≥3 + FRP≥10 + NOT any fp mask2,4708.6%8.0%13.4%+3.3
pers≥5 + FRP≥30 + NOT any fp mask5088.6%7.2%2.7%+1.2

The curve never leaves the 8–13% precision band. The best precision in the whole table is the raw population (12.9%); every added constraint makes precision worse, not better, and buys nothing but lost recall and shrinking lead. That inversion is the mechanism: GOES multi-frame persistence and a high FRP select for bright, durable hot signals — which in the GOES-first pool are disproportionately persistent warm surfaces and residual industrial/agricultural burn, not the small, brief new ignitions IRWIN logs. The two dedicated masks remove real false sources but almost no volume (recall stays 89–99%), because the false-alarm mass is diffuse coarse-pixel noise spread across the fire-prone West, not concentrated on the 0.6% of points that are flares/refineries. There is no operating point that is simultaneously earlier and precise enough.

Result 2 — transport gate (out-of-time; entries 0018/0021/0027 discipline). Build/choose the gate on an earlier window (t₀ < 2026-06-23, n=280,880, 27,763 confirmed) and measure it on a strictly-later window (t₀ ≥ 2026-06-23, n=200,073, 34,114 confirmed). If a gate carried real discrimination it would hold its precision advantage out-of-time; instead precision tracks the ambient fire density of the window:

gateEARLY precisionEARLY lead (h)LATE precisionLATE lead (h)LATE alerts/day
raw GOES-first9.9%+8.517.1%+7.45,123
persistence ≥38.5%+7.417.5%+6.22,279
NOT on any fp mask9.3%+9.016.7%+7.54,676
FRP ≥30 MW5.3%+7.029.1%+4.8158
pers≥3 + FRP≥30 + NOT any fp mask5.0%+2.428.1%+2.4104

The precision on the late window is higher for every gate — including the raw no-gate population — by roughly the same factor. That is a base-rate effect: the later window is deeper into fire season, so any 10 nm cell is more likely to sit near an active IRWIN fire, lifting the proximity-match rate regardless of what the gate does. It is not gate skill, and it does not transport as a precision guarantee an operator could rely on. The one point that reaches ~29% out-of-time (FRP≥30) trades it for ~158 alerts/day, ~5% recall of confirmed fires, and ~4.8 h of lead — i.e. it surfaces one-twentieth of the real fires, still gets it wrong ~7 times in 10, and does so barely earlier than simply waiting. No operating point clears a defensible advisory bar.

The precision bar, stated explicitly. The confirmed roster runs at ~90%+ precision (entries 0003/0007); a provisional/advisory tier can tolerate less, but it must beat surfacing nothing — call the generous advisory bar ~50% (roughly one real fire per false alert). The full curve is reported above precisely so the verdict does not hinge on where that bar sits: nothing measured — in-sample or out-of-time, raw or gated — approaches 50%. The population tops out at ~13% in-sample and ~17% on the season-dense later window; the only points reaching ~29% do so at negligible volume and single-digit recall. Wherever a reasonable advisory bar is drawn between the confirmed roster and a coin flip, a GOES-first provisional tier is below it.

Reproducibility detail. Read-only replay against OLDGABE oldgabe.db (mode=ro URI + PRAGMA query_only=ON); no table was written — the run emits a single /tmp JSON metrics blob, surfaces nothing, and does not touch the serving tables (fused_fires, tiers, confidence, map/API). Run under the host-health gate (serving unit active, else exit 75), resource-guarded (host busy marker honored, a private serialization marker for our own runs, nice -n19, server-side timeout, thermal-abort preflight, killed by PID), on the host’s own storage. Pass A: GROUP BY canonical_event_id, family over fire_event_evidence (26.3 M rows → 634,004 event×family groups, 599,735 events), family via CASE on source (GOES = GOES*/ABI-*; polar = VIIRS*/MODIS), yielding per-event first-detection time, max FRP and frame count per family; GOES-first = GOES time strictly earliest. Pass B: streamed GOES-family evidence (2.71 M rows) ordered by canonical_event_id to derive each candidate’s k-th GOES-frame time (persistence-gated alert time) and centroid. Masks from fp_polygons: flaring/refinery = osm_refinery + osm_gas_flare + flaring_nightfire_persistence (59,591 polys); static-thermal = dozier_persistence + polar_persistence (9,556 polys); membership by 1°-gridded haversine within each polygon’s radius. Truth mirrors te_daily_scorer._load_irwin: IRWIN raw JSON deduped on IrwinID/UniqueFireIdentifier, WF/WFU only (3,831 fires), 10 nm (18.52 km) haversine gate; co-registered-polar confirmation is a later VIIRS/MODIS first-time in the same canonical event. Lead = first co-registered polar time − alert time (t₀ for un-gated / static gates, k-th GOES-frame time for persistence gates); all time math is UTC via calendar.timegm. Transport split at 2026-06-23. Every figure counted from the live production DB at run time; total wall time ~3 min.

Claim status: MEASURED NEGATIVE (own read-only artifact, dated; reuses the shipped scorer’s truth; out-of-time transport-gated). The operative claims are the candidate-population characterization (~12,300/day, 12.9% eventual-confirm), the precision-vs-lead-time curve (an 8–13% precision band in which every gate holds-or-lowers precision), and the transport result (out-of-time precision is a fire-density base-rate effect, not gate skill). The deliverable is a recommendation not to build a GOES-first provisional tier.

Hard bound (spatial-association truth + single summer window + right-censoring). The dominant caveat, inherited from entry 0025: the 12.4% IRWIN confirmation is a 10 nm proximity match, so in dense fire country it credits GOES-first pixels that are near, but not necessarily of, a logged fire — making 12.9% an upper bound on genuine precision, which only strengthens the negative. Co-registered-polar confirmation (0.5%) is the cleaner independent signal but is too rare to anchor precision, and it is itself gated by OLDGABE’s own canonical-linking. Lead time is measured only on the 0.5% of candidates with a co-registered polar detection; against IRWIN’s reported discovery time it would be reporting-artifact-contaminated, so we do not use it. All data is a single ~6-week summer window (evidence starts 2026-05-29); a 2-day tail is trimmed but recent candidates are still mildly right-censored (a real fire may confirm after the window), which biases the confirm-rate slightly low — again in the conservative direction for a “too FP-heavy” verdict. GOES persistence is proxied by total GOES-family frame count; FRP is absent for 56% of candidates (smoke-product and un-retrieved frames), so the FRP gate implicitly also selects for thermal retrievability.

Literature alignment. Verdict: AGREEMENT. That geostationary fire detection wins timeliness through cadence but pays in coarse-pixel sensitivity and elevated commission (false-alarm) rates — warm surfaces, cloud edges, and sub-pixel industrial/agricultural heat — is the established GOES/ABI result [8][3][20], and the geostationary biomass-burning detection literature has long framed the cadence-vs-false-alarm trade the same way [24]. Dedicated GOES early-fire-detection work treats timeliness as cadence-driven with a hard sensitivity/false-alarm floor [13] — consistent with our finding that persistence and FRP gates cannot separate small new fires from durable warm sources in the GOES-first pool. That persistent industrial thermal sources (gas flares) masquerade as fires is documented [11], and that polar 375 m sensors are the sensitive confirmer [1] underlies our use of a co-registered polar overpass as the clean confirmation event. Reported US fire-discovery times being human-entered and biased [6] is why we frame lead time against actual polar detections, not reported discovery.

What this does not claim: that GOES-ABI is not valuable (it wins first-arrival and anchors the fused roster — entries 0003/0025); that GOES-first alerts are never real fires (~13% are corroborated); that a co-registered GOES+polar detection is unreliable (it is the confirmed roster’s basis); nor that any latency work is closed. It claims only that a standalone GOES-first provisional/advisory tier — alerting on the first GOES flag before independent confirmation — cannot be made precise enough to surface, at any gate measured, in-sample or out-of-time. Recommendation: no shadow build. The latency levers still worth a default-OFF probe are the two entry 0025 named — a VIIRS-overpass/HMS-weighted early-confirmation tier, and camera-first alerting inside proven camera coverage (entry 0006) — neither of which is a GOES-first tier. Mark decides; nothing here changes a shipped number.

References: [1] · [3] · [6] · [8] · [11] · [13] · [20] · [24]

entry 0031

Adding Landsat-8/9 OLI SWIR to densify coverage: the truly-blind tail is 16 fires and 100% Alaska, all outside the deployed S2-SWIR footprint — so L8/L9 buys zero as a cadence densifier and at most 3–4 large Alaska fires as a spatial gap-fill. Confirmed REDUNDANT-over-CONUS / narrow-Alaska-only

Date: 2026-07-11   Status: MEASURED (own read-only artifact; reuses the shipped scorer’s truth; extends entry 0024’s sub-floor bound) — confirmed LOW-YIELD / REDUNDANT-as-densifier

BLUF. Entry 0024 named the one genuine remaining coverage lever — the sub-floor tail — and noted OLDGABE already ingests a Sentinel-2 SWIR-hotspot source (S2-SWIR-Hotspot), so the only open question is whether densifying that cadence by adding Landsat-8/9 OLI SWIR (B6 ~1.6 µm / B7 ~2.2 µm, 30 m; L8+L9 phased for ~8-day repeat, tighter at high latitude via swath sidelap) recovers any net-new fire. We reproduced the sub-floor set against the full any-status event net and the answer is a clean no, with one narrow Alaska caveat. Two facts decide it. (1) The truly-blind tail — IRWIN-active wildfires with no OLDGABE event of any status (candidate, masked-fp, confirmed, …) within 10 nm over their entire active window — is just 16 fires, and every one is in Alaska (stable at 16 across four consecutive scoring windows 07-08→07-11). Not one is in the Lower 48: OLDGABE’s detection net blankets CONUS so densely that zero CONUS wildfires are event-free, so a densifier has nothing to recover there. (2) The deployed S2-SWIR daemon is hard-coded to a CONUS bounding box (24–50°N, 125–66°W) — it is not pointed at Alaska at all — so all 16 blind fires sit outside the existing S2 footprint. That reframes the lever entirely: L8/L9 would add no temporal cadence anywhere S2 already looks (S2’s 5-day repeat is denser than L8/L9’s 8-day at every latitude, and the open sub-floor windows span weeks, so S2 already delivers many overpasses per window), and the only coverage it adds is spatial — Alaska, where the real gap is that the S2 daemon’s box stops at 50°N. Of the 16 Alaska fires, 12 (75%) are sub-1-acre point records (1.8 ac total) — hopeless at a 30 m SWIR sub-pixel floor no matter how often overflown — leaving a net-new recoverable upper bound of just 4 fires ≥1 acre (505 ac), a robust core of 3 fires ≥10 acres, dominated by a single 409-acre Alaska burn. Verdict: L8/L9 SWIR densification is REDUNDANT over CONUS and a narrow, Alaska-only, large-fire-only spatial gap-fill worth at most a default-OFF shadow — and even that gap is better closed by pointing SWIR ingestion at Alaska (L8/L9 or extending the S2 box north) than by “more cadence.” Nothing surfaced, no production table touched.

Feasibility — the lightest real path to L8/L9 SWIR active fire. Unlike VIIRS/MODIS there is no operational Landsat active-fire feed (no FIRMS-style Landsat hotspot product); hotspots must be derived from OLI SWIR scenes using an established algorithm — the Schroeder et al. (2016) Landsat-8 OLI active-fire algorithm [12] or the Kumar–Roy (2018) reflectance-based OLI fire test [25] (B6/B7 thresholds plus a folding/contextual test). The good news is the ingestion mechanism already exists in-shape: the deployed S2 daemon reads B11/B12 COGs over an open STAC/COG path (earth-search.aws.element84.com, streaming only the SWIR bytes it needs via rasterio’s HTTP driver) — the identical pattern applies to Landsat Collection-2 (usgs-landsat / Element84 landsat-c2-l2 on AWS), reading OLI B6/B7 COGs and applying the same B12–B11-style threshold logic. Realistic ingestion cost over CONUS+AK is modest: L8+L9 acquire on the order of a few hundred daytime WRS-2 scenes/day combined; with the strided SWIR-window reads the S2 daemon already uses, that is low-single-digit GB/day, not a scene-download pipeline. The binding caveat is latency: Landsat Collection-2 L2 (surface-reflectance/temperature) publishes at ~12–24 h+ — so, exactly like S2, this is a coverage/confirmation lever, not a fast-alert lever (consistent with entry 0024’s framing that SWIR is burn-scar/coverage, not active alerting).

The reproduced sub-floor set (scoring window 2026-07-10→2026-07-11, entry-0024-equivalent; 10 nm vs IRWIN WF/WFU; 3,698 active wildfires; 16 truly-blind fires — no OLDGABE event of any status within 10 nm/active-window over a 30-day lookback; the count is invariant — 16 — across all four windows tested):

size bandfires% of tailacresin deployed S2 box?30 m OLI SWIR verdict
<1 acre (point records)1275.0%~1.8no (all AK)at/below sub-pixel floor — orbit-hopeless
1–10 acre16.3%4.2no (all AK)marginal — needs clear-sky daytime overpass on active flaming
10–100 acre212.5%92.3no (all AK)plausibly detectable
≥100 acre16.3%408.9no (all AK)plausibly detectable

The whole tail is Alaska. All 16 fires carry POOState=US-AK; zero are inside the deployed S2-SWIR CONUS box; every one is an open IRWIN record (null FireOutDateTime), so its active window runs discovery→now (days to weeks). The mechanism is structural: OLDGABE’s candidate/detection net (GOES-ABI + HMS + polar) is so dense over the fire-prone West that no CONUS wildfire ends up event-free within 10 nm over a multi-week window — the blind tail is precisely the region the net under-covers, which is Alaska.

The net-new coverage delta over the deployed S2 baseline (deployed S2-SWIR-Hotspot = B11/B12 20 m, ~5-day A+B, CONUS box 24–50°N only; candidate add = L8/L9 OLI B6/B7 30 m, ~8-day; upper bounds throughout, from revisit geometry not imagery):

lever componentfiresacresnote
Temporal densification within the S2 footprint (CONUS)00no CONUS sub-floor fire exists; and S2’s 5-day < L8/L9’s 8-day at every latitude → L8/L9 opens no window S2 does not
Spatial coverage outside the S2 box (all Alaska), L8/L9 ≥1 overpass in window16~507all get many daytime overpasses (weeks-long open windows) — overpass is not the limiter
  — of which ≥1 acre (generous 30 m SWIR floor) — NET-NEW UPPER BOUND4505.499.7% of the tail’s acreage; all Alaska
  — of which robustly sized (≥10 acre)3~501the realistic recovery core — larger AK burns
  — of which ≥100 acre1408.9a single burn carries 81% of the recoverable acreage
Below SWIR sub-pixel floor (<1 ac point records) — hopeless121.80.3% of tail acreage — unrecoverable from orbit at any cadence

Reading the delta honestly. The net-new recoverable upper bound is 4 fires / 505 acres, and it is acreage-rich only because a single 409-acre Alaska burn dominates it. Strip to what a 30 m OLI SWIR band would robustly resolve and the core is 3 fires ≥10 acres. Two independent reasons make even that 3–4 optimistic. First, it assumes a cloud-free daytime overpass coincides with active flaming — Alaska summer cloud frequency, solar-zenith, and the overpass/flaming coincidence all push realistic yield below the bound. Second, and decisively for the densification question: L8/L9 adds no temporal reach that S2 lacks. S2’s two-satellite 5-day repeat is denser than L8/L9’s two-satellite 8-day repeat at every latitude (both tighten poleward via sidelap, but S2 stays ahead), and the sub-floor windows are weeks long, so wherever S2 can look it already delivers multiple overpasses. L8/L9’s only contribution over the deployed baseline is spatial — Alaska, which the S2 daemon’s box simply excludes. So “densify cadence with L8/L9” is the wrong framing for the win that exists; the win, such as it is, is “cover Alaska at all,” achievable equally by extending the existing S2 box north.

Verdict — confirmed low-yield / redundant-as-densifier. Against a roster whose generous ever-detected recall is (3,698−16)/3,698 = 99.6% within the active window, the truly-blind tail is 16 fires, 75% of them orbit-undetectable sub-1-acre point records, entirely in Alaska and entirely outside the deployed S2 footprint. Adding Landsat-8/9 OLI SWIR as a cadence densifier of the existing (CONUS) S2 feed recovers zero fires. The only real prize is a narrow, Alaska-only, large-fire-only spatial gap of 3–4 fires — and it is a coverage-footprint fix, not a cadence fix. If pursued at all it justifies at most a default-OFF, Alaska-focused, ≥10-acre SWIR shadow probe measured for recovered-recall vs added-FP — whether that SWIR comes from L8/L9 or from extending the S2 box north is an implementation detail. This is exactly the “real but marginal” ceiling entry 0024 anticipated, now localized to Alaska and quantified to single digits.

Reproducibility detail. Read-only replay against OLDGABE oldgabe.db (mode=ro URI + PRAGMA query_only=ON), no writes; run under the host-health gate (serving unit active, else exit 75), honoring the hard host busy marker, with a private serialization marker for our own runs, nice -n19, server-side timeout, killed by PID, thermal-abort preflight — resource-guarded throughout. Truth reuses the shipped scorer daemons/te_daily_scorer.py verbatim (_load_irwin, _rng_nm, 1° bucketing with 3×3-neighbour probing, MATCH_RADIUS_NM=10 nm, ACTIVE_WIN_PAD_S=24 h): IRWIN truth = fire_event_evidence where source='IRWIN', deduped on IrwinID/UniqueFireIdentifier, IncidentTypeCategory∈{WF,WFU}, active window = [FireDiscovery−24 h, FireOut||now+24 h] (3,698 active WF/WFU). Event net: every fire_events row (any status — candidate/masked-fp/confirmed/confirmed_growth/awaiting-confirmation/pre-ignition/rx-burn) with last_seen in the 30-day lookback (867,043 events), bucketed 1°×1°; a fire is false-negative when no promoted (status∈{confirmed,confirmed_growth,awaiting-confirmation,pre-ignition}) event overlaps its window within 10 nm, and sub-floor/truly-blind when no event of any status does — here the two coincide (FN=sub-floor=16), i.e. every FN fire is fully event-free. Per-fire fields from the IRWIN raw JSON: size FinalAcres→IncidentSize→DiscoveryAcres, region POOState, times FireDiscoveryDateTime/FireOutDateTime epoch-ms; time math via the scorer’s own time.mktime convention. Deployed S2 footprint read directly from sentinel2_swir_daemon.py (CONUS_BBOX=(-125,24,-66,50), SOURCE='S2-SWIR-Hotspot', 2,976 detections in-DB); a fire is “in footprint” iff inside that box. Revisit geometry (upper bounds, no imagery): effective S2 A+B interval max(2.0, 5.0·cos lat) d, L8+L9 interval max(3.0, 8.0·cos lat) d (both tighten poleward via swath sidelap; S2 denser at every latitude by construction and by fact); overpasses-in-window = window-days / interval; temporal net-new = in-footprint fire with 0 S2 overpasses but ≥1 L8/L9 (=0 by the density ordering); spatial net-new = out-of-footprint fire with ≥1 L8/L9 overpass, sized ≥1/≥10/≥100 ac. No imagery was pulled; the bound rests on revisit geometry + fire size/duration + the 30 m OLI SWIR sub-pixel limit. Stability: the tail is 16 fires across scoring windows 07-08/07-09/07-10/07-11. Only artifact written was a /tmp JSON on the host.

Claim status: MEASURED (own read-only artifact, dated; reuses the shipped scorer; extends the entry-0024 sub-floor bound to the L8/L9-vs-S2 densification question). The net-new figure (4 fires ≥1 ac / 3 ≥10 ac) is a hard upper bound; the operative claim is the verdict — L8/L9 SWIR adds zero cadence over the deployed CONUS S2 feed and at most a narrow Alaska-only spatial gap-fill of a few large fires.

Hard bound (summer-only + upper-bound + no-imagery + net-definition). All data is summer 2026 and a set of adjacent 24-hour windows; a true off-season or multi-season distribution is deferred. Every recoverability number is an upper bound from revisit geometry and reported fire size, not from actual OLI scenes — we confirmed no single cloud-free daytime SWIR anomaly; cloud, solar-zenith, active-flaming/overpass coincidence, and the fusion-gate/attribution requirement all reduce realistic yield below the bound. The tail here (16) is measured against the full any-status fire_events net and the generous multi-week active-window match, which is a stricter blindness test than a single 24-hour scoring pass — so it is a conservative floor on the sub-floor, tighter than and consistent with entry 0024’s 48-fire recoverable upper bound (0024 bounded the CONUS-inclusive tail generously; this entry localizes the genuinely event-free core to Alaska). The 10 nm (18.5 km) match radius is the scorer’s own; IRWIN size fields are human-reported and often stale for open records; the ≥1-acre SWIR floor is a rule-of-thumb, not a validated per-scene threshold; the revisit intervals are geometric approximations, not per-orbit ephemerides.

Literature alignment. Verdict: AGREEMENT. That active fires can be detected from mid-resolution OLI SWIR (1.6/2.2 µm) below the pixel size via a dedicated Landsat active-fire algorithm — but only by deriving hotspots from scenes, with no operational Landsat fire feed and a floor set by fire radiant area, cloud, and multi-day revisit — is the established finding [12][25], mirroring the Sentinel-2 SWIR active-fire result [10]. That these multi-day mid-resolution imagers complement, rather than replace, the daily/sub-daily polar and geostationary active-fire products [1][3] is the standard operational view. Our result is consistent: with S2 already providing the denser (5-day) SWIR look over CONUS, a second 8-day SWIR imager densifies nothing there; its only marginal value is extending SWIR into an unserved region (Alaska) for the larger persistent burns.

What this does not claim: that no Alaska sub-floor fire is recoverable — up to 4 (upper bound), realistically a couple of larger burns, plausibly are; that L8/L9 OLI SWIR is useless in general — it is a valid independent SWIR confirmer, it simply adds no cadence over the deployed S2 feed; nor that Alaska coverage is not worth having — it is, but the honest lever is “point SWIR ingestion at Alaska” (L8/L9 or an S2-box extension north of 50°N), not “more cadence.” Next: if the Alaska large-fire recovery is pursued, stand up a default-OFF, Alaska-only ak_swir_coverage_shadow restricted to ≥10-acre IRWIN-active fires with no core-sensor touch in-window — sourcing OLI B6/B7 (Schroeder 2016 / Kumar–Roy 2018 derivation) and/or extending the S2 box — and measure recovered-recall vs added-FP over ≥14 runs with CIs before proposing any cutover; weigh it against the far larger liveness/persistence levers from earlier entries, which remain the dominant recall investment. Nothing here changes a shipped number.

References: [12] · [25] · [10] · [1] · [3]

entry 0032

A learned “real-bogus” FP filter on the lone-VIIRS slice re-derives the shipped masks — the spectral/footprint/diurnal signal beyond the masks carries only 6% of the discriminative power and cannot flag off-registry false positives out-of-time at usable precision

Date: 2026-07-10   Status: MEASURED NEGATIVE (out-of-time) — the non-mask channel is not a promote candidate; the discriminative signal is mask/persistence/registry, already shipped — extends entries 0022/0028 and mirrors 0027

BLUF. OLDGABE’s surfaced false positives concentrate in the probable-tier lone-VIIRS slice (entries 0022/0028: ~20% surfaced FP, ~27% in the probable tier). We already ship static/persistence FP masks — refinery/gas-flare polygons, VIIRS-Nightfire flaring, and Dozier/polar persistence cells (all in fp_polygons) — plus a power-plant registry cutover-candidate. The question for this wave, framed skeptically: can a learned classifier separate genuine early fire from persistent non-fire in that slice using signal beyond what the masks already encode? The trap (identical to entry 0027’s temporal re-ranker, which just re-derived production’s n_goes≥3): if the classifier’s power is entirely mask/persistence/registry features, it is redundant with what ships. We built two feature sets — a mask/persistence baseline (on-polygon, distance-to-mask, fixed-cell persistence, flare-cluster density, registry proximity, peak FRP) and a non-mask candidate (VIIRS I4/I5 brightness temperature, I4−I5 thermal anomaly, pixel footprint scan×track, day/night ratio, FRP distribution shape, saturation fraction) — trained class-balanced HistGradientBoosting on each and the union, and ran a strict train-earlier / test-later transport gate. The result is a clean negative. Out-of-time, mask-only reaches PR-AUC 0.984; non-mask reaches only 0.869; the union (0.978) is no better than mask-only. Permutation importance on the union puts 94% of the discriminative signal on mask/persistence/registry features (top five all mask: flare-cluster density, distance-to-mask, persistence-days, persistence-extent, registry distance) and only 6% on the entire non-mask block, the best of which (mean I5 background temperature, +0.004) sits an order of magnitude below any mask feature. The decisive test — can the non-mask model catch false positives the shipped polygons miss (off-polygon detections), out-of-time, at usable precision with ~0 real-fire cost? — fails: on the 830 off-polygon test detections the non-mask model at its precision-0.90 training threshold catches 286 FP but flags 207 real fires to do it (precision 0.58), while the union catches the same 332 FP as mask-only alone (119 vs 116 fires flagged) — adding the non-mask channel buys nothing. The masks already capture the separable signal; a learned real-bogus filter re-derives them and adds no promotable, orthogonal value. Fully read-only on production; no shadow build, no shipped number changes.

The population and the labels. The FP-concentrated slice is the lone-VIIRS caution population: event_corroboration_tier where tier='CAUTION' and families∈{VIIRS, VIIRS+HMS} (one independent family, HMS not counted) — 11,572 events, each with its VIIRS member detections (1,760,347 detections parsed for spectral/morphology features). Because 454 hand-adjudicated rows (entry 0028) are too few to train + transport-split, we expand with the same entry-0028 strong-evidence rules applied programmatically: FIRE = IRWIN/WFIGS incident ≤10 nm, or multi-day polar persistence with growth (≥2 distinct days & ≥3 km extent), or energetic FRP≥10 MW away (>10 km) from any static source; NON_FIRE = on a shipped fp_polygons mask, or fixed-cell persistence (≥5 distinct days in a ~2 km cell, <1.5 km extent, no incident), or inside an O&G flare/refinery cluster; everything else = AMBIGUOUS (held out). Labels: 1,566 FIRE / 4,233 NON_FIRE / 5,773 AMBIGUOUS. Supervised set = 5,799.

The transport gate. Split on each event’s first detection time at the 60th percentile (2026-07-05T11:41Z): train = 3,457 (2,536 NON_FIRE / 921 FIRE), test strictly later = 2,342 (1,697 NON_FIRE / 645 FIRE). Positive class = NON_FIRE (i.e. the model predicts “this is a false positive”); test base FP rate 72.5%. Metrics are precision/PR-AUC of FP-identification on the held-out-time set.

Out-of-time FP-identification — the gate.

feature set (positive = NON_FIRE / FP)PR-AUC (out-of-time)precision @ recall 0.5
mask/persistence (7 feat: on-mask, dist-to-mask, persist-days, persist-extent, registry-dist, flare-cluster, peak-FRP)0.9840.990
non-mask (15 feat: I4/I5 BT, I4−I5 anomaly, footprint, day/night, FRP-shape, saturation)0.8690.883
union (22 feat)0.9780.986

Mask-only nearly ceilings; the union does not beat it (0.978 vs 0.984, inside noise and marginally lower); non-mask alone is a clear 0.115 PR-AUC below mask-only. Adding the spectral/footprint channel to the mask baseline moves nothing out-of-time.

Where the signal lives — permutation importance on the union (out-of-time PR-AUC drop).

featureblockΔPR-AUC when permuted
ogbasin (flare/refinery cluster density ≤15 km)MASK+0.0455
static_km (distance to nearest shipped mask)MASK+0.0439
persist_days (distinct detection-days, ~2 km cell, 30 d)MASK+0.0358
persist_ext (fixed-cell spatial extent)MASK+0.0207
registry_pp_km (distance to nearest power plant)MASK+0.0122
ti5_mean (mean I5 ∼11µm background temperature)NONMASK+0.0042
ti4_mean / frp_mean / n_viirs / footprintNONMASK≤+0.0019
Σ mask = 0.1595  ·  Σ non-mask = 0.0109  ·  non-mask share6%

The top five features are all mask/persistence/registry; the entire non-mask block — brightness temperature, thermal anomaly, footprint, diurnal, FRP-shape, saturation, the physics a static polygon genuinely cannot see — contributes 6% of the discriminative power, its best member (mean I5 background temperature) an order of magnitude below any mask feature. Just as entry 0027’s temporal channel collapsed onto GOES n_goes, the real-bogus spectral channel collapses onto the persistence/registry cuts the masks already encode.

The decisive test — can non-mask catch FP the shipped polygons miss? Shipped-mask coverage = on a fp_polygons polygon (on_static=1). The only place a learned filter could add value is off polygon. We fixed each model’s threshold on the training fold at precision ≥ 0.90 and applied it to the 830 off-polygon test detections (332 NON_FIRE / 498 FIRE):

model, off-polygon test (n=830)train thr @p≥0.90flaggedtrue-FP caughtreal fires flaggedprecision
non-mask0.4004932862070.580
mask-only0.0104483321160.741
union0.0124513321190.736

Off-polygon, the non-mask model collapses to 0.58 precision — it flags 207 real fires to catch 286 false positives, an unusable recall cost. The union catches the same 332 true-FP as mask-only (flagging 119 vs 116 real fires) — identical to mask-only within noise. The non-mask channel adds zero incremental off-polygon FP-catch. What does carry the off-polygon catch is persist_days — freshly-computed fixed-cell persistence that is not yet a fp_polygons entry — but that is a mask-family (persistence) feature, i.e. the honest incremental lever is “extend the persistence polygon set to freshly-detected persistent cells,” not “learn a non-mask spectral classifier.”

Reproducibility detail. Read-only against OLDGABE oldgabe.db (mode=ro URI + PRAGMA query_only=ON), no production writes; run under the host-health gate (serving unit active, else exit 75), honoring the hard host busy marker with a private serialization marker for our own run, nice -n19, server-side timeout, killed by PID, thermal-abort preflight — resource-guarded throughout; the only artifact is a /tmp log on the host, nothing surfaced. Population: event_corroboration_tier tier='CAUTION', families∈{'VIIRS','VIIRS,HMS','HMS,VIIRS'} (11,572 events); VIIRS member detections joined by canonical_event_id (1,760,347 rows), spectral fields parsed from each detection’s raw JSON (bright_ti4, bright_ti5, scan, track, frp, daynight). Mask/persistence features (7): nearest-fp_polygons distance & on-polygon flag (refinery / gas-flare / Dozier-persistence / polar-persistence / Nightfire-flaring, 69,147 polygons + 3,839 WRI power plants + flaring-shadow), 30-day fixed-cell (~0.02°) distinct-detection-day count & extent over VIIRS-NPP/N20/N21 + MODIS, flare-cluster density ≤15 km, nearest power-plant distance, peak FRP. Non-mask features (15): I4 max/mean/std, I5 mean, I4−I5 anomaly max/mean, footprint scan×track (mean scan, mean track), night ratio, member count, FRP mean & CV, I4-saturation fraction (≥366 K), intra-event time span. Labels = entry-0028 rules verbatim (IRWIN 30-day + WFIGS-WF truth grid, 10 nm; static-mask / fixed-cell-persistence / flare-cluster non-fire; multi-day-growth / energetic-away-from-static fire; else ambiguous held out). Model = HistGradientBoostingClassifier (max_iter 300, lr 0.06, max_depth 3, l2 1.0), class-balanced via compute_sample_weight('balanced'); NaNs handled natively. Transport: split on first-detection epoch at the 60th percentile (2026-07-05T11:41Z), train earlier / test strictly-later. Metrics via average_precision_score, precision_recall_curve; importance via sklearn.inspection.permutation_importance (10 repeats, scoring average_precision) on the test fold. Off-polygon incremental threshold fixed on the train fold at the smallest cut achieving train precision ≥ 0.90.

Claim status: MEASURED NEGATIVE, out-of-time, read-only. A learned real-bogus FP filter on the lone-VIIRS slice is not a promote candidate: under strict train-earlier / test-later transport the non-mask channel reaches PR-AUC 0.869 vs mask-only 0.984, the union (0.978) does not beat mask-only, the non-mask block carries only 6% of permutation importance, and off-polygon it cannot identify additional false positives at usable precision (0.58, flagging 207 real fires per 286 FP) — while the union’s off-polygon catch (332 FP, 119 fires) is indistinguishable from mask-only (332 FP, 116 fires). No shadow build is recommended; no fusion, tier, mask, confidence floor, map, or API number changes. The one honest incremental lever surfaced is a mask-family one — promote freshly-detected fixed-cell persistence into the shipped polygon set — not a non-mask classifier.

Hard bound (label circularity + summer-only + no off-mask ground truth). The non-fire labels are partly derived from the masks themselves (on-polygon / persistence / flare-cluster), so the mask-feature model is trivially near-perfect by construction and its 0.984 must be discounted — this entire design exists to isolate the non-mask lift, which is what is measured and what is absent (6% importance; off-polygon collapse). Consequently there is no mask-independent non-fire ground truth: a false positive that sits off every polygon and off every persistence/flare cue simply has no label, so a truly-novel FP the masks miss cannot be counted here — closing that requires a human-reviewed gold subset, the same conclusion entry 0028 reached. All data is summer 2026 over a ~13-day window (2026-06-27…07-10), so the transport gate is train-earlier / test-later within summer (days, not seasons); off-season validation is deferred until winter data exists. VIIRS I4 saturates near 367 K, censoring the brightness-temperature channel for the most energetic sources and capping the non-mask ceiling.

Literature alignment. Verdict: AGREEMENT. Persistent industrial and gas-flaring thermal sources are the dominant commission-error class in VIIRS/GOES active-fire products, and the operational remedy is exactly a static hot-source mask / Nightfire flaring catalog / persistent-anomaly exclusion [11][1][19], keyed off registries such as the WRI power-plant database [18]. The learned “real-bogus” classifier paradigm from time-domain astronomy [26] adds value precisely when it captures signal beyond the existing cuts. Our out-of-time result [4] agrees the spectral/footprint/diurnal signal is real (non-mask PR-AUC 0.869, well above chance) but shows it is not orthogonal to the shipped mask/persistence/registry cuts — permutation importance [27] places 94% of the power on mask features — so a learned real-bogus filter re-derives the masks rather than beating them. This is the same pattern entry 0027 found for temporal dynamics collapsing onto GOES persistence, and the same brightness-temperature contrast that underlies Dozier sub-pixel retrieval [7] is here already implicit in the persistence/flaring masks.

What this does not claim: that VIIRS brightness-temperature / footprint / diurnal signal is uninformative — it reaches 0.869 PR-AUC alone and is a valid physical fire-vs-industrial discriminant; that the lone-VIIRS FP problem is solved — entries 0022/0028 measure it at ~20–27% and it remains the largest surfaced-FP lever; nor that no learned filter could ever help — only that on this slice, with mask-derived labels, the non-mask channel adds no orthogonal out-of-time value over the polygons already shipped, because the separable signal is persistence/registry, which the masks encode. Next: the honest levers are (1) extend the shipped persistence polygon set to freshly-detected fixed-cell persistent sources (a mask-family, not a classifier — measure recovered-FP vs added-FP over ≥14 runs before any cutover), and (2) build the human-reviewed gold subset entry 0028 called for, which is the only way to obtain mask-independent non-fire labels and thereby test whether any non-mask signal catches FP the masks genuinely miss. Until such labels exist, the shipped masks remain the filter to beat — and they already see the separable part of the real-bogus signal.

The gate is doing its job. This is the sixth recovery/gate candidate the transport check has correctly stopped — after the Dozier multi-feature gate, the Dozier early-cue tier, recovery+raw-geo, recovery+physical-geo, and recovery+temporal-dynamics. Each time the near-miss control (here non-mask 0.869) is explained by permutation importance as signal the production baseline already owns.

References: [11] · [1] · [19] · [18] · [26] · [27] · [4] · [7]

entry 0033

A finer fire-growth-truth dataset (full-precision VIIRS 375 m footprints + IRWIN acreage series, replacing the 0.01°-quantized member tokens of entry 0030) shows the persistence spread signal is real and stronger, not a truth artifact: mean-resultant R rises 0.44→0.54 on the same all-fires test and 0.63→0.72–0.84 on a now-robust resolvable subset (n=70–117, up from n=13–17); the current-wind model still scores at the random-direction null and the earlier 176° “spreads-upwind” offset vanishes — confirming it was a coarse-GOES footprint-fill artifact — 0034

Date: 2026-07-11   Status: defensible (measured; read-only on production; honest baselines; research/prototype only, no cutover, nothing surfaced) — builds one hidden shadow dataset (growth_truth_shadow, surface_allowed=0, not read by the serving app); directly resolves the truth-quality bottleneck flagged by entry 0030

The framing. Entry 0030 prototyped a short-horizon fire-spread nowcast and found a clean split: the simple physical wind model had no measured skill (R=0.02) while a persistence baseline — the fire’s own earlier motion predicting its later direction — scored R=0.44. But 0030 could not say how much of that 0.44 was real, because its growth truth was detection-footprint centroids read from fused member tokens quantized to 0.01° (≈1.1 km), GOES-dominated, with a median observed displacement of only 0.44 km — below one pixel. On the tiny resolvable subset (n=17) the wind vector even pointed ∼176° opposite to observed motion, which 0030 diagnosed (but could not prove) as a footprint-fill artifact. This entry removes that bottleneck: it rebuilds the growth truth from the raw per-detection evidence at full precision and re-measures every 0030 statistic against it.

BLUF. The raw evidence table carries the finer truth 0030 lacked. Rebuilding growth tracks from full-precision VIIRS active-fire pixels (375 m native, ≈5-decimal coordinates — roughly 3× finer than the 1.1 km fused rounding) and, independently, from the IRWIN IncidentSize acreage time-series, yields a 971-row growth-truth dataset (313 VIIRS footprint tracks, 14 MODIS fallback, 644 IRWIN acreage series). On this finer truth the persistence signal strengthens: on the same all-fires direction test the mean-resultant length rises to R=0.54 (n=150, mean angular error 48.2°) from 0030’s 0.44, and on a resolvable-displacement subset that is now robustn=70 at ≥0.75 km, n=117 total, versus 0030’s n=13–17 — it reaches R=0.72 (≥0.75 km) and R=0.84 (≥1.1 km, mean error 22.8°, 86% within 45°). The current-wind model still lands at the random-direction null (R≈0.14–0.22, mean error 96–100°), and critically the 176° reversal of 0030 is gone (mean error ≈97°, i.e. simply uninformative rather than anti-correlated) — direct evidence the reversal was a coarse-footprint artifact, exactly as 0030 suspected. On rate, the wind×dryness index still shows no skill (Spearman −0.12), but two independent growth-rate truths agree: VIIRS footprint growth-rate vs. IRWIN acres/hour correlate at Spearman 0.56 (n=63 spatially-linked fires) — the observed rate is real even though the physical predictor does not capture it. Verdict: the persistence-spread signal is real and now well-resolved; a default-OFF persistence advisory is defensibly buildable. Wind still adds nothing without a time-archive. Nothing was surfaced; the only write is a hidden, gated shadow dataset.

Growth-truth source inventory. The point of this pass was to find the finest time-resolved growth record available per fire and state the precision of each candidate honestly.

growth-truth sourceprecisionavailability on-boxwhat it gives
full-precision VIIRS active-fire pixels375 m native, ≈5-decimal lat/lon313 fused fires with ≥6 VIIRS detections spanning ≥3 hdirection and rate; ≈3× finer than the 1.1 km fused member rounding
IRWIN IncidentSize acreage seriesscalar area, sub-daily polling2,985 WF incidents; 644 carry a real monotone growth seriesdirect rate truth (area vs. time); no direction (fixed InitialLatitude/Longitude origin)
MODIS active-fire pixels1 km native14 fires (VIIRS-absent fallback)direction+rate, coarser than VIIRS
fused member tokens (entry 0030’s truth)0.01° ≈ 1.1 km quantizedsuperseded — median displacement collapsed below one pixel
S2/S1 burn-scar area deltas10–20 m spatialfire_perimeters 132 single-snapshot; S2-SWIR 2,976 / S1 465 point detectionsno per-fire area time-series stored — deferred (would need scar-area accrual)

Method (mirror of entry 0030, finer truth). Anchor on the same corpus — fused_fires with tier∈{confirmed,probable}, n_frames≥8, track span ≥3 h — but instead of parsing the 0.01° member tokens, spatially join the raw full-precision detections (fire_event_evidence: VIIRS-N20/N21/NPP preferred, MODIS fallback) within 7 km of the fused centroid and within the fire’s time window, then recompute the growth track from those coordinates. Split each fire’s detections into early/mid/late thirds by time; the early→late centroid bearing is observed direction and the displacement / elapsed hours is observed rate; the persistence baseline is the early→mid bearing. Direction skill uses circular statistics (mean angular error, mean-resultant length R, Rayleigh test) against a 90° uniform null [23]; the wind model is the RAWS downwind bearing (wind_dir_deg + 180°). Independently, the IRWIN acreage series gives a per-incident acres/hour rate; the two rate truths are cross-checked on fires within 10 km of an IRWIN WF incident. Every read is mode=ro on production.

predictorsubset (finer truth)nmean ang. errmedianwithin 45°RRayleigh p
random-direction null90.0°90.0°0.251.00
persistence (fire’s own motion)all15048.2°26.8°0.610.543<10−300
persistenceresolvable ≥0.75 km7032.7°14.8°0.760.723<10−300
persistenceresolvable ≥1.1 km4322.8°9.9°0.860.839<10−300
downwind (wind+180°)all327100.4°103.7°0.170.2191.3×10−7
downwind (wind+180°)resolvable ≥1.1 km7796.6°106.8°0.170.1420.21

Comparison to entry 0030 (0.01°-quantized truth): persistence all was R=0.44 (n=165, mean 55.5°); persistence resolvable was R=0.63 (n=13); the wind model was R=0.02 all / R=0.50 at a spurious 176° offset on n=17. On finer truth persistence rises at every cut, the resolvable subset grows ∼5× in size, and the wind model’s R stays at the null with the 176° offset replaced by an ordinary ≈97° (uninformative) error — i.e. the reversal was the coarse-footprint fill artifact, not physics. Median observed displacement rises from 0.44 km (quantized) to 0.84 km (finer), which is why the resolvable subset is no longer starved.

Rate skill. The wind×dryness ROS index still does not predict observed footprint growth-rate on the resolvable subset (Spearman −0.12, n=117; wind-speed-alone +0.07) — no skill over the predict-median baseline, confirming entry 0030. But the observed rate itself is real: on the 63 footprint fires that spatially link (≤10 km) to an IRWIN WF incident, the VIIRS footprint growth-rate and the IRWIN acres/hour series correlate at Spearman 0.56 — two physically independent growth-rate measurements agreeing. The gap is therefore in the predictor (live, spatially-mismatched wind), not in the growth target.

Reproducibility detail. Resource-guarded on the host: health-gated on the host service (exit 75 if inactive), yields to the hard host busy marker, run under a private serialization marker (unique name, so a concurrently-running sibling job is never contended) inside a capped experiment slice with a server-side timeout + nice -n19 and a thermal-abort watchdog, killed by PID. Reads are mode=ro on all production tables. The only write is a new hidden table growth_truth_shadow registered in canary_meta with surface_allowed=0 and a DO_NOT_SURFACE gate reason; the serving app does not read it. Corpus = fused_fires tier∈{confirmed,probable}, n_frames≥8, span ≥3 h; for each, all fire_event_evidence VIIRS (else MODIS) detections within 7 km of the fused centroid and within [first_seen−2h, last_seen+2h] are pulled at native precision via an in-memory 0.05° spatial grid over 9.41 M loaded detections; a fire qualifies with ≥6 detections, ≥2 in each of early/late thirds, span ≥3 h (327 fires: 313 VIIRS, 14 MODIS). IRWIN series = IncidentSize parsed from the raw IRWIN JSON, grouped by IrwinID, restricted to IncidentTypeCategory=WF, cumulative-max over ModifiedOnDateTime_dt (644 incidents with a real monotone growth series). Resolvable = observed displacement ≥0.75 km (2× VIIRS pixel) or ≥1.1 km, RAWS within 40 km. Circular stats = mean angular error, mean-resultant R, Rayleigh test on signed (observed−predicted) offsets; persistence = early→mid centroid bearing. Every figure counted from the live production DB at run time; growth_truth_shadow = 971 rows (313 viirs_footprint, 14 modis_footprint, 644 irwin_acres), 161 of the footprint rows flagged resolvable.

Claim status: MEASURED, read-only on production, honest baselines, research/prototype only. This entry rebuilds the growth truth at finer resolution and re-runs entry 0030’s validation against it; it changes no fusion/tier/confidence/map/API surface and surfaces nothing. Its one write is an additive, gated, do-not-surface shadow dataset. The headline is that the persistence signal survives and strengthens a ∼3× finer truth while the wind model does not, and that the 0030 reversal was an artifact.

Honest bounds. (1) The persistence baseline shares its start point with the observed vector (both anchored on the early centroid), so a fraction of its R is construction overlap — identical to the 0030 caveat; the load-bearing contrast is that coherent direction demonstrably exists (R=0.54–0.84) while the current-wind model captures essentially none of it (R≈0.14–0.22). (2) Footprint corpus is VIIRS-overpass-limited — only 327 of 954 candidate fused fires accrue ≥6 native detections over ≥3 h, because polar VIIRS sees a given fire only a few times per day; this biases toward larger/longer-lived fires. (3) IRWIN acreage is rate-only — a scalar with a fixed reporting origin; it validates rate but contributes no direction, and its polling cadence and human-reporting lag are coarser than the satellite footprint. (4) No independent perimeter time-series — S2/S1 burn scars are stored as single snapshots / point detections, not per-fire area accruals, so the finest spatial truth (10–20 m) is not yet time-resolved on-box. (5) Wind is still a live snapshot (median 28 km to nearest RAWS, no historical archive), so the wind model’s continued failure remains, in part, a data-timing failure, not proof wind is irrelevant. (6) Single warm-season CONUS window — nothing here speaks to other seasons or regions.

Literature alignment. Verdict: CONFIRMS-AND-STRENGTHENS (the target’s coherence is now well-resolved; the model gap is data, not physics). That real fires have a coherent, measurable spread direction and rate is exactly what satellite fire-progression atlases quantified [16]; recovering that coherence more cleanly at finer detection resolution is expected. The persistence-of-motion result and the wind model’s failure-by-mismatch are consistent with Rothermel/empirical surface-spread theory [21][22] under a temporally-mismatched wind input. The disappearance of the 176° offset when detection quantization is removed is a textbook case of coarse geostationary footprints conflating detection onset/fill with physical growth [3][8]. Circular-statistics scoring follows standard directional-data methods [23].

What this does not claim: that wind does not drive fire spread (it does — the on-box wind is too temporally/spatially mismatched to show it), that persistence is a physical spread model (it is a momentum baseline, and part of its score is construction overlap), that VIIRS 375 m footprints are a perfect perimeter truth (they are sparse in time and biased to larger fires), or that any number here should touch serving (nothing is surfaced; the shadow dataset is gated surface_allowed=0). Recommendation: the truth bottleneck of entry 0030 is now resolved and the persistence signal is real and well-resolved, so the honest next product is a default-OFF persistence spread advisory — extrapolate each active fire’s own recent growth vector (“spreading roughly NE at ∼X”), built as a shadow layer validated against growth_truth_shadow, never as a detection. Two data gaps remain before wind can correct that advisory: (a) a time-archived wind joined at the detection timestamp (snapshot RAWS into a history table, or ingest gridded HRRR/GFS into the empty weather_cells); (b) a time-resolved perimeter/scar-area truth (accrue S2/S1 burn-scar area per fire) to tighten the rate signal below the VIIRS-cadence limit. Until (a) exists, wind stays out of the advisory. Mark decides.

Hard-bound: warm-season CONUS, single active-fire window; footprint truth is VIIRS 375 m / MODIS 1 km, sparse in time and biased toward larger/longer-lived fires (n=327 tracks; n=43–117 resolvable); IRWIN acreage is a scalar rate-only series with reporting lag (n=644); no independent time-resolved perimeter truth; wind remains a live snapshot with no historical archive. Every conclusion is scoped to that regime; the persistence result is a statement about observed fire momentum in this window, and the wind negative remains a statement about the current observations, not the physics of fire spread.

References: [3] · [8] · [16] · [21] · [22] · [23]

entry 0034

References

  1. Schroeder, W. et al. (2014). The New VIIRS 375 m active fire detection data product. Remote Sensing of Environment 143, 85–96.
  2. Giglio, L. et al. (2016). The Collection 6 MODIS active fire detection algorithm and fire products. Remote Sensing of Environment 178, 31–41.
  3. Schroeder, W. et al. (2008). Validation of GOES and MODIS active fire detection products. Remote Sensing of Environment 112, 2711–2726.
  4. Jain, P. et al. (2020). A review of machine learning applications in wildfire science and management. Environmental Reviews 28(4), 478–505.
  5. Rodrigues, M. & de la Riva, J. (2014). An insight into machine-learning algorithms to model fire susceptibility. Environmental Modelling & Software 57, 192–201.
  6. Short, K. C. (2014). A spatial database of wildfires in the United States (FPA-FOD): reporting completeness and bias considerations. Earth System Science Data 6, 1–27.
  7. Dozier, J. (1981). A method for satellite identification of surface temperature fields of subpixel resolution. Remote Sensing of Environment 11, 221–229.
  8. Schmidt, C. C. et al. (2012). The GOES-R Advanced Baseline Imager Fire/Hot Spot Characterization (FDC) algorithm. NOAA/NESDIS ATBD.
  9. Govil, K. et al. (2020). Preliminary results from a wildfire detection system using deep learning on remote camera networks. Remote Sensing 12(1), 166.
  10. Xu, W. & Wooster, M. J. et al. (2020). First study of Sentinel-2 for detecting and characterising active fires. Remote Sensing 12(19), 3181.
  11. Elvidge, C. D. et al. (2016). Methods for global survey of natural gas flaring from VIIRS Nightfire. Energies 9(1), 14.
  12. Schroeder, W. et al. (2016). Active fire detection using Landsat-8/OLI data. Remote Sensing of Environment 185, 210–220.
  13. Koltunov, A., Ustin, S. L., Quayle, B., Schwind, B., Ambrosia, V. G. & Li, W. (2016). The development and first validation of the GOES Early Fire Detection (GOES-EFD) algorithm. Remote Sensing of Environment 184, 436–453.
  14. St. Denis, L. A., Short, K. C., McConnell, K., Cook, M. C., Mietkiewicz, N. P., Buckland, M. & Balch, J. K. (2023). All-hazards dataset mined from the US National Incident Management System 1999–2020. Scientific Data 10, 112.
  15. Giglio, L. (2007). Characterization of the tropical diurnal fire cycle using VIRS and MODIS observations. Remote Sensing of Environment 108(4), 407–421.
  16. Andela, N., Morton, D. C., Giglio, L., Paugam, R., Chen, Y., Hantson, S., van der Werf, G. R. & Randerson, J. T. (2019). The Global Fire Atlas of individual fire size, duration, speed and direction. Earth System Science Data 11, 529–552.
  17. Cochran, W. G. (1977). Sampling Techniques (3rd ed.). Wiley. [stratified estimation, Neyman allocation, finite-population correction]
  18. Byers, L., Friedrich, J., Hennig, R., Kressig, A., Li, X., McCormick, C. & Malaguzzi Valeri, L. (2018). A Global Database of Power Plants. World Resources Institute (WRI Global Power Plant Database).
  19. Csiszar, I., Schroeder, W., Giglio, L., Ellicott, E., Vadrevu, K. P., Justice, C. O. & Wind, B. (2014). Active fires from the Suomi NPP Visible Infrared Imaging Radiometer Suite: Product status and first evaluation results. Journal of Geophysical Research: Atmospheres 119(2), 803–816.
  20. Li, F., Zhang, X., Kondragunta, S., Schmidt, C. C. & Holmes, C. D. (2020). A preliminary evaluation of GOES-16 active fire product using Landsat-8 and VIIRS active fire data, and ground-based prescribed fire records. Remote Sensing of Environment 237, 111600.
  21. Rothermel, R. C. (1972). A mathematical model for predicting fire spread in wildland fuels. USDA Forest Service Research Paper INT-115. Intermountain Forest and Range Experiment Station.
  22. Cheney, N. P., Gould, J. S. & Catchpole, W. R. (1993). The influence of fuel, weather and fire shape variables on fire-spread in grasslands. International Journal of Wildland Fire 3(1), 31–44.
  23. Fisher, N. I. (1993). Statistical Analysis of Circular Data. Cambridge University Press. [mean-resultant length, Rayleigh test of uniformity]
  24. Prins, E. M. & Menzel, W. P. (1994). Trends in South American biomass burning detected with the GOES Visible Infrared Spin Scan Radiometer Atmospheric Sounder from 1983 to 1991. Journal of Geophysical Research: Atmospheres 99(D8), 16719–16735. [WF-ABBA geostationary detection; cadence-vs-false-alarm trade-off]
  25. Kumar, S. S. & Roy, D. P. (2018). Global operational land imager Landsat-8 reflectance-based active fire detection algorithm. International Journal of Digital Earth 11(2), 154–178. [OLI B6/B7 reflectance-based active-fire test; derived Landsat hotspots, no operational feed]
  26. Bloom, J. S., Richards, J. W., Nugent, P. E., Quimby, R. M., Kasliwal, M. M., Starr, D. L., Poznanski, D., Ofek, E. O. et al. (2012). Automating discovery and classification of transients and variable stars in the synoptic survey era. Publications of the Astronomical Society of the Pacific 124(921), 1175–1196. [origin of the machine-learned “real-bogus” classifier — a learned filter earns its place only by adding signal beyond the existing cuts]
  27. Breiman, L. (2001). Random forests. Machine Learning 45(1), 5–32. [permutation feature importance as attribution of discriminative power]