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 load-guarded on the host (load_guard.sh wrap, 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; shadow-only, surface_allowed=0)

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

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.