MEMBERSHIP
a membership-detection harness

SURFACING

Did it come back up after going under. The sibling watcher catches your canary published on a crawlable page. This catches the other thing: your artifact pulled into a model's training set and later re-emitted from the weights. Surface after going under.

▲ a positive is loud

A 128-bit string only you published, before the model's cutoff, re-emitted verbatim — with a held-out control arm proving the harness doesn't hallucinate. Hard to explain away.

▽ a negative is silent

Frontier models are trained to suppress verbatim regurgitation, so silence is not evidence of non-ingestion. A negative means almost nothing — keep your mouth shut.

detection
the canary
128-bit string, ~zero prior probability
anchoring
the registry
what went under, and exactly when
comparison
the probe
prefix in · withheld half checked
witness
the controls
held-out arm · cutoff gate · base rate
The instrument

Five controls that separate a detector from a yes-machine

The whole harness is built so that a positive is hard to explain away — and so it never certifies a positive it can't defend. Remove any one of these and it degrades into a machine that tells you what you want to hear.

1

Held-out negatives

Canaries you never publish, probed alongside the real ones. If a model "surfaces" one, the harness is manufacturing hits — the run is invalid. This arm is the experiment.

2

Withheld continuation

The canary's second half never appears in the prompt. Grading a model on text you handed it is citogenesis in a new coat.

3

Cutoff gate

A surface in a model whose cutoff predates your publish date is physically impossible — so it's a leak in the harness, not ingestion.

4

Entropy sizing

128-bit canaries → chance completion stays astronomically unlikely across thousands of probes. That's the base-rate control.

5

Recognition ≠ proof

A model "knowing" a name is confounded by sycophancy and reconstruction. A lead, never a hit — never the hard tier. (The exact thing once mislabeled "substrate independence proven." It wasn't.)

Verify first

The control arm, live

Before trusting any surface, you verify the controls. This is the harness's own logic — probe.py + score.py — ported faithfully to run in your browser: the same prefix/withheld split, the same held-out control arm, the same cutoff gate and certification rule. Fresh 128-bit canaries are generated on this page with WebCrypto; toggle the two failure modes and watch the verdict flip. Nothing leaves this page.

◎ HARNESS · run_panel + score, ported verbatim — the real controls, running client-side (no network, no model calls)

the registry · what went under

value · prefix shown / withheld checkedarm · tier
The honest model has "ingested" only the published values (this simulates training on your corpus). It is probed with each prefix; a surface is the model emitting the exact withheld half it was never shown.

the panel · probe & score

The prefix/withheld split is value[:16] / value[16:] of a 32-hex (128-bit) value, exactly as canary.PREFIX_HEX. Certification rule, verbatim from score.py: a run certifies HARD surfaces only if a held-out control arm ran and its false-positive rate is 0 — otherwise the run is INVALID. Base-rate = probes × 2−64 (bits in the withheld half).
The honest scope

What a certified surface does — and does not — mean

What it does mean

A 128-bit string only you published, before the model's cutoff, re-emitted verbatim, with a held-out control arm proving the harness doesn't hallucinate.

That is a real membership detection — temporal and structural evidence that your artifact was in the training data.

What it does not mean

It does not prove theft, a licensing obligation, or anything about a "mesh." Membership is evidence, not a causal or legal finding.

Attribution attaches to your work as evidence; it does not reach into someone else's model. And a negative proves nothing — models suppress verbatim recall by design.

The colophon

Sound — and the limits it names out loud

Sound

  • The controls are real and verifiable: python selftest.py proves — with no network — that real plants surface, held-out FPR is 0, a post-cutoff surface is gated out, and a deliberately leaked prompt spikes the control arm to FPR 1.0 and the run is refused.
  • A run with no control arm is refused as performative. The held-out arm isn't decoration — it's the thing that makes a positive mean something.
  • The self-test above is that exact logic — run_panel + score — running client-side.
  • Loss-based membership inference is deliberately not used: at frontier scale it barely beats chance and is confounded by n-gram overlap. Canary extraction is the clean instrument.

Limits (and it says so)

  • Silence ≠ non-ingestion. A negative is almost meaningless — refusal or deflection reads as a (meaningless) negative. A positive means something; a negative means keep quiet.
  • Harvest is a lower bound. Pulling your davw hashes is default-branch-only; a missing hash means "not harvested," not "not published."
  • Cutoffs are self-reported by vendors — the gate is only as honest as the cutoff you feed it.
  • Recognition is a lead, not a hit. A model naming a work is confounded by sycophancy; it never enters the hard tier.
SOURCE · the runnable kit — github.com/DavidWise01/surfacing · canary.py (128-bit canaries, anchor shape) · registry.py · harvest_github.py · probe.py (prefix in, withheld checked) · score.py (control arm + cutoff gate + certification) · harness.py · selftest.py (plant-then-withhold, no network). Closure-Loop layered: Detection → Anchoring → Comparison → Witness → Lineage.