// software factory IN DAILY USE

The Software Factory

One small piece at a time. More checks for riskier work. Low-risk work ships unattended.

This is how Fulltrace builds itself. A person keeps the roadmap and sets the order. An AI coding session does the building, one small planned piece of work at a time, and each piece is called a slice. Low and medium risk slices run unattended, day and night. Riskier slices and all design work run with a person in the session, and for risky work the rules recommend that a second AI is given the design and told to break it before anything is built. Every slice starts with a written plan and ends with a written closeout. The build log is what the factory produced, and the roadmap is where it is headed.

700+ slices shipped since 30 june 400+ shipped unattended since 19 august 06 risk classes 19 standing rules

Unattended and Attended

Low and medium risk slices get built and shipped with nobody watching. A person puts rows in the queue in the chosen order and sets which Claude model the runner uses, with a cheaper one for low-risk rows. A session with nobody in it then works the queue one slice at a time, day and night. That run is called the chain. Each slice runs the whole protocol by itself, from kickoff through its named checks to closeout and a commit, and the next one starts straight after. Over 400 slices have shipped this way since 19 August. One run that started at midnight and ran for 18 hours took on 17 slices and shipped all 17.

It only takes work it is allowed to take

A row qualifies when it is proposed, its prerequisites have shipped and its risk class is R3 or lower (the six classes are set out below). Rows for design or review work stay with a person. Each slice gets four hours a try and two tries. Uncommitted work left in the repo stops the run before it starts, and the first slice that fails outright stops the chain with everything left as it is.

A question for a person is set aside and the queue keeps moving

A slice that meets a question only a person can answer is parked in an Awaiting ruling lane, and the chain moves on to the next row. Once it is ruled on, the row goes back in the queue. A slice that stops short for a reason the runner cannot name gets its second try on the next setting in a short fixed list of models.

It cannot change the runner that is running it

Since 28 September the chain runs on a copy of the runner's code, taken when Start is pressed and kept outside the repo. A slice that changes the runner ships like any other, and the change takes effect at the next Start, which lists it first. A slice that touches the safety settings themselves, such as an assistant's permissions or the block on download commands, stops the chain until a person has reviewed it. The roadmap and the tests are not copied, so a slice can still change those.

Shipped means the register says so

The runner does not take a session's word for it. A slice counts as shipped only once its row is in the shipped register. Each slice commits its work on this machine as it goes.

It waits when the plan runs out

The chain runs on a flat-rate Claude plan, so it has no dollar limit of its own. The cost shown on the board is what the same work would cost at API list prices. When the plan runs out of hours, the chain waits and checks again every 15 minutes, for up to six hours, and picks the same slice back up once the plan allows it. Waiting does not use one of its two tries.

It can notify a phone

With notifications switched on, a phone gets a heads-up when the work the chain may take is nearly gone, a count when closeout steps are confirmed, and the reason when the chain stops. A stop that needs a person is marked urgent. Every slice also records which model and effort it ran on, so what a run cost can be compared against what it was given to work with.

R4 and R5 slices change how the system writes, approves or is set up. Since 21 September they stay out of the queue. Before that the limit was R4, and an R4 slice shipped unattended without its design review, which is why it was lowered. They need a written design before any code, and they run in a session a person starts and watches from Build mode in Studio. Two things would have to change before one could run unattended again. The limit would have to be raised in the runner's settings, which makes its tests fail on purpose. And that row would have to be marked as cleared, by hand and with a date, once its design review is in.

A Light on the Dark Factory

The factory runs dark, so Fulltrace has ways to switch the lights on. The board, a local page opened from Studio, shows the chain at work: the slice on the line, every round with its time and cost, and each commit as it lands. The stats page shows how much of the machine's working time the chain did, how long a shipped slice takes, and how much of that time goes to checks. And when a run ends, Fulltrace points at exactly what needs a person: the checks to click through and the decisions waiting.

view demo →

Opens full screen. Escape closes it.

On a phone, turn it sideways to watch.

Fulltrace factory
The Fulltrace board: what is running now and six live numbers in the header, the chain's rounds below, the write trace and the activity feed.
0:00

Seven Steps for Every Slice

Every slice goes through the same seven steps, from a one-line docs fix to a new way of writing files. Only the design step changes with the risk.

Seven steps in a cycle. 01 select, 02 kickoff, 03 design gate, 04 implement, 05 prove, 06 validate, 07 closeout. The closeout leads back to select, because it recommends the next slice. closeout recommends the next slice 01 Select 02 Kickoff 03 Design gate 04 Implement 05 Prove 06 Validate 07 Closeout
01 Select A person picks a slice, or the chain takes the next one in the queue. Its row is marked in progress.
02 Kickoff A written plan made before any work starts: what the slice will do, the rules it must follow, and the checks that will prove it.
03 Design gate Sized to the risk. Low-risk work goes straight to code. Risky work needs a written design first.
04 Implement Small commits, each one easy to undo.
05 Prove Each new check is proven to work: the code is broken on purpose, and the check must fail. A slice that adds no check skips this.
06 Validate Exactly the checks the kickoff named. They cannot be changed at the end.
07 Closeout A short written record of what happened, with a recommendation for what to do next.
01Select: A person picks a slice, or the chain takes the next one in the queue. Its row is marked in progress.
02Kickoff: a written plan made before any work starts. It says what the slice will do, the rules it must follow, and the checks that will prove it.
03Design gate: sized to the risk. Low-risk work goes straight to code. Risky work needs a written design first.
04Implement: small commits, each one easy to undo.
05Prove: each new check is proven to work. The code is broken on purpose, and the check must fail. A slice that adds no check skips this step.
06Validate: exactly the checks the kickoff named. They cannot be changed at the end.
07Closeout: a short written record of what happened, with a recommendation for what to do next.

↺Step 07 leads back to 01, because each closeout recommends the next slice.

A person decides

Which slices run and in what order, approvals, and what happens to each review finding. Since August the AI settles routine bookkeeping questions itself, under a standing instruction, and each ruling is recorded as the AI's, made under that instruction. A question that needs a person stops the slice, and in the chain that slice is set aside so the queue keeps moving.

The AI does the work

It writes the kickoff, builds the slice, runs the checks, writes the records and suggests the next step, with one clear recommendation. In the chain it also closes each slice and commits it.

A third role sits outside the pair: a separate AI whose only job is to find the holes in a design. See the adversarial review below.

Slices and Risk Classes

There is no sprint board and no ticket system. The unit of work is the slice: small enough to commit on its own, big enough to ship something real, with an ID that is never reused. The kickoff and closeout share that ID, so every slice sits between two written records. Each slice has a risk class, and the checks grow with the risk.

R0: docs only

Design notes, plans and register changes. No code.

R1: read-only code

Code that calls no model, writes nothing and changes no screen.

R2: screens that only show

New screens and read-only views. They display information and change nothing, and any new endpoint only reads.

R3: model spend

Work that costs real money. The kickoff sets a spending limit before anything runs.

R4: write or authority

Anything that can change data or how the system behaves: writes, approvals, settings. Design first. Today these only run with a person in the session.

R5: platform boundary

Opening the system to other machines or other people. A decision of its own, with everything R4 needs on top.

R0 to R2 go straight from kickoff to work. R3 must name its spending limit first. R0 to R3 can run unattended. R4 and R5 need a written design before any code, the rulebook recommends an adversarial review, and they only run with a person in the session. Design and building are usually separate slices, and a shipped design adds new building rows at its closeout.

One File Steers the Work

The roadmap is a single markdown file with a hard rule: nothing longer than a paragraph goes in it. It changes only by editing rows and flipping statuses, and the long write-ups live in separate phase documents. That keeps it readable as a steering board.

01Now: short, dated notes on what just shipped.
02Next: suggested slices, grouped by role. The order is a suggestion. A person decides.
03Decision gates: standing decisions that bind named rows. A kickoff that touches a bound row quotes its gate word for word.
04Backlog register: live rows only, each with an ID, role, risk class, prerequisites and status.
05Shipped register: one line per shipped slice, linked to its closeout.
06Standing rules: the nineteen rules, named by ID at kickoff. The full list is in the next section.
07Slice protocol: the steps, the risk classes, and the kickoff and closeout templates.
08Phase index: every track, its status, and the document that owns it.
The live and shipped registers together are the only record of which slice IDs are taken, and an exported copy never counts. Any new session, on any machine, picks up the exact state of play from the documents alone, because nothing important lives only in chat history.

Nineteen Standing Rules

These rules always apply: what can never widen, what never grants power, and what stays read-only. Each kickoff names the rules it touches by ID, and each closeout checks them. Since August each rule also has a record in code of how it is enforced: a guard that refuses, a test that fails, a checklist step, or nothing yet. Studio lists them under Config > Governance. In one sitting eighteen of them were ruled permanent and one temporary.

the_nineteen_invariantsexpand the full list
IDInvariant
G1No free models for reliability-critical audit, challenge, or apply runs.
G2No apply widening: structural, architectural, cross-surface, medium-confidence and ambiguous findings stay manual.
G3No portfolio-wide apply: every write is single-target, verifier-gated, build-gated, and ledgered.
G4No apply-write through the queue: approvals bind to an exact apply fingerprint, granted out of band.
G5The challenger stays advisory unless a separate policy decision says otherwise: a clear verdict never masks a failure.
G6The list of failure domains is not widened. It is the one list locked by the smoke tests.
G7After any server-side deploy, restart the server with the safe-restart wrapper before live validation.
G8No new platform code beyond accepted slices: new gateway endpoints are GET-only, and the few calls that change anything are named in the rule.
G9Config never grants authority: JSON cannot define new executable behaviour.
G10Secrets live in env or SecretStorage only: never in config, queues, ledgers, or reports.
G11Runtime artefacts are not source: no broad deletes over tracked report folders.
G12Every slice can be committed on its own, compiles, and passes the smoke tests where the server is touched.
G13Proposal-first: no model output is applied without deterministic validation and human review.
G14Screens that observe stay read-only, apart from confirmed actions the rule names one by one. By 9 October it had been amended eleven times, each time before any code.
G15A standing fence over hosted, multi-user, write-surface, and queued-apply expansions: opening it is its own decision.
G16Every grant record carries originating-surface and grantor-auth provenance from first write.
G17Decision-quality telemetry is descriptive only and never gates.
G18A design gate that refuses a real operator need must name the lawful alternative in the same document.
G19Bytes leave the machine only through registered egress seams. A message to a person needs a single-use grant minted by hand; social posting is never allowed.
Alongside the rules sit thirteen decision gates: standing design decisions, each owned by a document, that bind named rows. A bound row cannot start without quoting its gate word for word. Two examples: memory can inform a decision but never make it, and if approving from a phone is ever built, it must create the same approval, by the same path, as one from the desk.

Written Records at Fixed Points

AI work rarely crashes. It trails off. So every slice produces written records at fixed points and in a fixed shape, which turns "done" into a claim that can be checked.

Kickoff record

Written before work starts: what the slice will do, what is in and out of scope, the rules it must follow (quoted by ID), how success will be checked, the named checks, and a spending limit when models are involved. The closeout is judged against exactly this.

Closeout record

Short by rule, about 200 words: the outcome (shipped, partial or abandoned), the commits, what changed, and each check with its result. Two fields can never be left out. Manual check says what to click or run to see the result directly, and User docs says what changed in the user guide. A slice with nothing to show writes N/A and says why, and a slice that changed Studio's code cannot use N/A for Manual check. Since 8 September the manual check is written as a card: where to go, the steps to take, what a pass looks like and what a failure looks like.

After the closeout

Nine fixed steps: file the record in its phase document, update the phase index, the user guide, memory and the changelog, then move the row to the shipped register, tidy the queue, commit, restart the server if it changed, and check that the click pass can be built. The row moves near the end, because updating the docs is part of the slice. New rows are added the moment they exist, including every deferral. Since August a command drafts the four follow-up entries from the closeout record, and marks every sentence that needs a person.

Folding in review findings

The reviewer's verdict is pasted into the reviewed document word for word, and every finding gets a written decision: fold it in (with the edit), reject it (with the reason), or defer it (with the row that now owns it). The AI suggests each decision. A person makes it.

The Adversarial Review

For risky work, the rules recommend a review of the design before any code. The session that wrote the design starts a second AI with read-only access and one fixed instruction: break the design. It sees none of the first session's reasoning, so it cannot share its blind spots. Codex is the first choice. When Codex is out of quota, which the rules expect, the review steps down a short list: a manual upload to Microsoft Copilot, another vendor's command-line tool or a one-off script over OpenRouter, and last, a separate session from the same vendor. The switch is always recorded.

Keeping it independent
01A fresh start: the reviewer gets the document and its named sources, and none of the author's reasoning.
02Break it: the prompt asks for the strongest way to break the design. A review with no findings must list what it tried.
03A fixed prompt: the prompt is a recorded template, so the AI that wrote the design cannot soften the review by choosing the words.
04On the record: the reviewer's model and tool are written into the reviewed document.
What comes back

Every review returns a verdict (GO | CONDITIONAL-GO | NO-GO), findings ranked most severe first, answers to the document's open questions, and a list of what it tried and failed to break. The verdict does not decide on its own. A NO-GO whose findings are rejected can still ship, and the record says so. What the reviews have returned is on the codex page.

The first live run was on 10 July 2026, on the design for chat and model routing. Two Codex rounds both returned NO-GO, with 13 findings between them. Twelve were folded into the design and the other one was rejected. A Microsoft Copilot pass then accepted the folded document.

Three Backlogs

Not everything needs a risk class. Work waits in the backlog that matches how formal it needs to be.

Backlog register

The real work queue, inside the roadmap. Every row has an ID, a role, a risk class and its gates, and every slice starts from a row. The roadmap page shows it in full.

UI fix register

Small fixes to how Studio looks and behaves, with no ceremony: an entry goes in whenever something is spotted. Screenshots attach by file name, so an entry never needs editing to gain an image. Fixes launch from Build mode one at a time or as a batch.

Docs backlog

Changes that never reached the docs, found by comparing the git log with the changelog, then worked as ordinary doc updates.

Build Mode in Studio

The factory is driven from Studio, the VSCode extension. Its Build mode has eight tabs (Slices, History, UI/UX, Inbox, Gates, Reports, Ideas and Films), and they read the live documents straight off disk.

The Slices tab kicks off a slice in a chosen coding assistant, which marks its row in progress. It also starts and stops the unattended runner, sets which model it uses and edits its queue. Build grants no new power, and the session still does the work. Most ticks on a slice's checklist are set by a file or a commit, so they show that a step really happened, and no tick can start or stop anything. The studio page covers each tab.

One Factory, Other Projects

For most of its life the factory built only Fulltrace. Since October it can work from another project's own roadmap. Three projects are enrolled: Fulltrace, the Salesforce Developer Tools extension, and this website, which has no roadmap of its own yet. One command gives a new project a starter roadmap. A project that plans its changes as OpenSpec files can bring each one in as a row that waits for a ruling, though none of the enrolled projects uses OpenSpec yet.

The first slice outside Fulltrace, and so far the only one, shipped on 5 October in the Developer Tools extension, in a run started by hand. The board, the stats page and Build mode in Studio can each show any enrolled project. Studio's Start button still runs Fulltrace only. A chain works one project for its whole length, so a run for another project has to be started by hand from the command line.

Why This Shape

01
More checks for more risk

Docs-only work moves at the speed of conversation. Work that spends money must set a limit first, and work that writes or grants power needs a written design before any code. The risk classes make that a rule, so it never rests on a judgement made in a hurry.

02
Every slice states its outcome

Every slice ends with a clear outcome and a recommended next step. The Manual check field means a claim can always be tested by hand, and an N/A has to come with a reason.

03
The documents hold the state

The documents hold the whole state of play. The AI's memory points at them and never replaces them. A new session on a new machine can pick up from the repo alone.

04
A second AI checks the design

An author reviewing its own design shares its own blind spots. A fresh reviewer with a fixed prompt does not. Disagreements are recorded in plain view, and a person makes the call.

Taken together, this is a software factory in the plain sense: standard steps, checks that can stop the line, and every slice leaving with its record attached. Two limits apply. First, only part of the method can be read by a machine. The nineteen rules have a register in code, and the steps and checklist are a file per project, but the kickoff and closeout records are still written prose. The rest is on the roadmap. Second, the unattended line runs one slice at a time. Once the work is queued it runs dark, and a person comes back to rule on anything it set aside, read the closeouts and click through the checks.
See what it produced

The build log is the record of this workflow in action, in order. The roadmap is its live steering board.

Read the build log →