The reckoning — v2.0
The probe that refuted my own strongest claim, curated from my research ledger.
By mid-2026 my stack was drifting toward per-domain heads, and that drift posed a question I wanted answered rigorously: could I instead harden the base — find generator-invariant features so one foundation generalizes to unseen models, as the patent thesis implied? The test was cross-source generalization: train on the existing corpus (camera, scraped, and art pools), evaluate on three pools of unseen 2025 generation — reel screenshots, Instagram photoreal AI, and Midjourney.
The verdict, up front
No generator-invariant foundation exists in my current feature set. The warp base is genuinely model-agnostic only within the camera-photo distribution it was built on. On 2025 photoreal social AI and Midjourney, warp — and every other physics signal, and DINOv2 — is data-coverage-bound and sign-inverts.
The matrix
Trained on OLD, evaluated per source (AUC < 0.5 means my model calls that generator's AI "real" — sign inversion):
| family | OLD-CV | reel | ig_photoreal | midjourney | NEW-CV |
|---|---|---|---|---|---|
| warp | 0.732 | 0.581 | 0.261 | 0.218 | 0.581 / 0.261 |
| capture | 0.694 | 0.837 | 0.383 | 0.562 | 1.000 / 0.816 |
| optical | 0.645 | 0.227 | 0.548 | 0.283 | 0.982 / 0.884 |
| dino | 0.735 | 0.674 | 0.249 | 0.457 | 0.926 / 0.990 |
| fusion [warp+dino] | 0.820 | 0.754 | 0.251 | 0.465 | 0.927 / 0.989 |
| full stack | 0.846 | 0.794 | 0.285 | 0.505 | 1.000 / 0.990 |
I read it three ways, in descending order of comfort:
- The NEW-CV column is the good news. Trained in-distribution, every new pool separates at 0.9+. These generators are not undetectable — they are uncovered. Generalization comes from data, not from a better foundation.
- The inversions are the bad news. Warp at 0.218 on Midjourney isn't noise — it is my model confidently wrong, because MJ's non-photographic texture pattern-matches the "no fragile PRNU" signature of things my training set labeled real.
- The reel column is a trap. I decomposed capture's apparent 0.837 on reels into pure resolution confounds: a resolution-validity pair of capture features was reading a 2.25× class-correlated resolution difference, not physics. My screening pass also caught a 17% capture-defeat rate on the photoreal pool — photoreal AI faking a sensor signature — and ~14% label noise ("This is AI." rage-bait posts that are actually real).
The per-feature view of the same story: on the mixed/downsampled corpus, real and generated distributions of the four core warp features nearly coincide at the million-tile scale. My per-feature invariance sweep found exactly zero features that separate consistently across all sources — the closest, a high-frequency spectral peak feature, clears 0.5 everywhere but only marginally.
What survived
The probe wasn't purely destructive. A follow-up pass let me harden the warp model itself: deeper trees lifted camera-domain image AUC 0.692 → 0.714, feature-gain analysis crowned circ_var_noise, and leave-one-out showed the 4 seam features had gone dead weight — prunable to a leaner warp model with no loss.
And the repositioning I had to write for myself, verbatim from my research ledger:
v2.0 = a camera-physics base + a data-coverage fusion, not a model-agnostic detector of 2025 generators. The model-agnostic thesis holds within camera-photo distribution; it does not extend to current photoreal social AI / Midjourney with any feature I have.
Why this was the most productive failure I've had
Every architectural decision I've made since flows from this table:
- Class-correlated confounds became a screening discipline — I never let class-correlated resolution enter training again; new social pools are fusion-only.
- I demoted the capture signature from generalization feature to high-precision prior:
capture-present → real, valid only at native resolution, dominant when it fires and silent otherwise. In my current stack that prior is one of the strongest components — used correctly, it never needed to generalize. - "In-distribution coverage is the only lever" became the flywheel — daily scraping, feature-store ingestion, warm-start retrains (chapter 6). If generalization is data, then my moat is the data pipeline, not the model.
- Follow-on probes closed adjacent doors with the same rigor: I refuted super-resolution preprocessing, measured smaller tiles as worse, and opened the container-provenance pivot (chapter 6) precisely because I had measured pixel-space invariance to its limit.
The hypothesis still stands where physics says it should: within the camera-photo domain, against the class of generators that don't simulate sensors. What v2.0 removed was my extrapolation — and what it left me with was an engineering strategy that could actually ship.