For agents: an index of these docs is at /docs/llms.txt, and this page as markdown is at /docs/how-it-works.md.
The loop: ticket to merge
How a ticket becomes a merged pull request: tickets and their states, goals, and each step a build goes through.
Every change goes through the same steps. Each step is a separate Claude Code run that can only do its own job.
ticket → build → tests → Tester → pull request → review → merge or wait for you → deployTickets
A ticket has a project, a title, a done-when line, a size and a priority. You write them, and the Engineering Manager and Product Manager propose them.
The Tester checks the finished work against the done-when line. That line decides whether a build counts as done.
| State | Meaning |
|---|---|
backlog |
Written, not queued. |
ready |
Queued, waiting for a free builder. |
running |
A builder is working on it. |
fixing |
Its pull request is open, with a fix round or merge pending. |
shipped |
Merged. |
failed |
Out of builds or fix rounds. The branch keeps the work. |
declined |
You declined or cancelled it. |
split |
Replaced by smaller tickets. |
Your own tickets start in ready. Tickets from agents start in backlog.
With several builders, the next one takes work from the project with the fewest builds running. One project cannot take every builder.
Goals
A goal is a larger outcome that tickets belong to. Dobby reads goals from GitHub milestones or from a project file's Goals list.
From ticket to merge
| Step | What happens | If it fails |
|---|---|---|
| Build | A builder writes the change on its own branch and worktree. | |
| Tests | Your install and test commands run in the sandbox. | One fix attempt. |
| Tester | Checks the work against the done-when line. | Sent back once. |
| Pull request | Dobby pushes the branch and opens it. | |
| Review | The Code Reviewer reads it. | Up to 2 fix rounds, then it waits for you. |
| Merge | Dobby merges the exact commit that passed. | Held if your safety preset says so. |
| Deploy | Sends you a Deploy tap and waits, unless safety.deploy is "auto". |
A ticket gets at most 3 builds. A branch that no longer merges cleanly goes to you instead of a builder.
Why each step is separate
The builder has no network and no credentials. Only Dobby's own process can push, open pull requests and merge.
So a builder misled by a ticket or a dependency still cannot push or deploy. See Security and the sandbox.