quirq infra v0
How a change gets from a pull request to the daily canary, across 13 public repos. Read the guide, then watch it run.
What v0 is
quirq infra, or qq, is how code lands and ships at quirq. It is modeled on Chromium’s infrastructure and rebuilt for small GitHub repos as 13 public repos. v0’s goal: every one of those repos does a first, thin version of its job, and two product repos, xo-space (Python) and innernet (Next.js), use the whole chain. A change is built from its repo’s manifest, gated on the exact merge result, watched after it lands, and shipped to the canary channel once a day.
Where it stands (7 October 2026): both product repos are gated by generated workflows, and lkgr moves on its own. The CI builders still run interim commands instead of recipes, qq does not call remote-build yet, and the first canary was started by hand. Reverts wait on gardener’s GitHub App, which does not exist yet. The release executor App exists but is not wired into release yet, so the product repos’ canary refs do not move.
How one change travels
Step 1
You sync
qq sync reads the repo’s infra/repo.toml and downloads each pinned toolchain, checked against its digest. Toolchains are Linux x86_64 only so far: on a Mac qq sync stops with “no pin for platform”.
qqsynctoolchainsStep 2
You build and test
qq build and qq test hand the manifest to recipes, which plans and runs each build and test action. On a Mac they need the pinned toolchains installed by hand. remote-build, the shared action cache, is built but qq does not call it yet.
qqrecipesStep 3
You open a PR
qq try pushes your branch, opens the PR and returns at once with a run ID. The verdict is reported later, so an agent never waits on a tool call.
qqStep 4
The gate decides what must pass
gate reads the required checks from infra-config and the repo’s manifest. The workflows that run them were generated by infra-config.
gateinfra-configsyncStep 5
Results become a verdict
Every JUnit result goes to test-pipelines. Today one failing test fails the required check; retrying and comparing with base is built but not on yet.
test-pipelinesStep 6
You land
qq land waits for a pass, then joins GitHub’s merge queue, which tests your change on top of the ones ahead and squash-merges it into main.
qqgateStep 7
main stays green
Post-submit runs on every main commit. gardener watches those runs and publishes tree status; once its App exists it proposes a revert for a break. perf is set up to record benchmarks, but has recorded nothing since 5 October.
gardenertest-pipelinesperfStep 8
Pins move forward
When toolchains promotes a new build, rollers edits the pin through sync and opens a PR that goes through the same gate as yours.
rollerstoolchainssyncStep 9
Shipping
release moves lkgr to the newest all-green commit. Once a day it builds that commit, runs the full tests, starts it and probes it; only then does the canary pointer in release-state move. The matching git refs wait on the release executor identity, so release records those writes as skipped. installer can resolve a channel; canary test machines are not set up yet.
releaseinstaller
The v0 exit test
v0 is done when all five hold at once. Status as of 7 October 2026.
1. All 13 repos are public, each with CODEOWNERS, a generated presubmit and a merge queue
In progressThe repos are public. The gate apply at 6610664 set the rulesets of these 13 repos and of xo-space and innernet. gate #23 to #26 and #28 (website’s onboarding among them) are merged but wait on the next apply. The infra repos’ presubmits are still hand-written, not generated. Some owners are still to be named.
2. xo-space and innernet are gated from their manifests through shared adapters, and a red PR is refused
In progressBoth are gated from generated workflows. The builders still run interim commands instead of recipes, and the red-PR check has not been run yet.
3. A daily canary runs 7 days in a row with no human touch, and a bad canary is held and rolled back
In progressThe first canary shipped both repos on 5 October, started by hand. The unattended streak has not started. No held canary or rollback drill yet. The live tab shows the last 7 days.
4. A build-breaking commit is reverted automatically, with a record linking culprit and fix
Not yetgardener finds culprits, but opening revert PRs needs its GitHub App, which does not exist yet.
5. Scorecard v0 is computed by a script, not typed
In progressThe scorecard is built in test-pipelines.
Sources: the v0 plan, the v0 status report and the infra map.