“the door said no.”

Yesterday mythos preserved five “finds” against the 1Password CTF — five (route, lens, param) states its grader swore would beat Gate-2. Today we asked the only question that matters about a find: is it real? The answer came back from the one authority that can’t be talked out of it — the live server — and it was no. That’s the day, and it’s a better day than a fake yes would have been.

A ledger to process or purge. First the operator needed hands on the list: a way to mark a find confirmed / dead / purged and have the board reflect it. Shipped findstatus.py + process.py (mythos, SR8). The rule is enforced in code: purge = hide, never delete. Every find stays in the append-only breakthroughs.jsonl that already survives db-wipes; status lives in a separate append-only log, latest-wins. You cannot lose a good one — a purge is just another line, fully reversible. “i dont want to purge something good.” Now you can’t.

The board stops lying about progress. A starred, simulated route was piling up a wall of 1,752 green ✅ “survivors” — every one a coin-flip, because no grader was wired to it. The ✓ and the count looked like a hunt closing in. They were theater. Fixed at the source: only a graded route earns checkmarks; SIM routes now read ungraded — no grader, flat. Green means a real grader said so. Nothing else gets to wear it.

The live-disproof. Then the test that was always deferred to “your hands, Mac-side, --live.” Fresh pure-Python SRP login → session genuinely alive (200 /api/v2/account, the real CTF account) → the actual v2 grant attempt: POST /api/v2/delegatesession {vaults:[SG], scope:read_items} → 400 rejected. The grant path the ledger had been told was confirmed does not exist on the live server. Root cause: the whole store ran DRY — no live creds, zero commits — and grade_r5.mjs’s own docstring is explicit: it answers “would this end-state win?”, never “is it reachable?” So all five finds were model hypotheses, not exploits. The “confirmed” note was a human over-call on a what-if output. Verdict recorded honestly: sgReadOnly dead (live 400), the other four purged with notes distinguishing live-verified from inferred from tautological. Board: zero active, five kept on disk.

AHA: the grader law again, this time on a live target you actually care about — you cannot grade a model with a model. A model proposed, a model graded, a human signed off, and all three were wrong together. The live door was the only thing in the loop that couldn’t be fooled. Build the loop so the door always gets the last word.

The frontier is unmoved, and now sharply re-confirmed: the wall is still the server-side encVaultKey record plus user_is_guest, and the genuine prerequisite is still Guest→Regular account-type escalation — R5’s own unblock field has said exactly this all along. Five descriptions of the finish line; none of them a path to it. The miner that doesn’t tire spent the night re-confirming the map. That’s not nothing — it’s the difference between a lead and a ghost, settled.

Also shipped: the live prompt-trace demo got finished and wired. The flow explorer now animates a real request walking the network graph — a client-side fuzzy matcher binds /api/traces events to graph nodes, abstaining when it can’t be sure rather than guessing (site 75c05ad). It ships inside the suite-ui now, served same-origin at /dashboard/flow/ with a 🕸 Flow · live nav link (werbos 1d3b7d0, site 605b8ff); the spec that drove it is in the repo (werbos ef5211b). On Netlify it stays canned; on the homelab it goes live. The killer demo — trace your own prompt through the graph — is real.

Two threads, one shape. The trace viz makes the machine’s reasoning visible; the live-disproof makes a comfortable lie visible and kills it. Same job as every honest tool here: show the truth instead of hiding it. Then sleep.