OLDGABE-only (US wildfire detection). A public record of measured results with honest bounds and full reproducibility. Nothing on this page changes a shipped OLDGABE number.
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
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)
AUC
PR-AUC
recall@90%p
recall@80%p
recovery model (detection features)
0.936
0.735
0.379
0.605
production tier_and_conf
0.951
0.544
0.065
0.095
production indep-families
0.500
—
0.000
0.000
production max-FRP
0.787
0.161
0.006
0.019
Truth2 (neutral polar, HMS-independent)
AUC
PR-AUC
recall@90%p
recall@80%p
recovery model (detection features)
0.845
0.511
0.064
0.272
production tier_and_conf
0.786
0.273
0.000
0.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:
truth
month-only
geo-only
detection-only
all
summer-share gap
Truth1
0.577
0.903
0.936
0.973
0.00
Truth2
0.567
0.877
0.845
0.932
0.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.
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
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)
AUC
PR-AUC
recall@80%p
detection-only recovery (deployed)
0.938
0.736
0.583
recovery + geo
0.973
0.797
0.719
all (+month)
0.974
0.803
0.722
geo-only
0.901
—
—
production tier_and_conf
0.950
0.539
0.092
Truth2 (neutral polar)
AUC
PR-AUC
recall@80%p
detection-only recovery (deployed)
0.860
0.573
0.368
recovery + geo
0.941
0.688
0.531
all (+month)
0.940
0.686
0.526
geo-only
0.886
—
—
production tier_and_conf
0.807
0.325
0.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 → test
truth
detection-only
recovery+geo
production
Jul → Jun
Truth1
0.961
0.985
0.963
Jul → Jun
Truth2
0.876
0.955
0.834
Jun → Jul
Truth1
0.888
0.934
0.941
Jun → Jul
Truth2
0.840
0.913
0.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.
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 tier
n
avg conf
avg GOES frames
IRWIN/perim match
confirmed (≥2 CORE agree)
620
0.884
14.4
37.7% (234)
probable
3,340
0.528
1.6
13.2% (442)
early (GOES-only)
6,982
0.05
1.3
5.5% (383)
weak (small n)
139
0.02
0.0
25.9% (36)
fp (flare/persistent)
360
0.00
1.9
10.6% (38)
raw single-detection baseline
4,000 sampled
—
—
8.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.
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 kept
precision (IRWIN match)
recall of Dozier positives
0.000 (ungated)
60,000
2.8%
100%
0.001
19,599
4.9%
57.6%
0.005
1,703
18.5%
18.7%
0.010
619
27.0%
9.9%
0.050
4
100% (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.
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…
recall
interpretation
polar (VIIRS/MODIS) near-match
27.2%
genuine polar detections
any-GOES near-match
92.4%
coverage floor (not skill)
GOES-persistent (≥3 h) near-match
66.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.
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.
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.
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):
source
precision
recall
tp
evidence n
OLDGABE-EVENTS (fused output)
18.2%
72.4%
3,355
18,394
HMS (smoke analysis)
16.0%
69.2%
6,906
43,214
VIIRS-N20
32.0%
58.7%
3,655
11,431
VIIRS-NPP
20.8%
31.3%
1,276
6,144
VIIRS-N21
19.7%
26.6%
1,012
5,150
MODIS
27.9%
22.2%
901
3,224
ABI-ADP-Smoke-G19
8.8%
24.1%
721
8,174
ABI-ADP-Smoke-G18
26.0%
24.2%
858
3,298
GOES19-ABI
15.8%
14.7%
521
3,304
GOES18-ABI
39.8%
14.6%
528
1,328
ABI-Dozier-Subpixel-G18
48.3%
1.3%
42
87
ABI-Dozier-Subpixel-G19
26.3%
1.3%
42
160
CAM-SMOKE
66.7%
1.2%
38
57
S1-SAR-BurnScar / S2-SWIR-Hotspot
—
0.0%
0
0
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.
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.
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.
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.
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):
metric
value
Dozier earlier than polar
53.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 point
single p_subpixel precision
multi-feature precision
recall 0.05
9.5%
39.9%
recall 0.10
8.0%
39.4%
recall 0.20
5.3%
32.6%
recall 0.30
4.8%
19.6%
PR-AUC
0.044
0.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.
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.
metric
value (95% CI)
IRWIN fires in S2 window
1,764
missed by all current sensors
191 (10.8%)
existing ingested-S2 unique marginal
0 / 191 = 0% (0–2%)
S2 scene availability over missed (sample 50)
100% (92.9–100%)
actual S2 SWIR active-fire hit
2 / 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.
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 point
single p_subpixel
multi-feature gate
precision @ recall 0.05
13.3%
41.7%
precision @ recall 0.10 (current gate)
11.6%
49.3%
precision @ recall 0.20
6.5%
50.8%
precision @ recall 0.30
4.8%
45.8%
recall to hold 49.3% precision
0.2%
10.0% (~50×)
PR-AUC
0.051
0.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.
metric
value
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 detection
4.3 h (IQR 2.0–7.4 h)
share with ≥1 h lead / ≥6 h lead
84.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.
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 split
single p_subpixel
multi-feature gate
holdout ROC-AUC (gate)
τ=0.965 recall
A — earliest 60% train / latest 30% test
39.8%
13.8%
0.60
0.0
B — split at median fire time (balanced positives)
31.0%
19.1%
0.64
0.0
Precision across the recall curve (single vs multi-feature, holdout). Single wins at every point:
recall
A single
A multi
B single
B multi
0.05
0.366
0.193
0.583
0.200
0.10
0.398
0.138
0.310
0.191
0.20
0.430
0.138
0.302
0.250
0.30
0.313
0.121
0.322
0.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.
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.
cohort
window (UTC)
Dozier n
early-cue n
tier precision
baseline
enrichment
median lead
A — matured, settled truth (05-30/31 backfill)
05-31→06-01
174,435
600
2.5%
1.0%
2.5×
24.6 h
B — recent, UNSETTLED truth (live 07-02+)
07-02→07-09
25,565
2,037
39.5%*
6.3%
6.3×
3.7 h
all blended (reproduces entry 0011)
05-31→07-09
200,000
2,637
31.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).
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).
driver
bin
fires
recall-in-coverage
range to nearest online camera
<15 km
725
47.4%
15–30 km
256
20.3%
30–40 km
102
3.9%
solar elevation (day/night)
day (≥0°)
538
30.5%
twilight (−6..0°)
51
27.5%
night (<−6°)
494
44.9%
fire size (IRWIN acres)
<10 ac
1,001
37.2%
10–100 ac
24
16.7%
>100 ac
13
15.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 trigger
recall-in-coverage
precision
camera events
0.50 (current)
36.9%
58.1%
1,037
0.45
39.9%
58.1%
1,371
0.40
44.7%
57.4%
1,771
0.35
46.5%
57.5%
2,229
0.30
49.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
candidate — not 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.
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).
window
trigger
recall-in-coverage
precision
train
0.50
36.2%
58.1%
0.30
50.5%
59.3%
test (later)
0.50
34.8%
56.1%
0.30
43.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).
network
in-coverage
recall 0.50→0.30
precision 0.50→0.30
HPWREN (fire cams)
254
45.3% → 90.6%
78.1% → 78.6%
AlertCalifornia (fire cams)
260
73.8% → 90.0%
78.9% → 81.3%
Caltrans (traffic)
661
25.9% → 39.6%
55.7% → 54.1%
Windy (webcams)
823
32.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.
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:
network
trigger
surfacing events
precision
HPWREN
0.50
58
72.4%
0.30 (live)
190
76.3%
AlertCalifornia
0.50
80
86.3%
0.30 (live)
210
84.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.
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 bucket
fires
% of miss
missed acres
≥100 ac fires
recall lever
Liveness — confirmed in 30 d, not re-seen in 24 h
1,275
90.6%
360,743
100
active-fire persistence / cadence
Sub-floor — nothing of any status in 30 d
132
9.4%
3,909
6
new sensing / lower floor (low yield)
Single-sensor seen, fusion rejected
0
0.0%
0
0
— (loosening the gate recovers nothing)
Already recoverable by geo canary now
0
0.0%
0
0
—
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.
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.
scorer
AUC
PR-AUC
recall@90%p
recall@80%p
production tier_and_conf
0.861
0.265
0.00
0.00
recovery, det-only (19 feat)
0.837
0.201
0.00
0.00
recovery + geo (21 feat)
0.856
0.177
0.00
0.00
geo-only (lat/lon)
0.723
0.066
0.00
0.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)
AUC
PR-AUC
recall@80%p
production tier_and_conf
0.890
0.489
0.073
recovery, det-only
0.867
0.604
0.399
recovery + geo
0.944
0.691
0.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.
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
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 fires
kept “active”
dead/stale resurrected (added-FP)
naive ungated (keep every confirmed fire alive)
42,725
42,286
two-condition liveness gate
439
0 measurable
What the gate filters, and why (the FP-safeguard, itemized).
gate funnel
count
population: confirmed, not re-imaged in 24 h
42,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 gained
439
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.
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 tier
n
strict prec (IRWIN∪WFIGS)
broad prec (+≥2 families)
ALL surfaced
1,985
23.7%
62.5%
confirmed
458
29.0%
98.0%
probable
1,527
22.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 string
n
strict prec
IRWIN hit
WFIGS hits
GOES only
178
41.6%
37.6%
29
GOES,HMS
107
36.4%
36.4%
35
GOES,HMS,MODIS,VIIRS
95
35.8%
34.7%
30
HMS only
327
32.7%
32.1%
76
HMS,MODIS,VIIRS
108
28.7%
26.9%
30
GOES,HMS,VIIRS
85
27.1%
25.9%
17
HMS,VIIRS
537
16.4%
14.9%
56
MODIS only
86
14.0%
12.8%
3
VIIRS only
392
11.5%
11.5%
18
MODIS,VIIRS
23
8.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)
kept
strict prec
real dropped
recall cost
L0 baseline (current map)
1,985
23.7%
0
0.0%
L1 corroboration gate: drop all single-family probable
1,012
23.0%
237
50.4%
L3 drop VIIRS-only + MODIS-only + MODIS,VIIRS
1,484
27.7%
59
12.6%
L4 single-family probable require FRP≥20
1,381
27.7%
87
18.5%
L5 single-family probable require FRP≥50
1,237
27.9%
125
26.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.
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 threshold
mask cells
FP suppressed (out-of-time)
real IRWIN masked (2 km)
real IRWIN masked (5 km)
real WFIGS masked
≥3 distinct days
1,022
361
0
0
0
≥5 distinct days (operating)
660
283
0
0
0
≥7 distinct days
496
242
0
0
0
≥10 distinct days
321
177
0
0
0
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.
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
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.
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.
stratum
N
true FP rate (point)
Wilson-95 (sampling)
ambiguous bracket (epistemic)
ALL surfaced
1,985
19.7%
[18.1%, 21.6%]
[12.2%, 27.3%]
tier = confirmed
458
4.6%
[3.0%, 6.9%]
[4.6%, 4.6%]
tier = probable
1,527
24.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 group
N
positive-fire
positive-non-fire
middle
true FP rate (point)
VIIRS-only (single family)
392
188
185
19
49.4%
HMS-only (analyst-derived)
327
206
0
121
15.9%
has-GOES (geostationary)
495
369
6
120
14.1%
VIIRS+MODIS (polar ×2)
131
115
16
0
12.2%
HMS+VIIRS
537
410
1
126
10.1%
MODIS-only
103
75
0
28
5.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 set
share
count
interpretation
IRWIN/WFIGS-listed incident
23.7%
470
the entry-0020 floor (numerator)
unlisted REAL fire
56.6%
1,123
real fire IRWIN never listed — the bulk of the “gap”
genuine NON-FIRE false positive
19.7%
392
the 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.
Schroeder, W. et al. (2014). The New VIIRS 375 m active fire detection data product. Remote Sensing of Environment 143, 85–96.
Giglio, L. et al. (2016). The Collection 6 MODIS active fire detection algorithm and fire products. Remote Sensing of Environment 178, 31–41.
Schroeder, W. et al. (2008). Validation of GOES and MODIS active fire detection products. Remote Sensing of Environment 112, 2711–2726.
Jain, P. et al. (2020). A review of machine learning applications in wildfire science and management. Environmental Reviews 28(4), 478–505.
Rodrigues, M. & de la Riva, J. (2014). An insight into machine-learning algorithms to model fire susceptibility. Environmental Modelling & Software 57, 192–201.
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.
Dozier, J. (1981). A method for satellite identification of surface temperature fields of subpixel resolution. Remote Sensing of Environment 11, 221–229.
Schmidt, C. C. et al. (2012). The GOES-R Advanced Baseline Imager Fire/Hot Spot Characterization (FDC) algorithm. NOAA/NESDIS ATBD.
Govil, K. et al. (2020). Preliminary results from a wildfire detection system using deep learning on remote camera networks. Remote Sensing 12(1), 166.
Xu, W. & Wooster, M. J. et al. (2020). First study of Sentinel-2 for detecting and characterising active fires. Remote Sensing 12(19), 3181.
Elvidge, C. D. et al. (2016). Methods for global survey of natural gas flaring from VIIRS Nightfire. Energies 9(1), 14.