Last week a document crossed my desk with roughly three thousand analytical cells. Every one of them read N/A. Not redacted. Not embargoed. Empty.

Nine dimensions: technical architecture, tokenomics, market structure, ecosystem position, regulatory exposure, team and governance, risk matrix, narrative-versus-delivery gap, supply-chain transmission. Four tables per dimension. A Howey test broken into its four prongs. An incentive-sustainability model. A vesting schedule grid. A risk matrix with probability, impact and mitigation columns.
All of it present. None of it populated.
The document was not broken. Its own audit trail explained the failure cleanly: the upstream parse returned a null payload. No headline. No source. No domain tags. No project identifiers. No event timestamp. No author. And the load-bearing field, the information point list, the array of extracted facts that every downstream conclusion inherits from, came back empty.
Here is the part worth writing about. The system looked at nothing, and instead of manufacturing something, it stopped. It printed a section listing the minimum viable input set required to restart, flagged two high-severity risks in its own data pipeline, and signed the document PENDING.
No verdict. No score. No target price. In a bull market, that is close to unheard of.
The information point list is the dependency root
Every research report is a function. Inputs in, conclusions out. The information point list is the dependency root. Protocol mechanics, token distribution, unlock cliffs, revenue attribution, governance concentration, legal entity, audit scope, source quality, time sensitivity: all of it derives from that array. Change the root and every branch re-renders. Null the root and the function has exactly two options. It can return undefined. Or it can substitute a default.
Most pipelines choose the default. And in crypto research, the default is bullish.
That template has a lineage. It is sell-side equity research, rewritten for tokens sometime around 2021 and hardened into the standard shape of a fund's technical due-diligence request by the middle of this decade. Nine dimensions, four tables each, a Howey breakdown, an unlock calendar. In a bull market the template gets requested hundreds of times a week. Filled correctly, it takes days. Filled plausibly, it takes one prompt.
The timing matters. We are deep enough into this cycle that the bottleneck has shifted from capital to credible technical diligence. Funds have mandates to deploy and analysts who cannot read Solidity. The template became a substitute for the skill, and once a template substitutes for a skill, the blanks stop being questions and start being slots.
I have watched that substitution happen at close range. In 2024 I led a team auditing Lido DAO's treasury management system. The upgradeability path carried three gaps in its access-control configuration, conditions under which a governance proposal could rewrite critical parameters faster than the review process could react. We reproduced the vectors in Hardhat. The published audit scored that same surface low risk. Not unassessed. Low. Six characters separate the two words. Those six characters are the entire distance between a diligence document and a marketing document.
Same shape, different sector. In 2025 I spent weeks inside the specification of a prominent Actively Validated Service, testing slashable stake parameters against low-liquidity attack scenarios. Twelve edge cases where the economic penalty was mathematically insufficient to deter a Sybil. The spec shipped those parameters with no number attached. Fill in the blank and you get security. Leave it blank and the whitepaper does not launch.
Nobody in that chain was lying. They were defaulting. Defaults are cheaper than nulls.
What the empty report actually got right
Three things, and each is a design decision rather than an accident.
First, it treated the missing input as a hard stop. That is not how a language model behaves by default. Ask a model to produce a deep analysis with no context and it will return two thousand fluent words: sections, tables, plausible allocations, a confident conclusion. Fluency is the failure mode. Restraint has to be built in explicitly, and it has to be built against the model's own strengths, which is an unnatural act. The empty report is the rare case of a pipeline doing the unnatural thing.
Second, it bound the output shape to the input. Nine dimensions in, nine dimensions of N/A out. That symmetry is itself a signal: the framework is schema-driven, not vibe-driven. A report whose structure mutates depending on what it happened to find is a report you cannot compare against anything, including its own previous edition.
Third, it specified its own repair path. The minimum set it asked for was short and specific: original text or core paragraphs, required; an information point list of three to five entries, required; headline plus source, required; project or protocol name, important; publication timestamp, important; author stance, nice to have. That is not a complaint. That is a dependency graph.
The failure analysis is equally specific. Three candidate root causes: the source article was empty or the crawl failed; the first-stage parser never executed; the payload was dropped in transit. The third should worry anyone running a research stack. A crawl failure throws. A dropped payload returns empty, and empty is indistinguishable from the article contained nothing. Silent nulls propagate. They do not page anyone. An empty array compiles. That is precisely the danger.
There is a taxonomy buried in the report worth stealing: N/A, unassessed, low, medium, high. Most frameworks collapse the first two into the third. They are not the same thing. Unassessed means nobody looked. Low means someone looked and found nothing. Merging them is how a blank becomes a rating, and the compound interest of a wrong number is paid at the unlock.
Now the uncomfortable part. Three thousand schema cells is not rigor. It is surface area. A template with ninety tables does not produce ninety times the insight; it produces ninety slots that create pressure to be filled. Structure grows faster than evidence, and every blank cell is a small liability. The cheapest way to discharge a liability is with a plausible guess.
Picture the same report, filled. Team allocation eighteen percent, early investors twenty-two, community sixty, a four-year linear unlock behind a one-year cliff, a decaying emissions schedule, a technical viability score of 7.4. It would read better than the honest version. It would also be fiction, and the fiction would stay invisible until the cliff.
The market does not pay for N/A
Here is where I part company with the applause. This pipeline did not refuse to hallucinate because refusal is virtuous. It refused because it was running in a context with zero upside to filling blanks.
Move the same framework behind a token launch and time the half-life of that integrity. My guess is one revision cycle. A report that says N/A does not get forwarded. A report that says low risk, compelling risk-reward, watch the unlock gets into the fund memo, then into the round, then into the price. The gradient is not subtle, and no amount of prompt engineering outruns an incentive structure.
The deadliest output is neither the hallucination nor the blank. It is the well-formed score computed from unassessed fields. A viability rating of 7.2 derived from three measured inputs and six missing ones is worse than no rating, because 7.2 is plottable. Numbers travel further than caveats. That is exactly why I build viability scores component by component and withhold the aggregate when a component is unmeasured, instead of averaging the gap into a respectable-looking figure.
There is a legal edge to this too. In a world where writing software has already been treated as conduct, the risk calculus tilts toward blank cells. Unassessed is cheap. A rating is discoverable. If the cost of a wrong number keeps climbing, sophisticated desks will start producing exactly the report I read, and they will call it diligence. Some of them will be hiding behind it.
Takeaway
The pipeline will get fixed. Someone re-runs the parse, the information point list populates, and three thousand cells fill with whatever the source actually supports. That part is mechanical.
The cultural part is harder. The test is whether N/A survives contact with a fundraising cycle. My prediction for this cycle: as AI-assisted research saturates every feed, null-handling becomes the differentiator. Not model quality, most models are already good enough. What separates a desk from a content farm is whether unmeasured stays unmeasured. Code is the only law that compiles without mercy, and it does not accept a placeholder where a value belongs.
So when the next nine-figure raise lands with a two-hundred-page deck, ask for one artifact. The information point list.
If the answer is a slide deck, the data pipeline is empty. And you already know what the function returns.