The pipeline

AI shouldn't go around your process. It should run it.

The rule at every stage: a step that didn't happen is not a pass.

Most AI adoption bolts agents onto the side of delivery. A chat produces a diff, and a person squeezes it into the old process. Graphban runs the stages on the board instead, so every piece of AI-built work takes the same path, and each stage leaves evidence a person can read.

  1. specgrilled, then frozen
  2. plannon-colliding clusters
  3. buildone agent, one worktree
  4. reviewindependent, with evidence
  5. verifyCI attests the commit
  6. shipPR, then opt-in merge
  7. observestack, usage, OTLP

1 · Spec

Work starts from a spec somebody actually finished.

A PRD is graded on four dimensions by the grill, and approval is earned by answering what it asks. It is never a status anyone sets. The approved version is frozen, and every card says which section of it the card implements.

update_prd(status="approved") ApprovalNotEarned — names the dimensions still open.

Changing an approved spec is a rebaseline: a new version linked to the old one, so the work already built against the old version is never quietly re-pointed. Spec to done, in full →

2 · Plan

The server proposes the split. The planner commits it.

The spec is decomposed into cards with declared touchpoints. Cards that touch the same parts of the code are clustered, so two agents are never handed the same files.

Collisions and allocation →

3 · Build

One agent, one worktree, one branch.

The local supervisor cuts a git worktree for each child from the fetched base branch, not from whatever happens to be checked out, and starts the agent your tier resolved to.

Claude Code Cursor Grok Gemini · Antigravity DeepSeek Qwen Code local models · gbagent

The supervisor →

4 · Review

Somebody else looks, and brings evidence.

A builder moves its card to review and stops there. Sign-off takes a reviewer who did not build it, either another agent or a person, enforced at two separate gates keyed on authorship, so promoting the builder to reviewer doesn't launder it.

Review handoff and independence →

5 · Verify

CI attests the exact commit.

Your CI posts its result to the card as an attestation tied to a commit. A green run on some other commit isn't evidence for this one, and a sign-off may not attest the commit its branch was cut from.

A check that didn't run is not a pass

An acceptance clause nobody tested, a CI job that was skipped and a spec section with no delivery each get their own name. None of them is allowed to read as green.

6 · Ship

The branch is published at review. Merging is your call.

When a card reaches review, the fleet supervisor pushes its branch and opens a draft PR, so a reviewer always has something to read. One card per branch, one card per PR.

7 · Observe

See what's running, who is working on it, and what it cost.

Stack view

A map of the running system derived from the code: what you write, what you run, and the external services you depend on. Code health is drawn on top. More →

Live and Activity

Who holds which card right now, what each agent is calling, and a searchable history of every event.

Usage

Tokens and model usage across the deployment, so the cost of AI-built work is a number, not a guess.

OTLP log export

Send Graphban's logs to the observability stack you already run, with counters for what was exported.

And the loop closes. Customer feedback arrives through the Feedback Kit (public boards, votes, a roadmap and an ingest API) and becomes cards. Lessons mined from finished work are reviewed, published, and handed to every agent on the next wave. The learning loop →

Why every stage is a gate

Without gates, an absence reads as a clean result.

No spec, so there's no drift to measure. No review, so nothing gets rejected. No check, so it's green. Each silence reads as approval, and they compound.

Without gates, three empty checks produce a green "all clear". In Graphban, the same three emptinesses each produce a named state and the summary is not green. without gates spec review check ✓ all clear emptiness produced the green Graphban spec review check 2 unanswered no independent reviewer check did not run emptiness produced a name
Without gates, emptiness produces green. With them, emptiness produces a name. Same three gaps. The dashed lines exist only on the left, because only there does an absence feed a verdict.

The longer argument is in the bug that started it and why a folder of Markdown specs says yes to everything.

Fits the stack you have

Your tools stay. Graphban sits between them and the agents.

Your toolWhat Graphban does with itStatus
Claude Code, Cursor, CodexConnect over MCP and work the board interactivelyshipped
Seven fleet harnessesRun unattended in waves, one worktree eachshipped
GitHub issuesArrive as cards (HMAC webhook, routed by repo)shipped
GitHub branches and PRsPublished at review; opt-in auto-merge after sign-offshipped
GitHub ActionsAttests suite results to the card, per commitshipped
Your observability stackOTLP log exportshipped
A Markdown folder or Google DrivePRD ↔ folder sync, no OAuthshipped
LinearMirror in, constrained write-backin progress adapter built, not yet connectable
JiraThe same bridgeplanned after Linear

Everything else is on the status table.

← overviewGraphban next →Spec → done

What's new

Every entry is work that merged. The full history is on GitHub.