traqr.dev·working document·sheet 04 — guardian

What happens after /ship.

Guardian is the daemon half of the workflow. An agent ships a PR from its slot and moves on; Guardian rebases it, builds it, merges it, syncs the other slots, and writes what it learned back to memory. It merged the pull request that built this page — § 00 walks that exact PR through.

componentGuardian
runs inthe daemon
watchesPRs labeled daemon-pr
merge policynever a red build
conflicts3 attempts, then hold + escalate
circuit breaker3 failures → cooldown retry
licenseMIT, open source
costfree

§ 00·one real pr

Twelve minutes, no hands.

The redesign you’re looking at shipped as PR #1803 from an agent’s worktree slot. Guardian picked it up, merged it twelve minutes after it opened, and the production deploy followed forty-one seconds later. Nobody was at the keyboard for any of it.

fig. 1 — reconstructed from the PR’s GitHub record and the deploy notifications. Times UTC, June 10, 2026.

guardian — pr #1803, june 10 2026
01:34:12PR #1803 opened — bugfix/slot-1 → main · +913 −1443 · 18 files
01:34:19vercel: preview deployed (7850118)
01:46:25guardian: squash-merged → 0699e65
01:47:06vercel: production deployed — the page you're reading

§ 01·the lifecycle

Autonomous, with brakes.

Most of Guardian’s code is about when not to merge. The interesting parts are the failure paths — what gets retried, what gets held, and what gets handed to an agent to fix.

01

scan + classify

Guardian watches open PRs carrying its label. Each one gets a size and risk classification — small and safe merges fast, riskier work waits longer or waits for a human.

02

rebase

Onto main, before anything else. A conflict gets up to three resolution attempts; after that the PR is held and escalated with the reason recorded, not silently retried forever.

03

build

A red build never merges. A CI failure doesn't just stop the line — Guardian dispatches an agent to try to fix it.

04

merge

Squash-merge via the API. Three real merge failures trip a circuit breaker: the PR is set aside, retried after a cooldown, and a human can clear the breaker with a label. A deploy already in progress doesn't count as a failure — that distinction took a real incident to learn.

05

post-merge

Sync every other worktree slot (skipping any with a live session in it), close the Linear ticket, extract what the PR taught into memory, and write the snapshot fig. 2 shows.

§ 02·the live record

The receipt it writes itself.

After every merge, Guardian writes a snapshot of what it did to a key-value store. This is the actual record that was sitting there when this page was written. The eight skipped slots had live Claude sessions in them — Guardian doesn’t yank a worktree out from under a working agent.

fig. 2 — guardian:last_merge, read 2026-06-09 11:06 PM ET. Values unedited.

kv — guardian:last_merge
pr: #1812 feat(jiggy): regret_leaderboard ranks in dollars by default
branch: feature1/fable5-era-doc-batch
merge sha: 93b9a5d (base 58ab8e1)
self-sync: ok
slots: 9 synced · 8 skipped (live sessions) · 0 failed
learnings: 0 new, 0 deduplicated

§ 03·install

Part of the harness.

Guardian isn’t a separate install — it arrives configured when the CLI generates your harness, and it pairs with the memory server to write down what each merge taught it.