Geothermal plants, landfill flares and sunlight glancing off solar farms all read as heat from orbit. The Dora Fire of August 2026 started two kilometres from a solar array whose daily glint had taught the system to ignore that neighbourhood. This page is the arithmetic that keeps that from happening again.
Recurrence needs to explain, not just exist
Heat seen near a point on three or more days used to veto every camera check there. The veto now carries a signature: when that heat happens, and which satellites report it. It suppresses a new observation only when both match.
Recurring heat only suppresses an observation it can explain. Six evenings at 23:13 to 23:28 on GOES-19 explain a seventh, and say nothing about heat at 21:28 on two platforms. Before this test, the whole week vetoed the whole neighbourhood.
Time axis
Within 45 minutes of the pattern
A reflection is geometry, so it keeps a schedule. A new observation more than 45 minutes outside every time the background has ever appeared is not explained by it. The tolerance is wide enough that seasonal drift cannot walk a source out of its own signature.
Platform axis
Seen by a satellite that never saw it
GOES-18 and GOES-19 scan together, not in turns. A background only one of them has ever reported cannot vouch for heat both are looking at, and a second platform is real corroboration, not a sampling accident.
The default
Unknown counts as a match
With nothing recorded on other days there is nothing to compare, so the veto stands exactly as it did before the signature existed. This test only ever lifts a veto on positive evidence of a difference.
Freshness is judged on the burst, the run of activity with no hour-long gap, not on the episode. Episodes merge across 24 hours, and the Antelope Valley glint repeats every 23.9, so six quiet evenings once chained into one six-day object that made a brand new fire look old. The episode remains the unit of identity and evidence; the burst is the unit of “is this happening now”.
Sun glint has a shape, and it is computable
The classic satellite glint test assumes a horizontal mirror and passes solar farms straight through: panels are tilted. The right question is whether a realistic panel orientation could reflect the sun into this satellite at this moment. That has a closed form, from the pixel’s coordinates and timestamp alone.
A mirror reflects the sun into a satellite only when its normal bisects the two directions. That mirror exists for GOES-19 here and is an ordinary fixed-tilt array. For GOES-18 it is not a real installation, so the glint arrives on one platform, at one time of day.
The worked math
With ŝ the unit vector to the sun and v̂ the unit vector to the satellite, a mirror reflects one into the other exactly when its normal bisects them:
A detection is flagged as plausible glint when exactly one platform reported it, the sun is up, and the required orientation lands inside the measured envelope: tilt 19° to 33°, facing 160° to 220°. Those bounds come from a backtest over 37 days of archived GOES data, not from judgement, and the strongest measured clusters sit at tilt 20° to 27° facing nearly due south, stable for weeks.
1.000 vs 0.735Median orientation clustering, solar cells against fire cells, over 37 archive days
6 of 7 and 13 of 15Glint days caught at first scan at the two wild sources, with zero history
14.7% and 1.7%Fire cells wrongly matching the envelope, without and with the power tier
The flag is a score penalty of 6 points, or 12 when the radiative power also exceeds 300 MW, a level measured on reflections far more often than on a fire’s first scans. It is never a veto and never a blocking reason, because the same geometry is satisfied by about one in seven real fires at their opening burst. A fire burning beside a solar farm looks like this too, and the system must stay curious about it.
The facility catalogs
Named facilities carry penalties by kind and distance. California comes from live state catalogs with stored fallbacks; the rest of the coverage area, including Nevada’s 26 geothermal plants, comes from a checked-in federal snapshot that costs the live path nothing.
Kind
Match radius
Base penalty
Note
Geothermal
5 km
-36
The only kind that can hard-block on its own.
Landfill
3 km
-30
Gas flares run nightly, including at closed sites that still collect.
Biomass and waste
3 km
-30
Shift-based combustion.
Fossil power
2.5 km
-24
Cannot reach the hard veto.
Solar
3 km
-18
Cannot reach the hard veto. Glint is handled by geometry, below.
The penalty scales with proximity and is cut to roughly a third when the thermal footprint does not actually cover the facility. Near a plant is circumstance; over a plant is attribution. Sources: the California Energy Commission and CalRecycle, live; EIA and EPA landfill data for the rest, rebuilt offline and cross-validated against the live catalog before the file can be written.
What the background is learning next
A steady source explains a steady reading. It cannot explain a reading far above its own history, and that distinction needs a memory of levels, not just days.
Stored
A clock and a magnitude per cell
For every 2 km cell, each day and half-hour slot keeps a detection count and running sums of log radiative power, so a mean and a spread are recoverable for months after the pixels themselves are deleted.
Computed
Occupancy and a z-score
How often this place shows heat at this hour, and how far today’s reading stands above its usual level. A landfill flare at its nightly 2 MW is ordinary; the same cell at 200 MW is not, however many days it has burned.
Status
Recorded, deciding nothing yet
Both numbers ride every saved candidate so their accuracy can be measured against outcomes. They move no score and no gate until that measurement exists, because letting them act now would widen what publishes on an untested rule.
What this still cannot do
A brand new solar array’s very first glint can still buy one camera look. The geometry flags it and lowers its rank, but the fast paths for fresh strong signals deliberately do not read the score.
The glint envelope is a summer measurement. Winter sun geometry shifts every required orientation, and the bounds get remeasured before they are trusted far from the season that produced them.
Morning glint from tracking arrays and mirror plants sits outside the fixed-tilt envelope on purpose. Widening by eye is the mistake the measured bounds exist to prevent.
Recurrence, facilities and geometry are all priors. None of them proves an industrial source, and none of them may ever be the only reason a strong fresh signal goes unexamined.
The rules on this page live in background-signature.ts, glint.ts, heat-background.ts and static-heat-server.ts. Where the page and the code disagree, the code is right.