For people who came to verify the claim

The proof.

The headline receipt: the cloud maintainer opened its own first PR, autonomously, on real Cloud Run + Firestore — and a human merges it. A check that can't go red proves nothing, so the multi-tenant isolation is attacked, not asserted; the bring-up bugs are listed, not hidden; and every oracle here is built so it can actually fail. Engineers trust receipts, not adjectives — here they are.

The headline · it happened, end-to-end

The maintainer opened its own first PR.

Not a demo, not a mock. The cloud maintainer read an open issue, wrote the fix with Claude, proved it with the gate — the issue's own failing test went green — pushed a clean branch under the GitHub App bot identity, and opened a pull request. On real Cloud Run + Firestore. A human merges it. The bot never can.

heimdall · GitHub App bot · opened a pull request PR #5 · OPEN · awaiting a human merge
Heimdall fix: off-by-one in sum_range
heimdall/issue/<id> → main · pushed by the App bot, never to main
issue → fix · read the open issue, Claude wrote the correct sum_range fix gate PROVED it · the issue's own failing test went green — the named gating test, not the model's word clean diff scope · source-only branch, no venv or cache, bot identity real infra · Cloud Run + Firestore · not a local dry-run
Authored autonomously by the maintainer loop on a gate-PASS fix. Autonomy ends here — a human reviews and merges. The bot pushes only to heimdall/* and cannot self-merge. The human gate is the feature, not a limitation.
# scoped bot token · pushes only to heimdall/* · no push to main · no self-merge
The honesty story: before this PR, the loop refused to fake a single green. For 15 straight runs it surfaced a real, named failure instead of reporting a phantom success — right up to the keystone bug that had been silently reporting PR_OPEN while the create actually failed. Nothing shipped until everything was true. That's the product thesis eating its own dogfood.
Multi-tenant isolation · attacked, not asserted

Six attacks. Six kills. Score 1.0.

A shared control plane holds every team's credentials, so "we isolated it" has to be falsifiable. We wrote a cross-tenant attack oracle: six mutants, each the same isolation model with exactly one gate removed. With that gate gone, a real breach succeeds — and the oracle goes red. All six are caught.

6 / 6 = 1.0 mutants killed · bin/falsify rr-multitenant-isolation --assert-score 1.0
INV-1 · SPOOF KILLED

Forge your team_id

Team A sets team_id: B in the request body to operate as team B. Killed: the server derives team_id from the Ed25519 signature — a body-set team_id is ignored.

INV-2 · CRED KILLED

Read another team's credential

Team A's job resolves a shared/global model cred instead of its own. Killed: every cred read is keyed by the per-team Secret Manager partition, with no cross-team enumeration path.

INV-2/3 · QUEUE KILLED

Drain another team's queue

Team A drains team B's task queue for the same repo name. Killed: the queue partition key is (team_id, repo), not repo alone — A can never see B's rows.

INV-11 · IDOR KILLED

Dispatch on a repo you don't own

Team A names team B's repo slug to open a PR there. Killed: a repo↔team authorization check (team_covers_repo) blocks a repo the team wasn't granted.

A5 · INSTALL KILLED

Swap the GitHub App install

Team A wields team B's installation_id to PR on B's repo. Killed: the installation is resolved server-side from the caller's team — a wire param is not honored.

INV-6 · SURFACE KILLED

Dispatch from the public surface

A popped public surface tries to grant a cred and dispatch. Killed: the public boundary is enqueue-only — a code-scan asserts it references no cred-read and no dispatch symbol.

The oracle is falsifiable too: drop the IDOR acceptance case and a mutant survives — the score falls below 1.0. A test that proves the test can fail.
Debugged in the open

The 29-bug bring-up ladder.

Standing this up live surfaced 29 real production bugs, all found and fixed before the first PR — every one the same class: a green test on the laptop hid a deployed-shape break the container couldn't survive. We don't hide them. Each fix has a named cause, and each closed with a deployed-shape test so it can't come back. The first fourteen rungs of that climb:

01
missing dependency
CP image lacked google-cloud-secret-manager/team/cred 503. Added the dep + a build-time import guard.
02
least-privilege write path
The public service account correctly can't write Secret Manager → cred now write-forwards public→gated over authenticated service-to-service.
03
mode-routing field-collapse
A config collapse ate mode=control-plane → bare rr SSH'd a VM instead of POSTing the task to the queue.
04
job-name mismatch
The dispatcher defaulted to the wrong Cloud Run job name → set HEIMDALL_CP_JOB_NAME explicitly.
05
per-team env drop
The job runner discarded the per-team env → jobs would run credless / cross-tenant. Fix: a per-execution env override, isolated per team.
06
silent task consumption
Drain completed tasks even when dispatch refused; deterministic ids made re-submits a no-op → queue looked empty. Fix: bounded retry → dead bucket → re-openable, with loud logging.
07
drain enumeration gap
Drain only swept teams with an install → now sweeps union(queue partitions ∪ install teams), so no team is starved.
08
CPU throttling
The background tick starved outside requests (Cloud Run gives ~0 CPU) → token mint timed out. Fix: min-instances=1 + no-CPU-throttling.
09
read-only rootfs / no checkout
A dir create under /app failed; the cloud job has no checkout. Fix: resolve a writable workspace and clone the repo there.
10
no local enable file
The ephemeral container has no .maintainer.enabled file → added explicit server-set task authorization for drain-dispatched cycles.
11
reserved env names
PORT, K_* in the job override caused a live 400 → filter reserved Cloud Run names.
12
opaque mint failure
Drain gave "no idea why" → surface the real mint-failure cause with detail + timing in the log. The error_tail discipline was born here.
13
fresh-home fail-closed budget
A fresh home fail-closed the token budget → run with a truthful used:0, and every failed cycle names its cause via error_tail.
14
ingest had zero callers
The maintainer never pulled its work → ingest OPEN maintainer-labeled issues into the queue at loop start.
28
KEYSTONE · phantom success
The architectural one: open_pr's return value was discarded, so a failed gh pr create silently faked PR_OPEN — every run since bug #21 had reported success while failing. Fixed with an honest PR_FAILED state: flagged, loud, re-runnable. Turning phantom greens into named errors is what let bug #29 and the real PR fall in minutes.
The lesson, wired in: local-green hides deployed-shape breaks, and a silently-caught error is worse than a loud one. Every store + dispatch path now has a deployed-shape test, and every failure reports loudly instead of dying silent — the discipline that turned run 15's silent failure into the first real PR.
Measured, not asserted

It generalizes.

Every AI coding tool claims it works. Heimdall measured whether its reuse engine actually generalizes — and published the number. It was pointed at 8 open-source repos it had never seen — five JavaScript, three Python — on tasks where a competent developer would reuse existing code rather than reinvent it.

The pass thresholds were frozen before the run, so the verdict couldn't be tuned to look good — a low number would have shipped as a finding. The run even surfaced and fixed its own measurement bugs (missing toolchains, a buggy assertion) before reporting, rather than quietly passing. The honesty is the brand. It came back GENERALIZES.

Rubric frozen before results · reported as measured
S6-C3 · reuse generalization sweep
# S6-C3 generalization sweep · one-off research run # produced by bin/heimdall-s6-sweep — a research script, not a user subcommand scope: reuse generalization · repos not in corpus languages: js · python · 8 reuse-measured rubric: frozen before run · thresholds locked repos evaluated ······· 8 / 8 median reuse ······· 0.50 working output ······· 8 / 10 note: 2 measurement bugs found & fixed pre-report (missing toolchains · 1 buggy assertion) verdict: GENERALIZES — on a rubric committed before results # pre-committed thresholds · reported as measured, not tuned

No test that cannot fail.

The discipline behind every number on this page: a check that can't go red proves nothing. The isolation oracle only counts a mutant killed because dropping the gate makes the attack succeed. The self-scan runs at pre-push over the full history — so a --no-verify commit can't slip a secret past it, and during development one such commit was caught doing exactly that.

There is one door, and every push goes through it: a push is proven only when every gate passes — and the gate that proves it can't be the one that decides to skip itself.

PRE-PUSH · FULL HISTORY
Motion · the watchman reacts

Watch a gate go red.

hmd demo · staged failureSCANNING
▸ secret-scan · scanning full history…

A staged failure you watch deny, fix, and pass on the first run — the same loop Heimdall runs on every real push, and on every PR the cloud maintainer opens.

Convinced?

Onboard your team in three commands.

Install it, point rr at the control plane, connect your Claude sub, and let the maintainer open a proven PR. Pinned, BYO-credential, MIT.

Get started