The Cairn Whitebook: An Anti-Laundering Substrate for AI-for-Science

About this piece. This is the v0.1 design whitebook for Cairn. It records the full argument for why an early-stage project is shaped the way it is, not a stable product manual — the design is still evolving, and the trade-offs here may be overturned by later versions. I have kept the narrative parts of the original whitebook (Parts I–IV and the case-study appendix NK) and dropped the purely reference-grade runbook (Part V).
Thesis. A cairn is a trail marker that earlier travelers built, one stone at a time, on the open ground. It does not walk for you, and it does not judge which path leads where; it simply stands there, stubbornly, so that whoever comes next knows someone passed through and the way runs this direction. The Cairn this book describes is the digital version of the same thing: a deterministic, judgment-free, anti-laundering substrate. It durably captures the judgments an AI agent makes during scientific analysis into portable documents and mechanically enforces that those judgments stay consistent with one another — but it never itself interprets, never counts paths, never averages, never returns a verdict. Its only reason to exist is to resist laundering: to make sure a conclusion, as it climbs upward from artifact to claim to summary to project conclusion, retold across different agents and across months of time, always carries its scars with it — which fork it is conditioned on, what refuted it, whether it has gone stale, whether anything independent ever verified it. Keep the scars alive, rather than letting the conclusion be washed into a clean, good-looking, false result.
Contents
- Part I — The Problem (Epistemology)
- I.1 The verifier asymmetry: algorithms are commodities, verifiers are scarce
- I.2 Biology queries a black box (software is a white box)
- I.3 Canonical ≠ Verified: the consensus axis and the truth axis are orthogonal
- I.4 The garden of forking paths and the multiverse: robust ≠ true
- I.5 Anti-laundering as a first principle: a precise definition of laundering
- Part II — The Answer (Why this shape)
- II.1 A judgment-free deterministic substrate + judgment to the agent: forced by the bitter lesson
- II.2 Durable capture: let judgment be inherited, not re-derived every time
- II.3 Parasitize, don't reinvent: OKF owns format, bytes by reference + fingerprint, Cairn adds only the resistance layer
- II.4 Express, don't resolve: every residue carries a deflation pointer
- Part III — The Mechanism (How it works)
- III.1 Three OKF node types: claim / estimand / confound, and why "handle vs narrative" isn't redundant
- III.2 Estimand as a first-class node: body is the definition, id is the identity, the CLI compares ids not semantics
- III.3 Trust axes that never merge + five deterministic gates
- III.4 Distrust the writer: asserter / reviewed_by / derived corroboration
- III.5 Freshness derived from fingerprints; CLI verbs, Skill axioms, OKF bundle layout
- Part IV — Boundaries and Falsification
- IV.1 The front-stage epistemology: what is a multiverse good for, anyway?
- IV.2 The permanent ceiling: consistency is not truth
- IV.3 The falsification test: maybe you don't need to build a system at all
- IV.4 The map of prior art: you are not unique
- IV.5 What it doesn't solve: drawing Cairn's no-go lines explicitly
- IV.6 A sub-narrative seriously considered, then abandoned: E/N/U
- Appendix NK — The full case study (anonymized)
Part I — The Problem (Epistemology)
This part only erects the problem. What shape Cairn takes, and why that shape, is left to Part II; the mechanisms and their point-by-point links back to the ADRs are left to Part III. The goal here is to push "why an anti-laundering substrate is needed" to the point of epistemic inescapability: any reader — including an AI session that just woke up with no context — should be able to independently reconstruct this judgment rather than be asked to believe it.
I.1 The verifier asymmetry: algorithms are commodities, verifiers are scarce
A verifier is a mechanism that can decide "is this answer right?" cheaply, quickly, and deterministically. In software engineering it is everywhere: unit tests, type checks, CI (continuous integration — the pipeline that automatically reruns every check on every change). You write a sort function, run the tests, red means wrong and green means right. The decision itself costs almost nothing in money or time, and whoever runs it, however many times, gets the same answer. This kind of decision is the invisible bedrock that lets software be industrialized, automated, and pushed forward in parallel by countless agents.
Science has no such bedrock.
Algorithms are commodities; verifiers are scarce. In a domain with a cheap verifier, you can safely automate "generating candidate answers" to a frenzy: however much garbage you generate, the verifier can cheaply, after the fact, scoop out the right ones and throw away the wrong ones. Generation is cheap because filtering is cheap. The algorithm (the generating half) thus becomes a commodity — anyone can run it, and the more the better. What is genuinely scarce, what actually decides whether a domain can be scaled up, is the other half: the verifier that can tell you which candidate is right.
Software has that verifier, so it can be written at scale by agents — wrong code gets caught by tests and CI and cannot be laundered into the trunk. Science, biology especially, does not have that verifier, or rather its verifier is extraordinarily expensive, extraordinarily slow, and often simply nonexistent. There is no line of test that can run "is this differential-expression conclusion actually reflecting biology?" It either needs a new wet-lab experiment, an independent patient cohort, a flow-cytometry validation (expensive, slow, sometimes impossible), or — more commonly — there is no in-system means whatsoever to decide it.
This asymmetry is the starting point of the whole book, and it has a direct, brutal corollary: the "generate at scale + filter cheaply" paradigm that works in software degrades, when carried into science, into "generate at scale + no filter." When you put a fleet of AI agents into a domain with no cheap verifier and let them generate tens of thousands of analytic conclusions, you do not get tens of thousands of verified findings; you get tens of thousands of conclusions that sound right, with no cheap mechanism to separate "sounds right" from "is right." This is not a matter of agents not being strong enough; it is a structural fact about the domain: optimizing for "looks right" where there is no verifier produces plausibility, and plausibility is not truth.
So the question is not "how do we build a scientific verifier." This book's position is that, for computational analysis, that verifier is permanently scarce and often absent — a fact to be respected, not a defect to be papered over by tooling (Part IV confronts it head-on as a permanent ceiling). The question is the other side: since there is no cheap verifier to filter out false conclusions, a "sounds right" conclusion, as it climbs all the way from artifact to paper, must at least not quietly wash away its honest scars — which path it depends on, what refuted it, whether anything independent ever checked it. The verifier asymmetry is precisely the origin of the "anti-laundering" need.
I.2 Biology queries a black box (software is a white box)
Why does biology have no cheap verifier? Because the object it studies and the object software studies are not the same kind of thing epistemically — and that difference is the root of the asymmetry above.
Software is a white box. Its "truth" is the source code: behavior is fully determined by readable, deterministic rules. If you want to know how a function will behave, you can in principle read its code, single-step its execution, and have it reproduce the exact same output on the exact same input. State is directly readable, rules are simple and stable, execution is deterministic and replayable. The verifier is cheap in software precisely because of these white-box properties: to decide "right or wrong," you have a deterministic reference frame to check against directly.
Biology faces a black box, and a very particular kind of black box. Break its four properties apart and you can see exactly why a verifier here is expensive to the point of near-nonexistence:
- No source code. There is no readable "list of rules" that determines how a cell will behave. You cannot "read the code"; you can only infer, from external behavior, an internal mechanism you can never directly confirm.
- You can only perturb, never read state directly. You cannot directly read a cell's "true state" right now; you can only poke it (add a drug, knock out a gene, sequence it) and see how it responds. All knowledge of the interior is inferred indirectly from the response to a perturbation.
- The return value is mediated by a noisy measurement apparatus. What you get is never the state itself, but the state after passing through a layer of noisy, biased, artifact-prone measurement instrumentation. In single-cell sequencing, sequencing depth, dropout (shallow sequencing causing some genes to be read as 0), and library-prep method are all distortions the apparatus inserts between you and the truth. The "signal" you see is part biology, part instrument.
- No promise of simple, stable rules. This black box is under no obligation to be compressible into a clean set of laws. It can be highly context-dependent, chaotic, sensitive to initial conditions. Even if some regularity exists, there is no guarantee it is simple, nor that it holds stably across samples or conditions.
Put these four together and "why the verifier is expensive" becomes obvious: to decide whether a conclusion is "right," you need a reference frame independent of your current measurement-and-analysis system, and every one of this black box's properties raises the cost of obtaining such a frame. You cannot read the source code (no source), you can only poke again (expensive perturbation), what you poke out is still an instrument-distorted reading (noisy mediation), and you cannot assume "this poke will cleanly reproduce the last one" (no stable-rule guarantee). "Independent verification" means going back to the black box and poking again from as uncorrelated an angle as possible: a new wet-lab experiment, an independent cohort. It is expensive and scarce, ultimately, because the black box does not let you cheaply confirm any assertion about its interior.
In the single-cell immunology vignette that runs through this book (see Appendix NK; here it only anchors the intuition), the reason "the more deeply sequenced group appears to have many up-regulated genes" is so deadly is exactly black-box property 3 at work: the "up-regulation" you see might be biology, or it might be purely an artifact the apparatus (deeper sequencing vs. shallower) manufactured between you and the truth — and the black box will not volunteer which. In software you could read the source to tell true from false; here you cannot, you can only go back to the box and poke from another angle (precisely what triangulation does later), and that is expensive.
I.3 Canonical ≠ Verified: the consensus axis and the truth axis are orthogonal
Here we introduce the book's most easily confused, and most crucial, distinction. They are two different words pointing at two orthogonal things, and the book never lets them merge.
- Canonical (adopted as the current standard) refers to the status of a conclusion being deemed by a community (a lab, a field, a paper's coauthors) as "the current standard practice / the official version / the one everyone uses." It is about consensus: how many have adopted it, whether it has been written into the workflow, whether it is treated as the default starting point.
- Verified (independently verified) refers to a conclusion having passed a check independent of your current analysis system, and being confirmed to correspond to reality. It is about truth: the conclusion has been poked from another angle on the territory (a wet-lab experiment, an independent cohort, clinical follow-up) and held up.
These two axes are orthogonal — not two points on one line, but two different dimensions. Draw them as a 2D grid and you see the most dangerous, most common cell: a conclusion can be canonical (everyone adopts it, it's in the paper, it's the default) yet never verified (no check independent of the analysis system has ever confirmed it). The moment one of your computational-analysis conclusions is written into a paper, it usually sits in this cell: it is canonical (the coauthors accepted it), but far from verified (no wet lab ever answered back). The vast majority of computational-analysis conclusions live their whole lives in this cell, and that is fine in itself; what is wrong is the act of treating this cell as verified.
Why must the two axes be kept apart, and never allowed to merge? Because merging them is precisely what opens the door to laundering. The book treats the two axes asymmetrically: for computational analysis, the verified axis is almost always empty — the vast majority of conclusions will never get a wet-lab confirmation. An always-empty axis looks deletable, but precisely because it is always empty, it must exist. It is a warning light that almost never lights up, whose only job is to occupy the "verified" slot, so that no canonical conclusion can quietly slide in, and nothing can pretend to be lit where it was never genuinely lit. The longer it sits empty, the more important it is as a structured marker of the fact "this has not yet been verified." And in the rare moment when clinic or wet lab truly confirms a conclusion, it lights up once, recording that one moment that actually touched the territory.
This says, for the first time and precisely, what "laundering" looks like in this vocabulary, as a lead-in to the next section's full definition: laundering is, in a place that only earns the canonical mark, quietly treating it as verified. Consensus impersonating truth.
I.4 The garden of forking paths and the multiverse: robust ≠ true
The previous section was about a single conclusion being impersonated as true. But the threat has a more structural source, one that occurs before the conclusion is produced, in the choice of analysis path itself.
The garden of forking paths (Gelman & Loken 2013) — in plain terms: facing the same data, the researcher has at every analysis step multiple choices that all look reasonable (how to normalize, which cell-annotation set, which statistical test...), and which one they pick is usually pulled along by the data itself: only after seeing a number that looks off do they go back and try another route. The single path they finally report is just one of many paths that "could equally have been reported"; precisely because the choices are data-contingent, even if there was no subjective cheating at all (no p-hacking), the reported path has already been "selected" by the data. The garden metaphor: every step has a fork, the trail you walked out looks like the only natural one, but behind it lies an entire garden of paths you did not walk — and did not even remember you could have.
Multiverse analysis (Steegen et al. 2016) — in plain terms: rather than report only the one path you happened to walk out, run all the reasonable paths and see whether the conclusion holds across the whole garden. Each reasonable combination of settings is a "universe"; run them all and you get a multiverse; you no longer look at the number in some one universe, but at the distribution of the conclusion across all universes.
Ground it in the anonymized single-cell immunology vignette (full narrative in Appendix NK). Setup: in a single-cell immune dataset, compare two patient groups (group A, group B), running differential expression (DEG — finding genes whose expression differs significantly between the two groups) on some immune cell type. When you run the garden of "normalization method × how to handle the sequencing-depth difference × which statistical test" — six each-reasonable setting combinations — the number of significant DEGs swings from about 80 to about 1200, and even "which is the top up-regulated gene" flips back and forth between a real signal and a technical artifact. The most naive path (the software default) happens to be the worst: it crowns a housekeeping gene expressed in nearly every cell as the top up-regulated gene, which is purely a technical artifact caused by the shallow-sequencing group reading it as 0.
This vignette teaches three things, each fed directly into the book's design:
First, the silent default is the most hidden fork. On that worst software-default path, the researcher does not even realize they are forking, because the software chose the default for them. Where the garden of forking paths really buries its bodies is not in the steps where you vigilantly compared several approaches, but in the default steps you accepted from the outset, never doubted, and therefore never folded into the multiverse (this is pushed to its limit in I.5 and in Appendix NK's "honest corrections").
Second, the multiverse's real payoff is not the number on any single path, but the invariant. Run the whole garden, and the most trustworthy output is the signals that stably survive under every reasonable setting. In this vignette, it is the up-regulation of a set of activation/interferon signatures and the down-regulation of a cytotoxic marker, which do not vanish as you swap normalizations or tests. What is worth reporting is not some cherry-picked path, but the manifold robust across the whole garden. The multiverse is not nihilistically declaring "everything is arbitrary"; on the contrary, it runs off the arbitrary part so the robust part can show itself.
Third, and most important and most easily botched by tooling: robust ≠ true. The multiverse damps researcher degrees of freedom; it gives you confidence about "does the conclusion still hold if I analyze differently." But it cannot fix a confound in the experimental design. In this vignette there is a wall no analysis can cross: group A's samples are sequenced more deeply and use a different library-prep method (pooled vs. per-sample), and "sequencing depth / library prep" is fully collinear with "group." This is not a fork you can walk differently; it is a flaw in the design itself, and no normalization, no test, can pry it apart. So even a signal robust across the whole garden may still be driven by this confound rather than by the biology of the group. Robustness is about "robust to analysis choices"; it lives on the canonical axis; however high it climbs, it never touches the verified axis, which only the territory (a different experimental design, an independent cohort) can answer. Treating "robust across all paths" as "already verified true" is exactly the laundering act of I.3, translated into the multiverse context.
This draws, for a responsible tool, the boundary of what it can and cannot do: it can and should help you retain the information attached to a conclusion — which path I'm conditioned on, whether I have a contradictory sibling path, how robust I am across the whole garden; it must never settle the multiverse on your behalf into a "robust therefore probably true" verdict, because that verdict is itself robustness impersonating truth — laundering. (This boundary is exactly the design motive for "express, don't settle" in Parts II and III, and exactly the warning issued by the multiverse authors themselves, cited in Part IV.)
I.5 Anti-laundering as a first principle: a precise definition of laundering
The previous four sections were four independent pressure points: the verifier is scarce (I.1), the object is a black box (I.2), consensus impersonating truth (I.3), robustness impersonating truth (I.4). They converge onto a single word, and that word is Cairn's reason to exist — its first principle.
The precise definition of laundering: as a conclusion passes upward from one layer to the next — from artifact, to claim (an evidence-bearing analytic conclusion), to summary, to the writeup for some immune cell type, to the whole paper's project conclusion — each layer quietly drops a little of what is necessary to keep the conclusion honest: which path it is conditioned on, which sibling conclusion refuted it, whether it has gone stale, whether anything independent of the analysis system ever verified it. With each layer dropped, the conclusion becomes a notch cleaner, prettier, more certain. By the time it reaches the top, it is a clean, beautiful, false result: all the scars washed off, leaving a single sentence that sounds beyond question. Laundering requires no one to lie; it is the natural entropy-increasing direction of information under layer upon layer of retelling, summarizing, and "for readability" compression. Summaries naturally tend to drop conditions, papers naturally tend to drop contradictions, and someone newly taking over (or a new AI session) naturally tends to treat the canonical they read as established fact. No one acts maliciously, and yet the conclusion is laundered the whole way up.
Translate the previous four sections into the language of laundering and you see they are four facets of one thing:
- Because there is no cheap verifier (I.1), no cheap automatic mechanism stops a conclusion from being laundered. In software, CI stops it; in science there is no CI, and laundering goes unobstructed.
- Because the object is a black box (I.2), the things being washed off — is this a measurement artifact, is this path robust, was the confound pried apart — are exactly the things the black box will not volunteer and that have to be laboriously poked out and laboriously remembered. They are the most expensive, so they are the most easily omitted in retelling.
- Canonical taken for verified (I.3) and robust taken for true (I.4) are the same laundering act landing on the "consensus–truth" and "path–truth" axes respectively.
So anti-laundering is Cairn's first principle: not a feature, but the sole reason Cairn exists, the axiom prior to every mechanism choice. Stated positively: a conclusion, on its upward chain artifact → claim → summary → cell-type writeup → project conclusion, retold across different agents and across months of time, must always carry its scars — which fork it is conditioned on, what refuted it, whether it has gone stale, whether anything independent verified it. Keep the scars alive, rather than letting the conclusion be washed into a clean, good-looking, false result.
This principle also delimits what Cairn does not do. Saying this in the problem section is necessary, lest Cairn be misread as yet another "tool that judges right from wrong for you," which is exactly what it refuses to be. Anti-laundering does not judge a conclusion true or false for you (the verifier is scarce; it has no such ability and will not fake one), does not settle the multiverse into a verdict for you (that is robustness impersonating truth, the very laundering it guards against), does not light up verified for you (only the territory can answer). It does exactly one thing: at every layer of retelling, mechanically and deterministically refuse to let those scars be quietly dropped. Who gets judgment, who gets mechanism, why this shape — that is Part II's business. The problem section stands here: in a domain with no cheap verifier, whose object is a black box, where both consensus and robustness are easily impersonated as truth, conclusions get laundered layer by layer into clean fakes; keeping a conclusion alive to the top with its scars intact is the first-order need.
Part II — The Answer (Why this shape)
The target Part I set is clear: on the upward chain artifact → claim → summary → project conclusion, conclusions get laundered layer by layer. Laundering means stripping off the things that keep a conclusion honest — which fork it is conditioned on, what refuted it, whether it has gone stale, whether anything independent verified it — leaving only a clean, good-looking finished product. And the verifier (a checker that can mechanically decide "right/wrong") is mostly absent in black-box-querying work like biological analysis: you almost never have a machine that can tell you "is this differential-expression conclusion true?" Part I also gave two sharper assertions: canonical (the version adopted as the current standard) ≠ verified (independently confirmed by something outside the analysis system); and the garden of forking paths and multiverse analysis tell us robust ≠ true.
Part II answers not "what to do" but "why Cairn must be shaped the way it is, and not some other way." Four load-bearing walls, each a rejection of a tempting but wrong alternative design.
II.1 A judgment-free deterministic substrate + judgment to the agent: forced by the bitter lesson
The most natural — and most dangerous — design impulse is to weld "judgment" into the tool. Since we have a garden of forking paths, a multiverse, it seems only reasonable to write a tool that adjudicates it for us: count how many paths agree, average the effect sizes, hand out a "robustness score," and declare "five of six paths agree, so it's probably true." This is precisely the use the multiverse authors themselves repeatedly warn against. Rohrer, Hullman & Gelman (2026, What's a multiverse good for anyway?) and Del Giudice & Gangestad (2021) argue: a tool that mechanically interprets the multiverse — counting agreeing paths, averaging, translating "robust" into "probably true" — manufactures "a guise of rigor and completeness," and fails as a serious inferential tool. We are not borrowing their authority to endorse Cairn; on the contrary, they are the ones who drew the ground Cairn must not step onto (Part IV fully unpacks this "diagnosis, not permission" relationship).
There is a second, more engineering-flavored reason this line cannot be crossed: the bitter lesson (Rich Sutton's observation — in the long run, methods that lean on general computation, search, and learning always beat methods that hand-encode human domain knowledge into the system; the latter is appealing short-term and gets steamrolled by compute long-term). Hard-coding judgments like "are these two paths answering the same question?", "is this fork genuinely arbitrary, or is one setting clearly better grounded?", "what would deflate this uncertainty?" into if statements and counters in a CLI is a textbook bitter-lesson anti-pattern: you have frozen a set of human heuristics in a place that a reasoning system ought to be reasoning about. In multiverse analysis these judgments further depend heavily on domain knowledge and statistical understanding (which is also why Del Giudice & Gangestad's E/N/U trichotomy is hard to land in practice and why the "uncertain" bucket would be the norm; see Part IV). Weld it in and the tool ages fast alongside that 2021 framework; whereas a capable agent will not only use such a framework but surpass it.
So Cairn's first load-bearing wall is a clean cut: the tool does no interpretation (judgment) whatsoever; it does only mechanism that can be completed deterministically without understanding content.
A recurring misreading must be corrected here: this line divides interpretation vs. mechanism, not "human vs. tool" — it is not "humans judge, machines execute." An AI agent is itself a reasoner. The gravity Rohrer et al. warn against is "do not replace reasoning with mechanism," not "do not let AI reason." So judgment belongs to the reasoning layer, and in Cairn the reasoning layer is mostly the AI agent itself:
- Interpretation → to the agent (axioms baked into a Skill, not the CLI): Are these two siblings the same estimand (the estimand being what quantity a claim measures, in which population, conditioned on what)? Is this fork genuinely arbitrary or is one setting more defensible? What is the possibility set? What would deflate this residual uncertainty? What does a contradiction mean? These are reasoned by the agent using its own understanding plus context grabbed on the spot.
- Mechanism → to the CLI (hand-written, deterministic, who-agnostic — same treatment regardless of who wrote it): fingerprints and freshness; graph-structure validation of reach-ground (every claim, walking up its dependency edges, eventually lands on a real artifact/file/dataset/external reference); consistency gates on declared labels (e.g., refusing to merge siblings that declare different estimands); persisting judgments as OKF and logging history; and refusing structurally illegal writes.
Hence the CLI never produces a verdict, because a verdict is interpretation. The "convergence engine / robustness scorer" that appeared in an earlier design — which would resolve the multiverse into a trustworthy verdict — is deleted outright, because it is exactly the use the multiverse authors say fails, and exactly the bitter-lesson anti-pattern. The CLI stays small: it fingerprints, validates the graph, opens gates against declared labels, and stores — but never counts, never averages, never scores, never infers. All the intelligence is on the agent side; the tool does only what can be "verified without understanding."
The cost must be written honestly on the wall: this buys a permanent ceiling — the CLI enforces "consistent with what was declared," never "what was declared is true." An agent can still launder by mis-declaration, e.g., labeling two genuinely-different-estimand paths with the same id so they merge. The later writer-distrust axis and independent review narrow this, but never close it. This is a boundary inherent in the shape, and Part IV unpacks it specifically.
II.2 Durable capture: let judgment be inherited, not re-derived every time
The second load-bearing wall answers a question that seems unrelated to the first but is in fact the same at root: where should judgment live?
The tempting cheap answer is "living in the Skill prompt is enough; no storage needed." It is rejected, on the grounds of the time dimension of Part I's laundering chain: judgment that lives only in some session evaporates. If every fresh session (a brand-new agent session that reads the canonical head to get oriented quickly) re-derives from the raw context, it will re-commit the same mistake — and re-derivation is precisely the mechanism by which a wrong conclusion "comes back to life." A fork that was refuted gets walked again by the next agent, the original refutation already forgotten, and so the wrong conclusion hardens once more into a "closed/negative" conclusion.
So durable capture is not an add-on feature of Cairn; it is the substrate's reason to exist. The shape:
- Every claim is durably persisted as OKF — a frontmatter handle plus a body narrative. The body holds the reasoning; the frontmatter holds "the state the next agent / the CLI can act on without rereading the prose." This handle is the anti-re-derivation device: the next session reads the handle and directly inherits "this is contested, unresolved," without having to reason from scratch and step into the same pit again.
- Both sides of a contradiction are persisted; neither may be dropped. A correction produces a version (written into
log.md), never a silent overwrite — an overwritten refutation is as good as never having existed. - The orient surface (
head/index.md, the canonical face an agent reads at the start) must surface unresolved contradictions and staleness explicitly up front, rather than burying them under a pile of canonical positive conclusions. A buried refutation is a laundered refutation.
This wall and the first are interlocking: judgment belongs to the agent (wall one), so judgment must be passable across agents and across time (wall two). Without wall two, "judgment to the agent" degrades into "judgment to this current agent," reset and re-laundered with every session swap.
II.3 Parasitize, don't reinvent: OKF owns format, bytes by reference + fingerprint, Cairn adds only the resistance layer
The third load-bearing wall is a principle of restraint, and also a self-critique of v1. Cairn v1 invented its own storage format, its own viewer, and ended up having to indefinitely maintain a format and a frontend it did not own, while drifting in its late design toward that convergence engine that would resolve the multiverse. The v2 correction: parasitize on existing wheels that do it better, and add only the one layer of "resistance" no one else does.
The division of labor is clean:
- OKF owns the format, the container, the viewer. A claim is an OKF concept file (markdown + YAML frontmatter). Estimands and confounds (a confound being a design flaw that analysis itself cannot pry apart) are OKF nodes, referenced by claims via id. A published snapshot is a portable OKF bundle, rendered by the standard OKF visualizer — collaborators install nothing, and the bytes never leave the page. The timeline is written as OKF-native
log.md, not a Cairn invention. - Bytes by reference + fingerprint, never ingested. Artifacts (result tables, model objects, figures) stay where they already are — gitignored, on external volumes, or on remote hosts; Cairn stores only their path reference and fingerprint, never ingesting bytes into the store and never versioning bytes itself (ADR 0003). The git footprint is always text-only; a multi-GB project still produces only a few hundred KB of claim text. The fingerprint's source is tiered (ADR 0002): the content hash of a pipeline tool (e.g., targets) is top-tier (rigorous, and computed for free as a side effect of its own memoization), a direct hash of a stray result file is mid-tier, and
unknownwhen the remote is unreachable. When a content-addressed tool (e.g., DVC) is present and an artifact has a stable content-hash pointer, the CLI reads that hash as a top-tier fingerprint source; this is just "one more high-quality fingerprint source when it's present," not a second load-bearing leg Cairn parasitizes on. - Cairn adds only the resistance layer. It stores no bytes, invents no format, writes no viewer. What it adds is the one layer neither OKF nor the underlying byte storage will do for you: fingerprint-driven freshness, reach-ground validation, anti-laundering consistency gates, territory-locked verification, and the derived corroboration axis. This layer, and only this layer, is Cairn's own.
This principle likewise interlocks with the spirit of the bitter lesson: don't spend engineering effort reinventing general infrastructure; save it for that small patch of "resistance logic no one else did and someone must."
II.4 Express, don't resolve: every residue carries a deflation pointer
The fourth load-bearing wall is Cairn's posture toward uncertainty itself, and also its sharpest dividing line from the rejected convergence engine.
The convergence engine wants to resolve: flatten the multiverse's uncertainty into a clean, trustworthy verdict. Cairn's posture borrows Rohrer's exact words: "embrace uncertainty, don't resolve it." The value of the multiverse is not in handing you a final answer, but in keeping those conditions, those disagreements, those "no one has independently checked this yet" faithfully on the table. A tool that resolves uncertainty away is itself a laundering machine: it washes "across six reasonable settings, the DEG count drifts from about 80 to about 1200" into a single clean number. What Cairn does is keep a conclusion carrying its qualifications and unresolved disagreements as it travels upward, across agents, across time.
This posture is mechanized into a few deterministic gates, each of which "expresses" rather than "resolves":
- A claim must declare which fork it is conditioned on (
depends_on_fork, e.g.,normalization=log1pPF) — the fork is expressed, not flattened. - A claim may declare that it
contradictsanother — disagreement is recorded structurally, not buried in prose. - A claim still carrying an unresolved contradiction is kept out of
settled— a contested conclusion may never harden into "closed/negative." This is exactly the gate that mechanically blocks that real failure case (a forgotten contradictory fork letting a wrong "closed negative" conclusion harden into the final conclusion). - An ineradicable confound can be inherited by id (
inherits_caveat), so the design flaw propagates along graph edges to every downstream claim, rather than being copied once and then lost.
But if "express, don't resolve" stopped here, it would leave a real hole: a system that only hoards uncertainty and never points to an exit is itself a dereliction. So every residual uncertainty must carry a deflation-route pointer (deflation_route), spelling out what it would take to remove that uncertainty. There are only three classes of exit:
- Clarify the estimand — this "uncertainty" may exist only because two paths are answering different questions; make the estimand explicit and it vanishes.
- Do more validation — e.g., donor-level pseudobulk (aggregate many cells per donor into one pseudo-bulk sample before comparing, to avoid treating cells from the same donor as independent samples; full definition in NK.5), per-donor consistency, cross-cell-type lineage logic — such triangulation can lift "possibly true" to "more credible."
- Change the experimental design — when the confound is collinear with the grouping and no analysis can pry it apart (this is a design flaw, not a fork), the only exit is a new design.
There is an inviolable red line here that fully separates deflation_route from the deleted convergence engine: Cairn points the way, but never walks it for you. deflation_route is a pointer, not an adjudication. It will say "this uncertainty should be shrunk by running a donor-level pseudobulk," but it will not run it itself, nor declare the conclusion established once it has been run. Walking that path, judging the result, deciding whether the uncertainty was truly shrunk — that is the agent's (reasoning layer's) job, the job wall one assigned to the interpretation side. The tool's only responsibility is to ensure this exit is honestly recorded on the claim and not laundered away upward.
This also connects back to the never-closeable ceiling: after deflation, you may have lifted a conclusion from "possibly true" to "more credible," but robust ≠ causal ≠ verified. However much triangulation you do, as long as the design flaw of confound-collinear-with-grouping remains, the treatment/batch effect can never be separated from the biology — that needs exit (3), a new design, not anything the tool's internal computation can give you. Cairn faithfully carries this residue and its deflation pointer all the way up; where it cannot reach verified, it honestly marks that it cannot.
These four walls together are the engineering shape of Part I's first principle (anti-laundering): judgment belongs to the agent and must be durably inheritable (walls one and two), the format parasitizes on OKF and bytes are referenced by path + tiered fingerprint and never ingested (wall three), and Cairn itself contributes only the one layer of resistance that lets qualifications and disagreements survive — express don't resolve, point the way don't walk it (wall four). Part III unpacks the concrete mechanisms of this resistance layer one by one, linking each back to its own ADR: why estimand is a handle while E/N/U does not become a field, why verification is territory-locked, why freshness is decided by fingerprint and not by process, why the writer is distrusted.
Part III — The Mechanism (How it works)
The previous two parts answered "why such a thing is needed" and "why this shape." This part lands the shape at the mechanical level: what parts Cairn is built from, what each does and does not do, and how each mechanism links back to the epistemic principle it serves. The dividing line Part II drew holds throughout: judgment to the agent (the reasoner), mechanism to the tool (the deterministic substrate). Every part below answers the same question: can this be done deterministically without understanding content? If yes, it goes in the tool; if no, it is left to the agent. This line divides interpretation from mechanism, not human from tool — an AI agent is equally a reasoner. This part demonstrates section by section where the line falls.
III.1 Three OKF node types: claim / estimand / confound, and why "handle vs narrative" isn't redundant
OKF is the carrier Cairn parasitizes on — treat it here as a "concept file" format: one markdown file per concept, with a YAML frontmatter (structured key-value pairs) at the top and free-form body prose below. Cairn invents no storage format of its own; it writes judgments as OKF files and adds only the "resistance" layer on top of that format. Cairn uses three node types:
- claim: an analytic conclusion. E.g., "on some immune cell type, a housekeeping gene H is significantly up-regulated in group A relative to group B."
- estimand: which question a claim is actually answering — which effect you measure, in which population, conditioned on what. "The true biological differential expression of H in group A vs. group B on that cell type" is one estimand; "the apparent fold change of H under the current normalization" is another. Same gene, two different questions.
- confound: a design flaw that analysis cannot remove. E.g., "sequencing depth ≡ group ≡ library-prep method, all fully collinear." It carries an
unerasableflag, marking that this is not a path-choice issue but a dead knot in the data itself.
Estimand and confound are made independent first-class nodes, referenced by claims via id, rather than copied into each claim's text, because this is the first line of defense for Part I's anti-laundering at the data-structure level. A confound copied as a string scattered through the bodies of twenty claims will be omitted in the twenty-first — this is Latour's "black-boxing": a fact that originally bore scars, washed into a clean conclusion through layer upon layer of retelling. Make it instead a node with a single definition plus an inherits_caveat reference edge, and the confound's propagation becomes one edge on a graph, not a string copy; it has a single source of truth, and every downstream claim that references it mechanically inherits it — no one can wash it off.
Inside a claim there is a subtler, more underrated design: frontmatter is the handle, body is the narrative, and the two may not duplicate each other verbatim (ADR 0004).
- The body (narrative) is for humans and for "drill-in to read closely" agents: the conclusion together with its conditions, contradictions, caveats, and "what would change it," explained in prose. This is the reasoning itself.
- The frontmatter (handle) is for machines to scan: only machine-actionable state — this claim's estimand id, which fork it is conditioned on, who it contradicts, which confound it inherits, its provenance (source class), and a set of locked fields the CLI computes and stamps on (see below).
Insisting on "no duplication" is not fastidiousness but the only way reasoning at scale doesn't explode. Imagine a fleet of agents ran hundreds or thousands of forks, leaving hundreds of claims, and a new session comes in to orient. If actionable state like "is this claim still valid, who does it contradict, which question does it belong to" is buried in the prose, the new agent must reread every claim's body to get it. ADR 0004 names this act re-derivation, which is precisely the mechanism by which a mistake comes back to life: a refuted fork is walked again, its original refutation long forgotten. The handle is the anti-re-derivation device — the new agent scans all the frontmatter (cheap, O(n), each one small) to get the global picture, and drills into only the few bodies genuinely worth examining. Scan all handles, read few bodies: only then does reasoning cost grow boundedly with scale, instead of every new session rereading the whole garden. The handle carries state, the narrative carries reasons, each doing its own job without duplication — this is the physical realization of ADR 0004's principle: judgment is persisted and inherited by the next session, not re-derived.
III.2 Estimand as a first-class node: body is the definition, id is the identity, the CLI compares ids not semantics
This section links back to ADR 0005, the cleanest demonstration in all of Cairn of "how mechanism holds an epistemic iron law without understanding content."
What it must hold: in Part I's case, the naive default pipeline produces claim A — "the housekeeping gene H is the top up-regulated gene"; a more rigorous path produces claim B — "H's 'up-regulation' is a sequencing-depth/dropout artifact, not biology." These two claims are opposing conclusions on the same estimand: they answer the same question (the true differential expression of H on that cell type, group A vs. group B), so they genuinely contradict and must be treated as a contradiction. Contrast another situation: one claim discusses "H's apparent fold change under log1p normalization," another discusses "H's fold change after downsampling to equal depth" — these two do not contradict; they answer two different questions, and forcing them into "one robustness conclusion" is exactly the laundering Part I excoriates: averaging answers to different questions into a fake "robust."
To mechanically distinguish the two situations, the tool must know whether two claims are answering the same question. But judging "is it the same question" is interpretation, and per ADR 0004 cannot go in the tool. ADR 0005's solution is to cut this interpretation in half:
- The hard half to the agent: should these two claims be treated as the same estimand? Reuse an existing estimand id or mint a new one? This is the agent's judgment using its understanding of domain and statistics, written as the estimand node's body (a natural-language definition).
- The mechanizable half to the CLI: the estimand node's id is its identity. A claim references it via
estimand: <id>. When the CLI needs to decide whether two claims are "siblings of the same question," it compares only ids (string equality), never reading the body's semantics.
The "handle vs. content" split appears again: the body is the definition (for the reasoner to read), the id is the identity (for the machine to compare). The CLI compares ids not semantics — that is the whole secret of its being deterministic, who-agnostic, non-interpreting. It need not understand what an estimand is; it need only do string equality.
Why is estimand a handle the agent is willing to fill, while a "equivalence type" like E/N/U should not become a field (details in Part IV)? Estimand is the agent's declaration of its own intent — "what quantity am I measuring right now, which question am I asking" — which it already knows while analyzing: cheap, stable. Whereas E/N/U (judging the relationship between two specs as "equivalent/non-equivalent/uncertain") is an adjudication of the relationship between someone else's choices, requiring sibling-by-sibling comparison and contested fine judgments — exactly the think-field a fleet of agents will skip. And once made a field, it instantly becomes a new laundering surface: declaring "Type E equivalent" can legally collapse things. So estimand becomes a field, E/N/U does not; the latter stays the agent's reasoning lens, written into the body.
This estimand mechanism has its ceiling, which ADR 0005 itself names and Cairn never hides: comparing ids not semantics means it cannot catch fragmentation (two ids are really one estimand), nor conflation (one id stretched over two genuinely different estimands — a deliberate laundering act). The only thing that can block this is independent review of the estimand node itself, not the tool.
III.3 Trust axes that never merge + five deterministic gates
One of Part I's core arguments is canonical ≠ verified: a conclusion being "the currently agreed record" and being "independently confirmed true" are two things that never merge. Cairn splits "trust" into several never-collapsing axes, each either computed by the CLI or mechanically guarded by a CLI gate. Making them independent axes rather than one composite score is itself anti-laundering: a composite score would average things of different natures — "path-robust," "someone reviewed it," "wet-lab confirmed" — into one good-looking number, exactly the "pseudo-rigor appearance" ADR 0004 forbids the tool from producing.
The five gates below are each pure mechanism — enumeration checks or edge counts — and none requires the tool to understand content.
Gate 1: the reach-ground iron law — links back to ADR 0001. Every claim must stand on the ground. Formally, every claim has at least one edge, and walking up dependency edges (claim → claim) must eventually terminate at ground (a run, a file, a dataset, an external reference). No claim may stand on other claims alone — that is circular reasoning wearing provenance's clothes, exactly what Cairn guards against. This gate is enforced not at write time but at the draft → canonical promotion boundary (ADR 0001's "soft authorization, hard boundary"): a claim can first be cheaply recorded in draft state (edges optional), living in the owner's workspace, never seen by collaborators, new sessions, or snapshots; only when it is to be promoted to canonical does the CLI run that recursive reach-ground query and refuse promotion if it cannot reach the ground. Authoring is therefore low-friction and does not interrupt the agent's flow (low friction is itself the primary anti-forgetting mechanism), while any canonical a reader sees is always well-founded.
Gate 2: collapse-refusal — links back to ADR 0005. Different estimands may not collapse into one "robustness" conclusion. When an agent (or some orient logic) wants to treat a group of sibling claims as "different specs in the same multiverse," the CLI checks their declared estimand ids: as long as the ids are not all identical, it refuses the collapse. This is the enforcement end of III.2's iron law, mechanically preventing "averaging answers to different questions into a fake robust." It compares only ids, never judging whether the ids really stand for the same question — that is the ceiling, left to review.
Gate 3: resolution (no settled while a contradiction is open) — links back to an extension of ADR 0001.
Here the case's contradictory pair is used as a concrete demonstration.
Resolution is a new axis orthogonal to lifecycle (draft/canonical), taking values open / settled. Its only reason to exist is Part I's real failure-as-cautionary-tale: a conclusion that should have stayed in doubt hardened into a "CLOSED NEGATIVE," because its contradictory sibling was forgotten. Cairn makes such hardening structurally impossible.
Concretely, in the case:
- The agent writes claim A: "the housekeeping gene H is the top up-regulated gene." The CLI stamps:
lifecycle: canonicalis possible (it reaches the ground, pointing at a result table plus fingerprint),estimand: deg-H-groupA-vs-B. - Later a more rigorous path produces claim B: "H's up-regulation is a depth/dropout artifact, not biology." The agent writes
contradicts: [claim-A]in claim B's frontmatter, and claim B'sestimandis the same as claim A's (same question, opposing answers). - The resolution gate fires: the CLI sees an unresolved
contradictsedge hanging on claim A (claim B opposes it, and neither side has been marked as settling the dispute), and so refuses to set claim A (or claim B) tosettled.
The key is the temperature of this gate: it does not force claim A out of canonical. Claim A can remain canonical — it really is the current record produced by some reasonable, ground-reaching path — but as long as that contradiction edge is open, it can never reach settled. "Contested but canonical" is a legal, honest state. And the orient surface (see III.5) is required to surface this unresolved contradiction prominently, not bury it under a pile of canonical positive conclusions. Contrast Part I's failure: in pure re-derivation mode, a new session re-walks the default pipeline, again concludes "H is the top up-regulated," writes it into the conclusion, while claim B's refutation has long evaporated — and so the mistake comes back to life. Cairn's mechanism blocks this path: the contradiction is persisted as structure, inherited, and forever holds settled down. This fulfills ADR 0004's falsifiable assertion — "on a real contradiction case, persistence plus forced declared judgment must block the resurrection that re-derivation allows; if it can't, this substrate has not earned its right to exist."
Gate 4: verification's territory lock (the agent can never set verified) — links back to ADR 0006, Gate A.
The verification axis takes values unverified / verified / contradicted / unverifiable, and territory-lockedly means exactly one thing: confirmed by something independent of your analysis system (wet lab, independent cohort). It almost always sits at unverified; its value is not in changing often but in being a structured, inheritable, unremovable warning light, so canonical can never quietly impersonate verified. This gate is a pure enumeration check: when a claim's provenance is an agent source, the CLI refuses to set verification to verified; only a non-agent provenance (experimental / human_reviewed) can reach verified. However confident the agent, however many convergent paths it ran, however beautiful its triangulation, it is structurally unable to light that lamp. Back to the case: that invariant robust across the whole garden (a set of activation/interferon signatures up, a cytotoxic marker down), even after passing the gold-standard donor-level pseudobulk, per-donor consistency, and cross-cell-type lineage logic — three layers of triangulation that lift "possibly true" to "more credible" — can still only sit at canonical (and at a higher corner inside canonical), never reaching verified, a line only a new experimental design, stepping outside the analysis system, can cross. Robust ≠ causal ≠ verified — this gate welds it shut.
Gate 5: corroboration (no promotion without a second asserter) — links back to ADR 0006, Gate B.
Corroboration is a derived axis separate from verification, taking values self-asserted (one asserter) / cross-reviewed (≥2 distinct asserter ids). Like freshness, it is derived, not hand-set: the CLI counts how many distinct asserter ids are in reviewed_by, and refuses cross-reviewed if fewer than 2. It must be a separate axis, not a slot on verification, because: if "cross-reviewed" were made the middle slot of unverified < cross-reviewed < verified, then cross-reviewed would be read as "half-verified," exactly the impersonation Cairn forbids. So it lifts "two named agents both looked at the record" to two-named-asserter canonical — still canonical, never verified. Its ceiling, ADR 0006 says plainly too: a different id is not independence (the same model with a new shell has a new id and the same blind spot); the CLI only does "no second asserter ⇒ no promotion," while whether the second asserter is truly decorrelated (different family, why independent) is narrative written on the review edge, which the CLI carries but does not verify.
The five gates share one shape: each is an enumeration check or an edge count, none requiring the tool to understand content. This is the full picture of ADR 0004's "mechanism to the CLI" at the enforcement layer — the tool guards consistency between declarations, never the truth of the declarations themselves. The latter is the permanent ceiling, which Cairn loudly admits (details in Part IV).
III.4 Distrust the writer: asserter / reviewed_by / derived corroboration
This set of mechanisms links back to the spirit of ADR 0006, and also to an axiom from Part II: the agent does not trust its own assertions. If trust fields could be filled by the writer themselves, the whole anti-laundering is self-deception — an agent could stamp itself "verified, cross-reviewed." Cairn's answer is to take identity and trust out of the writer's hands and give them to the CLI to stamp as fact.
- asserter: the agent (model / session / time) that made or last modified this claim, stamped deterministically by the CLI on every write, unfillable and unmodifiable by the agent. A modification by a different asserter creates a version (written into
log.md), never a silent overwrite, so the original assertion and its correction both persist — corresponding to Part I's iron law: neither side of a contradiction may be dropped. asserter and fingerprint are two different things — the fingerprint signs the evidence artifact, the asserter records the agent making the assertion; one signs bytes, one records the author, never to be confused. - reviewed_by: a structured set of the asserter ids that reviewed this claim, likewise stamped as fact by the CLI. A review edge can carry narrative (explaining why this reviewer is independent, e.g., a different family), but the CLI only carries that narrative, it does not verify it. Verifying "is it truly independent" is interpretation, and per ADR 0004 does not go in the tool.
- corroboration is derived from the above two, not hand-set — the CLI counts the distinct asserter ids in reviewed_by and computes
self-assertedorcross-revieweditself (i.e., Gate 5).
String the three together: identity (asserter) stamped by the CLI, review (reviewed_by) stamped by the CLI, trust (corroboration) computed by the CLI from the first two — the writer has nowhere on this chain to self-authorize. This is what "distrust the writer" looks like as it goes from principle to mechanism. It echoes that broader lock: any value an agent fills for a computed field (freshness / lifecycle / verification / corroboration / reach-ground) is overwritten by the CLI — the agent supplies intent handles (what it knows, cheap), the CLI monopolizes trust handles (computed, stamped on), and the two never cross.
III.5 Freshness derived from fingerprints, unknown is a legal state, fingerprint quality is tiered; plus CLI verbs, Skill axioms, OKF bundle layout
Freshness — links back to ADR 0002.
Freshness answers "the artifact this claim once stood on — has it changed since I drew the conclusion?" It takes values fresh / stale / unknown. The most important mechanism decision: freshness is derived from the fingerprint of the evidence artifact, not from the computation process, and certainly not hand-filled by the agent.
Why not hash the process? Because the real environment guarantees discipline will lapse. Computation mostly runs directly via the agent, sometimes through a pipeline tool, sometimes not, sometimes in Python, and often on a remote HPC. Hashing the process (consuming the pipeline's DAG, or wrapping execution in cairn run --) covers only the few jobs that went through a pipeline, and hard-fails the moment that special step is forgotten: no node means no freshness at all. So Cairn instead stamps an artifact fingerprint on the evidence edge at authoring time (a content hash, degrading to a weak size+mtime fingerprint when unreachable), and freshness is just comparing the stored fingerprint against the current one — reachable and matching is fresh, reachable but changed is stale (and cascading along dependency edges: any stale dependency makes you stale too), unreachable or merely self-asserted-without-recheck is unknown.
unknown is a legal, honest state, not a failure. When a remote artifact is unreachable, unknown is the correct answer; the real enemy is a false fresh. This echoes Part I's anti-laundering: better to honestly say "I don't know" than to give false confidence. Fingerprint quality is tiered and shown on the badge: the content hash of a pipeline tool is top-tier (rigorous, and computed for free as a side effect of its own memoization), a self-asserted remote md5sum is an honest lower tier. The badge marks which tier it is, faithfully, never flattening fingerprints of different quality into one fresh/stale.
Bytes by reference + fingerprint, never ingested. Cairn never versions bytes itself, never ingests artifacts (ADR 0003: text into git as truth, artifacts referenced by path + fingerprint, never ingested); the git footprint is always text-only, and a multi-GB project still produces only a few hundred KB of claim text. When a content-addressed tool (e.g., DVC) is present and an artifact has a stable content-hash pointer, the CLI reads that hash as a top-tier fingerprint source. This is one example of the top of the "fingerprint quality tiering," not a second load-bearing leg alongside OKF. Its meaning is limited and honest: as long as that content hash is in git (e.g., a .dvc pointer versioned along with the claim), it can always be read as a top-tier historical fingerprint, pinning the claim to a recoverable byte description. But freshness still degrades gracefully per ADR 0002: when the bytes are currently reachable, compare the stored hash against the current one and give a reliable fresh/stale; when the bytes are currently unreachable (out of reach on a remote / external volume), the CLI still honestly falls back to unknown. The historical hash in the pointer lets the claim stay pinned and recoverable, but it does not let the CLI pretend fresh from a historical md5 when the bytes are unreachable.
CLI verbs. The CLI is the only write path — deterministic, auditable, doing the structural checks a schema cannot express. The verbs are roughly: head emits OKF's index.md orient surface (canonical claims + live freshness + unresolved contradictions/staleness surfaced prominently); add-claim (with --estimand, --evidence kind:ref (including dvc:), --depends-on-fork, --contradicts, --inherits-caveat, --provenance, --deflation-route, with the CLI stamping the asserter and computing the locked fields); add-estimand / add-confound mint those two node types; review <claim> --by <asserter> records a review edge (the asserter must differ from the claim's asserter for corroboration to move); plus refresh, validate (reach-ground and other gates), publish, drafts, status, reconcile (warn-only: it only flags "conclusions in the shared prose carrying no claim id," without pretending to have blocked anything).
Skill axioms. Cairn's way of making "judgment to the agent" real is to bake the operating axioms into a Skill (a markdown capability injection for Claude Code). The Skill is the only thing that can "cause" a claim to be written (the schema does not authorize it); the CLI + Store only constrain (refusing malformed writes, which the skill cannot enforce). The two are not competitors but different verbs: Skill = cause, CLI + Store = constrain. The axioms themselves — express don't resolve, declare the estimand, read the multiverse as possibilistic not probabilistic, contested forks default to unresolved, point at a deflation route, don't trust your own assertions — live in the Skill, not frozen into the tool, so adopting a better epistemic framework means changing the Skill axioms, not changing the schema. This is the bitter lesson cashed out at the architecture level: intelligence stays in the layer that reasons, the tool does only what can be deterministically verified without understanding. But the binding force must be stated honestly right here: Skill = cause but does not enforce; these axioms are a wish an agent can ignore, and v1 has no hook enforcing them behind the scenes. A Claude Code lifecycle hook that can hard nudge/block without relying on the agent's goodwill is v2's hardening; v1 relies only on CLI + Store to constrain malformed writes, and cannot stop an agent that simply does not call the skill and does not write a claim. The reader getting here should not overestimate the binding force of these axioms: they are design intent, not invariants v1 already enforces.
OKF bundle layout. A published Cairn store is a self-contained, portable OKF bundle, roughly the directories claims/, estimands/, confounds/ (the three node-file types) plus three top-level files:
index.md= the orient surface: the map a new session lands on to orient immediately — canonical claims, live freshness, unresolved contradictions and staleness surfaced prominently. Its discipline (ADR 0004) is surface, not bury: the negative, the contradictory, the stale may never be pressed down under a pile of canonical positive conclusions, because "washing away the negative" is exactly the mechanism of Part I's failure.log.md= the timeline: snapshot history and corrections are written in OKF-nativelog.md; the time spine is the format's own, not a Cairn invention. Corrections leave a trace here as versions, never a silent overwrite.snapshots/= immutable freezes: eachpublishfreezes a content-addressed, immutable snapshot (canonical only), letting a reader diff against the version they last saw. It is a portable frozen artifact, served identically by static files or by a future Cloudflare Worker — writes always stay local, reads can travel.
These three together give the physical form of Part II's "durable capture + parasitize OKF + bytes by reference + express don't resolve": judgments written as OKF and persisted instead of evaporating, bytes referenced by path + fingerprint and left in place (recoverable, not ingested), and Cairn itself, on top of this layer alone, mechanically and without interpretation, adding the "resistance" that keeps a conclusion carrying its scars all the way up.
Part IV — Boundaries and Falsification
This part answers a question no canonical document can dodge: what does Cairn solve, what can it never solve, and on what grounds should one believe it is not just old parts repackaged as a new system. It deliberately pushes in the opposite direction, putting every ceiling, every possible rebuttal, and every piece of prior art on the table, and stating honestly what Cairn simply does not touch.
A document that endorses itself does not deserve a future reader's trust. So this part first lays out the front-stage source of the adopted epistemology — which is itself a warning against tools of this kind — then uses it as a ruler to measure Cairn, finds that Cairn stands precisely in the zone those authors call "where tools most easily fail," and then explains why we still think this shape holds.
IV.1 The front-stage epistemology: what is a multiverse good for, anyway?
Part I already gave the plain-language definitions of these two terms; here we go straight to their scholarly positioning. The epistemic front stage this book adopts is Rohrer, Hullman & Gelman (2026), What's a multiverse good for anyway?, plus the companion piece on the statmodeling blog. Its argument needs full restating, because it is not an endorsement of Cairn but a warning against "multiverse-management tools," and Cairn is exactly a multiverse-management tool. The gist:
-
The multiverse's real value is in reflection, critique, and "expressing uncertainty," not in returning a verdict. Spreading out the whole garden is most useful for forcing the researcher to see how many degrees of freedom they have, which settings are actually arbitrary, which choices the conclusion is sensitive to. It is a mirror, not a judging machine.
-
When treated as a serious inferential tool, it fails. The precise failure mechanism: only when the analyses folded into the multiverse point at the same coherent estimand (which quantity you actually want to estimate, in which population, conditioned on what) does the spread of results have a clean interpretation. The moment the folded-in analyses are in fact answering different questions, that result distribution stacks two different uncertainties on top of each other: uncertainty about the answer (same question, method noise) and uncertainty about the question itself (these paths aren't the same question at all). Once stacked on one histogram, the two can never be separated again. The reader sees a wide distribution but cannot know whether it is wide because the question is hard or because oranges were piled in with apples.
-
The multiverse is possibilistic, not probabilistic. This is the most easily misread, most deadly point. For the general reader: possibilistic means "these are all the reasonable analyses one could have done" — it enumerates possibilities; probabilistic means "each result carries a probability of being true." The multiverse gives you the former. So the distribution of effects must never be read as probability: an effect appearing in 900 of 1000 paths does not mean it has a 90% probability of being true. Those 1000 paths are not a random sample from some population; their "vote count" reflects how many look-alike paths you (or some convention) happened to enumerate, not the truth of the world. Higher frequency does not mean more likely true. Taking the mode as the answer and the proportion as a posterior probability is this tool's most common and most dangerous abuse.
-
"A guise of rigor and completeness." This is the warning that recurs in the paper above, written directly into ADR 0004. A tool that mechanically interprets the multiverse — counting how many paths agree, averaging the effect, declaring "robust ⇒ probably true" — manufactures an appearance of rigor and exhaustiveness, and that appearance is itself the con: it makes a genuinely unresolved question look as if a neutral machine had solved it. Running a billion regressions and drawing a pretty distribution does not do the hardest judgment — "are these paths the same question" — it merely hides the undone judgment under the chart.
-
The blog's one line is Cairn's direct reason to exist. The companion blog notes: when generating a multiverse was still expensive, "arbitrariness" was naturally capped by cost — no one had time to run a billion paths. But AI makes "generating a multiverse" nearly zero-cost; once it is, without matching discipline what you get is not more rigor but "questionable heuristics at scale" — multiplying already-unsound off-the-cuff judgments by a million.
This point 5 is exactly Cairn's positioning, and its dividing line from all prior art. AI has industrialized the generation of judgment; what Cairn wants is to match it with an equally industrialized visibility of judgment: not to return a verdict (precisely the failure mode the paper warns of), but to keep every industrially-generated judgment carrying, as it aggregates upward, how it arose, which fork it is conditioned on, what refuted it, whether anything looked at it independently. Cairn does not try to supply this tool with the inferential statistics it lacks; it accepts that this tool is possibilistic, and does the one thing a deterministic tool can honestly do: prevent that possibilistic picture from being quietly read as a probabilistic verdict. Hence Cairn itself never counts paths, never averages, never returns a robustness score — that would turn it into the paper's machine for manufacturing "the guise of rigor," exactly the convergence engine that Part II's first wall deleted.
It must be said honestly that Rohrer, Hullman, and Gelman do not endorse Cairn. What they prescribe is an attitude prescription for human researchers — use the multiverse as a mirror, not a judging machine; express uncertainty, don't resolve it. Cairn is a tool, and stands precisely on the ground they call "where tools most easily fail" (it manages a multiverse, it aggregates across judgments). We cite them because we agree with their diagnosis, and hard-coded the warning "the tool must not return a verdict" into the design (ADR 0004) — not because they approve of the tool. This distinction runs through all of Part IV: every time we approach a predecessor, we approach their diagnosis, not their permission.
IV.2 The permanent ceiling: consistency is not truth
Cairn's CLI (the command-line tool, the sole write channel) can enforce exactly one thing: that what you write is consistent with itself and with the labels you declared. It can never enforce the second thing: that what you declared is true. This is not a temporary v1 defect but the permanent ceiling of substrates of this kind, written at the end of ADR 0004 and restated in their own slice by ADR 0005 and 0006.
Concretely, all the CLI can do are mechanical acts: compute a signature on an evidence artifact by fingerprint (a signature computed over the artifact's content), validate that a claim's dependency graph reaches the ground (reach-ground), set gates on declared labels (e.g., refusing to merge two claims as one multiverse when their declared estimand ids differ), and store things as OKF. These acts share one trait: they can be done without understanding content. That is exactly why they are deterministic and consistent across people/agents, and exactly their boundary — a machine that does not understand content cannot judge whether content is true.
So the precise shape of the ceiling is: the agent can launder by mis-declaration. Cairn's first principle is anti-laundering. But the CLI resists structural laundering (dropped edges, circular reasoning, treating stale as fresh, passing the agent's own work off as independent verification); it cannot resist semantic laundering:
- ADR 0005's slice: the CLI compares the estimand's id (string equality), never reading the meaning of the estimand definition. So an agent can label two claims that are really asking different questions with the same estimand id (conflation, two estimands stuffed into one id), fool the merge gate, and average oranges and apples into one chart — exactly the failure IV.1's paper describes. Splitting one estimand into two ids (fragmentation) fools it equally. The CLI cannot see it, because seeing it requires understanding the definition, and understanding is judgment, and judgment is not in the tool.
- ADR 0006's slice: the CLI counts the number of distinct asserter (the agent that made or last modified a claim) ids. It mechanically upgrades "≥2 distinct ids" to
cross-reviewed. But a different id is not real independence — the same model with a new shell gets a new id, carrying the identical blind spot. The CLI cannot catch this fake review; why a reviewer is truly independent (a different model family, why uncorrelated) is only narrative written on the review edge, which the CLI ferries but does not verify.
This ceiling is the core of Cairn's honesty: canonical (adopted as the currently agreed record) never equals verified (independently confirmed by something outside the analysis system, e.g., wet lab, independent cohort). The CLI guards "what you wrote is consistent with what you declared," and structurally guarantees that canonical cannot quietly impersonate verified (ADR 0006 locks both sides: the agent can never set verified; cross-review is deliberately kept off the verification axis, lest cross-reviewed be read as "half-verified"). But it cannot guard "what you declared is true." Robust ≠ causal ≠ verified — this is the book's invariant, and the plainest statement of this ceiling.
The only mitigation is not a stronger tool but the axiom of writer-distrust itself: by default every provenance is challengeable, to be looked at independently by a different asserter. This mitigates mis-declaration but never closes it — because independence is itself a judgment, which lands back under the ceiling. Cairn does not pretend to have closed this hole; it only guarantees the hole stays visible (the warning light is structure, not narrative, and summarization cannot wash it off).
IV.3 The falsification test: maybe you don't need to build a system at all
A canonical document must carry a bullet aimed at itself. For Cairn, the sharpest one is this rebuttal:
Maybe you don't need to build any system at all. Maybe all you need is (a) a set of off-the-shelf parts, plus (b) a discipline you follow when writing the prose.
OKF can store claims; DVC can manage bytes and versions; nanopublication and SEPIO (see IV.4) structured "claim + evidence + provenance" decades ago; the multiverse literature long ago told you how to spread the garden and read it possibilistically. Bolt these together, then require everyone writing the prose to conscientiously note beside each conclusion "this is conditioned on which fork, refuted by what, whether stale" — haven't you obtained all the anti-laundering Cairn promises, without building anything new?
This bullet must be taken seriously, not waved away. It has an operational falsification test, and Cairn's own ADR 0004 already wrote that test at its end as the criterion "this store must earn its keep": take the contradictory pair of claims, assemble them on the running case, and see whether off-the-shelf parts + writing discipline alone can really block the resurrection of the contradiction.
That contradictory pair (details in Appendix NK; only the skeleton here): the naive default pipeline produces claim A — "a housekeeping gene H is the top up-regulated gene"; a more rigorous path produces claim B — "H's up-regulation is a sequencing-depth/dropout artifact, not biology." Same estimand, opposing conclusions. The falsification test asks:
- A new agent session (fresh session), armed only with off-the-shelf parts + a "please be conscientious when writing the prose" discipline, reads this analysis from scratch half a year later — will it, because claim B at the time lived only in some conversation and was not persisted as structure, re-walk claim A, write that refuted "H is top up-regulated" into the summary again, and wash away claim B's refutation?
If it will, then "off-the-shelf parts + writing discipline" did not block the resurrection of the contradiction, and the mechanism Cairn claims blocks it is the core of ADR 0004: judgment persisted as structure, inherited by the next session rather than re-derived. Re-derivation (each new session re-deriving from raw context) is precisely the mechanism by which a refuted "closed/negative" conclusion comes back to life; persistence + the frontmatter handle (state the next agent can read without rereading the prose) is what welds this resurrection path shut. Writing discipline is a wish (the owner "sometimes forgets," a v1 ceiling explicitly admitted in CONTEXT.md), whereas storing the contradiction as undroppable structure and forcing the orient surface to surface unresolved contradictions rather than bury them under canonical positive conclusions is a mechanism.
So the honest conclusion of this falsification test has two layers:
- If, on a real case, "off-the-shelf parts + a self-disciplined person/agent" can also reliably block the resurrection of that contradiction, then Cairn has not earned its keep, and it should be cut down to "a set of conventions + a skill discipline," with no CLI and no store. ADR 0004 explicitly accepts this verdict.
- We bet it cannot block it, not because the tool is smarter, but because discipline does not scale and mechanism does. AI has industrialized the generation of judgment to the order of "a billion paths in an afternoon"; to pair that with "a human conscientiously noting the scars beside each conclusion" is to meet something already industrialized with something that does not scale. Cairn bets on exactly this mismatch: when generation is industrialized, visibility must be industrialized too, and industrializing visibility requires deterministic mechanism (distrust the writer, undroppable contradiction structure, mechanical consistency gates), not stronger self-discipline. This bet is falsifiable, and this section gives the concrete way to falsify it.
IV.4 The map of prior art: you are not unique
For anti-laundering, the vast majority of parts are not Cairn's invention. This section honestly draws that map and pinpoints which intersection Cairn stands on — without conscripting any piece of prior art into "an endorsement of Cairn."
- Nanopublication (since 2010) + SEPIO. For the general reader: a nanopublication is a format that packages a minimal scientific assertion, together with its evidence and provenance, into a machine-readable structured unit; SEPIO (Scientific Evidence and Provenance Information Ontology) is an ontology describing "evidence–assertion–asserter" relationships. These two are biology-native "claim + evidence + provenance" tools, a decade-plus older than Cairn. Cairn's asserter concept is borrowed directly from SEPIO's asserting agent; the claim/evidence/grounding-edge three-node structure was done by nanopub long ago. This whole layer Cairn did not invent.
- OKF. The claim storage format, the frontmatter-handle / body-narrative division of labor, the concept-file directory layout, the external viewer — all parasitize on OKF. ADR 0003 was explicitly refactored into "Cairn no longer maintains a format and frontend it invented." Format and presentation, Cairn does not own.
- Byte-versioning / content-addressed tools (e.g., DVC). For the general reader: such tools version and recover the bytes of large files (leaving only a small pointer in git). Cairn never versions artifacts itself — it references them by path + fingerprint (ADR 0003), and when such a tool is present and an artifact has a stable content-hash pointer, the CLI conveniently reads it as a top-tier fingerprint source. Byte-versioning and recovery, Cairn does not own and does not parasitize as a load-bearing leg; it only piggybacks on the content hash when present.
- targets / Snakemake. For the general reader: these are data-analysis pipeline tools that record "which artifact was produced by which step, whether it needs rerunning." When present, they conveniently provide a high-quality content fingerprint (the top-tier source of freshness). Orchestration and this "free source" of artifact fingerprints, Cairn does not own; it only piggybacks when present.
- Multiverse / garden-of-forking-paths literature (Gelman & Loken, Steegen et al., Rohrer/Hullman/Gelman 2026). The whole epistemology of "spread the garden, read it possibilistically, don't resolve, express uncertainty" is someone else's. Cairn adopts it, does not invent it.
So what is Cairn's own? Not any single part, but a four-dimensional intersection:
(in-flight writing) × (agent writes) × (anti-laundering as first principle) × (distrust the writer).
Dimension by dimension, contrasted with the predecessors:
- In-flight (written on the spot, in the workflow). Nanopub / SEPIO are mainly a post-publication structuring, an archival layer for machine retrieval; Cairn's claim is written by the agent during normal analysis, in a sentence, low-friction, draft-soft (low friction being the primary anti-forgetting mechanism). What it captures is judgment as it happens, not a post-publication tidy-up.
- Agent writes. Prior tools' primary writer is a human researcher or curator; Cairn is agentic-AI-ready-first, its primary interface is the agent loop, its axioms baked into a skill, its primary writer an AI agent. The object being aligned to therefore changed — the whole design (the handle so the next agent need not reread the prose, contradictions that must surface to the orient face) serves "the next AI session."
- Anti-laundering as first principle. Nanopub's first principle is machine discoverability and reuse; OKF's is knowledge representation; DVC's is reproducibility. None of them has as its first principle "let a conclusion carry its scars as it aggregates upward, across agents, across time." Cairn takes anti-laundering as the sole design driver and cuts everything against it — it adds only the "resistance" layer (bytes referenced by path + fingerprint and never ingested, format via OKF, Cairn adds only resistance).
- Distrust the writer. This is the sharpest and most counterintuitive dimension. Prior tools mostly implicitly trust the writer to fill fields honestly; Cairn writes distrust-of-the-writer into its axioms: provenance is challengeable by default, the agent can never set verified, trust can only rise through the independent review of a different asserter, and even "a different asserter" is honestly admitted not to equal "truly independent." In a world where the writer is itself an AI that makes the same mistake at scale, distrusting the writer is the only honest default.
The honest conclusion of this map: Cairn owns no single part; it owns this intersection, and the obstinacy of carrying this intersection through as a first principle. No single piece of prior art, taken alone, endorses Cairn; they are the shoulders Cairn stands on; the stance of standing — this four-dimensional intersection — is Cairn's own.
IV.5 What it doesn't solve: drawing Cairn's no-go lines explicitly
An honest boundary is half "stating clearly what you solved" and half "stating clearly what you deliberately do not touch." What Cairn does not touch, and does not pretend to touch:
- Orchestration, compute, cost. Cairn does not run analyses, does not schedule, does not manage HPC, does not optimize "which paths to run, how many." Generating the multiverse is not Cairn's business (that is the business of agent + targets/Snakemake + remote compute); Cairn manages the visibility and consistency of judgments only after they have been generated. The front-stage blog says AI makes generation trivial — Cairn catches the mess after trivial, not the generation itself.
- Hooks (not in v1, left to v2). v1's sole authorization driver is the skill, and the skill is "a wish an agent can ignore." A Claude Code lifecycle hook that can nudge/block without relying on the agent's goodwill is v2's hardening. This means a v1 claim really can be forgotten —
publishdoes only a warn-only reconcile (reporting conclusions in the prose carrying no claim id, drafts that never landed), it does not block. This is an accepted ceiling, not a hidden bug. Writing it here is so that no one mistakes v1 for having enforced anything — what v1 enforces is "making the lapse visible," not "pretending the lapse was prevented." - The judgment of independence. This recurs, but deserves its own line: the CLI counts the number of asserter ids, never judging real decorrelation. "Are these two asserters truly independent" is judgment, not in the tool. Cairn does not solve independence; it only lets "claimed independence" be ferried as narrative on the review edge, to be scrutinized by the next reader.
These three together show Cairn is a narrow tool. Its honesty comes precisely from its narrowness — it does only what can be deterministically verified, and pushes everything requiring understanding (generation, judgment, independence) onto the agent or leaves it to the future. A tool claiming to have solved all of these would become exactly the front-stage paper's machine for manufacturing "the guise of rigor."
IV.6 A sub-narrative seriously considered, then abandoned: E/N/U
A passage is reserved for an idea that was once at the design's core and was ultimately abandoned, because the process of its abandonment is itself a concentrated test of all the foregoing principles: E/N/U — the equivalence / nonequivalence / uncertainty trichotomy proposed by Del Giudice & Gangestad (2021).
For the general reader: facing each analysis-decision node in the multiverse (normalization method A or B?), E/N/U wants to slap a type label on each node — are these two choices equivalent (pick either, the result should be the same), nonequivalent (different choices give different, meaningfully different things), or uncertain (can't say which). In early Cairn designs, E/N/U was at one point treated as the first-class structured field, the handle telling the merge/orient logic "when may these sibling specs be merged," and it was carried through several rounds of design.
Then it was abandoned. The reason is that several principles erected earlier in this book each fired a shot at it, each shot fatal:
- The bitter lesson. For the general reader: the bitter lesson is a repeatedly confirmed experience in AI research — welding a specific human-designed framework into a system almost always loses, long-term, to "letting the system learn/reason with general capability itself." Welding a particular 2021 three-bucket classification into the schema is freezing a human framework into the tool. A capable agent will use E/N/U and surpass it (a better carve may exist tomorrow); a tool bound to one taxonomy ages fast. This is exactly the bitter-lesson anti-pattern ADR 0004 keeps naming — hard-coding human heuristics where a reasoning system ought to reason.
- The framework's own authors throw cold water on it. The ones throwing cold water on E/N/U are precisely Rohrer, Hullman & Gelman (2026), our front stage. They note that the E/N/U distinction holds in theory but in practice "depends heavily on the researcher's domain knowledge and statistical chops," and that Type U (uncertain) will often be the majority. A three-bucket enum whose modal value is "uncertain" is not worth enforcing. And another layer: without preregistration (registering in advance how you intend to analyze), the researcher will tend to classify a node by whether it supports the conclusion they want — the E/N/U label itself gets polluted by the garden of forking paths. It is not the garden's antidote; it becomes another fork in the garden.
- Friction discipline. For a field to actually get filled, it must be cheap — the agent can fill it off the top of what it already knows. Here the contrast between estimand and E/N/U is decisive: estimand is the agent's cheap declaration of its own intent — "which quantity am I estimating, which question am I asking" — which the agent already knows while analyzing: cheap and stable. E/N/U is an adjudication of the relationship between someone else's choices — requiring pairwise comparison of sibling specs, contested fine judgments. This is exactly "the think-field a fleet of agents will collectively skip." A field that gets collectively skipped is worthless as enforced structure.
- Enforcing E/N/U is still a laundering surface. If E/N/U is a field, the agent can declare "Type E, equivalent" to legally merge sibling specs away, settling a question that should have stayed open. This is isomorphic to estimand's conflation hole, but worse: estimand at least declares the agent's own intent, while E/N/U declares an adjudication of someone else's choices, more easily wielded as an "objective ruling" to deflect with. Not making it a field removes this laundering vector outright.
- Estimand already ate E/N/U's most load-bearing half. This is the key to abandoning it without losing any mechanism. The truly load-bearing part of E/N/U is effect-nonequivalence — "different estimand ⇒ different question ⇒ incomparable." And that half is already fully eaten by the estimand handle: the CLI refusing to merge siblings declaring different estimand ids is mechanically enforcing effect-nonequivalence. The remaining nonequivalences (measurement; power/precision — "same estimand, but is spec A more efficient/powerful than B?") are case-by-case domain judgments that should be left to the agent as body narrative anyway. So abandoning the E/N/U field loses no mechanism, only a will-be-skipped, will-be-abused, will-age enum; the mechanism half was long ago taken over by estimand in a cheaper, more honest way.
These five shots together: E/N/U's fate is a joint performance of all the book's principles — judgment to the agent (0004), cheap handle over expensive think-field (0005), leave no laundering surface, don't weld an aging human framework into the tool, take over the most load-bearing half with deterministic mechanism, leave the rest as inheritable narrative. It was seriously considered over several rounds, then unanimously vetoed by these principles — which shows the principles are not after-the-fact rhetoric; they really do overturn a design the designer himself once favored.
The closing must return to the honesty running through Part IV: Del Giudice & Gangestad did not endorse "abandoning E/N/U," and Rohrer et al. did not endorse Cairn. Del Giudice & Gangestad are proposing E/N/U; we, after applying principles learned elsewhere to it, decided not to weld it. The cold water Rohrer, Hullman & Gelman threw on E/N/U is an attitude prescription for human researchers — "don't trust this trichotomy too much to tell things apart in practice"; we read that prescription as "then it should all the more not be made an enforced field," but that is our inference, not their conclusion. Likewise, their whole warning about the multiverse is written for humans to use a mirror more humbly; Cairn is a machine, and consciously stands on the ground they call "where the machine most easily turns the mirror into a judging machine." We share their diagnosis — the multiverse is possibilistic, robust is not true, mechanical interpretation manufactures the guise of rigor — but the permission we signed ourselves: we bet that, in a world where judgment is already industrially generated by AI, a deterministic machine that does only visibility and resolutely returns no verdict is the only shape worthy of that diagnosis. Whether this bet is right, the two falsification openings Part IV gave (mis-declaration laundering under the permanent ceiling, whether "off-the-shelf parts + discipline" suffices on the case) will answer; this book does not vouch for it.
Appendix NK — The full case study (anonymized)
This appendix grounds the case running through the book from the abstract into a concrete, fully anonymized data-analysis scene. It cites no real project, lab, chromosome, or gene identity; what is retained is only the epistemic skeleton, with all numbers rounded for illustration, conveying order of magnitude only. As you read this narrative, keep the book's overarching thesis in mind: what is worth carrying upstream is not the pretty number of some one path, but that little bit that is robust across the whole garden and still carries its scars. Part I already distilled three lessons from this case (the silent default is the most hidden fork, the payoff is the invariant, robust ≠ true); this appendix gives the full narrative, adds two honest corrections (to keep the story from being told as more respectable than the truth), and ends with a phenomenon → Cairn design mapping.
NK.1 Setup: a simple request to "compare two patient groups"
The data is a single-cell immune sequencing dataset (single-cell: a technique that dissociates tissue into individual cells and measures gene expression cell by cell). There are two patient groups, call them group A and group B. The task is defined by one very plain sentence: "Is there a difference in some immune cell type between these two patient groups? Run a differential expression analysis on that cell type."
Differential expression (DEG, differentially expressed genes): between the two groups, test gene by gene whether "this gene's mean expression differs systematically between groups," and list the genes that pass the significance threshold. This is the most routine, most default-pipelined step in single-cell analysis. Precisely because it is so routine, it hides a whole garden of forking paths behind a surface that "looks like just running a default function."
Before getting hands-on, record a deadly technical fact that is the root of all the chaos to come:
Group A's samples are sequenced more deeply (each cell gets more sequencing reads), and use a different library-prep method: group A pooled multiple patients into one library (pooled), group B built a library per patient (per-sample). The result is that "sequencing depth," "library-prep method," and "group" are fully collinear — they always vary together in the data, and none can be pried apart from the others.
This must be kept distinct from a "fork." A fork is the analyst's choice: which normalization, which test — degrees of freedom where "another route could have been taken." A confound is a flaw in the experimental design: depth, library prep, and group welded together, born into the data, outside the analyst's choice. This case trips on both at once, and they require two completely different treatments (exactly what the later mapping separates): a fork can be narrowed by more analysis, more validation; a design confound cannot be pried apart by any amount of analysis — you can only change the experimental design, or honestly mark it and let it infect downstream.
NK.2 Layer 2 multiverse: six each-reasonable settings, DEG count swinging from ~80 to ~1200
This book keeps only "Layer 2" of this case: after the cell-type labels were long settled and the analysis unit was no longer in dispute, the modeling multiverse purely about "how to normalize, how to handle depth, which statistical test." (Further upstream there is another layer, the annotation multiverse of "which cells count as this type," which the book omits.)
After settling which cells to compare (in order of magnitude, group A about 200 cells, group B about 600 cells), the depth confound immediately bites: group A's cells are generally sequenced more deeply, so many genes appear "up-regulated" in group A merely because they were "not detected" in the shallower group B cells (dropout, true expression measured as 0 at low depth). For "how to handle this depth difference," every approach is reasonable, and every one gives a different result (significant DEGs rounded for illustration, up / down):
- Standard log-normalization + cell-level Wilcoxon test (software default) → about 1200 / 100, top-ranked: housekeeping gene H (artifact).
- A different depth-aware log-normalization (no downsampling) → about 220 / 70, top-ranked: housekeeping gene H (artifact).
- Downsample the deep group to equal depth + standard normalization → about 490 / 150, top-ranked: a real-signal gene.
- Downsampling + depth-aware normalization → about 80 / 70, top-ranked: a real-signal gene.
- Patient-level pseudobulk (aggregate per patient, then test) → about 530 / 70, top-ranked: oscillating between H and the real signal.
- Pseudobulk (only the patient subset with enough cells) → about 290 / 170, top-ranked: a real-signal gene.
"How many differential genes" swings from ~80 to ~1200, and "which is the top gene" flips back and forth between a real signal and a technical artifact. The most naive path (the software default) happens to be the worst: its top up-regulated gene is a housekeeping gene H expressed in nearly every cell (a housekeeping gene maintains the cell's basic operation and should have no between-group difference). H appears "group-A-specifically up-regulated" purely because it was dropped out to 0 in the shallower group B cells. A complete technical artifact, crowned first place by the default pipeline.
This is where the case's sharpest contradiction is planted, to be formally posed in NK.4. For now, remember this section's lesson: if one only reports "we found about 1200 up-regulated genes, top is H," it sounds certain, objective — but it is just one path in this garden, and the worst one.
NK.3 The multiverse's payoff: the invariant that survives across all paths
Run the whole garden, and the most valuable output is not the number on any single path but the invariant: the bit of signal that stably appears under every setting. In this case, no matter how normalization, depth handling, or statistical test is swapped, the following set of directions is always present:
A set of activation / interferon-response signature genes is up-regulated in group A; a cytotoxic marker gene is down-regulated.
That real-signal gene ranks first or second across all six settings. What is robust across the whole garden is what is worth believing. This is the constructive meaning of multiverse thinking: not nihilistically declaring "everything is arbitrary," but teaching you to report the stable manifold rather than some cherry-picked path.
But a brake must be put on "robust" immediately, exactly the boundary this book stresses repeatedly: robust ≠ true. "Robust across all analysis paths" proves only that this conclusion does not depend on the analyst's degrees of freedom; it does not prove the conclusion is real biology. It corresponds to canonical (the status of being deemed "to stand" by the current methodological system), not verified (confirmed true by territory independent of the analysis system). Misreading "robust" as "true" is exactly the laundering this book defines: washing a conclusion that originally bore conditions and scars into a clean, good-looking "fact" you can take and use directly.
NK.4 The contradictory pair: same estimand, opposing conclusions
Now formally pose the contradiction planted in NK.2. The two claims below target the same estimand — "on this cell type, the expression difference of housekeeping gene H in group A relative to group B." The two claims ask the same quantity, yet give opposite answers:
- Claim A (produced by the naive default path): "The housekeeping gene H is the top up-regulated gene of this cell type in group A." From the software default pipeline, its evidence line the DEG table under default settings.
- Claim B (produced by the more rigorous path): "H's 'up-regulation' is a sequencing-depth / dropout artifact, not biology — after depth-matching, or patient-level aggregation, H's between-group difference vanishes." From the evidence lines of the downsampling path and the pseudobulk path.
This is not "two different questions each with its own answer." Were it that, they should not be compared at all. They are two opposing answers on the same estimand. This is exactly the shape the book wants the tool to hold: in a real scenario, it was precisely this kind of contradiction that got forgotten, with the "looks easier" one (the naive default of Claim A's kind) quietly hardening into the project's final conclusion, while the claim that refuted it evaporated. Cairn's first-principle reason to exist is to prevent this forgetting: both claims must be persisted, neither may be silently deleted, and as long as the pair remains unadjudicated, the conclusion on this estimand may not be marked "settled." The tool itself does not adjudicate who is right — it has no standing to make that judgment; it only mechanically guarantees "the contradiction is present and visible on the orient surface," leaving adjudication to the reasoning agent and ultimately the territory.
NK.5 Triangulation: lifting "possibly true" to "more credible," but never reaching verified
"Robust to analysis choices" alone is not enough. To tell whether NK.3's invariant is real biology or another, more hidden technical artifact, three mutually independent things were further done — this is triangulation: using several evidence lines that share no bias to converge on the same conclusion, each additional independent line making the conclusion a notch more credible.
- Patient-level pseudobulk (the recognized gold standard). Aggregate each patient's target cells into one "pseudo-bulk" sample first, then compare between groups. This both avoids treating one patient's many cells as mutually independent samples (pseudoreplication) and properly models depth with a principled method. That set of activation / interferon signal up, cytotoxic marker down, passed the gold standard — not merely a cell-level statistical artifact.
- Per-patient consistency. The real-signal gene is high in every patient of group A and low in every patient of group B, fully consistent in direction, not driven by one or two extreme patients.
- Cross-cell-type lineage logic. Put the same gene set into other cell types: the activation signal is pan-lymphoid, while the down-regulation of that cytotoxic marker appears only in lineages with cytotoxic function, absent in cell types without it. A blind technical artifact would not "recognize" the cytotoxic lineage, so this direction fits biological logic, not just a numerical coincidence.
All three lines point the same way. But added together they still do not reach verified. Triangulation climbs a ladder inside canonical: robust to analysis paths (weakest) < consistent across patients < fits independent biological structure (strongest). This ladder lets a canonical conclusion approach that line as closely as possible, but never cross it. Only the territory crosses that line — a wet-lab experiment, an independent cohort, an independent measurement apparatus, something independent of your entire analysis system answering back to confirm. Triangulation lifts a conclusion from "possibly true" to "more credible," which is valuable; but calling "more credible" "verified" is laundering once more.
NK.6 The ineradicable residue: only a new experimental design will do
Finally, admit honestly: there is a question no run through the whole garden can fix, because it is not a fork at all but NK.1's design confound.
That up-regulation of activation / interferon signal might be real biology (group A's immune microenvironment really is more activated), or it might be technical: group A was all pooled library prep, group B was per-sample, the two groups differ systematically in "library prep / processing method," and a processing difference itself induces stress and interferon signaling. The key:
Downsampling can align the one axis of "depth"; pseudobulk can align "pseudoreplication." But no analysis method can pry the "pooled vs. per-sample library prep" confound out of "group," because it is fully collinear with group.
Running through the whole multiverse proves that "the signal is robust to analysis choices"; it cannot prove this is group A's biology, because the confound remains untestable. This is the case's deepest lesson, and it lands the iron law the book keeps returning to:
Multiverse analysis damps researcher degrees of freedom; it cannot fix a confound in the experimental design. A result robust across all analysis paths may still be driven by the confound. Robust ≠ causal ≠ verified. To truly answer this question needs better data (per-sample library prep, target-cell-enriched, comparable samples), not smarter statistics.
This residue must be explicitly recorded, and automatically inherited by every downstream claim that references it; otherwise it gets quietly dropped layer by layer in summaries, and the conclusion is washed into a clean, scar-free fact. This is the book's core demand for "anti-black-boxing": let the confound exist as a first-class node with a single definition, infecting downstream as a graph edge, rather than being copied into a prose caveat that will sooner or later be lost.
NK.7 Two honest corrections
The story is already quite pretty: a robust invariant, triangulation, an honestly-marked residue. Precisely because it is pretty, two patches must be applied, lest the book itself demonstrate the very laundering it most despises: rewriting a stumbling, real process into a more methodologically self-aware, more respectable version.
Correction one: this process was passive, data-triggered post-hoc exploration, not proactive weighting.
The real sequence was this: the analysis started from the software default (no one planned to do a multiverse from the outset), ran out and read an absurd number (about 1200 up-regulated genes, top a housekeeping gene), and only then went back to remediate — tried downsampling, tried other normalizations, tried pseudobulk. The multiverse was forced into being by an absurd result, not a discipline present from the start.
This must be nailed down, because it is precisely the pattern the garden of forking paths worries about, not its antidote: the analysis path is data-contingent — "decide the next analysis step after seeing the data." Beautifying this process into "the analyst proactively weighting each path by argued grounds" is false. The honest version is: the analyst was pulled along by the data and only retrofitted discipline afterward, and this "post-hoc remediation" itself carries survivorship bias — only the steps that happened to give an absurd number ever got a chance to be doubted, to be multiverse'd.
Correction two: the real blind spot is the never-doubted "silent defaults."
In this whole story, the only steps multiverse'd were the ones that made the analyst suspicious: normalization (because the ~1200 number was too absurd), depth handling (because housekeeping gene H as top was too suspicious). The defaults that "looked right" from the outset — QC thresholds, highly-variable-gene selection, the number of principal components (PCs) — were never doubted from start to finish, never folded into any multiverse.
This is where the garden of forking paths truly buries its bodies. That worst software default was caught precisely because it gave an absurd number; defaults that give "looks reasonable" numbers will never trigger suspicion, so the bias they introduce sails unobstructed all the way into the final conclusion. The probability a step gets doubted depends on how absurd its output is, not on how dangerous it actually is — a systematic sampling bias uncorrelated with real risk. The book therefore sets the true target of "anti-laundering" on these silent, never-suspicion-triggering defaults: the most dangerous form of laundering is not leaving a refuted conclusion in place, but letting a never-doubted default quietly, respectably, decide the conclusion.
NK.8 Mapping: each phenomenon in the case → which Cairn design
Map each epistemic pressure point in the narrative above back to a specific mechanism argued earlier in the book. How to read: each entry first gives the phenomenon that actually happened in the case, then the Cairn design used to resist it, plus the book part / ADR that design links back to. Note: every right-hand mechanism obeys the same overarching discipline — the tool does only what can be deterministically verified, never interprets, never adjudicates, never scores; all judgment belongs to the agent.
The contradictory pair: Claim A (H is top up-regulated) vs. Claim B (H is a depth dropout artifact), same estimand, opposing conclusions.
→ The resolution gate + keystone acceptance test. Both claims are persisted, neither may be silently overwritten (ADR 0004, Part III.4); as long as the contradicts edge between them is unadjudicated, the conclusion on that estimand is refused the settled mark (the resolution axis, orthogonal to lifecycle, Part III.3 Gate 3). This is exactly the "earn its existence" keystone acceptance test (Part IV.3): reproduce this contradiction, assert that the gated store blocked the hardening of a contradicted conclusion and surfaced the contradiction on the orient surface; if it cannot block it, this substrate has not earned its existence. The tool does not judge who is right, only mechanically guarantees the contradiction is present and visible.
The six-setting swing (~80↔~1200) + the invariant that survives across all paths.
→ Possibilistic reading + never return a verdict. Cairn does not count how many paths agree, does not average effects, does not score robustness (ADR 0004, explicitly out of scope, Part II.1 / IV.1). The multiverse is expressed as a possibility set of "which conclusions could hold," not "path-vote probability" (probabilistic) — this is the agent axiom in the Skill, not a CLI mechanism. The tool only persists which fork each claim is conditioned on (depends_on_fork), letting both "the swinging" and "the invariant" be present each on its own; the verdict (which is the real signal) is left to the agent.
The three triangulation lines (gold-standard pseudobulk / per-patient consistency / lineage logic) lifting "possibly true" to "more credible."
→ evidence_lines (multiple named evidence lines) + an intra-canonical gradient, but never reaching verified. Each of the three lines is recorded as a named evidence_line, landing the conclusion's "feet" on multiple mutually-independent foundations. Together they raise the claim a notch inside canonical (steadier, more credible), but the CLI structurally locks the agent out of verified: the verification axis is territory-locked (ADR 0006 Gate A, Part III.3 Gate 4); when provenance is an agent source, the CLI refuses verified, and only non-agent territory evidence (experimental / human confirmation) can light that lamp. However strong the triangulation, it is only a climb inside canonical, never crossing that line.
The ineradicable design residue (pooled vs. per-sample collinear with group, treatment / interferon effect inseparable).
→ A confound node + deflation_route + robust ≠ verified. The design confound is recorded as a first-class confound node (single definition, with an unerasable flag), and every downstream claim inherits it via an inherits_caveat edge — the infection is a graph edge, not a string copy that will sooner or later be lost (Part III.1). At the same time a deflation_route is recorded, honestly stating "this uncertainty can only be shrunk by changing the experimental design, not by more analysis" (Part II.4), pointing the residue at an exit rather than hoarding it. This mechanism turns "robust ≠ causal ≠ verified" into structure.
The passive process (default start → read an absurd number → only then go back to remediate).
→ Conservative by default + distrust the writer. Cairn does not assume the analyst proactively weighted the paths; its posture is conservative by default — a contested fork defaults to unresolved, a conclusion defaults to unverified (a warning light that never goes out). The companion is writer-distrust: the CLI overwrites the agent's self-reported values for all computed / trust fields (freshness, lifecycle, verification, corroboration, reach-ground) (ADR 0004 ceiling, trust-field lock, Part III.4 / IV.2). This precisely offsets the overconfidence that "passive post-hoc exploration" brings.
The silent defaults (QC / highly-variable genes / PC count never doubted, never entered the multiverse).
→ The true target of anti-laundering. This is what Cairn's first principle (anti-laundering) is ultimately out to deal with, and also its most honest boundary: Cairn can put the "resistance" layer only on forks, contradictions, and confounds already declared by the agent; it cannot force the agent to doubt a never-doubted default. What it can do is lower the friction of declaring (one cheap add-claim writes down the fork condition) and surface unresolved contradictions and staleness on the orient surface, thereby widening the range of "what gets doubted"; but "an undeclared default" is the permanent ceiling of this mechanism — the same wall as ADR 0004's "the CLI enforces only consistency with declarations, never that declarations are true" (Part IV.2). Writing this entry into the mapping is itself resisting the laundering of "pretending this blind spot is solved."
Closing: no row in this mapping says "and therefore the tool judges the conclusion true / false." This is deliberate, and it is the spine of the whole book — Cairn is a judgment-free deterministic substrate. It persists the agent's judgments, mechanically enforces their consistency, and keeps a conclusion carrying its scars as it aggregates upstream (which fork it is conditioned on, what refuted it, whether it is stale, whether anything independent verified it). It never smooths those scars over for you. Smoothing the scars is laundering; surviving with the scars on is the one thing Cairn promises to do.
Cairn 白皮书:一个面向 AI-for-science 的抗洗白底座

关于本文。 这是 Cairn v0.1 的设计白皮书。它记录的是一个早期项目"为什么长成现在这个形状"的完整论证,而非一份稳定的产品手册——设计仍在演化,文中的取舍可能被后续版本推翻。这里保留了原始白皮书的叙事部分(Part I–IV 与案例附录 NK),略去了纯参考性的运行手册(Part V)。
主旨。 玛尼堆(cairn)是前人在荒原上一块块垒起的路标石。它不替你走路,不替你判断哪条路通向何方,只是固执地立在那里,让后来者知道这里有人来过、路在这边。本文讲的 Cairn 是同一件事的数字版:一个确定性的、不做判断的抗洗白底座。它把 AI agent 在科学分析中做出的判断持久化成可移植的文档,机械地强制这些判断彼此一致,但它自己绝不解释、不数路径、不平均、不出判决。它存在的唯一理由是抗洗白:让一个结论在从产物到 claim、到摘要、到项目结论一路向上,跨越不同 agent、跨越数月时间被反复转述的过程中,始终带着它的疤痕,包括它条件于哪条分叉、被什么反驳过、是否已经过期、有没有被独立验证。让疤痕活下来,而不是让结论被洗成一个干净好看的假结果。
目录
- Part I — 问题(认识论)
- I.1 验证器不对称:算法是商品,验证器才是稀缺品
- I.2 生物研究是在查询一个黑箱(软件是白箱)
- I.3 Canonical ≠ Verified:共识的轴,和真的轴,是正交的
- I.4 歧路花园与多元宇宙:稳健 ≠ 真
- I.5 抗洗白是第一性原理:精确定义 laundering
- Part II — 答案(为什么是这个形状)
- II.1 不做判断的确定性底座 + 判断归 agent:bitter lesson 的逼迫
- II.2 持久捕获:让判断被继承,而不是每次重推
- II.3 寄生而不造轮子:OKF 管格式、字节按引用 + 指纹,Cairn 只加抵抗层
- II.4 表达,不消解:每条残余都带一条 deflate 指针
- Part III — 机制(怎么运作)
- III.1 三类 OKF 节点:claim / estimand / confound,以及"句柄 vs 叙事"
- III.2 estimand 作一等节点:body 是定义,id 是身份,CLI 比 id 不比语义
- III.3 不合并的信任轴 + 五道确定性闸
- III.4 写入者不可信:asserter / reviewed_by / 派生的 corroboration
- III.5 freshness 由指纹派生;CLI 动词、Skill 公理、OKF bundle 布局
- Part IV — 边界与证伪
- IV.1 前台认识论:多元宇宙到底有什么用
- IV.2 永久天花板:一致性不是真理
- IV.3 证伪测试:也许你根本不需要造一个系统
- IV.4 前人地图:你不独有
- IV.5 不解决的:明确划出 Cairn 不碰的地
- IV.6 被认真考虑过、然后抛弃的子叙事:E/N/U
- 附录 NK — 案例全文(匿名版)
Part I — 问题(认识论)
本部分只立"问题"。Cairn 是什么形状、为什么是那个形状,留给 Part II;机制与 ADR 的逐条回扣,留给 Part III。这里的目标,是把"为什么需要一个抗洗白底座"从认识论上推到无可回避的地步:任何读者,包括一个刚醒来、没有上下文的 AI session,都能独立重建这个判断,而不必被要求相信它。
I.1 验证器不对称:算法是商品,验证器才是稀缺品
**验证器(verifier)**指一套能廉价、快速、确定地判定"这个答案对不对"的机制。软件工程里它无处不在:单元测试、类型检查、CI(持续集成,即每次改动自动跑一遍全部检查的流水线)。你写一个排序函数,跑一遍测试,红就是错、绿就是对。判定本身几乎不花钱、不花时间,而且换谁来跑、跑多少遍,结论都一样。这种判定是软件能被工业化、被自动化、被无数 agent 并行推进的隐形地基。
科学没有这样的地基。
算法是商品,验证器才是稀缺品。 在一个有便宜验证器的领域里,你可以放心地把"生成候选答案"疯狂自动化:无论生成多少垃圾,验证器都能在事后廉价地把对的捞出来、把错的扔掉。生成之所以能廉价,是因为筛选廉价。算法(生成的那一半)于是变成商品,谁都能跑、跑得越多越好。真正稀缺、真正决定一个领域能不能被规模化推进的,是另一半:那个能告诉你"哪个候选是对的"的验证器。
软件有这个验证器,所以它能被 agent 大规模代写,错的代码会被测试和 CI 拦下来,洗不进主干。科学,尤其是生物研究,没有这个验证器,或者说它的验证器极其昂贵、极其缓慢,常常根本不存在。"这个差异表达结论是不是真的反映了生物学"这个判定,没有一行测试能跑出来。它要么需要一次新的湿实验、一个独立的病人队列、一次流式细胞验证(昂贵、缓慢、有时做不了),要么干脆没有任何系统内部的手段能判定它,而这是更常见的情况。
这个不对称是整本书的起点,它有一个直接而残酷的推论:在软件里行之有效的"大规模生成 + 廉价筛选"范式,搬到科学里会退化成"大规模生成 + 无筛选"。当你把一支 AI agent 舰队放进一个没有便宜验证器的领域,让它们生成成千上万条分析结论,你并没有得到成千上万个被验证的发现,你得到的是成千上万个听起来对的结论,而没有任何廉价机制能把"听起来对"和"真的对"分开。这不是 agent 不够强的问题,是这个领域的结构性事实:在没有验证器的地方优化"看起来对",优化出来的就是 plausibility(貌似可信),而 plausibility 不是真。
所以问题不是"如何造一个科学的验证器"。本书的立场是,对计算分析而言那个验证器永远稀缺、常常缺席,这是要被尊重的事实,不是要被工具糊弄过去的缺陷(Part IV 会把它当作永久天花板正面承认)。问题在于另一面:既然没有便宜的验证器把假结论筛掉,那条"听起来对"的结论在从产物一路爬升到论文的过程中,至少不能把身上那些诚实的疤痕悄悄洗掉——它依赖哪条路径、被什么反驳过、有没有被独立检验。验证器的不对称,正是"抗洗白"这个需求的来源。
I.2 生物研究是在查询一个黑箱(软件是白箱)
为什么生物没有便宜的验证器?因为它研究的对象,和软件研究的对象,在认识论上不是一类东西,而这个差别正是上一节那个不对称的根源。
软件是白箱。它的"真相"就是源码:行为完全由你能读到的、确定的规则决定。你想知道一个函数会怎么表现,原则上可以读它的代码、单步它的执行、让它在完全相同的输入下复现完全相同的输出。状态可直接读取,规则简洁稳定,执行确定可重放。验证器在软件里便宜,正是因为白箱的这些性质:要判定"对不对",你有一个可以直接对照的、确定的参照系。
生物研究面对的是一个黑箱,而且是一种很特定的黑箱。把它的四个性质拆开看,就能看清验证器为什么在这里贵到近乎不存在:
- 无源码。 没有一份可读的"规则清单"决定细胞会怎么表现。你不能"读代码",只能从外部行为去反推一个你永远无法直接确认的内部机制。
- 只能扰动,不能直接读状态。 你无法直接读出一个细胞此刻的"真实状态",只能戳它一下(加药、敲基因、测序)再看它怎么反应。所有关于内部的知识都是从扰动的反应里间接推断的。
- 返回值经过含噪的测量装置中介。 你拿到的从来不是状态本身,而是状态经过一层有噪声、有偏差、有技术假象的测量仪器之后的读数。单细胞测序的测序深度、dropout(浅测序导致某些基因被读成 0)、建库方式,全是测量装置在你和真相之间加的一层失真。你看到的"信号",一部分是生物学,一部分是仪器。
- 不承诺有简洁稳定的规则。 这个黑箱没有义务让自己可被一组干净的定律压缩。它可以高度情境依赖、混沌、对初始条件敏感。即使存在某种规律,也不保证它简洁,不保证它在不同样本或条件下稳定。
把这四条放在一起,"验证器为什么贵"就一目了然:要判定一个结论"对不对",你需要一个独立于你当前测量与分析体系的参照系,而这个黑箱的每一条性质都在抬高获得这种参照系的代价。你不能读源码(无源码),只能再戳一次(昂贵的扰动),戳出来的还是经过仪器失真的读数(含噪中介),而且你没法假设"这次戳的结果会简洁地复现上次"(无稳定规则保证)。所谓"独立验证",就是去这个黑箱上换一个尽量不相关的角度再戳一次:一次新的湿实验、一个独立队列。它之所以又贵又稀缺,归根到底是因为这个黑箱不让你便宜地确认任何关于它内部的断言。
贯穿本书的那个单细胞免疫案例(详见附录 NK,这里只取它来锚定直觉)里,"测序更深的那一组显得很多基因上调"之所以致命,正是黑箱的第 3 条性质在作祟:你看到的"上调",可能是生物学,也可能纯粹是测量装置(更深的测序对更浅的测序)在你和真相之间制造的假象,而黑箱不会主动告诉你是哪一个。软件里你可以读源码分辨真假;这里你不能,只能再去黑箱上换个角度戳一次(这正是后文三角验证在做的事),而那很贵。
I.3 Canonical ≠ Verified:共识的轴,和真的轴,是正交的
这里引入本书最容易被混淆、也最关键的一组区分。它们是两个不同的词,指两件正交的事,本书自始至终不让它们合并。
- Canonical(被采纳为当前标准)指一个结论被共同体(一个实验室、一个领域、一篇论文的合著者们)认定为"当前的标准做法 / 官方版本 / 大家都这么用的那个"的地位。它关乎共识:有多少人采纳它、它是不是被写进了流程、是不是被当成默认起点。
- Verified(已被独立验证)指一个结论经过了独立于你当前分析体系的检验,并被确认与现实相符。它关乎真:这个结论在领土上(湿实验、独立队列、临床随访)被换了个角度戳过,并且顶住了。
这两根轴正交,不是一条线上的两个点,是两个不同的维度。把它们画成一个二维网格,就能看到那个最危险、又最常见的格子:一个结论可以是 canonical(人人采纳、写进了论文、成了默认)但从未 verified(从来没有任何独立于分析体系的检验确认过它)。你的某个计算分析结论被写进论文的那一刻,它通常就坐在这个格子里:它是 canonical 的(合著者都接受了),但远没有 verified(没有湿实验回过话)。绝大多数计算分析结论一辈子都待在这个格子里,这本身没有错;错的是把这个格子当成 verified 的那个动作。
为什么必须把这两根轴分开、而且永不让它们合并?因为合并它们,就是给"洗白"开了门。本书对这两根轴的处理是不对称的:对计算分析来说,verified 这根轴几乎永远是空的,绝大多数结论永远等不到一次湿实验确认。一个永远为空的轴,看起来像是可以删掉的,但恰恰因为它永远为空,它才必须在。它是一盏几乎永不点亮的警示灯,唯一的作用就是占住"verified"这个位置,让任何 canonical 的结论都不能悄悄滑进来、不能在没有被真正点亮过的地方假装自己亮着。它越是常年空着,作为"此处尚未被验证"这一事实的结构化记号就越重要。而在那极稀有的、临床或湿实验真的确认了某个结论的时刻,它会被点亮一次,记录下那一个真正触到了领土的验证时刻。
这就第一次精确地说出了"洗白"在这组词汇里的样子,作为下一节完整定义的引子:洗白,就是在一个只配得上 canonical 标记的地方,悄悄地把它当成了 verified。 共识被冒充成了真。
I.4 歧路花园与多元宇宙:稳健 ≠ 真
上一节说的是单条结论被冒充成真。但威胁还有一层更结构性的来源,它发生在结论被生产出来之前,在分析路径本身的选择里。
歧路花园(garden of forking paths,Gelman & Loken 2013)——白话说:面对同一份数据,研究者在分析的每一步都有多个看起来都合理的选择(怎么归一化、用哪套细胞注释、跑哪个统计检验……),而他选哪一条,往往是被数据本身牵着走的:看到一个数字不对劲,才回头换一条路。最终他报告的那一条路径,只是众多"本来同样可以被报告"的路径中的一条;正因为选择是以数据为条件的(data-contingent),哪怕他从头到尾没有任何主观作弊(没有 p-hacking),这条被报告出来的路径也已经被数据"挑选"过了。花园的隐喻是:每一步都有岔路,你走出的那条小径看起来是唯一自然的路,但它身后是一整座你没走、也没记得自己本可以走的花园。
多元宇宙分析(multiverse analysis,Steegen et al. 2016)——白话说:与其只报告你碰巧走出的那一条路径,不如把所有合理的路径都跑一遍,看结论在整座花园里稳不稳。每一种合理的设定组合就是一个"宇宙",把它们全跑出来,就得到一个多元宇宙;你看的不再是某个宇宙里的数字,而是结论在所有宇宙里的分布。
用那个匿名的单细胞免疫案例来落地(完整叙述见附录 NK)。设定:在一份单细胞免疫数据里比较两组病人(组 A、组 B),在某个免疫细胞类型上做差异表达(DEG,即找出两组之间表达量显著不同的基因)。当你把"归一化方式 × 怎么处理测序深度差异 × 用哪个统计检验"这座花园跑一遍——六种都各自合理的设定——显著 DEG 的数量从大约 80 摆到大约 1200,连"谁是头号上调基因"都在真信号和技术假象之间反复横跳。其中最朴素的那条路(软件默认流程)恰恰是最差的:它把一个几乎所有细胞都表达的看家基因捧成了头号上调基因,而那纯粹是浅测序那一组把它读成了 0 造成的技术假象。
这个案例教三件事,每一件都直接喂给本书的设计:
第一,沉默的默认值是最隐蔽的岔路。 那条最差的软件默认路径,研究者甚至意识不到自己在分叉,因为那是软件替他选的默认值。歧路花园里真正藏尸体的地方,不是那些你警觉地去比较了好几种做法的步骤,而是那些你一上来就接受、从没起疑、因此从没被纳入多元宇宙的默认步骤(这一点会在 I.5 和附录 NK 的"诚实修正"里被推到底)。
第二,多元宇宙的真正回报不是任何单条路径的数字,而是不变量。 把整座花园跑一遍,最值得相信的产出,是那些在每一种合理设定下都稳定存活下来的信号。在这个案例里,是一组激活/干扰素特征的上调和一个细胞毒标志的下调,它们不随你换归一化、换检验而消失。值得报告的不是某一条挑出来的路径,而是对整座花园都稳健的那个流形。多元宇宙不是虚无主义地宣布"一切都任意",恰恰相反,它是把任意的部分跑掉,好让稳健的部分显形。
第三,也是最重要、最容易被工具搞错的一课:稳健 ≠ 真。 多元宇宙平抑的是研究者自由度,它让你对"换一种分析方式结论还成不成立"有信心。但它修不掉实验设计里的混杂。这个案例里有一道任何分析都跨不过的墙:组 A 的样本测序更深、且建库方式不同(混样对逐样本),而"测序深度/建库"与"分组"完全共线。这不是一条你可以换着走的岔路,是设计本身的缺陷,任何归一化、任何检验都拆不开它。于是即便一个信号对整座花园都稳健,它仍然可能是被这个混杂驱动的,而不是组别的生物学。稳健性是关于"对分析选择稳健",它住在 canonical 那根轴上;它再高,也碰不到 verified 那根轴,后者只有领土(换一种实验设计、一个独立队列)能回话。把"对所有路径都稳健"当成"已经验证为真",是 I.3 那个洗白动作在多元宇宙语境下的精确翻版。
这就给一个负责任的工具划出了它能做和不能做的边界:它可以、也应该帮你保留结论身上"我条件于哪条路径、我有没有矛盾的兄弟路径、我对整座花园稳不稳"这些信息;它绝不能替你把多元宇宙结算成一个"稳健所以大概是真"的判决,因为那个判决本身就是把稳健冒充成真,就是洗白。(这条边界正是 Part II、Part III 里"表达而不结算"的设计动机,也正是 Part IV 引用的多元宇宙作者们自己的告诫。)
I.5 抗洗白是第一性原理:精确定义 laundering
前面四节是四个独立的压力点:验证器稀缺(I.1)、对象是黑箱(I.2)、共识被冒充成真(I.3)、稳健被冒充成真(I.4)。它们收束到同一个词上,而这个词就是 Cairn 存在的第一性原理。
洗白(laundering)的精确定义: 在结论从一层向上传递到下一层的过程中——从产物,到 claim(一条带证据的分析结论),到摘要,到某个免疫细胞类型的小结,到整篇论文的项目结论——每一层都悄悄丢掉一点让这个结论诚实所必需的东西:它条件于哪条路径、它被哪个兄弟结论反驳过、它有没有过期、它有没有被任何独立于分析体系的东西验证过。每丢一层,结论就更干净、更好看、更确定一分。等它爬到顶端,它已经是一个干净、漂亮、却虚假的结果:所有的疤痕都被洗掉了,只剩下一个听起来无可置疑的句子。洗白不需要任何人撒谎,它是信息在层层转述、层层摘要、层层"为了好读"的压缩里自然的熵增方向。摘要天然倾向于丢掉条件,论文天然倾向于丢掉矛盾,一个新接手的人(或一个新的 AI session)天然倾向于把读到的 canonical 当成既定事实。没有谁主动作恶,结论却一路被洗白。
把前四节翻译成洗白的语言,就能看到它们其实是同一件事的四个侧面:
- 因为没有便宜的验证器(I.1),没有任何廉价的自动机制会在结论被洗白时把它拦下来。软件里 CI 会拦,科学里没有 CI,洗白畅通无阻。
- 因为对象是黑箱(I.2),那些被洗掉的东西——这是不是测量假象、这条路径稳不稳、混杂拆没拆开——恰恰是黑箱不会主动告诉你、必须靠人费力地戳出来再费力地记住的东西。它们最贵,所以最容易在转述里被省掉。
- canonical 被当成 verified(I.3)、稳健被当成真(I.4),是同一个洗白动作分别落在"共识—真"和"路径—真"这两根轴上。
所以抗洗白(anti-laundering)就是 Cairn 的第一性原理:它不是一个功能,而是 Cairn 存在的唯一理由,是先于一切机制选择的那条公理。正面陈述出来:一个结论在 产物 → claim → 摘要 → 细胞类型小结 → 项目结论 这条向上的链路里,在跨越不同 agent、跨越数月时间被反复转述的过程中,必须始终带着它的疤痕——它条件于哪条 fork、被什么反驳过、是否已经过期、有没有被独立验证。让疤痕活下来,而不是让结论被洗成一个干净好看的假结果。
这条原理同时划定了 Cairn 不做什么。这一点放在问题部分就说清,否则它会被误解成又一个"帮你判断对错"的工具,而那恰恰是它拒绝成为的东西。抗洗白不替你判断结论真假(验证器稀缺,它没有也假装不出这个能力),不替你把多元宇宙结算成判决(那是把稳健冒充成真,是它要防的洗白本身),不替你点亮 verified(只有领土能回话)。它做的只有一件事:在每一层转述里,机械地、确定地拒绝让那些疤痕被悄悄丢掉。判断归谁、机制归谁、为什么是这个形状,那是 Part II 的事。问题部分到此立稳:在一个没有便宜验证器、对象是黑箱、共识与稳健都极易被冒充成真的领域里,结论会被层层洗白成干净的假货;让结论带着疤痕活到顶端,就是第一性的需求。
Part II — 答案(为什么是这个形状)
Part I 立的靶子是清楚的:在 产物 → claim → 摘要 → 项目结论 这条向上的链子上,结论会被层层洗白(laundering)。洗白指剥掉让一个结论诚实的那些东西,比如它条件于哪条分叉、被什么反驳过、是否过期、有没有被独立验证,只留一个干净好看的成品。而 verifier(验证器,一个能机械判定"对/错"的检查器)在生物分析这种查询黑箱里大多缺席:你几乎永远没有一台机器能告诉你"这个差异表达结论是不是真的"。Part I 还给了两句更尖的断言:canonical(被采纳为当前正典的版本)≠ verified(被分析系统之外的东西独立确证);garden of forking paths(歧路花园)与 multiverse analysis(多元宇宙分析)则告诉我们 稳健 ≠ 真。
Part II 回答的不是"做什么",而是"为什么 Cairn 必须长成现在这个形状,而不是别的形状"。四块承重墙,每一块都是对一个诱人但错误的替代设计的拒绝。
II.1 不做判断的确定性底座 + 判断归 agent:bitter lesson 的逼迫
最自然、也最危险的设计冲动,是把"判断"焊进工具。既然我们有了一座歧路花园、一片多元宇宙,写一个工具去替我们裁决它似乎顺理成章:数一数有多少条路径同意、把效应量平均一下、给个"鲁棒性分数",然后宣布"六条路里五条同意,所以大概率是真的"。这正是多元宇宙分析自己的作者反复警告的那个用法。Rohrer、Hullman 与 Gelman(2026,What's a multiverse good for anyway?)以及 Del Giudice 与 Gangestad(2021)的论点是:一个机械地解释多元宇宙的工具,靠数一致路径、平均、把"鲁棒"翻译成"大概率真",制造的是*"一种严谨与完备的假象"(a guise of rigor and completeness)*,作为一个严肃的推断工具会失败。我们不是借他们的权威给 Cairn 背书;相反,是他们划出了 Cairn 不许踏进的那片地(Part IV 会把这层"诊断而非许可"的关系完整摊开)。
这条线不能踩,还有第二个、更工程化的理由:bitter lesson(苦涩的教训,Rich Sutton 的观察——长期看,依赖通用计算、搜索与学习的方法,总是胜过把人类领域知识手工编码进系统的方法;后者短期讨喜,长期被算力碾过)。把"这两条路是不是在回答同一个问题""这条分叉是真随意还是其中一种设定明显更有依据""什么能消解这点不确定"这类判断,硬编码成 CLI 里的 if 和计数器,就是 bitter-lesson 的反面教材:你在一个本该由推理系统去推理的位置,冻结了一套人类启发式。多元宇宙分析里这些判断还强烈依赖领域知识和对统计的理解(这也是 Del Giudice 与 Gangestad 的 E/N/U 三分法在实践中难落地、且"不确定"那一档会是常态的原因,详见 Part IV)。把它焊死,工具会随着那套 2021 年的框架一起迅速老化;而一个有能力的 agent 不仅会用这类框架,还会超越它。
于是 Cairn 的第一块承重墙是一刀切的分界:工具不做任何 interpretation(解释/判断),它只做能在"不理解内容"的前提下确定性完成的 mechanism(机制)。
这里要校正一个会反复冒头的误读:这条分界划的是 解释 vs 机制,而非"人 vs 工具"——它并不是"人来判断、机器来执行"。AI agent 本身就是一个推理者(reasoner)。Rohrer 等人警告的引力方向是"不要用机制替换推理",而不是"不要让 AI 去推理"。所以判断该归的是推理层,而推理层在 Cairn 里主要就是 AI agent:
- 解释 → 归 agent(公理 bake 进 Skill,而不是 CLI):这两个 sibling 是不是同一个 estimand(估计目标,即一条 claim 到底在测哪个量、在哪个人群里、条件于什么)?这条分叉是真随意还是有一种设定更站得住?可能性集合(possibility set)是什么?这点残余不确定该靠什么消解?一个矛盾意味着什么?这些都是 agent 用自己的理解加上现场抓取的上下文去推理的。
- 机制 → 归 CLI(手写、确定性、who-agnostic,即不管是谁写的、一视同仁):指纹与 freshness、reach-ground(够得到地面,即每条 claim 顺着依赖边向上走最终落到一个真实产物/文件/数据/外部引用)的图结构校验、对已声明标签的一致性闸(比如拒绝把声明了不同 estimand 的 sibling 合并)、把判断持久化成 OKF 并记历史、以及拒绝结构上非法的写入。
由此 CLI 永不产出 verdict(判决),因为 verdict 是解释。那个在更早设计里出现过的"收敛引擎/鲁棒性打分器"——它会把多元宇宙*resolve(消解)*成一个可信判决——被直接删除,因为它正好是多元宇宙作者说会失败的那个用法,也正好是 bitter-lesson 的反模式。CLI 留得很小:它指纹、校验图、依据声明的标签开闸、存储,但从不计数、不平均、不打分、不推断。所有智能在 agent 那一侧;工具只做"无需理解即可验证"的事。
代价要诚实写在墙上:这换来一个永久天花板——CLI 强制的是"与所声明的内容一致",永远不是"所声明内容为真"。一个 agent 仍可以靠误声明来洗白,比如把两条其实不同 estimand 的路径标成同一个 id 好把它们合并。后面的写入者不可信轴、独立复核能收窄它,但永远关不死它。这是这个形状固有的边界,Part IV 会专门把它摊开。
II.2 持久捕获:让判断被继承,而不是每次重推
第二块承重墙回答一个看似与第一块无关、实则同源的问题:判断该活在哪里?
诱人的廉价答案是"活在 Skill 提示词里就够了,不需要存储"。它被否决,理由是 Part I 那条洗白链的时间维度:只活在某个 session 里的判断会蒸发。如果每个新开的 fresh session(全新的 agent 会话,读正典 head 来快速对齐)都从原始上下文重新推导,它就会重新犯同一个错——而重推正是一个错误结论"复活"的机制。一条被反驳过的分叉,被下一个 agent 重新走了一遍,当初那条反驳已经被忘掉了,于是错误结论又一次硬化成"已闭合/否定"的结论。
所以持久捕获(durable capture)不是 Cairn 的一个附加功能,它是这个底座存在的理由。形状如下:
- 每条 claim 都持久化成 OKF——一个 frontmatter handle(句柄) 加一段 body narrative(叙事)。body 装推理;frontmatter 装"下一个 agent / CLI 不必重读散文就能据以行动的状态"。这个 handle 就是反重推装置:下一个 session 读 handle 直接继承"此事有争议、未解决",而不必从零开始重新推理,再重新踩进同一个坑。
- 矛盾的两边都持久化,哪一边都不许丢。 修正产生版本(写进
log.md),从不静默覆写——一个被覆写的反驳,等于没存在过。 - orient surface(
head/index.md,agent 开局读的那张正典面)必须把未解决的矛盾和过期显式顶到前面,而不是把它们埋在一堆 canonical 正面结论底下。被埋住的反驳,就是被洗白的反驳。
这块墙和第一块墙是咬合的:判断归 agent(墙一),所以判断必须能跨 agent、跨时间地传下去(墙二)。少了墙二,"判断归 agent"就退化成"判断归此刻这个 agent",每换一次 session 就清零重洗。
II.3 寄生而不造轮子:OKF 管格式、字节按引用 + 指纹,Cairn 只加抵抗层
第三块承重墙是一条克制原则,也是对 v1 的自我批判。Cairn v1 发明了自己的存储格式、自己的 viewer,结果是它得长期维护一套它并不拥有的格式和前端,还在后期设计里漂向了那个会 resolve 多元宇宙的收敛引擎。v2 的纠正是:寄生在已有的、做得更好的轮子上,自己只加那一层别人没做的"抵抗"。
分工是干净的:
- OKF 管格式、容器、viewer。 claim 就是一个 OKF concept 文件(markdown + YAML frontmatter)。estimand、confound(混杂,即一个无法靠分析本身拆掉的设计缺陷)都是 OKF 节点,被 claim 按 id 引用。发布出去的 snapshot 是一个可移植的 OKF bundle,用标准 OKF 可视化器渲染——协作者什么都不用装,字节也不离开页面。时间线写成 OKF 原生的
log.md,不是 Cairn 的发明。 - 字节按引用 + 指纹,从不摄入。 产物(结果表、模型对象、图)留在它本来在的地方——gitignored、外部卷、或远端 host;Cairn 只存它的路径引用与指纹,从不把字节摄入 store,也从不自己给字节做版本(ADR 0003)。git 足迹永远只有文本,多 GB 的项目也只产出几百 KB 的 claim 文本。指纹的来源是分层的(ADR 0002):pipeline 工具(如 targets)的内容哈希是顶级(rigorous,且为它自己的 memoization 本就算好了,免费搭便车),散落结果文件直接哈希是中级,远端够不着时读
unknown。当一个内容寻址工具(如 DVC)在场、产物有一个稳定的内容哈希指针时,CLI 就把那个哈希当作一个顶级指纹来源来读;这只是"它在场时多一个高质量指纹来源"的举例,不是 Cairn 寄生的第二条承重腿。 - Cairn 只加抵抗层。 它不存字节、不发明格式、不写 viewer。它加的是 OKF 和底层字节存储都不会替你做的那一层:指纹驱动的 freshness、reach-ground 校验、抗洗白的一致性闸、territory-locked 的 verification、派生的 corroboration 轴。这一层,也只有这一层,是 Cairn 自己的。
这条原则同样咬合 bitter lesson 的精神:不要把工程精力花在重造通用基础设施上,把它留给那一小片"别人确实没做、且必须做"的抵抗逻辑。
II.4 表达,不消解:每条残余都带一条 deflate 指针
第四块承重墙是 Cairn 对待不确定性本身的姿态,也是它与那个被否决的收敛引擎最锋利的分界。
收敛引擎想做的是 resolve(消解):把多元宇宙的不确定性碾平成一个干净的可信判决。Cairn 的姿态恰恰借 Rohrer 的话:"embrace uncertainty, don't resolve it"(拥抱不确定,而不是消解它)。多元宇宙的价值不在于给你一个最终答案,而在于让那些条件、那些分歧、那些"还没人独立查过"如实地留在台面上。一个把不确定性消解掉的工具,本身就是一台洗白机:它把"在六种合理设定下 DEG 数从约 80 飘到约 1200"洗成一个干净的数字。Cairn 要做的是让结论在向上、跨 agent、跨时间时,仍带着它的限定条件和未决分歧。
这个姿态机制化成几道确定性闸,每一道都是"表达"而非"消解":
- 一条 claim 必须声明它条件于哪条 fork(
depends_on_fork,比如normalization=log1pPF)——分叉被表达,不被抹平。 - 一条 claim 可以声明它
contradicts(矛盾于)另一条——分歧被结构化地记下来,不被埋进散文。 - 还带着未解决矛盾的 claim 被挡在
settled(已了结)之外——一个有争议的结论永远不许硬化成"已闭合/否定"。这正是把那个真实失败案例(一个被遗忘的矛盾分叉,让一个错误的"闭合否定"结论在结论里硬化)机制化地堵死的那道闸。 - 一个无法消除的 confound 可以被按 id 继承(
inherits_caveat),于是设计缺陷顺着图边传播到每一条下游 claim,而不是被复制一份然后丢失。
但"表达不消解"如果只到这里,会留一个真窟窿:一个只会囤积不确定性、却从不指向出口的系统,本身也是一种失职。所以每一条残余不确定都必须带一条 deflate 路线指针(deflation_route),明确指出要消除这点不确定该靠什么。可能的出口只有三类:
- 问清 estimand——这点"不确定"也许根本是因为两条路在答不同的问题,把 estimand 说清楚它就消失了。
- 多做验证——比如供体级 pseudobulk(按供体把许多细胞先聚合成一个伪批量样本再比较,避免把同一供体的细胞当独立样本;完整定义见 NK.5)、逐供体一致性、跨细胞类型的谱系逻辑,这类三角验证能把"可能为真"抬成"较可信"。
- 换实验设计——当 confound 与分组共线、任何分析都拆不开时(这是设计缺陷,不是分叉),唯一的出口是换设计。
这里有一条不可逾越的红线,它把 deflation_route 和那个被删掉的收敛引擎彻底分开:Cairn 指路,但永不替你走完。 deflation_route 是一个指针,不是一次裁决。它会说"这点不确定该靠跑一个供体级 pseudobulk 来缩小",但不会自己去跑、也不会自己宣布跑完之后结论就成立了。走完那条路、判断结果、决定不确定是否真被缩小,那是 agent(推理层)的活儿,是墙一划给解释那一侧的活儿。工具只负责保证这条出口被诚实地记在 claim 上、不被向上洗白掉。
这也连回那条永远关不死的天花板:deflate 之后,你可能把一个结论从"可能真"抬到了"较可信",但稳健 ≠ 因果 ≠ verified。三角验证再多,只要 confound 与分组共线这条设计缺陷还在,处理/批次效应就永远无法和生物学分开——那需要的是出口 (3) 换设计,而不是任何工具内部的计算能给你的。Cairn 会忠实地把这条残余和它的 deflate 指针一路带上去;够不到 verified,它就如实标成够不到。
这四块墙合起来,就是 Part I 那条第一性原理(抗洗白)在工程上的形状:判断归 agent 且必须持久可继承(墙一、墙二),格式寄生于 OKF、字节按引用 + 分层指纹而从不摄入(墙三),而 Cairn 自己只贡献那一层让限定条件和分歧幸存下来的抵抗——表达而不消解、指路而不代走(墙四)。Part III 会逐条拆开这层抵抗的具体机制,并把每条机制回扣到它各自的 ADR:为什么 estimand 是 handle 而 E/N/U 不进字段、为什么 verification 被 territory-lock、为什么 freshness 由指纹而非过程决定、为什么写入者不可信。
Part III — 机制(怎么运作)
前两部分回答了"为什么需要这样一个东西"和"为什么是这个形状"。这一部分把形状落到机械层面:Cairn 由哪些零件构成,每个零件做什么、不做什么,以及每一条机制如何回扣到它所服务的那条认识论原则。Part II 立下的分界线在这里始终成立:判断归 agent(推理者),机制归工具(确定性底座)。下面每一个零件都在回答同一个问题:这件事能不能在不理解内容的前提下确定性地做到?能,就进工具;不能,留给 agent。这条线区分的是 interpretation 与 mechanism(解释与机制),而非人与工具——AI agent 同样是推理者。本部分逐节演示这条线落在哪里。
III.1 三类 OKF 节点:claim / estimand / confound,以及"句柄 vs 叙事"为什么不冗余
OKF 是 Cairn 寄生的载体——这里把它当成一种"概念文件"格式:每个概念一份 markdown 文件,文件顶部是一段 YAML frontmatter(结构化的键值对),下面是自由书写的正文 body。Cairn 自己不发明存储格式,而是把判断写成 OKF 文件,再在这层格式之上只加"抵抗"那一层。Cairn 用到三种节点类型:
- claim(结论):一条分析结论。例如"在某免疫细胞类型上,组 A 相对组 B 的某看家基因 H 显著上调"。
- estimand(估计目标):一条 claim 究竟在回答哪个问题——你测的是哪个效应、在哪个人群里、条件于什么。"组 A vs 组 B 在该细胞类型上 H 的真实生物学差异表达"是一个 estimand,"H 在当前归一化下的表观倍数变化"是另一个 estimand。同一个基因,两个不同的问题。
- confound(混杂):一条无法靠分析消除的设计缺陷。例如"测序深度 ≡ 分组 ≡ 建库方式三者完全共线"。它带一个
unerasable(不可消除)标记,说明这不是某条路径的选择问题,而是数据本身的死结。
estimand 和 confound 做成独立的一等节点、被 claim 按 id 引用,而不抄进每条 claim 的文字里,是因为这是 Part I 那个"抗洗白"在数据结构层面的第一道防线。一个混杂如果被复制成字符串散落在二十条 claim 的正文里,它就会在第二十一条被遗漏——这就是 Latour 说的"黑箱化":一个原本带着伤疤的事实,在层层转述中被洗成干净结论。改成一个有单一定义的节点加一条 inherits_caveat 引用边,混杂的传播就变成图上的一条边,而不是一次字符串拷贝;它只有一个真相来源,下游每条引用它的 claim 都机械地继承它,谁也洗不掉。
claim 内部还有一条更微妙、也更被低估的设计:frontmatter 是句柄(handle),body 是叙事(narrative),两者不许逐字重复(ADR 0004)。
- body(叙事)给人和"要钻进来细读"的 agent 读:结论连同它的条件、矛盾、caveat、以及"什么会改变它",用散文讲清楚。这是推理本身。
- frontmatter(句柄)给机器扫:只放机器可操作的状态——这条 claim 的 estimand id、它条件于哪条 fork、它跟谁矛盾、它继承哪个 confound、它的 provenance(来源类别),以及一组由 CLI 算出来盖上去的锁定字段(见后文)。
坚持"不冗余"不是洁癖,而是大规模推理不爆炸的唯一办法。设想一个 agent 舰队跑了几百上千条 fork,留下几百条 claim,一个新 session 进来要 orient(定位)。如果"这条 claim 还有没有效、它跟谁矛盾、它属于哪个问题"这些可操作状态埋在散文里,新 agent 为了拿到它们就必须把每一条 claim 的正文都重读一遍。ADR 0004 把这个动作命名为 re-derivation(重新推导),它正是错误复活的机制:一条被反驳过的 fork 被重新走一遍,而它当年的反驳早被遗忘。句柄是反 re-derivation 的装置——新 agent 扫全部 frontmatter(便宜、O(n)、每条都小)拿到全局态势,只钻进少数几个真正要深究的 body 去读推理。扫全部句柄、只读少数 body,推理成本才随规模有界增长,而不是每个新 session 都把整座花园重读一遍。句柄承载状态,叙事承载理由,两者各司其职、不重复,这就是 ADR 0004 那条原则的物理实现:判断持久化且被下一 session 继承,而非重新推导。
III.2 estimand 作一等节点:body 是定义,id 是身份,CLI 比 id 不比语义
这一节回扣 ADR 0005,它是整个 Cairn 里"机制如何在不理解内容的前提下守住一条认识论铁律"的最干净示范。
它要守的东西:Part I 的案例里,朴素默认流程产出 claim A——"看家基因 H 是头号上调基因";更严谨的路径产出 claim B——"H 的'上调'是测序深度/dropout 假象,不是生物学"。这两条 claim 是同一个 estimand 上的对立结论:它们在回答同一个问题(H 在该细胞类型上、组 A vs 组 B 的真实差异表达),所以它们真的矛盾,必须被当成矛盾对待。换一种情形:一条 claim 谈"H 在 log1p 归一化下的表观倍数变化",另一条谈"H 在降采样到同深度后的倍数变化"——这两条不矛盾,它们在回答两个不同的问题,把它们硬凑成"一个稳健性结论"恰恰是 Part I 痛斥的洗白:把不同问题的答案平均成假的"鲁棒"。
要机械地区分这两种情形,工具必须知道两条 claim 是不是在回答同一个问题。而判断"是不是同一个问题"属于解释,按 ADR 0004 不能进工具。ADR 0005 的解法是把这个解释切成两半:
- 难的那半留给 agent:该不该把这两条 claim 视作同一个 estimand?该复用已有的 estimand id 还是新铸一个?这是 agent 用它对领域和统计的理解去做的判断,写成 estimand 节点的 body(自然语言定义)。
- 可机械化的那半留给 CLI:estimand 节点的 id 就是它的身份。claim 用
estimand: <id>引用它。CLI 需要判断两条 claim 是不是"同一问题的兄弟"时,只比较 id(字符串相等),从不读 body 的语义。
"句柄 vs 内容"的分裂再次出现:body 是定义(给推理者读),id 是身份(给机器比)。CLI 比 id 不比语义,这就是它确定性、who-agnostic、不解释的全部秘密。它不需要懂什么是 estimand,只需要做字符串相等。
为什么 estimand 是 agent 愿意填的句柄,而 E/N/U 那类"等价类型"不该进字段(细节在 Part IV)?estimand 是 agent 对自己意图的声明——"我此刻在测哪个量、问哪个问题"——这是它分析时本来就知道的,便宜、稳定。而 E/N/U(把两条规格的关系判定为"等价/不等价/不确定")是对别人选择之间关系的裁决,要做兄弟比对、还是 contested 的细判断,正是一队 agent 会跳过不填的 think-field;一旦做成字段,它立刻变成一个新的洗白面——声明"Type E 等价"就能合法塌缩。所以 estimand 进字段,E/N/U 不进,后者留作 agent 的推理透镜、写进 body。
estimand 这套机制有它的天花板,ADR 0005 自己点明、Cairn 绝不掩盖:CLI 比 id 不比语义,意味着它抓不住碎片化(fragmentation)(两个 id 其实是一个 estimand),也抓不住混淆(conflation)(一个 id 套在两个真不同的 estimand 上,一个故意的洗白动作)。能挡这个的只有对 estimand 节点本身的独立评审,不是工具。
III.3 不合并的信任轴 + 五道确定性闸
Part I 的核心论点之一是 canonical ≠ verified:一条结论"是当前商定的记录"和"被独立证实为真"是两件永不合并的事。Cairn 把"信任"拆成几条互不坍缩的轴,每条轴要么由 CLI 计算,要么由 CLI 机械地把守一道闸。做成独立的轴而非一个综合分数,本身就是抗洗白:综合分数会把"路径稳健""有人复核""湿实验证实"这些性质不同的东西平均成一个好看的数字,而那正是 ADR 0004 禁止工具产出的"伪严谨外观"。
下面五道闸,每一道都是纯机制——枚举检查或边计数——没有一道需要工具理解内容。
闸一:reach-ground(够到地面)铁律——回扣 ADR 0001。 每条 claim 必须站在地上。形式上,每条 claim 至少有一条边,且沿依赖边(claim → claim)一路向上走,最终必须终止于 ground(一次运行、一个文件、一份数据、一条外部引用)。没有任何 claim 可以只靠别的 claim 站着,那是穿着 provenance 外衣的循环论证,正是 Cairn 要防的。这道闸不在写入时强制,而在 draft → canonical 的提升边界强制(ADR 0001 的"软授权、硬边界"):claim 可以先以 draft(草稿) 状态被廉价地记下来(无边也行),活在 owner 的工作区里,永不被合作者、新 session、snapshot 看到;只有当它要晋升为 canonical 时,CLI 才跑那个递归的 reach-ground 查询,够不到地面就拒绝晋升。授权时因此低摩擦,不打断 agent 心流(低摩擦本身是主要的抗遗忘机制),而任何读者看到的 canonical 永远是良基的。
闸二:collapse-refusal(拒绝塌缩)——回扣 ADR 0005。 估计目标不同,不许塌成一个"稳健性"结论。当 agent(或某个 orient 逻辑)想把一组兄弟 claim 当作"同一多元宇宙里的不同规格"来处理时,CLI 检查它们声明的 estimand id:只要 id 不全相同,就拒绝塌缩。这是 III.2 那道铁律的执行端,机械地阻止"把不同问题的答案平均成假鲁棒"。它只比 id,不判断 id 背后是不是真同一个问题——那是天花板,留给评审。
闸三:resolution(矛盾未解不许 settled)——回扣 ADR 0001 的扩展。 这里把案例里那对矛盾 claim 拿来具体演示。
resolution(解决态) 是一条与 lifecycle(draft/canonical)正交的新轴,取值 open(未解)/ settled(已了结)。它存在的唯一理由是 Part I 那个真实失败的反面教材:一条本该存疑的结论硬化成了"CLOSED NEGATIVE(关闭的否定结论)",因为它的矛盾兄弟被遗忘了。Cairn 要让这种硬化在结构上不可能发生。
具体到案例:
- agent 写下 claim A:"看家基因 H 是头号上调基因。"CLI 盖章:
lifecycle: canonical是可能的(它够得到地面,指向一份结果表加指纹),estimand: deg-H-groupA-vs-B。 - 后来更严谨的路径产出 claim B:"H 的上调是深度/dropout 假象,不是生物学。"agent 在 claim B 的 frontmatter 写
contradicts: [claim-A],且 claim B 的estimand与 claim A 相同(同一个问题,对立答案)。 - resolution 闸启动:CLI 看到 claim A 上挂着一条未解的
contradicts边(claim B 与它对立,且尚无哪一方被标记为了结这场争执),于是拒绝把 claim A(或 claim B)置为settled。
关键在于这道闸的温度:它不强迫 claim A 退出 canonical。claim A 可以继续是 canonical——它确实是某条合理路径产出的、够到地面的当前记录——但只要那条矛盾边还开着,它就永远到不了 settled。"contested 但 canonical"是一个合法且诚实的状态。而且 orient 面(见 III.5)被要求把这条未解矛盾顶到显眼处,不许埋在一堆 canonical 正面结论底下。对比 Part I 那次失败:纯 re-derivation 模式下,一个新 session 重走默认流程、再次得出"H 是头号上调"、把它写进结论,而当年 claim B 的反驳早已蒸发,错误就这样复活。Cairn 的机制把这条路堵死:矛盾作为结构持久化、被继承,且永远压着 settled 不放。这兑现了 ADR 0004 那条可证伪断言——"在真实的矛盾案例上,持久化加上强制声明的判断,必须挡住 re-derivation 允许的复活;挡不住,这个底座就没挣到自己存在的资格。"
闸四:verification 领土锁(agent 永不能设 verified)——回扣 ADR 0006,Gate A。
verification(验证) 轴取值 unverified / verified / contradicted / unverifiable,它领土锁定地只表示一件事:被独立于你这套分析系统之外的东西确认(湿实验、独立队列)。它几乎永远停在 unverified,价值不在于经常变,而在于做一盏结构化、可继承、不可被摘除的警示灯,让 canonical 永远无法悄悄冒充 verified。这道闸是纯枚举检查:当一条 claim 的 provenance(来源)是 agent 来源时,CLI 拒绝把 verification 设为 verified;只有非 agent 的 provenance(experimental / human_reviewed)才够得到 verified。无论 agent 多自信、跑了多少条收敛路径、做了多漂亮的三角验证,它在结构上就是按不亮那盏灯。回到案例:那组跨整座花园都稳健的不变量(一组激活/干扰素特征上调、一个细胞毒标志下调),即便通过了供体级 pseudobulk 金标准、逐供体一致、跨细胞类型谱系逻辑这三重三角验证,把"可能真"抬成了"较可信",它仍然只能停在 canonical(且是 canonical 内部较高的角落),永远够不到 verified——那条线只有换实验设计、跨出分析系统才能跨。稳健 ≠ 因果 ≠ verified,这道闸把它焊死。
闸五:corroboration(无第二 asserter 不许升)——回扣 ADR 0006,Gate B。
corroboration(旁证) 是一条与 verification 分开的派生轴,取值 self-asserted(自陈,一个 asserter)/ cross-reviewed(交叉复核,≥2 个不同的 asserter id)。它像 freshness 一样是派生的、不手设:CLI 数 reviewed_by 里有几个不同的 asserter id,少于 2 个就拒绝 cross-reviewed。它必须是独立的一条轴、而不是 verification 上的一格,原因在于:如果把"交叉复核"做成 unverified < cross-reviewed < verified 的中间一格,那 cross-reviewed 就会被读成"半验证",正是 Cairn 禁止的那种冒充。所以它把"两个具名 agent 都在记录上看过"这件事抬升为 two-named-asserter canonical——仍是 canonical,绝不是 verified。它的天花板 ADR 0006 也直说:一个不同的 id 不等于独立性(同一个模型换个 shell 就有新 id 和同一个盲点);CLI 只做"没有第二个 asserter ⇒ 升不上去",至于第二个 asserter 是不是真正去相关(不同家族、为何独立),是写在复核边上的叙事,CLI 携带它但不验证它。
五道闸共享同一个形状:每一道都是枚举检查或边计数,没有一道需要工具理解内容。这就是 ADR 0004 的"机制归 CLI"在执行层的全貌——工具守的是声明之间的一致性,从不守声明本身的真伪。后者是永久天花板,Cairn 大声承认(细节在 Part IV)。
III.4 写入者不可信:asserter / reviewed_by / 派生的 corroboration
这一组机制回扣 ADR 0006 的精神底色,也回扣 Part II 的一条公理:agent 不信任自己的断言。如果信任的字段可以由写入者自己填,整个抗洗白就是自欺——一个 agent 可以给自己盖"已验证、已交叉复核"的章。Cairn 的回答是把身份与信任从写入者手里夺走,交给 CLI 当事实盖章。
- asserter(断言者):做出或最后修改这条 claim 的那个 agent(模型 / session / 时间),由 CLI 在每次写入时确定性地盖上,agent 填不了也改不了。一个不同 asserter 的修改创建一个版本(写进
log.md),绝不是静默覆盖,这样原始断言和它的更正都持久存在,对应 Part I 的铁律:矛盾的两边都不许被丢。asserter 与 fingerprint(指纹) 是两个不同的东西——fingerprint 签的是证据工件,asserter 记的是做断言的 agent;一个签字节,一个记作者,绝不混淆。 - reviewed_by(复核者集):复核过这条 claim 的 asserter id 的结构化集合,同样由 CLI 当事实盖章。一条复核边可以携带叙事(解释这个复核者为何独立,比如不同家族),但 CLI 只携带这段叙事、不去验证它。验证"是否真独立"属于解释,按 ADR 0004 不进工具。
- corroboration 从上面两者派生,不是手设的——CLI 数 reviewed_by 里不同的 asserter id 个数,自己算出
self-asserted还是cross-reviewed(即闸五)。
把这三件事串起来:身份(asserter)由 CLI 盖,复核(reviewed_by)由 CLI 盖,信任(corroboration)由 CLI 从前两者算,写入者在这条链上没有任何一处能自我授信。这就是"写入者不可信"从原则落成机制的样子。它呼应那条更广的锁:任何 agent 给计算字段(freshness / lifecycle / verification / corroboration / reach-ground)填的值,一律被 CLI 覆盖——agent 提供意图句柄(它知道的、便宜的),CLI 独占信任句柄(算出来的、盖上去的),两者永不越界。
III.5 freshness 由指纹派生、unknown 是合法态、指纹质量分层;以及 CLI 动词、Skill 公理、OKF bundle 布局
freshness(新鲜度)—— 回扣 ADR 0002。
freshness 回答"这条 claim 当年站着的那个工件,从我下结论到现在变了没有?"取值 fresh(新鲜)/ stale(陈旧)/ unknown(未知)。最要紧的机制决定是:freshness 从证据工件的指纹派生,而不是从计算过程派生,更不是 agent 手填。
为什么不哈希过程?因为真实环境保证了纪律会失守。计算大多直接经由 agent 跑,有时走 pipeline 工具、有时不走、有时是 Python、还常常在远程 HPC 上。哈希过程(消费 pipeline 的 DAG,或包裹执行 cairn run --)只覆盖少数走了 pipeline 的活,且一旦忘了那个特殊步骤就硬失败:没有节点就完全没有 freshness。所以 Cairn 改为在授权时给证据边盖一个工件指纹(内容哈希,够不着时退化为 size+mtime 的弱指纹),freshness 就是拿存下的指纹和当前比——可达且匹配为 fresh,可达但变了为 stale(且沿依赖边级联:任何依赖陈旧,自己也陈旧),不可达或只是自陈无法复检为 unknown。
unknown 是一个合法、诚实的状态,不是失败。当远程工件够不着时,unknown 就是正确答案;真正的敌人是一个假的 fresh。这呼应 Part I 的抗洗白:宁可诚实地说"不知道",也绝不给出虚假的信心。指纹的质量是分级的,并显示在徽章上:pipeline 工具的内容哈希是顶级(rigorous,且为它自己的 memoization 本就算好了,免费搭便车),自陈的远程 md5sum 是诚实的较低一级。徽章如实标明是哪一级,绝不把不同质量的指纹拍平成一个 fresh/stale。
字节按引用 + 指纹,从不摄入。 Cairn 自己从不版本化字节,也从不摄入工件(ADR 0003:文本进 git 当真相,工件按 path + 指纹引用,绝不摄入);git 足迹永远只有文本,多 GB 的项目也只产出几百 KB 的 claim 文本。当一个内容寻址工具(如 DVC)在场、产物有一个稳定的内容哈希指针时,CLI 就把那个哈希当作一个顶级指纹来源来读。这是"指纹质量分层"里顶层的一个例子,不是与 OKF 并列的第二条承重腿。它的含义有限且诚实:只要那个内容哈希在 git 里(如 .dvc 指针随 claim 一起版本化),它就始终可读作一个顶级的历史指纹,claim 被钉在一份可恢复的字节描述上。但 freshness 仍按 ADR 0002 优雅降级:字节当前可达时,拿存下的哈希和当前比,给出可靠的 fresh/stale;字节当前不可达(在远端/外部卷上够不着)时,CLI 仍诚实回落 unknown。指针里的历史哈希让 claim 钉得住、可恢复,但它不让 CLI 凭历史 md5 在字节不可达时假装 fresh。
CLI 动词。 CLI 是唯一的写入路径,确定性、可审计,做 schema 表达不了的结构检查。动词大致是:head 发出 OKF 的 index.md orient 面(canonical claims + 实时 freshness + 被顶到显眼处的未解矛盾/陈旧);add-claim(带 --estimand、--evidence kind:ref(含 dvc:)、--depends-on-fork、--contradicts、--inherits-caveat、--provenance、--deflation-route,由 CLI 盖 asserter 并算锁定字段);add-estimand / add-confound 铸那两类节点;review <claim> --by <asserter> 记一条复核边(asserter 须不同于 claim 的 asserter,corroboration 才升得动);以及 refresh、validate(reach-ground 等闸)、publish、drafts、status、reconcile(warn-only:只把"共享文稿里没带 claim id 的结论"标出来,不假装拦住了)。
Skill 公理。 Cairn 把"判断归 agent"做实的办法,是把那套操作公理 bake 进一份 Skill(给 Claude Code 的 markdown 能力注入)。Skill 是唯一能"促成"一条 claim 被写下来的东西(schema 不会授权);CLI + Store 则只约束(拒绝畸形写入,skill 强制不了)。两者不是竞争,而是不同动词:Skill = cause,CLI + Store = constrain。公理本身——表达而非 resolve、声明 estimand、把多元宇宙读成 possibilistic 而非 probabilistic、有争议的 fork 默认 unresolved、指向一条 deflation route、不信任自己的断言——住在 Skill 里、不冻进工具,所以换一套更好的认识论框架,是改 Skill 公理,而不是改 schema。这是 bitter lesson 在架构上的兑现:智能留在会推理的那一层,工具只做不靠理解就能确定性验证的事。但约束力必须在这里就说诚实:Skill = cause 但不 enforce,这些公理是一个 agent 可以无视的愿望(wish),v1 没有任何 hook 在背后强制它们。能在不依赖 agent 善意的情况下硬性 nudge/block 的 Claude Code 生命周期 hook 是 v2 的硬化;v1 只靠 CLI + Store 约束畸形写入,挡不住一个干脆不调用 skill、不写 claim 的 agent。读到这里的读者不要高估这些公理的约束力:它们是设计意图,不是 v1 已强制的不变量。
OKF bundle 布局。 一个发布出来的 Cairn store 是一个自包含、可移植的 OKF bundle,目录大致是 claims/、estimands/、confounds/ 三类节点文件,加三个顶层文件:
index.md= orient 面:新 session 着陆即定位的那张图——canonical claims、实时 freshness、被顶到显眼处的未解矛盾与陈旧。它的纪律(ADR 0004)是 surface 而非 bury:负面的、矛盾的、过期的,绝不许被压在一堆 canonical 正面结论底下,因为"把负面洗掉"正是 Part I 那次失败的机理。log.md= 时间线:snapshot 历史与更正以 OKF 原生的log.md写下,时间脊是格式自带的、不是 Cairn 发明的。更正在这里以版本形式留痕,绝不静默覆盖。snapshots/= 不可变冻结:每次publish冻结一个内容寻址、不可变的 snapshot(只含 canonical),让读者能对着自己上次看到的版本 diff。它是一个可移植的冻结工件,可以由静态文件、也可以由未来的 Cloudflare Worker 同样地端出去——写永远留在本地,读可以远行。
这三者合起来给出 Part II 说的那个"持久捕获 + 寄生 OKF + 字节按引用 + 表达不 resolve"的物理形态:判断写成 OKF 持久化而不蒸发,字节按 path + 指纹引用而留在原处(可恢复、不摄入),Cairn 自己只在这层之上,机械地、不解释地,加上那道让结论一路向上仍带着伤疤的"抵抗"。
Part IV — 边界与证伪
这一部分回答一个对正典文档不可回避的问题:Cairn 解决了什么、永远解决不了什么,以及凭什么相信它不是把一套旧零件重新包装成新系统。它故意往相反方向用力,把每一处天花板、每一条可能的反驳、每一项前人已做的工作摆到台面上,并诚实说出哪些事 Cairn 根本不碰。
会自我背书的文档不值得未来的读者信任。所以这一部分先把所采用认识论的前台来源讲清楚——它本身就是一份对这类工具的警告书——再用它当尺子量 Cairn,量出来 Cairn 恰好站在这些作者所说"工具最容易失败"的那个区里,然后说明我们为什么仍认为这个形状成立。
IV.1 前台认识论:多元宇宙到底有什么用
Part I 已给过这两个词的白话定义,这里直接进入它们的学术定位。本书采用的认识论前台,是 Rohrer、Hullman 与 Gelman(2026)的《What's a multiverse good for anyway?》,外加 statmodeling 博客上与之配套的那篇短文。它的论点需要完整复述,因为它不是给 Cairn 背书,而是一份对"多元宇宙管理工具"的警告书,而 Cairn 正是一个多元宇宙管理工具。其大意是:
-
多元宇宙真正的价值在于反思、批判与"表达不确定",而不是出判决。 把一整座花园摊开,最大的用处是逼研究者看见自己有多少自由度、哪些设定其实是任意的、结论对哪些选择敏感。它是一面镜子,不是一台裁判机。
-
当它被当成严肃的推断工具时,它会失败。 失败的精确机制是:只有当被纳入多元宇宙的那些分析指向同一个连贯的 **estimand(估计目标——你到底想估计哪个量、在哪个人群、条件于什么)**时,结果的散布(spread)才有干净的解读。一旦纳入的分析其实在回答不同的问题,那条结果分布就把两种不同的不确定性叠在了一起:一种是对答案的不确定(同一个问题,方法噪声),另一种是对问题本身的不确定(这些路压根不是同一个问题)。两者叠在一张直方图上之后再也分不开。读者看到一个宽分布,却无法知道它宽是因为问题难、还是因为把橘子和苹果堆在了一起。
-
多元宇宙是"可能性的"(possibilistic),不是"概率性的"(probabilistic)。 这是最容易被误读、也最致命的一点。给一般读者:possibilistic 的意思是"这些都是可能做出的合理分析",它列举的是可能性;probabilistic 的意思是"每条结果带着一个它为真的概率"。多元宇宙给你的是前者。所以绝不能把效应的分布当概率读:某个效应在 1000 条路里出现了 900 次,并不等于它有 90% 的概率为真。那 1000 条路不是从某个总体里随机抽的样本,它们的"票数"反映的是你(或某种约定)碰巧枚举出了多少条长得像它的路,而不是世界的真相。频率高不等于更可能为真。把众数当答案、把比例当后验概率,是这套工具最常见也最危险的滥用。
-
"严谨与完整的假象"(guise of rigor and completeness)。 这是上述论文里反复出现的警告,也直接写进了 ADR 0004。一个把多元宇宙机械解读的工具——数有多少条路一致、把效应平均掉、宣布"稳健 ⇒ 大概为真"——会制造出一种严谨和穷尽的外观,而这外观本身就是骗局:它让一个其实悬而未决的问题看起来像被一台中立机器解决了。跑了十亿条回归、画出一张漂亮的分布,并不会把"这些路是不是同一个问题"这个最难的判断做掉,只是把那个没做的判断藏到了图表底下。
-
博客那一句,是 Cairn 存在的直接理由。 配套博客指出:当生成多元宇宙还很贵的时候,"任意性"被成本天然地压住了——没人有空跑十亿条路。但 AI 让"生成一个多元宇宙"变得近乎零成本;一旦如此,如果没有与之匹配的纪律,你得到的不是更多严谨,而是"规模化的可疑启发式(questionable heuristics at scale)"——把本来就站不住的随手判断乘以一百万。
这第 5 点正是 Cairn 的定位,也是它和所有前人工作的分界线。AI 已经工业化了判断的生成,Cairn 想做的是用同样工业化的"判断的可见性"去匹配它:不去出判决(那正是论文警告的失败模式),而是让每一条被工业化生成出来的判断,在向上汇聚时仍带着它是怎么来的、条件于哪条 fork、被什么反驳、有没有被独立看过。Cairn 不试图替这套工具补上它缺的推断统计,而是接受这套工具是 possibilistic 的,只做一件确定性工具能诚实做的事:不让那张 possibilistic 的图被偷偷读成 probabilistic 的判决。因此 Cairn 自己绝不数路径、不平均、不出 robustness score——那会让它变成论文里那台制造"严谨假象"的机器,也正是 Part II 第一块墙删掉的那个收敛引擎。
需要诚实说明的是,Rohrer、Hullman、Gelman 并没有为 Cairn 背书。他们开出的是一张给人类研究者的态度处方——把多元宇宙当镜子用,别当裁判机;表达不确定,别 resolve 它。Cairn 是一个工具,而且恰恰站在他们所说"工具最容易失败"的那块地上(它管理多元宇宙、它跨判断汇聚)。我们引用他们,是因为同意他们的诊断,并把"工具不许出判决"这条警告硬编进了设计(ADR 0004),而不是因为他们认可这个工具。这个区别贯穿整个 Part IV:每次我们靠近一位前人,靠近的是他们的诊断,不是他们的许可。
IV.2 永久天花板:一致性不是真理
Cairn 的 CLI(命令行工具,唯一的写入通道)只能强制一件事:你写下的东西,彼此一致、并且和你声明的标签一致。它永远强制不了第二件事:你声明的东西为真。这不是 v1 的临时缺陷,而是这类确定性底座的永久天花板,写在 ADR 0004 的结尾,并被 ADR 0005 与 0006 各自重申了自己那一格的版本。
具体说,CLI 能做的全部是机械动作:给证据产物按指纹(fingerprint,对产物内容算的一个签名)算一个签名、验证 claim 的依赖图能向上落到地面(reach-ground)、在声明的标签上设闸(比如两个 claim 声明的 estimand id 不同就拒绝把它们当同一个多元宇宙合并)、把东西按 OKF 存下来。这些动作有一个共同点:不需要理解内容就能做。这正是它们能确定性、能跨人/跨 agent 一致的原因,也正是它们的边界——一个不理解内容的机器,无法判断内容是否为真。
于是天花板的精确形状是:agent 可以靠误声明(mis-declaration)洗白。Cairn 的第一性原理就是抗洗白。但 CLI 抗的是结构性的洗白(丢边、循环论证、把过期当新鲜、把 agent 自己的工作冒充成独立验证),它抗不了语义性的洗白:
- ADR 0005 那一格:CLI 比的是 estimand 的 id(字符串相等),从不读 estimand 定义的含义。所以一个 agent 可以把两个其实在问不同问题的 claim 标成同一个 estimand id(conflation,把两个估计目标塞进一个 id),骗过合并闸,把橘子和苹果平均进一张图——这正是 IV.1 论文说的那种失败。把一个估计目标拆成两个 id(fragmentation)也一样骗得过。CLI 看不出来,因为看出来需要理解定义,而理解就是判断,判断不在工具里。
- ADR 0006 那一格:CLI 数的是不同 asserter(断言者,做出或最后修改某 claim 的那个 agent)id 的个数。它把"≥2 个不同 id"机械地升级成
cross-reviewed(交叉评审过)。但一个不同的 id 不等于真正的独立性——同一个模型开个新 shell 就有了新 id,却带着一模一样的盲区。CLI 抓不出这种假评审;评审者为什么真的独立(不同模型家族、为何不相关),只是写在评审边上的叙事,CLI 搬运它、但不核实它。
这条天花板是 Cairn 诚实的核心:canonical(被采纳为当前公认记录)永远不等于 verified(被分析系统之外的东西独立确认,比如湿实验、独立队列)。CLI 守住的是"你写的和你声明的一致",它从结构上保证 canonical 不会悄悄冒充 verified(ADR 0006 双侧锁死:agent 永远设不了 verified;交叉评审被故意挡在 verification 轴之外,免得 cross-reviewed 被读成"半验证")。但它守不住"你声明的为真"。稳健 ≠ 因果 ≠ verified,这是整本书的不变量,也是这条天花板最朴素的表述。
唯一的缓解,不是更强的工具,而是**写入者不可信(writer-distrust)**这条公理本身:默认每条 provenance(来路)都是可被挑战的、要靠一个不同的 asserter 去独立看。这缓解了误声明,但永远关不死它——因为独立性本身又是个判断,又回到了天花板下面。Cairn 不假装关死了这个洞,它只保证这个洞始终可见(warning light 是结构而非叙事,summarization 洗不掉它)。
IV.3 证伪测试:也许你根本不需要造一个系统
正典文档必须自带一发对准自己的子弹。对 Cairn,最锋利的那一发是这样的反驳:
也许你根本不需要造任何系统。也许你需要的只是(a)一套现成的零件,加(b)一套写文章正文时的纪律。
OKF 能存 claim;DVC 能管字节和版本;nanopublication 和 SEPIO(见 IV.4)几十年前就把"claim + 证据 + 来路"结构化了;多元宇宙文献早就告诉你该怎么摊开花园、该 possibilistic 地读。把这些拼起来,再要求每个写论文正文的人自觉地在每个结论旁边写清楚"这条条件于哪条 fork、被什么反驳、是否过期"——你是不是就拿到了 Cairn 承诺的全部抗洗白,却没造任何新东西?
这发子弹必须被当真,不能嘴上化解。它有一个可操作的证伪测试,而且 Cairn 自己的 ADR 0004 结尾已经把这个测试写成了"这个 store 必须挣到自己"的判据:拿那对矛盾的 claim,在贯穿案例上拼一遍,看纯靠现成件 + 写作纪律,能不能真的挡住矛盾的复活。
那对矛盾(细节在附录 NK,这里只取骨架):朴素默认流程产出 claim A——"某看家基因 H 是头号上调基因";更严谨的路径产出 claim B——"H 的上调是测序深度/dropout 假象,不是生物学"。同一个 estimand,对立结论。证伪测试问的是:
- 一个新的 agent session(fresh session),手里只有现成件 + 一份"写正文时请认真"的纪律,半年后从头读这份分析——它会不会因为 claim B 当时只活在某次对话里、没有作为结构持久化下来,而重新走一遍 claim A、把那个被驳倒过的"H 是头号上调"再次写进摘要、洗掉 claim B 的反驳?
如果会,那么"现成件 + 写作纪律"就没挡住矛盾的复活,而 Cairn 声称它挡得住的机制是 ADR 0004 的核心:判断作为结构持久化、被下一个 session 继承而不是重新推导。re-derivation(每个新 session 从原始上下文重新推一遍)正是一个被驳倒的"封闭/否定"结论复活的精确机制;持久化 + frontmatter handle(下一个 agent 不必重读散文就能读到的状态)就是用来焊死这条复活路径的。写作纪律是一个愿望(owner"有时候会忘",这是 CONTEXT.md 明文承认的 v1 天花板),而把矛盾作为不可丢弃的结构存下来、并强制 orient 面把未解决的矛盾顶到表面而不是埋进 canonical 正面结论之下,是一个机制。
所以这个证伪测试的诚实结论分两层:
- 如果在真实案例上,"现成件 + 一个自律的人/agent"也能可靠地挡住那对矛盾的复活,那么 Cairn 没有挣到自己,它就该被砍成"一套约定 + 一份 skill 纪律",不该有 CLI 和 store。ADR 0004 明文接受这个判决。
- 我们押注的是它挡不住,理由不是工具更聪明,而是纪律不规模化、机制规模化。AI 已经把判断的生成工业化到了"一个下午十亿条路"的量级;指望与之配对的是"每个结论旁边人类自觉写清伤疤",是拿一个不规模化的东西去接一个已经工业化的东西。Cairn 赌的就是这个不匹配:当生成被工业化,可见性也必须被工业化,而可见性的工业化需要的是确定性机制(写入者不可信、不可丢弃的矛盾结构、机械的一致性闸),不是更强的自律。这个押注是可证伪的,本节给出的就是证伪它的具体做法。
IV.4 前人地图:你不独有
抗洗白这件事,绝大多数零件都不是 Cairn 发明的。这一节诚实地画出这张图,并精确指出 Cairn 站在哪个交集上——而不是把任何一项前人工作收编成"为 Cairn 背书"。
- nanopublication(2010 起)+ SEPIO。 给一般读者:nanopublication 是把一条最小的科学断言,连同它的证据和来路(provenance),打包成机器可读的结构化单元的格式;SEPIO(Scientific Evidence and Provenance Information Ontology)是一套描述"证据—断言—断言者"关系的本体。这两样是生物学原生的"claim + 证据 + 来路"工具,比 Cairn 早十几年。Cairn 的 asserter(断言者)概念直接借自 SEPIO 的 asserting agent;claim/evidence/grounding-edge 的三节点结构,nanopub 早做过。这一整层 Cairn 没有发明。
- OKF。 claim 的存储格式、frontmatter handle 与 body narrative 的分工、概念文件目录的布局、外部 viewer——全部寄生在 OKF 上。ADR 0003 被明确重构成"Cairn 不再维护自己发明的格式和前端"。格式与展示,Cairn 不拥有。
- 字节版本化 / 内容寻址工具(如 DVC)。 给一般读者:这类工具把大文件的字节版本化、可恢复(git 里只留一个小指针)。Cairn 自己从不版本化产物——它按 path + 指纹引用工件(ADR 0003),当这类工具在场、产物有一个稳定的内容哈希指针时,CLI 顺手把它当一个顶级指纹来源读。字节的版本化与还原,Cairn 不拥有,也不寄生为承重腿,只在它在场时蹭它的内容哈希。
- targets / Snakemake。 给一般读者:这些是数据分析的流水线工具,能记录"哪个产物由哪步产生、是否需要重跑"。当它们在场时,它们顺手提供一个高质量的内容指纹(freshness 的顶层来源)。编排与产物指纹这个"免费来源",Cairn 不拥有,只在它在场时蹭。
- 多元宇宙 / 歧路花园文献(Gelman & Loken、Steegen 等、Rohrer/Hullman/Gelman 2026)。 "把花园摊开、possibilistic 地读、别 resolve、表达不确定"这套认识论全部是别人的。Cairn 采用它,不发明它。
那么 Cairn 独有的是什么?不是任何单个零件,而是一个四维交集:
(in-flight 写入)×(agent 写)×(抗洗白为第一性)×(写入者不可信)。
逐维说清,并对照前人:
- In-flight(在工作流中即时写)。 nanopub / SEPIO 主要是事后发表后的结构化、给机器检索用的归档层;Cairn 的 claim 是 agent 在正常分析过程里一句话、低摩擦、draft-soft 地写下来的(低摩擦是主要的抗遗忘机制)。它要捕获的是正在发生的判断,不是发表后的整理。
- Agent 写。 前人工具的主写入者是人类研究者或策展员;Cairn 是 agentic-AI-ready-first,主接口是 agent loop,公理 bake 进 skill,主写入者是 AI agent。被对齐的对象因此变了——整套设计(handle 让下一个 agent 不重读散文、矛盾必须顶到 orient 面)都是为"下一个 AI session"服务的。
- 抗洗白为第一性。 nanopub 的第一性是机器可发现与可重用;OKF 的是知识表示;DVC 的是可复现。没有一个的第一性是"让结论在向上汇聚、跨 agent、跨时间时仍带着伤疤"。Cairn 把抗洗白当成唯一的设计驱动,并据此砍掉一切——它只加"抵抗"那一层(bytes 按 path + 指纹引用而从不摄入、format 走 OKF、Cairn 只加 resistance)。
- 写入者不可信。 这是最锋利、也最反常的一维。前人工具大多隐含信任写入者诚实地填字段;Cairn 把默认不信任写入者写进公理:provenance 默认可被挑战、agent 永远设不了 verified、信任只能靠不同 asserter 的独立评审升、而且连"不同 asserter"都被诚实地承认不等于"真独立"。在一个写入者本身就是会规模化犯同一种错的 AI 的世界里,不信任写入者是唯一诚实的默认。
这张地图的诚实结论是:Cairn 不独有任何零件,它独有这个交集,以及把这个交集当第一性贯彻到底的那份偏执。任何一项前人工作单拎出来都不是为 Cairn 背书,它们是 Cairn 站立其上的肩膀;站立的姿势——这个四维交集——才是 Cairn 自己的。
IV.5 不解决的:明确划出 Cairn 不碰的地
诚实的边界,一半是说清你解决了什么,另一半是说清你故意不碰什么。Cairn 不碰、也不假装碰的:
- 编排、算力、成本。 Cairn 不跑分析、不调度、不管 HPC、不优化"该跑哪几条路、跑多少条"。多元宇宙的生成不是 Cairn 的事(那是 agent + targets/Snakemake + 远程算力的事);Cairn 只在判断已经被生成出来之后,管它们的可见性与一致性。前台博客说 AI 让生成变 trivial——Cairn 接住的是 trivial 之后的烂摊子,不是去管生成本身。
- hooks(v1 不做,留给 v2)。 v1 的唯一授权驱动是 skill,而 skill 是"一个 agent 可以无视的愿望"。能在不依赖 agent 善意的情况下 nudge/block 的 Claude Code 生命周期 hook,是 v2 的硬化。这意味着 v1 的 claim 真的可能被忘记——
publish只做 warn-only reconcile(报告正文里没带 claim id 的结论、没落地的 draft),不 block。这是被接受的天花板,不是被掩盖的 bug。把它写在这里,是为了让任何人都别误以为 v1 已经强制了什么——v1 强制的是"让疏漏可见",不是"假装疏漏被阻止了"。 - 独立性的判断。 这一条反复出现,但值得单独立一条:CLI 数 asserter id 的个数,从不判断真正的去相关性。"这两个 asserter 是不是真的独立"是判断,不在工具里。Cairn 不解决独立性,它只让"声称的独立性"作为评审边上的叙事被搬运、被下一个读者审视。
这三条放在一起说明 Cairn 是一个窄工具。它的诚实正来自它的窄——它只做能确定性验证的事,把所有需要理解的事(生成、判断、独立性)都推给 agent 或留给未来。一个声称把这些都解决了的工具,恰恰会变成前台论文警告的那台制造"严谨假象"的机器。
IV.6 被认真考虑过、然后抛弃的子叙事:E/N/U
留一段给一个曾经是设计核心、最终被抛弃的想法,因为它的抛弃过程本身就是对前面所有原则的一次集中检验:E/N/U——Del Giudice 与 Gangestad(2021)提出的 equivalence / nonequivalence / uncertainty(等价 / 非等价 / 不确定)三分法。
给一般读者:当你面对多元宇宙里的一个个分析决策节点(用归一化方法甲还是乙?),E/N/U 想给每个节点贴一个类型标签——这两个选择是等价的(随便选,结果该一样)、非等价的(选不同会得到不同的、有意义地不同的东西)、还是不确定(说不清算哪种)。早期 Cairn 的设计里,E/N/U 一度被当成那个第一性的结构化字段,是用来告诉合并/orient 逻辑"这些兄弟规格什么时候可以被合并"的 handle,被携带了好几轮设计。
然后它被抛弃了。理由是这本书前面立的几条原则各自对它打了一枪,每一枪都致命:
- Bitter lesson(苦涩的教训)。 给一般读者:bitter lesson 是 AI 研究里反复被验证的一条经验——把人类设计的具体框架焊进系统,长期看几乎总是输给"让系统自己用通用能力去学/去推理"。把 2021 年的一个特定三桶分类焊进 schema,就是把一个人类框架冻结进工具。一个有能力的 agent 会用 E/N/U 并超越它(明天可能有更好的切法);一个和某个分类学绑死的工具老得飞快。这正是 ADR 0004 反复说的 bitter-lesson anti-pattern——在本该让推理系统推理的地方,硬编人类启发式。
- 框架的作者自己给它泼冷水。 给 E/N/U 泼冷水的,正是我们当前台引用的 Rohrer、Hullman 与 Gelman(2026)。他们指出 E/N/U 的区分在理论上成立,但在实践中"强烈依赖研究者的领域知识和统计功底",而且 Type U(不确定)往往会占多数。一个 modal value(最常出现的取值)就是"不确定"的三桶 enum,不是一个值得强制的东西。还有一层:在没有预注册(预先登记你打算怎么分析)的情况下,研究者会倾向于按这个节点支不支持自己想要的结论来给它分类——E/N/U 标签本身又会被歧路花园污染。它不是花园的解药,会变成花园里的又一条岔路。
- 摩擦纪律(friction discipline)。 一个字段要想真的被填,必须便宜——agent 能从它已经知道的东西里随手填出来。这里 estimand 和 E/N/U 的对比是决定性的:estimand 是 agent 对自己意图的便宜声明——"我在估计哪个量、问哪个问题",这是 agent 在分析时本来就知道的,便宜且稳定。E/N/U 是对他人选择之间关系的裁决——要求把兄弟规格两两比较、做有争议的细判断。这正是"一队 agent 会集体跳过的 think-field(需要停下来想的字段)"。一个会被集体跳过的字段,作为强制结构是没有价值的。
- 强制 E/N/U 还是一个洗白面(laundering surface)。 如果 E/N/U 是字段,agent 就能声明"Type E,等价"来合法地把兄弟规格合并掉、把一个该悬而未决的问题 settle 掉。这和 estimand 那个 conflation 漏洞同形,但更糟:estimand 至少声明的是 agent 自己的意图,E/N/U 声明的是对别人选择的裁决,更容易被当成"客观判定"来挡箭。不把它做成字段,就直接拿掉了这个洗白向量。
- estimand 已经吃掉了 E/N/U 最承重的那一半。 这是抛弃它而不丢失任何机制的关键。E/N/U 里真正承重的,是 effect-nonequivalence(效应非等价)——"不同的 estimand ⇒ 不同的问题 ⇒ 不可比较"。而这一半已经被 estimand handle 完整吃下了:CLI 拒绝合并声明了不同 estimand id 的兄弟,就是在机械地强制 effect-nonequivalence。剩下的那些非等价(measurement 测量、power/precision 功效精度——"同一个 estimand,但规格甲是不是比乙更有效/更有功效?")是逐案的领域判断,本来就该留给 agent 作为 body narrative。所以抛弃 E/N/U 字段,损失的不是机制,只是一个会被跳过、会被滥用、会老化的 enum;机制那一半早被 estimand 用更便宜、更诚实的方式接走了。
这五枪连起来,E/N/U 的命运是这本书所有原则的一次合演:判断归 agent(0004)、便宜的 handle 优于昂贵的 think-field(0005)、不给洗白留面、不把会老化的人类框架焊进工具、最承重的那半用确定性机制接走、其余留作可继承的叙事。它被认真考虑过好几轮,然后被这些原则一致地否决——这说明这些原则不是事后修辞,它们真的会推翻设计者自己一度偏爱的方案。
收尾必须回到那条贯穿 Part IV 的诚实:Del Giudice 与 Gangestad 没有为"抛弃 E/N/U"背书,Rohrer 等也没有为 Cairn 背书。Del Giudice 与 Gangestad 是在提出 E/N/U;我们是在它身上应用了别处学来的原则后决定不焊它。Rohrer、Hullman 与 Gelman 给 E/N/U 泼的冷水,是开给人类研究者的态度处方——"别太信这个三分法在实践中分得清";我们把这剂处方读成"那就更不该把它做成强制字段",但这是我们的推论,不是他们的结论。同样,他们对多元宇宙的整套警告,是写给人去更谦逊地用一面镜子的;Cairn 是一台机器,而且自觉地站在他们说"机器最容易把镜子变成裁判机"的那块地上。我们与他们共享诊断——多元宇宙是 possibilistic 的、稳健不是真、机械解读制造严谨假象——但许可是我们自己签的:我们押注,在一个判断已经被 AI 工业化生成的世界里,一台只做可见性、坚决不出判决的确定性机器,是配得上那套诊断的唯一形状。这个押注对不对,Part IV 给的两个证伪口子(永久天花板下的误声明洗白、案例上"现成件 + 纪律"够不够)会回答;本书不替它打包票。
附录 NK — 案例全文(匿名版)
本附录把贯穿全书的案例从抽象落到一个具体的、完全匿名的数据分析现场。它不引用任何真实项目、实验室、染色体或基因身份;保留下来的只是认识论骨架,数字一律取整示意,仅供说明量级。读这段叙述时请记住本书的总命题:值得带向上游的,不是某一条路径漂亮的数字,而是那一点点对整座花园都稳健、并且仍带着伤疤的东西。Part I 已经从这个案例里提炼过三条教训(沉默默认是最隐蔽的岔路、回报是不变量、稳健 ≠ 真);本附录给出完整叙事,再补两条诚实修正(防止把这个故事讲得比真相更体面),最后给出一张现象 → Cairn 设计的映射。
NK.1 设定:一个"比较两组病人"的简单请求
数据是一份单细胞免疫测序(single-cell:把组织打散成单个细胞、逐细胞测量基因表达的技术)。手头有两组病人,记作组 A 与组 B。任务被一句很朴素的话定义下来:"这两组病人的某一类免疫细胞,有没有差异?在那个细胞类型上做一个差异表达分析。"
差异表达(DEG,differentially expressed genes):在两组之间,逐个基因检验"这个基因的平均表达量在组间是否系统性地不同",把通过显著性门槛的基因列出来。这是单细胞分析里最常规、最被默认流程化的一步。正因为太常规,它把一整座歧路花园藏在了"看起来只是跑个默认函数"的外表底下。
在动手之前,先记下一个致命的技术事实,它是后面所有混乱的根源:
组 A 的样本测得更深(每个细胞拿到的测序读数更多),而且建库方式不同:组 A 是把多个病人混在一起建一个文库(混样),组 B 是每个病人单独建库(逐样本)。结果是"测序深度"、"建库方式"、"分组"这三件事完全共线——它们在数据里永远一起变,谁也拆不开谁。
这一条必须和"分叉"分清楚。分叉(fork)是分析者的选择:归一化用哪种、检验用哪种,这些是"本可以走另一条路"的自由度。混杂(confound)是实验设计的缺陷:深度、建库与分组焊死在一起,数据生下来就带着它,不在分析者的选择之内。本案例同时踩中两者,而它们需要两种完全不同的对待方式(这正是后面映射表要分开的东西):分叉可以靠更多分析、更多验证去收窄;设计混杂再多分析也拆不开,只能换实验设计,或者诚实地标记并让它向下游传染。
NK.2 Layer 2 多元宇宙:六种都合理的设定,DEG 数从 ~80 摆到 ~1200
本书只保留这个案例的 "Layer 2":在细胞类型标签早已确定、分析单元不再争议之后,那个纯粹关于"怎么归一化、怎么处理深度、用什么统计检验"的建模多元宇宙。(更上游还有一层"哪些细胞算这个类型"的标注多元宇宙,本书略去不展开。)
确定了要比较的细胞之后(量级上,组 A 约 200 个细胞、组 B 约 600 个细胞),那个深度混杂立刻发威:组 A 的细胞普遍测得更深,于是很多基因仅仅因为在更浅的组 B 细胞里"没测到"(dropout,低深度下真实表达被测成 0)就显得在组 A 里"上调"。对"如何处理这个深度差异",每一种做法都合理,每一种都给出不同的结果(显著 DEG 取整示意,上调 / 下调):
- 标准对数归一化 + 细胞级 Wilcoxon 检验(软件默认) → 约 1200 / 100,排名第一:看家基因 H(假象)。
- 换一种深度感知的对数归一化(不降采样) → 约 220 / 70,排名第一:看家基因 H(假象)。
- 把深的组降采样到同深度 + 标准归一化 → 约 490 / 150,排名第一:真信号基因。
- 降采样 + 深度感知归一化 → 约 80 / 70,排名第一:真信号基因。
- 病人级 pseudobulk(按病人聚合后检验) → 约 530 / 70,排名第一:在 H 与真信号间摆动。
- pseudobulk(只取细胞数足够的病人子集) → 约 290 / 170,排名第一:真信号基因。
"有多少个差异基因"从 ~80 摆到 ~1200,"谁是头号基因"在真信号和技术假象之间反复横跳。最朴素的那条路(软件默认)恰恰是最差的:它的头号上调基因是一个几乎所有细胞都在表达的看家基因 H(housekeeping gene,维持细胞基本运转、本不该有组间差异的基因)。H 之所以显得"组 A 特异上调",纯粹是因为它在更浅的组 B 细胞里被 dropout 掉成了 0。一个完全的技术假象,被默认流程捧成了第一名。
这里就埋下了本案例最尖锐的一对矛盾,留到 NK.4 正式提出。先记住这一节的教训:如果只报告"我们发现约 1200 个上调基因,头号是 H",它听上去确定、客观,但它只是这座花园里的一条路,而且是最差的一条。
NK.3 多元宇宙的回报:跨所有路径存活的不变量
把整座花园跑一遍,最有价值的产出不是任何单条路径的数字,而是不变量(invariant):在每一种设定下都稳定出现的那点信号。在本案例里,无论归一化、深度处理、统计检验怎么换,下面这组方向始终在场:
一组激活 / 干扰素应答相关的特征基因在组 A 上调;一个细胞毒性标志基因下调。
那个真信号基因,在六种设定里始终排在第一或第二。对整座花园都稳健的东西,才值得相信。这是多元宇宙思维的建设性意义:它不是虚无主义地宣称"一切都任意",而是教你报告稳定的流形,而不是某一条挑出来的路径。
但要立刻给"稳健"装上刹车,这正是本书反复强调的那条边界:稳健 ≠ 真。"对所有分析路径都稳健"只证明了这个结论不依赖于分析者的自由度,它并没有证明这个结论是真生物学。它对应的是 canonical(被当前方法体系认作"站得住"的地位),而不是 verified(被独立于分析体系之外的领土确认为真)。把"稳健"误读成"真",正是本书定义的洗白(laundering):把一个本来带着条件和伤疤的结论,洗成一个干净好看、可以直接拿去用的"事实"。
NK.4 那一对矛盾:同一个 estimand,对立的结论
把 NK.2 埋下的矛盾正式摆出来。下面两条 claim 针对的是同一个估计目标(estimand)——"在这个细胞类型上,看家基因 H 在组 A 相对组 B 的表达差异"。两条 claim 问的是同一个量,给出的却是相反的答案:
- Claim A(朴素默认路径产出): "看家基因 H 是这个细胞类型在组 A 的头号上调基因。" 来自软件默认流程,证据线是默认设定下的 DEG 表。
- Claim B(更严谨路径产出): "H 的'上调'是测序深度 / dropout 假象,不是生物学——在深度匹配、或病人级聚合之后,H 的组间差异消失。" 来自降采样路径与 pseudobulk 路径的证据线。
这不是"两个不同问题各自有各自的答案"。若是那样,它们就不该被放在一起比较。它们是同一个 estimand 上的两个对立答案。这正是本书要工具去守住的那个形状:在一个真实场景里,正是这种矛盾被遗忘、其中"看起来更省事"的一条(Claim A 那种朴素默认)悄悄固化成了项目的最终结论,而把它反驳掉的那条 claim 蒸发了。Cairn 存在的第一性理由,就是不让这种遗忘发生:两条 claim 都必须持久化、谁也不许被静默删除,而且只要这对矛盾还没被裁决,针对这个 estimand 的结论就不许被标成"已了结(settled)"。工具自己不裁决谁对,它没有资格做这个判断;它只机械地保证"矛盾在场、且 orient 表面看得见",把裁决留给会推理的 agent 和最终的领土。
NK.5 三角验证:把"可能真"抬成"较可信",但永远够不到 verified
光有"对分析选择稳健"还不够。要判别 NK.3 那组不变量到底是真生物学还是另一个更隐蔽的技术假象,又做了三件相互独立的事,这就是三角验证(triangulation):用几条彼此不共享偏差的证据线去逼近同一个结论,每多一条独立的线,结论就更可信一分。
- 病人级 pseudobulk(公认金标准)。 把每个病人的目标细胞先汇总成一个"伪批量"样本,再做组间比较。这样既避免了把同一个病人的许多细胞当成相互独立的样本(pseudoreplication,伪重复),又用规范的方法正确地建模了深度。那组激活 / 干扰素信号上调、细胞毒标志下调,通过了金标准,不是单纯的细胞级统计假象。
- 逐病人一致性。 真信号基因在组 A 的每一个病人里都高、在组 B 的每一个病人里都低,方向完全一致,不是被一两个极端病人带出来的。
- 跨细胞类型的谱系逻辑。 把同一批基因放到其他细胞类型里看:激活信号是泛淋巴系的,而那个细胞毒标志的下调只出现在有细胞毒功能的谱系,在没有细胞毒功能的细胞类型里没有。一个盲目的技术假象不会"认得"细胞毒谱系,所以这个方向符合生物学逻辑,而不只是数字上的巧合。
三条线都指向同一个方向。但它们加起来仍然够不到 verified。三角验证是在 canonical 内部爬一道梯子:对分析路径稳健(最弱)< 对病人一致 < 符合独立的生物学结构(最强)。这道梯子能让一个 canonical 结论尽可能逼近那条线,但永远跨不过它。那条线只有领土能跨——湿实验、独立队列、独立的测量装置,某种独立于你整个分析体系之外的东西回话确认。三角验证把结论从"可能真"抬成"较可信",这很有价值;但把"较可信"说成"verified",又是一次洗白。
NK.6 不可消除的残余:只能换实验设计
最后,诚实地承认:有一个问题,跑遍整座花园也修不掉,因为它根本不是分叉,是 NK.1 那个设计混杂。
那组激活 / 干扰素信号的上调,有可能是真生物学(组 A 的免疫微环境确实更活化),也有可能是技术性的:组 A 全是混样建库、组 B 是逐样本建库,两组在"建库 / 处理方式"上系统性不同,而处理差异本身就会诱导应激与干扰素信号。关键在于:
降采样能对齐"深度"这一个轴;pseudobulk 能对齐"伪重复"。但没有任何分析方法能把"混样 vs 逐样本建库"这个混杂从"分组"里拆出来,因为它和分组完全共线。
跑遍整座多元宇宙,证明的是"信号对分析选择稳健";它证明不了这是组 A 的生物学,因为混杂依旧不可检验。这是本案例最深的一课,也把本书反复回到的那条铁律落到了实处:
多元宇宙分析平抑的是研究者自由度,它修不掉实验设计里的混杂。一个对所有分析路径都稳健的结果,仍然可能是被混杂驱动的。稳健 ≠ 因果 ≠ verified。 要真正回答这个问题,需要的是更好的数据(逐样本建库、目标细胞富集的、可比的样本),而不是更聪明的统计。
这个残余必须被显式记录、并让下游每一条引用它的 claim 自动继承;否则它会在一层层摘要里被悄悄丢掉,结论被洗成一个没有伤疤的干净事实。这是本书对"防黑箱化"的核心要求:让混杂作为一个一等的、有唯一定义的节点存在,向下游以图的边传染,而不是被复制成一句迟早会丢的散文 caveat。
NK.7 两条诚实修正
这个故事已经相当好看了:稳健的不变量、三角验证、诚实标记的残余。正因为它好看,要给它打两个补丁,否则本书自己就在示范它最痛恨的那种洗白:把一个磕磕绊绊的真实过程,重写成一个更有方法论自觉、更体面的版本。
修正一:这个过程是被动的、被数据触发的事后探索,不是主动加权。
真实的顺序是这样的:分析从软件默认起步(没有人一上来就计划做多元宇宙),跑出来读到一个离谱的数字(约 1200 个上调基因、头名是个看家基因),这才回过头去补救,试降采样、试别的归一化、试 pseudobulk。多元宇宙是被一个离谱结果倒逼出来的,而不是一开始就有的纪律。
这一点要钉死,因为它正是歧路花园所担心的那个模式本身,而不是它的解药:分析路径以数据为条件(data-contingent)——"看到数据再决定下一步怎么分析"。把这个过程美化成"分析者主动用论证依据给各条路径加权",是假的。诚实的版本是:分析者被数据牵着走,事后才补上了纪律,而这种"事后补救"本身就带着幸存者偏差——只有那些碰巧给出离谱数字的步骤,才有机会被怀疑、被多元宇宙化。
修正二:真正的盲区是那些从没被起疑的"沉默默认"。
在这整个故事里,被多元宇宙化的只有让分析者起疑的步骤:归一化(因为 ~1200 这个数字太离谱)、深度处理(因为看家基因 H 当头名太可疑)。而一上来就"看起来对"的那些默认——质控阈值、高变基因的选取、主成分(PC)数的选择——从头到尾没有被起疑过,没有被纳入任何多元宇宙。
这才是歧路花园真正藏尸体的地方。最差的那个软件默认,恰恰是因为它给了一个离谱的数字才被抓到;那些给出"看起来合理"数字的默认永远不会触发怀疑,于是它们引入的偏差就一路畅通无阻地活到了最终结论里。一个步骤被怀疑的概率,取决于它的输出有多离谱,而不取决于它实际有多危险——这是一个系统性的、与真实风险无关的采样偏差。本书因此把"防洗白"的真正瞄准对象,定在了这些沉默的、从未触发怀疑的默认上:洗白最危险的形态,不是把一个被反驳过的结论留下来,而是让一个从没被起疑的默认,悄悄地、体面地决定了结论。
NK.8 映射:案例每个现象 → Cairn 哪条设计
把上面叙述里的每一个认识论压力点,对应回本书前面论证过的某条具体机制。读法:每条先给案例里实际发生的现象,再给 Cairn 用来抵抗它的那条设计,以及该设计回扣的本书部分 / ADR。注意:所有右侧机制都遵守同一条总纪律——工具只做能确定性验证的事,绝不解释、不裁决、不打分;判断全部归 agent。
那一对矛盾:Claim A(H 是头号上调)vs Claim B(H 是深度 dropout 假象),同一个 estimand、对立结论。
→ resolution 闸 + keystone 验收测试。 两条 claim 都持久化、谁都不许被静默覆盖(ADR 0004,Part III.4);只要它们之间的 contradicts 边未裁决,针对该 estimand 的结论就被拒绝标成 settled(resolution 轴,正交于 lifecycle,Part III.3 闸三)。这正是"存在即理由"的 keystone 验收测试(Part IV.3):复现这对矛盾,断言被门控的存储拦住了矛盾结论的固化、并在 orient 表面把矛盾顶出来;若拦不住,这个底座就没挣到自己的存在。工具不判谁对,只机械保证矛盾在场且可见。
六设定摆动(~80↔~1200)+ 跨所有路径存活的不变量。
→ possibilistic 读法 + 绝不出判决。 Cairn 不数有多少条路径同意,不平均效应,也不打稳健性分(ADR 0004,明确 out of scope,Part II.1 / IV.1)。多元宇宙被当作"哪些结论可能成立"的**可能性集合(possibilistic)**来表达,而非"路径投票概率"(probabilistic)——这是 Skill 里的 agent 公理,不是 CLI 的机制。工具只持久化每条 claim 条件于哪条 fork(depends_on_fork),让"摆动的"和"不变的"都各自在场;判决(哪个是真信号)留给 agent。
三角验证三条线(金标准 pseudobulk / 逐病人一致 / 谱系逻辑)把"可能真"抬成"较可信"。
→ evidence_lines(多条具名证据线)+ canonical 内部梯度,但够不到 verified。 三条线各记为一条具名 evidence_line,让结论的"脚"落在多个相互独立的地基上。它们一起把 claim 在 canonical 内部抬高一档(更稳、更可信),但 CLI 在结构上锁死 agent 触不到 verified:verification 轴是领土锁(territory-locked,ADR 0006 Gate A,Part III.3 闸四);provenance 为 agent 来源时,CLI 拒绝 verified,只有非 agent 的领土证据(实验 / 人类确认)才能点亮那盏灯。三角验证再强,也只是 canonical 内的爬升,永远跨不过那条线。
不可消除的设计残余(混样 vs 逐样本与分组共线,处理 / 干扰素效应拆不开)。
→ confound 节点 + deflation_route + 稳健≠verified。 设计混杂记为一个一等的 confound 节点(唯一定义、带 unerasable 标记),下游每条 claim 以 inherits_caveat 边继承它——传染是图的边,不是迟早丢失的字符串拷贝(Part III.1)。同时记一条 deflation_route(消解路径)诚实地写明"这个不确定性只能靠换实验设计来缩小,不是靠更多分析"(Part II.4),把残余指向出口,而不是囤积。这条机制把"稳健 ≠ 因果 ≠ verified"做成了结构。
过程被动(默认起步 → 读到离谱数字 → 才回头补救)。
→ 默认保守 + 写入者不可信。 Cairn 不假设分析者主动加权了路径;它的姿态是默认保守——争议中的 fork 默认落在 unresolved,结论默认 unverified(永不熄灭的警示灯)。配套是写入者不可信(writer-distrust):CLI 把所有计算 / 信任字段(freshness、lifecycle、verification、corroboration、reach-ground)强制覆盖 agent 自报的值(ADR 0004 ceiling、trust-field lock,Part III.4 / IV.2)。这恰好对冲"被动事后探索"会带来的过度自信。
沉默默认(QC / 高变基因 / PC 数从没被起疑、从没进多元宇宙)。
→ 抗洗白的真正瞄准对象。 这是 Cairn 第一性原理(抗洗白)最终要对付的东西,也是它最诚实的边界:Cairn 只能给已经被 agent 声明出来的 fork、矛盾、混杂上"抵抗"那一层;它无法强迫 agent 去怀疑一个从没被怀疑的默认。它能做的是降低声明的摩擦(一次便宜的 add-claim 就把 fork 条件写下)并在 orient 表面顶出未解矛盾与陈旧,从而扩大"会被起疑"的范围;但"没被声明的默认"是这套机制的永久天花板——和 ADR 0004 那条"CLI 只强制与声明一致、永不强制声明为真"是同一堵墙(Part IV.2)。把这一条写进映射本身,就是在抵抗"假装这个盲区已被解决"的洗白。
收束:这张映射里没有任何一行写着"于是工具判定结论为真 / 为假"。这是有意的,也是整本书的脊柱——Cairn 是一个不做判断的确定性底座。它把 agent 的判断持久化、机械地强制一致、并让结论在向上游汇聚时仍带着它的伤疤(条件于哪条 fork、被什么反驳、是否过期、有没有被独立验证)。它绝不替你把那些伤疤抹平。抹平伤疤就是洗白;带着伤疤幸存,才是 Cairn 唯一承诺要做的事。