How it works
Factory is designed to carry a useful change through release and measurement. This example explains that ambition; each stage also says what is built today.
The worked example is illustrative: Acme Notes is a fictional notes app, and every name, quote and number in it is invented. The stages describe the designed lifecycle, and each says how far it is built.
The example at a glance
Illustrative example
One Slice, from signal to outcome
Acme Notes users say their drafts vanish when a browser tab closes. Follow one Slice through every stage: from their posts, to a checked change, to a measured drop in support tickets.
Each stage below shows its part of the example beside the real mechanism, in a dashed frame like this one.
The words
Factory uses a few words the same way everywhere, capitalised. In plain terms:
- Signal
- Something customers or public sources said that may point to work, kept with its exact quote and source.
- Slice
- The smallest useful change, frozen with its scope, its checks, its allowance and how its outcome will be measured.
- Allowance
- What one Slice may use (build attempts, check runs, branch moves and time), fixed when it is frozen.
- Candidate
- Proposed edits sealed as an exact commit, so that any later change to them is detected.
- Evidence
- What a check actually observed, recorded and pinned to the exact Candidate it ran on.
- Verdict
- The judgement of a Candidate's Evidence: Verified, Failed or Inconclusive. Only Verified moves on.
- Assurance
- The part that gives Verdicts and never takes the builder's word. Repository Assurance judges changes to a product's code.
- Product gate
- One record per product holding your grants and a stop switch. It admits each build, check and branch move only within them.
- Receipt
- Confirmation of what an action actually did, such as a branch moving once.
- Assessment
- After release, what happened compared with the promised outcome: Supported, Rejected or Inconclusive.
- Run, Attempt and Budget
- A Run is one recorded piece of work. Each Attempt at it has one owner and a private workspace, and its Budget of Attempts and time is fixed at the start and never extended.
- Capability
- An ability a product keeps, with an owner and checks that can be run.
Stage 1 of 9
Discover
In developmentFactory reads each product's public sources on a schedule: issue trackers, forums, reviews and changelogs. Plain code fetches, de-duplicates and keeps an exact quote and hash of each item; a small, fast model sorts new items into Signals, such as a customer problem, a request or a competitor move.
- Gate
- Every source reports its coverage, and every new item is sorted or marked unsorted. Research is never treated as a customer interview.
- Evidence it leaves
- Cited quotes with their hashes, and a coverage record for each source.
-
Find customer problems in public sources
In development
Still missing: Two parts are built and each passed independent review, tried only on test data: the schedule, which names each nightly and weekly pass once and holds its weekly token allowance, and the reader, which fetches only the public pages you commission and keeps exact quotes with their hashes. Nothing joins them or runs on a schedule, no real page has been fetched, sorting into Signals is not built, and the detailed design still awaits your decisions (P-C20 in the project intent).
Illustrative example
Seven posts, one problem
'Lost my meeting notes when the tab reloaded.'
- Sources
- The issue tracker, the forum and app reviews
- Signals
- 7 in 3 weeks, each with its quote and hash
- Sorted as
- One problem: a draft is lost when a tab closes
Stage 2 of 9
Decide
PlannedOnce a week a larger model turns the strongest clusters of Signals into a few proposals. Rules decide first, at no model cost: is the evidence real, recent and from customers, can the outcome be measured, is there capacity, and does it stay within your authority? A second model may challenge a proposal, but it can only lower it, never approve it.
- Gate
- Each proposal gets one recorded decision (admitted, parked or rejected) naming the rule or answer behind it. Anything that would widen authority goes to you.
- Evidence it leaves
- The decision, the rule behind it and the Signals it cites.
-
Admit, park or reject proposals, rules first
Planned
Plan: Owner direction of 29 September 2026 (P-C20 in the project intent).
-
Ask you only what Factory cannot decide
Planned
Plan: The decision interface design and the project intent (P-C01, P-C16).
Illustrative example
Admitted by rule
- Proposal
- Keep unsaved drafts across a closed tab
- Evidence
- Passes: 7 Signals from 3 sources, 5 of them from customers, the newest 2 days old
- Measurable
- Passes: support tickets are already tagged
- Authority
- Passes: within the objective 'Reduce support load'
- Decision
- Admitted. You were not asked, because nothing here widens authority.
Stage 3 of 9
Slice
In developmentPlanning freezes the smallest useful change as a Slice: the need, what is in and out of scope, the acceptance checks, the allowance of runs and time, and how the outcome will be measured. All of it is fixed before any code is written.
- Gate
- The Product gate records the frozen Slice under a live grant from you. Nothing later can widen its scope or lower its acceptance.
- Evidence it leaves
- A frozen Slice record, written once, with the digests of its inputs.
-
Admit delivery work only within your grants
In development
Still missing: Accepted as a part; nothing calls it yet, and no Slice has been delivered through it.
-
Plan from each product's saved values
Planned
Plan: Next step 3 in the handover.
Illustrative example
Slice ACME-12, frozen
- Need
- Drafts vanish when a tab closes
- In scope
- The editor's draft store and its tests
- Not in scope
- Syncing drafts across devices
- Acceptance
- A closed tab's draft comes back; saving still clears it; the existing suite passes
- Allowance
- 2 build attempts, 3 check runs, 1 branch move, 2 hours
- Outcome
- 'Lost draft' tickets per 28 days, from 41 to 20 or fewer
Stage 4 of 9
Build
In developmentA producer asks one model, once, for small text-file edits within the Slice's scope, with every tool switched off. The answer is only a proposal: Repository seals it as a Candidate, an exact commit and manifest that cannot change afterwards without being detected.
- Gate
- The proposal must parse within fixed limits, or nothing is sealed. A Candidate that changes anything outside the Slice's frozen paths can never be integrated.
- Evidence it leaves
- The sealed Candidate: its manifest and its exact bytes.
-
Ask a model for a bounded proposal, through your subscription
In development
Still missing: No model route is qualified, so nothing is proposed yet. Claude Code needs a person to check its built-in agents and plugins, then a fresh qualification under the current rules. A route through the ChatGPT sign-in is not built.
-
Seal a proposed change as an exact Candidate
In development
Still missing: Accepted for fresh repositories that Factory owns, but nothing in Factory calls it yet, and no real product's code has been sealed.
Illustrative example
Candidate 1, sealed
- Proposal
- 3 edits to 2 files, from one model exchange
- Scope
- Passes: both files are inside the Slice
- Candidate
- Sealed as an exact commit and manifest
Stage 5 of 9
Verify
In developmentThe Slice's frozen checks run against the unchanged code and the Candidate, each once, in a macOS sandbox with no network and nothing writable. What the host observed is stored as Evidence, and Assurance judges it and gives a Verdict: Verified, Failed or Inconclusive. The builder's own claims carry no authority.
- Gate
- Only Verified moves on. A timeout, a missing record or anything unclear never counts as a pass: the Verdict is Failed if any required check failed, and otherwise Inconclusive.
- Evidence it leaves
- One Evidence record per check run, and the Verdict with its pins.
-
Check a fixture and give an honest Verdict
Working today · verified
Scope: The four built-in test fixtures only (pass, fail, hang and noisy), run from the command line as the local development reference shows. Not a product's code.
-
Check a real change in a sandbox, then judge it
In development
Still missing: The sandbox, the collector and the judge are accepted as parts, but nothing joins them to a delivery yet, and no real Slice has been checked.
Illustrative example
Failed, then Verified
- Candidate 1
- The draft comes back, but saving no longer clears it. Verdict: Failed.
- Repair
- A second attempt, within the Slice's allowance
- Candidate 2
- Every check passes, and the old code fails the new restore check, as it should. Verdict: Verified.
Stage 6 of 9
Integrate
In developmentThe Product gate works the Verdict out again, inside its decision, and confirms the Candidate stays within the Slice. Then the target branch moves from the Candidate's base to its commit, at most once. If Factory cannot tell whether the move happened, it says unknown and blocks every later move until that is settled.
- Gate
- A Verified Verdict re-derived at the moment of the move, a live grant, and no unknown move outstanding for the product.
- Evidence it leaves
- A Receipt for the confirmed move.
-
Move a branch at most once, and say unknown when unsure
In development
Still missing: Accepted for fresh local repositories, but not yet joined to the Product gate, and it contacts no remote.
-
Deliver one useful change, end to end
In development
Still missing: Step 1, increments 4 to 8: the joining flow under the Product gate, its command line, an independent review of the whole, then one useful change delivered to a real local product.
Illustrative example
One move, one Receipt
- Checked again
- Verdict re-derived; scope unchanged; no unknown move pending
- Move
- main, from the base to Candidate 2, once
- Receipt
- Recorded. Nothing is released yet: a merge is not a release.
Stage 7 of 9
Release
PlannedFactory drafts release notes and launch copy, rendering every claim from a checked fact. Anything outward-facing (publishing, releasing, contacting customers, spending or changing live traffic) waits for your approval of that exact action. Potentially unsafe changes reach an alpha channel before everyone.
- Gate
- Your approval of the exact draft and action. Availability is claimed only after the channel's Receipt and a check from the customer's side.
- Evidence it leaves
- The approved draft's digest, the channel's Receipt and the availability check.
-
Release only with your approval
Planned
Plan: The design's release and marketing rules, and owner direction of 29 September 2026 (P-C20).
Illustrative example
Your approval, per action
- Draft
- 'Drafts now survive a closed tab.'
- You approved
- The alpha channel first, then everyone a week later
- Available
- Confirmed by the channel's Receipt and a check from a customer's side
Stage 8 of 9
Measure
PlannedThe measurement was fixed before release: baseline, target, window and guardrails. When the window closes, an Assessment compares what happened with the intended outcome and concludes Supported, Rejected or Inconclusive. Only Supported counts as value; a rejected change closes as learning, never as a win.
- Gate
- Assurance independently checks the instrumentation and how the decision rule was applied.
- Evidence it leaves
- The Assessment, with the frozen contract and the observations it rests on.
-
Measure whether a change helped
Planned
Plan: The design's measurement rules, and owner direction of 29 September 2026 (P-C20).
Illustrative example
Supported
- Baseline
- 41 'lost draft' tickets in 28 days
- After
- 17 in the 28 days after release
- Target
- 20 or fewer: met
- Guardrails
- Held: editor errors and load time unchanged
- Assessment
- Supported
- Model cost
- — not recorded by the provider
Had the target been missed, the Assessment would say Rejected, and the Slice would close as learning, not as a win. The unrecorded cost stays a dash with its reason, never 0.
Stage 9 of 9
Keep, renew or retire
PlannedThe improvement becomes a Capability with an owner and executable checks. Factory keeps it while it serves customers, renews it when Evidence shows friction, and retires it deliberately, with migration and notice, when its benefit no longer justifies its cost. If a later clean-up breaks it, Factory restores it.
- Gate
- Retirement needs evidence beyond low usage, and your decision whenever customers would notice.
- Evidence it leaves
- Capability records: required, retiring or retired, and healthy, degraded or unknown.
-
Keep, renew or retire, and improve in bounded steps
Planned
Plan: The self-improvement design and next step 4 in the handover. No schedule is active.
-
Reuse the lifecycle in a second product
Planned
Plan: Epic E18 in the implementation guideline.
Illustrative example
A Capability to keep
- Capability
- Draft recovery, with its checks
- Disposition
- Required
- Health
- Watched from now on; a clean-up that breaks it is restored
What customers say next becomes new Signals, and the lifecycle starts again.
Explore the implementation
Factory is one Node.js application made of small modules over local SQLite and Git, each accepted separately on independent review. Some serve every stage rather than one.
Underneath every stage
-
Record every decision once
Working today · verified
Scope: One local SQLite file on one Mac, crash-tested by killing processes; power loss is not tested. Anything a caller does outside the journal can still happen twice.
-
Recover from a controller crash within Budget
Working today · verified
Scope: The built-in fixtures on one Mac. Recovery happens when someone runs
verifyorrecover, never in the background. -
See each product's sourced progress, with unknown shown as unknown
Working today · verified
Scope: Six local products, registered for read-only metadata inspection. Facts arrive by trusted local import, the dashboard answers only on this Mac, and customer value always shows as unknown.
-
Keep each product's core values as exact revisions
Working today · verified
Scope: Edited in the local dashboard. Nothing plans with these values yet, and they grant no permission.
-
One list of what needs attention, from sources only
Working today · verified
Scope: A blocker resolves only when its source reports it; Factory does not re-check the prerequisite itself.
-
Use a model only where it is needed
In development
Still missing: No model is qualified, so every model task refuses today.
Eleven of the modules have a Plumb study on one of two plates; the rest have none yet.

Plate 1 of 2, records and runs. Positions 1 to 6: Command journal, Evidence / Assurance, Execution, Local fixture worker, Attempt fence / workspace, and Guarded verification / recovery. Editorial illustration, not status or progress.

Plate 2 of 2, isolation, delivery and visibility. Positions 1 to 5: Confined executor, Repository sealing / export, Repository integration, Portfolio, and Dashboard. Editorial illustration, not status or progress.
Every module has a guide that states what it does for you and its honest limits: read the module guides.
