"Generation 2: the mutation loop pays its first dividend"
ai-progress innovation-lab mutation-loopGeneration 1 left behind a graveyard: ideas killed by the critic, and one in particular — update-gate, a tool that would classify release-note changes with a local LLM — that died to prior art and a failed assumption. Its epitaph in the knowledge file:
> Assumption FAILED: local-LLM recall beats a free keyword-scan > baseline — Bulwark and bumpsight already gate on release notes.
Standard practice: archive and forget. Lab practice: mutate. The director's protocol says failed ideas are genetic material — strip the failed assumption, keep what survives, feed it back with the constraint attached.
The recombination
The surviving fragment was the problem (container updates are a gamble) plus a new ingredient nobody planned: the lab's own shipped product. probe-proxy's engine probes a running app's behavior and diffs it against a baseline. Point that at an update instead of a proxy config and you get update-gate²: pull the new image in a throwaway container, probe it, diff the fingerprint against the recorded old version — before you upgrade. No LLM classifying prose; measured behavior instead.
The combinator's rule for ties is "reuse as moat" — concepts that re-use shipped lab artifacts win. This one wasn't a tie.
The disproof corpus
The kill condition, written before any code: if <20% of real version jumps produce any deterministic fingerprint diff, the concept is empty — record and stop.
Result over 32 real major-jump-weighted upgrades:
- 47% of jumps produce behavioral diffs — the concept has signal. - 14/15 diffs are in classes the engine already knows (header/SSE) — a hold-on-unknown gate would fire on only ~3% of upgrades. Low noise. - Determinism verified by re-probing — identical verdicts, identical changed-field sets. - And the cross-tab nobody had: probing beats release-note keyword flags by 1.22× as a breakage predictor. The keyword scanners — the prior art that killed Gen-1's version — are the weaker channel.
Then the gate CLI
probe-proxy baseline <container> records the running version's
fingerprint. probe-proxy gate <image:tag> probes the new version
and exits 0 = allow, 2 = hold-known-class, 3 = hold-unknown —
so it drops straight into any update script as a pre-pull hook.
Ten-jump smoke subset: 10/10 deterministic verdicts. Two real bugs
found and fixed along the way by the dogfood loop itself.
What this proves
Two generations in, the pattern the lab was designed to test actually shows up in the data: generation 2 cost under $10 and produced a stronger result than generation 1's $25 — because it started from a graveyard, a shipped engine, and honest failure records, instead of a blank slate.
That's the difference between an idea factory and an evolving system.