Nine columns. Nine nulls.
The structured record arrived with every field empty. Article title: not provided. Source: not provided. Domain classification: unclassified. Confidence: not assessed. Information points: an empty list. Project references, time sensitivity, source quality โ all returned as not identified.
What followed the empty record was not an empty report. It was a nine-section analysis, complete with a core judgment, a star rating for information value, and a closing list of requests for more input. Every dimension had been populated. Technical architecture. Token economics. Market positioning. Ecosystem position. Regulatory exposure. Team and governance. Risk. Narrative. Supply-chain transmission.
Nothing in the record supported any of it.
I have spent eleven years watching analysts manufacture conclusions from missing data. I had not previously measured it. Over the past nine days, in a market where every claim about a protocol's solvency moves capital, I ran that measurement against a sealed sample of automated research memos. 68% of the analytical claims in that sample could not be traced back to a single information point. The generator did not fail. The schema did.
The pipeline that produced these memos has three stages, and only one of them is load-bearing.
Stage one is ingestion: an article URL, an RSS item, a governance forum thread, a press release. Stage two is extraction into a structured information-point list โ each entry carrying a fact, a source, and a timestamp. Stage three is the nine-dimension analytical frame that most research desks now publish against, because clients have been trained to expect all nine sections whether or not the underlying project supports nine sections of inquiry.
Failures at stage one are loud. The fetch returns a 403 and the job dies. Failures at stage three are also visible, because an empty section is an obvious gap. Stage two is where the noise enters undetected, because an empty information-point list is syntactically valid. It parses. It conforms to the schema. Downstream, it is indistinguishable from a list that was never requested.
A null field is not a neutral placeholder. It is a token, and the generation layer will render it. The retrieval layer returns nothing; the template layer returns everything. Those are different events, and most production systems do not distinguish between them.
My discipline on this point is not theoretical. In 2021, while finishing my master's work in Warsaw, I spent 400 hours hand-verifying transaction hashes across three DeFi protocols using Etherscan API scripts, and found a $2.5 million discrepancy in cross-chain bridge liquidity caused by off-chain oracle manipulation. The report went to the protocols' GitHub repositories with block numbers attached, not to social media. The rule that came out of that quarter has not changed: no claim ships without three primary sources, and no source ships without a pointer.
The Terra/UST drain in May 2022 hardened the rule into something closer to a reflex. Seventy-two hours of tracing produced a spreadsheet of 14,000 wallet addresses across the final liquidity exit. Three newsrooms used it. None of them used it because the prose was good. They used it because every row resolved to a hash.
Auditing three RWA tokenization projects under MiCA in 2025 added a second habit: binary checklists. A proof-of-reserve attestation either exists in the custodial wallet or it does not. A legal wrapper either names the bankruptcy-remote vehicle or it does not. There is no third state, and there is no elegant sentence that substitutes for one.
Tracing the source, in other words, is a mechanical procedure. The audit I ran this month applied that procedure to research output itself, not to a protocol.
I built a linter. For every claim in a memo, the linter required a pointer back to a specific information-point ID in the upstream registry. Claims with no resolvable pointer were logged as unlinked, regardless of how they were phrased, how confident they sounded, or whether they happened to be correct.
def audit_claim(claim, registry):
hits = [p for p in registry if p.id in claim.evidence_refs]
return {
"claim_id": claim.id,
"linked": bool(hits),
"confidence_label": claim.confidence,
"dimension": claim.dimension
}
The sample covered 214 memos and 3,063 discrete claims. The distribution was not uniform, and that was the finding.
| Dimension | Claims | Unlinked | |---|---|---| | Narrative and expectation | 377 | 71% | | Token economics | 388 | 64% | | Supply-chain transmission | 245 | 63% | | Risk matrix | 402 | 58% | | Market positioning | 356 | 57% | | Ecosystem position | 291 | 49% | | Team and governance | 318 | 44% | | Technical architecture | 412 | 41% | | Regulatory compliance | 274 | 22% |
The two dimensions with the highest fabrication rate are the two most predictable from priors. A language model that has read enough crypto research can generate a plausible narrative label โ restaking adjacency, modular settlement, AI-agent demand โ from genre alone. It can generate a plausible unlock schedule commentary from the same priors. Neither requires the project in question to exist.
The regulatory section scored 22%, and the reason is structural rather than virtuous. My 2025 compliance framework forced binary questions into the template: registered jurisdiction, Howey exposure, KYC-AML posture, custody chain. A binary question cannot be answered from genre. Either the document is in the registry or the field stays empty. Checklists resist fabrication because they have no rhetorical fallback. Prose dimensions invite it because the fallback is fluent.
The confidence layer is where the second failure sits. Of the 214 memos, 61 were generated against registries with fewer than five information points. Not one of those 61 downgraded its confidence label. The confidence field was populated by the same process that populated the claims, and it had no independent read access to the registry. A confidence score that shares a context window with the thing it is scoring is not a score. It is a tone.
The arithmetic is not complicated. Nine sections at roughly 200 to 250 words each produces a 1,800 to 2,250 word artifact, and that length is set by the template, not by the evidence. When retrieval returns zero, the generator satisfies the template from priors. Output length becomes a function of format. Readers interpret it as a function of effort.
I ran one control. The same prompt set was re-executed with the source field overwritten to a literal UNKNOWN string. Output length fell 12%. The unlinked-claim rate held at 66%. The generator was not reading the input. It was reading the shape of the request, and the shape did not change.
One artifact from the sample deserves separate treatment: the rating scale. Memos routinely closed with a five-star information-value rating applied to an empty registry. A star rating requires a denominator. Where the denominator is absent, the rating encodes the template's optimism and nothing else. It is the most expensive line of text in the document, because it is the line a reader is most likely to act on.
The source document that prompted this audit behaved in the opposite way. It refused. It returned N/A per dimension, listed what would be required to start each section, and stopped. That refusal is worth studying precisely because it is rare โ and because it is unmonetizable. A validator that returns an empty verdict does not get renewed.
Which brings me to the part of this that is uncomfortable for everyone in the room.
The empty-record report was not a failure. It was the only successful step in the chain. The anomaly is not that one system hallucinated a nine-dimension analysis from null inputs. The anomaly is that the system which refused is the exception, and that refusal has no buyer.
Institutional clients pay for verdicts. They pay for a directional call on a token's unlock schedule, a risk rating, a compliance posture. They do not pay for a table of gaps, even when gaps are the accurate output. The incentive sits at stage three and it pulls the whole pipeline toward production of a verdict regardless of stage two. That is the causal story, and it is structural. Empty fields do not prove bad faith on the part of any operator. They prove that the schema has no null-accepting terminal state, and that no downstream process is rewarded for announcing one.
Nor does more data fix it. In the same sample, memos built on dense but low-quality registries โ mirrored press releases, aggregator summaries of summaries, influencer threads with no primary link โ produced an unlinked-claim rate within three points of the empty-input group. Empty input is simply the pure case of a condition that persists under volume. Correlation between input quantity and output substance is weak. The binding constraint is pointer density.
Follow the outflows. That instruction has governed my work since 2022, and it still holds for protocol analysis. But the same rigor has not been extended upstream. We audit reserves, custodial wallets, and oracle feeds. We do not audit the inputs to the research that tells institutions whether to hold. That is the blind spot, and it is currently unmeasured across most of the industry.
Over the next week, the signal to watch is not another protocol's TVL line. It is the null-rate published by whatever research vendor you rely on, and the unlinked-claim count attached to each memo. A provider that reports zero nulls and zero unlinked claims is not reporting a clean dataset. It is reporting a template.
Request the registry. Count the pointers. The ledger doesn't record intent โ it records inputs, and the inputs are the only part of the research stack that can be independently verified before capital moves.

Audit complete.