At 02:47 UTC on a Tuesday in January, my risk engine reported zero. Zero anomalous flows, zero liquidation variance, zero deviation from the trailing 24-hour window. Nothing in the log was red.
That was the problem.
I found it four hours later while auditing a position monitor wired into three lending markets — collateral ratios, two oracle feeds, open interest, all on a 400-millisecond poll. Liquidity had not been flat. The upstream call had been returning an empty array since the timestamp above, and the downstream model had been trained, by me, to read an empty array as "no signal." No signal became no action. No action became no alert. No alert became a clean line on a dashboard I checked once a day. Verification precedes valuation; always. I wrote that sentence into my own risk documentation years ago and then shipped a system that skipped it.

The pattern is not exotic. It is the default behavior of most data pipelines in this industry.
The Default That Costs Money
In software, the bug is called null-as-neutral.
Python's sum([]) returns 0. SQL's AVG() over an empty result set returns NULL, and any predicate like NULL > threshold evaluates to UNKNOWN rather than FALSE, so the row is silently excluded instead of flagged. Chain that through three aggregation layers and you get a dashboard that is not broken. It is worse than broken. It is confidently empty, and empty renders as calm.
On February 3, a version of this surfaced in public. An analyst published a nine-dimension due diligence framework — technical, tokenomics, market, ecosystem position, regulatory, team, risk matrix, narrative, supply-chain transmission — with every substantive field marked "N/A — insufficient information." Stage-one input had been blank. Title unpopulated. Source unpopulated. The information-point list, the atomic unit every downstream inference anchors to, entirely empty.
Credit where it is due: the pipeline refused to fabricate. Correct output. But look at what a reader skimming at 40,000 feet actually sees — nine headers, nine structured tables, a risk matrix, a final comprehensive assessment. The structure survived the absence of content. That is the failure mode in miniature, and it is running inside live trading systems right now.
I audited 14 ICO whitepapers in 2017 and rejected 11 for undefined tokenomics. The criteria were mechanical: no vesting schedule, no supply cap, no stated use of proceeds. Those 11 were easy. The hard case was the whitepaper that contained every required section and no numbers in any of them — a document that passed the checklist because the checklist counted headings.
Four Ways an Input Goes Empty
True null. The source is down. Response body empty, status code 200, parser writes None into a float column. A liquidation buffer of 0.0 reads as "fully liquidated" in one dashboard and "no exposure" in another. Which one you see depends on your ORM, not your risk model.

Stale null. The value exists and is yesterday's. A lending market does not get liquidated because an oracle lied; it gets liquidated because the oracle stopped. A feed frozen at $1,850 for ninety minutes while spot trades at $1,410 is a null wearing a number's clothing — and if your staleness check lives in the adapter rather than the risk engine, the risk engine never learns the feed went quiet.
Truncated null. The indexer fell behind a reorg and served a partial block range. Your position set is incomplete, not empty. Every aggregate you compute is a lower bound, and lower bounds read as safe.
Semantic null. The field is populated with a value carrying no information — "unknown", "pending", a 0x0000…0000 address, a rate of 0% because the calculation divided by an uninitialized denominator. The most dangerous class, because it passes every schema check, every not-null constraint, and every freshness monitor you own.
Now the part I want you to hold onto, because it explains why an AI agent will hurt you in a way a human analyst will not.
Backtest corpora are structurally biased against nulls.
I standardized an AI trading agent into my workflow last year and back-tested it across 10,000 historical trades — 78% win rate, manual intervention down roughly 90%. Then I tried to reproduce the conditions of January 2023 and found them missing. Not rare. Missing. Every dataset I had assembled over five years had been cleaned: empty rows dropped, sparse columns forward-filled, outliers winsorized at the 1st and 99th percentile.
Standard practice, and precisely wrong for this problem. The condition that precedes the worst outcomes is an absence of data. Cleaning removes absences. So a model trained on immaculate history has never encountered the state that arrives immediately before the damage — and when it meets that state in production, the nearest thing in its learned representation is a quiet market. It goes flat. It does not go wrong. It goes quiet, and quiet is indistinguishable from correct.
During the Terra collapse in May 2022 I moved 85% of a €15,000 book out of three DeFi venues in 45 minutes on pre-coded triggers. The triggers were not clever. They saved me because I had hardcoded an abort on feed staleness: if this feed has not ticked in 120 seconds, do not reason, exit. Reasoning is what kills you.
The Wrong Fear
The industry's stated anxiety about autonomous agents is hallucination — a model that invents a number and trades it. That fear is misprioritized.
A hallucination produces a wrong position. Wrong positions produce fills, P&L, and a loss you can size and stop out of. It is loud. It generates an incident report.
Confident silence generates no incident report at all. A system that reads null as neutral produces no trade, no alert, and a log entry stating the monitor ran successfully. Your post-mortem has nothing to examine. Worse, the empty output becomes evidence — "risk review completed, no findings."
This is usually framed as an argument for keeping humans in the loop, and I agree, but not for the usual reason. The human is not there to catch the model's mistakes. The human is there to be incapable of accepting "no findings" as an answer. A reviewer who cannot respond with "then show me the rows" is not a control. They are a signature.
There is a liability layer. When a risk system fails loudly, the question is engineering. When it fails silently across a regulated venue, the question becomes disclosure — and disclosure questions get resolved by regulators, not engineers. The precedent established against open-source developers in 2022 treated code itself as the act. Apply that standard to a pipeline that reports a clean book while the book is on fire, and the failure stops being a bug.
Verification Checklist
Three tests. Run them on your own stack this week.
Null-rate monitoring, not null-handling. Count nulls per field per hour. Alert on any change above 0.5% of volume. The absence of data must be an event, not a parser edge case.
Information-point minimum. No report, signal, or automated action ships with fewer than three verified information points. Zero is not a valid output state. It is an error state. Build the circuit breaker: halt the pipeline, never render the template.
Bidirectional traceability. Every conclusion maps to a numbered fact, and every fact maps back to the conclusion it supports. An empty field must be structurally incapable of inheriting the value above it.
Sideways markets are the ideal habitat for this failure, which is why the next four weeks matter more than the price chart suggests. Low-variance regimes lower everyone's guard, and low-variance regimes are exactly where empty feeds hide longest before the break. The first sign that your pipeline has been reporting calm will not be a loss. It will be a move you did not take, in a market you believed you were watching.