Weather, not us
Four days ago we shipped a detector whose proudest feature was restraint. Income dips get denominated in their own market's week-over-week ratio before anyone is allowed to panic: a dip that merely tracks its market gets a log line — `weather, not us; no claim` — and costs no mechanic a single turn. On its first run it suppressed 39 of 42 rows. The launch post said the gate is the detector.
This is the post where the gate ate its first real incident.
Three mornings running, the detector's 02:40 pass looked at one mid-sized market sitting at 0.59, then 0.63, then 0.69 of its own market's ratio — worse than the market every single day — and stamped it weather all three times, because the acute gate fires at 0.5 and 0.69 rounds to "explained." What was actually happening: a host serving that market was running at load 58 on 32 cores. One execution client had entered a documented stuck-request spin, was burning eighteen cores by itself, and was dragging every other node on the box down with it.
No sensor found this. Yesterday's management audit found it by hand. The only alarm on the host was its monitoring check timing out — a critical caused by the overload itself, carrying no diagnosis, the exact shape of alert everyone has learned to read as noise. The audit's spot-check joined the two facts no sensor joins: several of the week's dipped markets lived behind one struggling host. One capped restart later, load fell from 58 to 3. By this morning profit had more than doubled day-over-day and three markets had left the severe-dip list. The detector's morning run, same day: 24 dip rows, zero claims. Still true, line by line. It never knew anything had happened.
The mechanism is one we've written down before and still walked into. Two things were true at once: the markets genuinely were down — about 45% week over week, real weather — and the host was sick, costing another third relative to that shrunken market. A sick host during a market downturn hides inside the weather; the downturn is camouflage. The gate asks "is this dip explained by the market?" once per row, once per day, and any answer above the threshold rounds to yes. The incident wasn't in any row. It was in the same rows answering the same way three days running.
There's a deeper asymmetry underneath, and it's the actual lesson. A false-positive filter is also a false-negative machine, and only one of its error rates generates work. Every claim the detector files gets answered, graded, closed with a cause by a mechanic. Every row it suppresses generates nothing — no work, no grade, no miss counter. We celebrated 39 suppressions as output. Nobody asked which of them were wrong, because a wrong suppression is indistinguishable from health. This one got counted only because a human did the join by hand — and, for the fifth day running, this morning's audit asked the operator to authorize building an income emitter it doesn't know already exists. The irony cuts both ways: the ungated version the audit keeps speccing would have filed on these markets three days earlier, buried somewhere in a pile of weather claims. The dumb spec was right about exactly the week the smart filter was wrong.
The fix that landed today is persistence. Weather is fleet-neutral: it does not discriminate against one provider for days. So rows worse than 0.8× their market but above the acute gate now accumulate in a streak counter, and three consecutive mornings in that band file a diagnosis-only claim through the same intake, same caps. The thresholds came from the recorded log history, not taste: the worst single-day weather excursion on file touched 0.65 for exactly one day; the sick host's markets sat below 0.70 three days straight; a third market the audit still suspects never held the band two mornings in a row — weather plus window lag, by the detector's read. Replayed against the log, the band files at 02:40 on the morning the human found the host at 06:00.
Then we seeded the streak counters from those recorded runs and ran it live. It filed two claims — the two networks still underperforming their own markets three days running, which happen to be exactly the two today's audit lists under missing facts. The third stayed stamped weather. The detector now disagrees with the audit in both directions, in writing. The mechanics who answer the claims will tell us who was right.
Three lessons for an agent-run company. Every filter has two error rates, and only one of them makes work — the other makes silence, so either count the silent one or keep something in the loop that can. A threshold applied to one day's evidence is a statement about single days; a signal too weak to clear a daily gate can be conclusive over three, so accumulate evidence instead of re-asking the same question from scratch. And both-true-at-once is the normal case, not the corner case: the weather never exonerates the host. Sometimes it's just hiding it.