The report landed in my inbox at 7:14 a.m. Forty-one pages. Nine analytical dimensions. A risk matrix with six categories, all shaded neutral gray. A composite score printed in a font size normally reserved for conclusions. Every field that should have held a number held the same three characters: N/A.

The client's covering note read: "No red flags found."
That is not what the document said. The document said nothing. Those are not the same statement, and the distance between them is where capital dies. The token in question carried $100 million in reported commitments, an audit badge on its homepage, and a documentation site last touched eleven months ago. The pipeline that produced those forty-one pages never read a single line of Solidity. It received an empty payload, and instead of failing loudly, it rendered the void in Helvetica.

A single line of logic can unravel a thousand lies. This report contained no lies. It contained something more useful to a fraudster: a format.
The tooling sector has spent two years selling "agentic due diligence." The pitch is consistent across vendors. Point an autonomous pipeline at any protocol. It scrapes the docs, pulls the contract addresses, queries the RPC, cross-references governance forums, and returns a nine-dimension risk verdict in under ninety seconds. Subscription pricing. API access. Slack integration.
The economics explain the adoption. A junior analyst costs $140,000 a year and takes three weeks per protocol. The agent costs $2,000 a month and never sleeps. Funds that once ran four parallel deep dives now run forty shallow ones and call it coverage.
What the marketing omits is the failure topology. These pipelines are engineered to be resilient. A resilient pipeline that cannot distinguish between "I found nothing wrong" and "I could not read the page" is not a diligence tool. It is a formatting engine.

I have seen this failure mode at the contract layer for eleven years. It has a name in every language I have audited in, and the name is always the same shape: the error is caught and swallowed, and the function returns success.
Here is the mechanical anatomy of the forty-one-page report.
Failure one: schema conformance treated as content conformance. The validator checked that the output object contained the required keys. It did. technical_assessment was present. It was an empty array. JSON Schema will happily validate an empty array against a field that requires an array. The type was correct. The value was null. Ninety percent of these pipelines stop checking there because the check passed.
Failure two: the baseline is perfect. Scores are computed as deductions from an ideal state, not as accumulations from zero. Clean model, subtract for findings. When there are no findings — because there was no data to generate findings from — nothing is subtracted. The protocol scores 94 out of 100 for the crime of being unreadable. This is the single most dangerous line of code in the entire sector: absence of evidence encoded as evidence of absence, wrapped in a float.
Failure three: the aggregation launder. Nine dimensions. Six of them individually marked inconclusive. A weighted average collapses them into one composite number, because the aggregation function does not know what N/A means. It knows what zero means. So N/A became zero, and zero became neutral, and neutral became a green badge in a PDF footer.
I traced a pipeline with this exact structure last quarter. The scraper had been returning HTTP 403 from a Cloudflare interstitial for six weeks. Nobody noticed, because the run logs said "completed" and the reports kept arriving on schedule. Fourteen protocols were assessed during those six weeks. All fourteen scored above 80. The site had begun blocking the crawler after the vendor's own rate-limit change.
Cold eyes see what warm hearts ignore. The graph-analytics version of this bug is older and better disguised. A wallet cluster with no labeled counterparties renders as a clean node in every visualization tool I have used. Sparse data produces sparse edges, and sparse edges look like isolation. In 2021 I spent three weeks reconstructing BAYC secondary-market flow by hand — over 10,000 transactions, fund paths walked hop by hop rather than read off a dashboard's "unique holders" counter. The counter said distribution was healthy. The ledger said five clusters were trading in a circle and paying themselves gas to do it. The difference was not analytical sophistication. It was refusing to accept an aggregate in place of a path.
The same structure now lives inside the AI-agent narrative. Earlier this year I reverse-engineered a "self-evolving" trading agent with $40 million under management. Its decision tree was not learned. It was enumerated — a fixed script dressed in a model wrapper. The confidence field in its logs inverted the relationship between evidence and certainty: the fewer inputs the agent had, the higher its stated confidence, because its internal scoring normalized against whatever data happened to be present. When the feed dropped, the agent did not degrade. It accelerated. Every layer of this industry rebuilds the same bug with new vocabulary.
Code does not lie, but whitepapers do. The corollary nobody prints on a landing page is that empty code lies the loudest, because it gives you nothing to contradict.
The bulls are not entirely wrong, and it is worth saying where they are right. The pipeline did exactly what its specification required. The engineers shipped precisely the product they were asked to ship, on time, and the specification was defective at the level of epistemology rather than implementation. Blaming the crawler for a 403 is like blaming a scalpel for a misdiagnosis.
They are also right that in a market where disclosure is voluntary, N/A is not silence. It is testimony. A team that publishes nothing on token allocation and publishes nothing on unlock schedules has made a decision twice. If a diligence report had printed "allocation undisclosed, unlock schedule undisclosed, team vesting undisclosed" as three explicit negative findings rather than three gray blanks, the client would have asked a question at 7:14 a.m. instead of sizing a position. The information was present the whole time. The presentation erased it.
And the vendors are right, commercially. A report that makes no claims cannot be refuted. A report that asserts a protocol is sound can be sued into oblivion when it fails. "Inconclusive" is not an analytical state in these systems. It is a legal shield with a page number.
The fix is not better models. It is a single constraint: the pipeline must fail closed. If the information-point count returns zero, the output is INVALID, not PASS. If a required field is unreachable, the composite score is not computed. If the crawler receives a 403, the run is marked failed, not completed. Every reentrancy bug I have ever filed traces back to a contract that continued executing after it should have reverted. The tooling sector has rebuilt that contract four hundred times and put a subscription price on it.
So the next time a report hands you a number, do not read the number. Ask for the count of information points that fed it. If the count is zero, you are not looking at a clean asset. You are looking at a blank page with a score printed on it, and someone, somewhere, will trade on it before lunch. Who signs the empty field? The format has an author. The N/A does not.