Early Access. Commands and behavior can change between releases.
.architech/factory/factory.yaml. Commit it and review changes to it
like code. Never put credentials in it.
Two ways to create the file
Onboarding
Writes your
factory.yaml while it sets up the project.Starter file
Writes a commented
factory.yaml offline, with no project setup.A complete file
This file runs a Cloud Factory for one repository. Every key is explained in a comment; thefactory.yaml reference lists every allowed value. Replace
acme, the project number and the repository with yours, and use a model your workspace lists.
framework pin, so you never type the
digest.
Connect your existing board
boards lists your boards and board picks one. A GitHub reference has an owner (an
organization or user) and a project (the project number). List repositories separately, under
repos.
Map only the columns you have. An unmapped status is not mirrored to the board, so you don’t
need to create every canonical column.
statusMap are canonical statuses. Values are your board’s
exact column names and can’t be blank. Leaving statusMap out is not the same as a partial map:
Cloud then uses its default map.
Cloud supports GitHub and Linear boards. A local file can also name jira or none, but Cloud
doesn’t run those.
What starts work
Triggers decide which events start work: a board label, an assignment or a status, failed CI, or a schedule. The Triggers and routines page shows every event, what it starts, and how the stages chain. Without atriggers key, a pickup label or an assignment to factory starts
plan, and failed CI on a factory/* branch sends the work back to build.
Whatever the trigger, a board item also needs every pickup label and no hold label, and an
item in triage never starts a run. A trigger starts work; it never approves a gate.
Approvals by label
A run waits for you twice: after the plan, and before the merge. You answer both with a label, in the issue or pull request sidebar or on the board. You don’t type a command.- Only a person counts. The label must be added by a GitHub user with write access to the
repository. Labels added by a bot, an app or the Factory itself are ignored. The approval is
recorded as
github:@login. - Labels are used once. After reading
factory:approved,factory:changesormerge:changes, the Factory removes it.merge-readystays on the pull request until the merge, and is removed if new commits are pushed: approve the new head again. - Hold wins.
merge:holdstops pickup and merge, whatever other labels are present.merge:yololets a person merge withoutmerge-ready, never past a hold. - Moving a card doesn’t approve. The board can’t tell who moved it, so the Factory replies with a comment asking for the label instead.
- Typing
/approvewith text is refused. A bare/approvecomment is still accepted. Anything after it, such as/approve but add tests, is refused with a reply: put corrections in a comment and add the changes label. - Gate labels work in the repository the board is bound to, on GitHub boards.
labels.
From the shell, architech factory runs approve <run> --gate plan approves a plan too.
Which gates apply
- Plan approval is required before any build at
calibratingandstandardautonomy. - Review is done by the
reviewerrole, not the developer who built the change. It can send work back tobuildup to two times. - Merge approval is required at
calibratingautonomy (the default), and at any autonomy when a change touches a protected path (repos[].zones.protected). - The merge itself always waits for a person’s approve or loosen label on the pull request, at every autonomy level and with every merge preset.
- Autonomy (
calibrating,standardorautonomous) is set inpolicy.autonomy.
Validate before pushing
factory.yaml reference.