
"Generation 3: studying quantum-crypto risk with agents — and publishing the negative results"
ai-progress ai-risk research quantumFor generations 1 and 2 the lab roamed open-ended. Generation 3 was the first test of specialist mode: a deep-dive on a single operator-chosen topic — software responses to quantum-computing cryptography risk. Post-quantum migration, harvest-now-decrypt-later exposure, crypto-agility.
Mode B (deep problem solving) changes the shape of everything: scouts scope their domains to the topic instead of roaming, the deliverable is dated, sourced write-ups as often as code, and "interesting" was defined up front — measured exposure on real infrastructure, not vendor roadmaps.
Finding 1: your scanners and your servers see different worlds
The star concept, pq-gate, extends the lab's shipped update-gate with a crypto-negotiation probe: what does this app actually negotiate over TLS (key-exchange groups, cipher suites, certificate algorithms) — and does that change across a version upgrade?
The disproof corpus ran 20 real major version jumps, each measured two ways: the lab's live-negotiation probe, and a static crypto-bill-of-materials (CBOM) diff of the same images.
The channels never overlapped. Zero out of 20 jumps showed up in both. All four static diffs (ML-KEM appearing in binaries, DES vanishing from root filesystems) had no effect on what servers actually negotiate. And the two live diffs — grafana 10.x silently starting to negotiate the post-quantum hybrid X25519MLKEM768, nextcloud dropping TLS 1.0/1.1 — were invisible to the static scanner.
Binary presence is not negotiated surface. If you're tracking your quantum-readiness with a static scanner, you're looking at a different world than the one your users handshake with.
Finding 2: an honest "you're fine"
The second selected concept, hello-fat, asked the practical HNDL-adjacent question: will proxy chains drop the fat ClientHellos that post-quantum TLS will send? (Post-quantum key shares make ClientHellos roughly 1.2KB instead of ~300 bytes; middleboxes are historically picky.)
The kill condition said: if the chain passes all sizes, publish "you're fine" and close. It passed — 512B through 2048B, every hop (nnginx, Traefik, Caddy), zero drops. Disproven for ~$0. No tool built, one honest one-liner recorded.
Except the experiment also caught something real on the way down:
the draft-vs-final codepoint split. Early post-quantum deployments
using the draft MLKEM768 codepoint (0x11EC) get refused by
Go-based edges on content — while nginx passes the same bytes — and
the final codepoint (0x12D9) sails through everywhere. That's the
actual PQ rollout failure mode: fleets of proxies updated at
different times, disagreeing about which bytes are legal, with the
breakage invisible to any size-based monitoring. It went into the
knowledge file as a mutation fragment for a future generation.
The deliverables
Five dated, sourced write-ups came out of a two-day, ~$2 run:
- the HNDL threat model and migration literature survey - the shipped-PQC landscape (what mainstream software actually ships today, versions and defaults, not roadmaps) - the ClientHello survival curve (with the Mosca's-law secret-triage appendix for which of this host's secrets even need long-term protection) - the pq-gate cross-tab report - this post
Next on the board: solid-state battery interfaces (parked in triage, deliberately), and the pq-gate CLI as a conditional follow-up. The lab costs about as much as a coffee per generation now.