The flow
The factory has one way in. Each piece of work starts as an input to intake.
- input
- intake
- change taskdraft
- probe
- ready
- build
- review
- accept
- done
- explorationready
- build
- review
- accept
- done
- intake
- change tasks
- inbox.md
When each change task of an exploration is done, the exploration is consumed.
#Two queues
A change task changes the product. Its work is on a branch in each repository, and the branch is merged.
An exploration builds something to answer a question. Its work is in its folder in the hub. It does not change the repositories, and its artifacts stay, because they are progress.
#Shaping the work
intake and probe run with you. intake finds what is missing before the work can be built, and it uses one of these:
- For a decision that only you can make, it asks you now.
- For knowledge that only building can give, such as how it looks, if it works, or how much work it is, it writes an exploration.
- When nothing is missing, it writes a change task.
When you say that the work is not for now, it adds one line to the inbox.
probe then settles each thing that a change task leaves open. When the code or the docs settle it, probe reads them. It asks you about the rest. A task is ready when nothing is unsettled.
#Building the work
build runs with no person, so it does not ask questions. It works on the branch task/<id>, and opens one pull request in each repository of the task. It pushes only that branch, never the default branch.
When the work needs a decision that the task does not give, build looks at what the decision changes:
- If it changes what the product does for its users or for other systems, or changes stored data,
buildwrites the question and sets the status toblocked. - If it changes only how the code is written,
buildmakes the decision, and writes the reason.
#Reviewing the work
You review the pull request as a reviewer. When a pull request changes, triage reads it and chooses a way out: rework, an answer, new work, a decision for you, or nothing to do. A rework goes back to ready, and build does it on the same branch.
The default branch changes only when you merge. A merge accepts the task and the items in the body of the pull request. accept then writes what future tasks must know to context/.
#Which task is next
build takes the ready task with a ## Rework section first. Then it takes the ready task with the lowest number, with each task in its depends_on at done. When no change task is ready, it takes the ready exploration with the lowest number.