Wash-building is not a Sybil problem: an impossibility argument, and what a solution is then forced to look like
Contribution graphs (dependency graphs, quadratic funding, retro funding) face two attacks that are almost always conflated. Separating them makes one of them provably harder than most tooling assumes, and it also constrains the solution more than you would expect.
Two axes. Sybil is fake identity: one actor wearing many masks. Wash is fake value: many genuinely distinct, real identities that build on each other’s worthless content and cross-endorse it. These are orthogonal. A wash tree contains no fake identities at all.
Sybil has answers. An external identity anchor (proof-of-humanity, Passport-style credential aggregation) verifies distinct personhood. Or a mechanism: if the aggregation rule is the Myerson value (the Shapley value restricted to graph-connected coalitions), an identity disconnected in the graph pools no value, so a forged or fresh identity earns near-zero marginal contribution by construction, whether or not you detect it. Verified live on the provenance DAG: a block that forges a parent edge to a high-coverage block but adds no new coverage earns under a quarter of an honest block’s credit (provenance_forgery_earns_no_synergy_credit, node/src/lib.rs). The anonymity-axiom relaxation is not a modeling nicety, it is the Sybil resistance.
Wash does not, and the reason looks structural. Claim: no graph-internal signal can separate a wash tree from genuine collaboration. The identities are real, the edges are real, and the only fake thing is the value. Value is not a property of the graph. Cyclic-collusion detection (Helmholtz-Hodge harmonic energy, circulation) catches a wash ring, because a ring is a topological signature, but a wash tree has no such signature; it is isomorphic to honest layered work. On a real dependency graph the measured graph-internal separation between a competently built wash tree and genuine collaboration is zero (node/examples/wash_sim.rs).
And no, you cannot learn your way past it. To preempt the obvious rebuttal (train a better classifier): on real Deep Funding jury labels a graph-topology model predicts barely above chance (~0.53 against a 0.50 floor), and even a rich-feature judge carrying popularity and funding signals reaches only ~0.60 on the honest repo-disjoint split, real but popularity-shaped. No model trains past a signal that is absent from the data. The structural defense is the load-bearing property; the predictor never was. (A quieter finding in the same labels: the jury’s implied value has almost no correlation with what actually got funded, Spearman about -0.05. Measurements in data/deepfunding/RESULTS-FAITHFUL.md and RESULTS-RICH-JUDGE.md.)
The necessary condition. A closed colluding set can forge every signal internal to it: identities, edges, activity, even mutual use. The only discriminant it cannot forge is one whose source is exogenous to the set. So wash-resistance requires an external value anchor, a signal generated outside the suspected collusion set (realized use by independent parties, downstream funding, external adoption). This is the same shape as proof-of-work anchoring value in external energy: the trustworthy signal is the one the system cannot mint for itself.
What a solution is then forced to look like. Because the impossibility is information-theoretic rather than computational, cleverness is out, and there are only two moves: import an exogenous value signal, or stop needing to detect. The second is the interesting one. Move off the detection axis onto the incentive axis: never classify wash versus genuine, and make value vest only on external realized use, with a carrying cost on the wait. Genuine work is positive-EV, wash (never externally used) is negative-EV, and the mechanism separates nothing. Detection was never the requirement; making the honest strategy dominant is.
One constraint nearly specifies the rest. The cost such a mechanism imposes must not become a barrier to entry, because an entry barrier just rebuilds the gated, capital-weighted system that open contribution was meant to replace. This is how identity-KYC and proof-of-stake each became the thing they replaced. That forces three properties: the cost is conditional not upfront (a refundable bond, vesting, or clawback, biting only at reward extraction and only when external value fails to materialize); denominated in contribution not capital (so a well-funded ring cannot simply buy past it); and superadditive on the coordinated cluster rather than the individual (so the shape of the attack pays, not the act of showing up). Together these corner the design into a single object: a contribution-denominated bond staked against your own future external use, refunded on use, with exposure that grows on coordination.
There is a subtlety worth stating, because it is where naive versions fail. Coordination-proportional cost by itself taxes genuine collaboration, which is graph-indistinguishable from a wash tree by the impossibility above. The external-use refund is what rescues it: coordination sets the stake, external use decides who keeps it. You need both, or the mechanism either taxes honest collaborators or lets wash through.
This is a compression, not a solution. Given a trustworthy external-use signal, the entire mechanism is determined. So the wash problem reduces to a single remaining unknown: the external-use signal itself, and how to obtain it without reintroducing the very airgap the graph could not cross. The honest terminus is a priced, bounded residual, the same place accountable consensus ends with a named capture assumption. But it is one measurement problem now, rather than an open-ended search for a better graph metric.
Why post it. If the impossibility direction holds, it retires an entire class of effort: any purely graph-internal wash defense (a cleverer centrality, a smarter GNN) is chasing a signal that is not in the data, and the real work moves to the external-use oracle. I would rather have both halves pressure-tested than keep them. Where does the argument break?
Measurements, the Myerson-restriction test, and the vesting design are in a public repo: GitHub - WGlynn/noesis · GitHub