Last month a due-diligence report crossed my desk. Eleven tables. Two hundred and fourteen cells. Two hundred and three of them read N/A.
It was not a draft. It was not flagged as incomplete. It carried a header, a version number, a date stamp, and a sign-off line. It had been routed to three people on the investment committee before it reached me. One of them had replied, in writing, "looks clean."
The subject was a protocol that had closed a nine-figure round eleven weeks earlier. The report covered nine analytical dimensions: technical architecture, token economics, market positioning, ecosystem role, regulatory exposure, team and governance, risk matrix, narrative and expectations, and supply-chain transmission. Every dimension was present. Every table had the correct number of rows. The column headers were consistent. The formatting was flawless.
And it contained no information.
I have audited more than fifty ERC-20 whitepapers in a single quarter and built a rejection checklist that preserved 85% of my capital through the crash that followed. I have watched a risk dashboard I designed myself go green on a position that was already dead. I have learned, expensively, that the most dangerous document in a trading operation is not the one with red flags in it. It is the one with no flags at all.
The most expensive string in crypto research is not a false claim. It is "N/A."
The Industrialization of Research
Between 2017 and 2021, a due-diligence memo was a human artifact. It was slow, inconsistent, and expensive. A senior analyst at a mid-tier fund cost somewhere between $350 and $500 per hour fully loaded, and a credible technical review of a DeFi protocol consumed between eighteen and forty hours. The output varied wildly by analyst. Some memos were twelve pages of prose with three numbers in them. Some were spreadsheets with no thesis. The quality was bad, but the badness was legible โ you could tell what a human had actually looked at, because the gaps followed the shape of their attention.
That era is over.
The 2024 ETF approval cycle did something to institutional crypto research that nobody fully priced. It forced the industry to standardize its reporting vocabulary. Once Bitcoin and then Ethereum became line items in traditional portfolios, the allocators demanded the same artifacts they received for equities: risk matrices, governance assessments, regulatory exposure tables, correlation studies. Compliance teams do not accept prose. They accept fields.
By 2025 the field had consolidated around a small number of schema templates. Nine dimensions is the most common. Some shops run seven, some run fourteen, but the anatomy is the same: a fixed set of analytical slots, each one requiring a structured value. The template became the product.
And then the templates got automated.
A document extraction pipeline in 2026 costs roughly $0.003 per page. A schema-constrained language model call that fills a nine-dimension template costs less than a cent. The economics are not close. A fund that spent $18,000 on a human technical review can now spend $0.11 and receive a document with the same headers, the same tables, and the same sign-off line. The document looks identical at a glance. It is not identical. But nobody at the investment committee is doing a glance-level comparison of provenance.
I am not against the automation. My own team runs extraction pipelines across on-chain data, governance forums, GitHub commit histories, and regulatory filings. In 2024 we built a pipeline that tracked ETF inflows and outflows in real time and correlated them against whale wallet movements, and it delivered roughly 15% alpha over benchmark because it caught institutional accumulation before the public reports did. That pipeline was worth every dollar of engineering. It also taught me exactly how these systems fail, because I watched it fail.
The failure mode of an automated research pipeline is not that it produces wrong answers. It is that it produces perfect-looking answers to questions it never received.
The document on my desk was the second kind.
The Schema That Cannot Say Nothing
Here is the mechanical root of the problem, and it is a single design decision that thousands of teams have made independently.
Structured output โ the JSON-schema-constrained generation pattern that became standard across every major model provider between 2024 and 2026 โ requires that every declared field be present in the response. That is the entire point. The schema is a contract. If you declare eleven fields, you get eleven fields. If you declare that a field is a string, you get a string.
Now consider what happens when the extractor receives a document it cannot parse. The source was behind a paywall. Or the page was rendered client-side and the crawler got a shell of empty divs. Or the filing existed only as a scanned PDF. Or the article was published in a language for which no translation path was configured, with its tabular data embedded as images.
The extractor has a document object. It has a schema. It has no facts.
A well-designed schema would return null. A default-configured schema returns the string "N/A".
This distinction looks cosmetic. It is not. It is the difference between a system that knows it is blind and a system that believes it can see.
In JavaScript, if (report.technicalInnovation) evaluates to true when the value is the string "N/A". In Python, if field: evaluates to True for any non-empty string. In Go, a string type holding "N/A" is indistinguishable from a string type holding a genuine finding, unless you write an explicit comparison โ and almost nobody writes the explicit comparison, because the schema said the field was required, so why would it be empty?
Every downstream validation passes. The field exists. The type is correct. The document is complete. Completeness, in the schema's terms, means structural presence. It has nothing to do with truth.
I have seen this exact bug in production, and it cost us nineteen days of unmonitored exposure.
In 2023 one of my engineers wrote a position health check. The logic was simple: if a position had no risk score, raise an alert. The check read if not position.risk_score: alert(). The upstream risk API did not return null for unrated positions. It returned the string "UNRATED". The alert never fired. We held a position with no risk score for nineteen days. The position happened to be fine. That is not the point. The point is that for nineteen days, nobody on the desk could have told you whether it was fine, and the system was reporting green.
A missing value and a value that says "missing" are not the same object. One is a hole. The other is a lid on the hole.
The correct schema declaration is "type": ["string", "null"] with no default. Force the null. Force the downstream gate to catch it. Make the system fail loudly at the boundary rather than fail silently in the middle.
The Extraction Layer Nobody Audits
Let me be specific about why source material comes back empty, because the answer determines whether your pipeline is fixable or fundamentally broken.
There are six failure classes, and they are not equally visible.
Paywall and authentication walls. Bloomberg, the Financial Times, and most sell-side research portals return a 200 status code with a truncated preview body. The crawler sees success. The body is 400 characters of subscription prompt. If your threshold for "valid extraction" is a non-empty response, you have just ingested a marketing page as a research source.
Client-side rendering. Single-page applications serve a shell document. The crawler receives the shell. The actual content is fetched by JavaScript after load, and a naive HTTP client never executes it. The body length is nonzero. The content is navigation boilerplate.
Document-format mismatch. Filings, prospectuses, and audit reports are frequently distributed as PDFs, and a meaningful fraction of those are scans rather than text-native documents. An extractor without an OCR path returns an empty string and reports a successful parse of zero characters.
Language and encoding gaps. A large share of primary-source crypto research is published in languages other than English. If the pipeline has no translation stage, the extractor either returns the raw text โ which the downstream model then hallucinates around โ or returns nothing.
Tabular data as images. This is the nastiest one, and it is what happened in the report on my desk. The source presented its core metrics in tables rendered as images. Text extraction recovered the prose. The prose contained no numbers. The pipeline produced a document that discussed a protocol's tokenomics without a single supply figure, because the supply figures lived in pixels.
Rate limiting and silent truncation. APIs return partial results under load. The extractor gets the first 30% of a dataset and no error flag. The analysis is built on a fragment that does not announce itself as a fragment.
Six classes. Only one of them โ the hard 404 โ is immediately obvious. The other five all return something. And something is worse than nothing, because nothing triggers a gate and something triggers a report.
My rule is blunt: if the extracted body is under 200 characters, the extraction is a failure, regardless of status code. Two hundred is arbitrary. Five hundred is safer for long-form sources. The number matters less than the existence of a number, because a threshold converts a silent failure into a loud one.
The report on my desk had no threshold. It had a schema.
Confidence Laundering
There is a line in that document that I want to isolate, because it is the single most dangerous sentence in the entire artifact.
Next to a field labeled hidden-information inference, the document read: "Cannot be inferred. Confidence: High."
Read that again. High confidence that nothing can be inferred.
The analyst โ or the process โ was making a claim about the reliability of its own ignorance. And that claim was correct. It genuinely could not infer anything, and it was genuinely certain of that. The methodological judgment was sound. The confidence label was honest.
And it was catastrophic, because of where it sat on the page.
Human beings do not read risk documents linearly. They scan for salience. In a table with forty rows, the eye lands on the bolded words, the numbers, and the confidence column. A reader who scans a column of "High" and moves on has just been told, forty times, that the analysis is high-confidence. The words "cannot be inferred" sit in a different column and get skipped.
This is confidence laundering. A confidence metric designed to describe the certainty of a factual claim gets attached to a statement about the absence of facts, and the visual weight of the metric transfers to the wrong object. The document ends up wearing the costume of rigor while being empty underneath.
Confidence must attach to a claim about the world. A claim about the analyst's blindness has no confidence. It has a status, and the status is BLOCKED.
I rebuilt my own team's risk outputs in 2022 specifically to kill this pattern. Every module in our dashboard was required to return one of three states: GREEN, RED, or UNKNOWN. UNKNOWN rendered as amber. Amber did not mean "fine." Amber meant "do not increase this position until a human clears it." Two of our modules returned UNKNOWN on most days for the first six months. My portfolio manager hated it. He wanted green. I told him green was a lie he was paying for, and amber was the truth he was paying for. He kept the dashboard.
The Cascade
A document with zero information points does not stay contained. It propagates.
Consider a standard downstream chain: extraction, structured analysis, summarization, signal routing, alerting, and finally a human decision.
At the summarization stage, a model receives a structured object in which every substantive field is the string "N/A". It is asked to produce an executive summary. It cannot summarize facts, so it summarizes the absence of facts. The output is fluent, well-organized, and reads like this: "No material technical concerns were identified. Token distribution data was not available for assessment. Governance structure requires further review."
Read that as an investment committee member at 7:40 in the morning with eleven other documents in the queue. "No material technical concerns were identified" is the only sentence that registers. The qualifiers dissolve. The summary has now converted a total extraction failure into a soft positive.
At the signal-routing stage, the system fires nothing, because nothing crossed a threshold. Silence is indistinguishable from "no signal." A pipeline that has been running for eight months and has never alerted is not a pipeline with a clean book. It is a pipeline that may have never had working inputs, and nobody has tested it.
At the alerting stage, the human receives no notification. The absence of a notification is read as the absence of a problem. This is the same logical error as the nineteen-day risk score, scaled up to an organization.
I built a correlation-risk dashboard after the Terra collapse in May 2022. The premise was simple: flag correlation between protocols that appeared unrelated. Within twenty-four hours of the collapse I had moved 70% of assets to cold storage and exited every algorithmic stablecoin exposure, and the dashboard was the reason we did not repeat the mistake during the FTX unwinding later that year.

But the first version of that dashboard had a flaw I did not find for four months. One of its inputs was an RPC feed to an archive node. When that feed timed out โ which it did, roughly twice a week โ the correlation module computed over zero pairs, returned 0.0, and rendered green. A dead feed looked like a perfectly uncorrelated book. The dashboard was most confident precisely when it knew least.
The fix was not a better model. The fix was a tri-state return and a hard block on position increases while any input was stale. That block cost us three trades in the following quarter. Two of them would have been losers. One of them would have been a winner. I would make that trade again without hesitating.
Yield without protocol is just delayed loss. So is analysis without an input check.
The Incentive That Produces Nothing
Here is the part that is not technical, and it is the reason this problem will get worse before it gets better.
The person who returns a blank page gets asked why they produced nothing. The person who returns eleven tables of N/A gets a bonus.
This is not cynicism. It is a straightforward consequence of how the cost of error is distributed. The cost of a false "clean" is borne by the allocator, months later, in the form of a drawdown. The cost of an honest "blocked" is borne by the researcher, immediately, in the form of a difficult conversation with a portfolio manager who needs a decision by Thursday.
The asymmetry is structural. It does not require anyone to be dishonest. It only requires everyone to be rational about their own incentives.
And in a bull market, the asymmetry widens.
I watched this happen in 2021 from the inside. Deal flow at the funds I advised went from roughly four opportunities a month to more than thirty. Review time per deal compressed accordingly. One committee I sat in on went from ninety minutes per deal to eleven. Eleven minutes to evaluate a protocol with a nine-figure valuation. The documents did not get shorter during that compression. They got longer. Nobody had time to read them, so the length became a proxy for thoroughness, and the proxy replaced the substance.
The 2021 NFT cycle gave me the cleanest version of this lesson. I refused to mint into the blue-chip collections despite considerable social pressure, and instead ran SQL queries against Etherscan metadata across roughly 10,000 projects. The finding was that around 90% lacked verifiable developer identity or any utility beyond transferability. I published the ranking by code maturity rather than floor price. It made me deeply unpopular for about five months. Then the drawdowns arrived, the sector lost more than 95% from peak in most collections, and the spreadsheet became the only thing anyone remembered.
The reason that exercise worked was not that I was smarter than the market. It was that I insisted on counting something real before forming a view. The moment you accept a document's structure as evidence of its content, you have stopped counting.
The Inversion
Here is the counter-intuitive part, and it is where most readers will disagree with me.
A due-diligence document that is empty is more dangerous than a due-diligence document that is negative.
A report with one RED flag and two hundred and thirteen filled cells gets escalated. It gets argued about. Someone forwards it to the technical lead and asks a hard question. The very presence of a negative finding triggers scrutiny, and scrutiny is the mechanism by which bad deals die.
A report with two hundred and fourteen N/A cells triggers nothing. There is no red. There is no yellow. There is no anomaly to route. The document passes through review because review is a flag-detection process, and there are no flags.
The consequence is an inversion of the framework's purpose. Due diligence was built to slow down bad allocations. An empty framework accelerates them, because it satisfies the procedural requirement for diligence without imposing any of its costs. The box gets ticked. The deal gets done. And the worse the underlying data quality, the faster the approval, because there is less to read and nothing to argue about.
This is why the report on my desk reached an investment committee with a "looks clean" note attached. Not because anyone was negligent. Because "clean" and "empty" are visually identical to a scanning eye, and everyone was scanning.
The retail-versus-institutional framing that gets repeated endlessly in this industry misses the mechanism. The claim is usually that retail trades narrative while institutions trade documents. That is only half true. Institutions do read documents. But they read them under time pressure, at volume, with an eye trained to find exceptions. A null document has no exceptions. It is, in the most literal sense, unexceptional.
An empty risk register is not a clean risk register. It is an unexamined one.
And in a market where capital is abundant and attention is scarce, unexamined risk does not get repriced gradually. It gets repriced all at once, on a Tuesday, in a gap.
Volatility is the tax on undiscerned capital. The tax is assessed without warning and without appeal.
What the Document Should Have Said
The correct output for that pipeline, on that day, was one line.
"Source extraction failed. Zero information points recovered. Analysis blocked. Escalate to human review with the original URL and the extraction diagnostics."
One line. It would have taken four minutes for a human to open the source, find the tables in image form, run them through OCR, and recover the supply figures. Four minutes of human time, against a document that consumed eleven weeks of deal flow and reached a committee with a sign-off.
That one line is worth more than two hundred and fourteen cells. It is worth more because it is actionable, and because it is honest, and because it converts an unknown into a task.
I keep a checklist for this. It lives in the same private database where I recorded my rejection criteria for ICO whitepapers in 2017, and it has grown a section every cycle since. The section I added after this document is three rules long.
Null over placeholder. Never allow a string to stand in for absence. If a schema cannot represent a missing value as an actual missing value, the schema is wrong. null is falsy. "N/A" is truthy. The entire difference between a caught failure and a shipped one lives in that truthiness.
Hard gate at zero. If the count of recovered information points equals zero, the pipeline throws. Not warns. Not logs. Throws, and the artifact does not leave the system. I have this implemented in three places on my own desk. It has fired eleven times this year. Every single time it was correct.
Tri-state everywhere. GREEN, RED, UNKNOWN. UNKNOWN blocks position increases and blocks approval routing. Amber is not a softer green. Amber is a stop sign with a delay built in.
These rules are not sophisticated. They are the kind of thing a competent engineer writes in an afternoon. That is precisely why their absence is so revealing. The failure on my desk was not a hard problem. It was a default value.
The Coming Scarcity
The marginal cost of producing a nine-dimension due-diligence document is now approximately zero. That number is going to keep falling. By the end of this cycle, every fund, every exchange listing committee, every DAO treasury working group, and every token launch will be able to generate an arbitrarily large volume of structurally perfect analysis at negligible cost.
Which means the marginal value of a due-diligence document is heading toward zero as well.
What retains value is not the document. It is the willingness to return no answer, and the engineering discipline to enforce that refusal when the alternative is a beautiful page of N/A.
The market pays for clarity, not complexity. Eleven tables of N/A is complexity. One line that says the extraction failed is clarity. Every allocator in this industry is about to be buried in documents that look like diligence and function as anesthesia. The ones who survive the next drawdown will not be the ones with the most comprehensive frameworks. They will be the ones whose frameworks can say, out loud, in production, that they do not know.
I trade the ledger, not the hype cycle. The ledger, on that Tuesday in the report, was empty.
Someone should have said so.