Software Factory

The live board

Everything below is generated from the factory's own tools — the same command that draws the private board draws this one, with the contents redacted. Nothing here is typed by hand and nothing is estimated.

Live, from a heartbeat. The board ships baked in at build time — 2026-09-02 12:08Z — for anyone without JavaScript, then a script in the browser polls a status file the factory's own laptop pushes and swaps the numbers in as they change. 8 stations run on one laptop that this site cannot reach, so "is it running" is answered by how recently that file arrived, not by a status field inside it — a crashed laptop looks exactly like a stale file still claiming "working".

What is withheld. Counts and shape are real; contents are not. No task text, no message bodies, no issue or PR titles, no owned paths. What a reader gets is the true shape of the factory — how many stations, what is blocked, how the loop closes — and nothing about what is being built this week.

Gailleur Labs factory floor

2026-09-02 12:08:45Z
Public view — counts and shape only. Task text, message contents, issue and PR titles are withheld.
idleevery station is at a prompt with nothing running
8/8
stations running
tmux session up
16
waiting on you
parked, proposed or blocked
19
open handoffs
oldest 1d
4
open PRs
522 merged in 30d
355k
lines of code
439 test files
12.3M
output tokens
across all stations, 7d
issues open
everything the factory could pick up
4/5
process checks
things that must keep happening

Where the time goeslast 150 merges in the product repo

31s
task filed → picked up
median, by a station
15m
merged, no rework
median PR open → merge
2.3h
merged, with rework
median — the expensive path
65%
merged first time
no changes requested
35% → 59%
the tail
of PRs take this share of all elapsed time
7d
slowest merge
#1800, 17 rework round(s)
1m
wait for first review
median PR open → reviewer speaks
3.5
rounds when reworked
mean, on PRs that needed any

Waiting on the human16

  • q-20260901-008open

    factory ask … --station <id>
  • q-20260901-029open

    factory ask … --station <id>
  • q-20260901-030open

    factory ask … --station <id>
  • q-20260901-047open

    factory ask … --station <id>
  • q-20260901-048open

    factory ask … --station <id>
  • q-20260901-063open

    factory ask … --station <id>
  • q-20260901-064open

    factory ask … --station <id>
  • q-20260901-065open

    factory ask … --station <id>
  • q-20260901-006blockedweb

    factory reopen q-20260901-006
  • q-20260901-014blockedweb

    factory reopen q-20260901-014
  • q-20260901-016blockedweb

    factory reopen q-20260901-016
  • q-20260901-028blockeddevx

    factory reopen q-20260901-028
  • q-20260901-031blockedweb

    factory reopen q-20260901-031
  • q-20260901-032blockedweb

    factory reopen q-20260901-032
  • q-20260901-033blockedweb

    factory reopen q-20260901-033
  • q-20260901-049blockeddevx

    factory reopen q-20260901-049

Over time

PRs merged
queue events
bridge messages
output tokens
review rounds

How work moves

you say it an error fires the queue a station claims PR + review staging production production errors return as queue tasks — the loop closes you you

The stations1 expectation(s) lapsed

stationownsmodelowedoutput tokens · 7d
web engineering Domi web app + backend. Owns the contract every other station consumes. claude-opus-5[1m] · high 3.8M
mobile engineering Expo/React Native iOS + Android client. Pure OAuth API consumer of the web contract. claude-opus-5 · high 1.8M
design design Design system, tokens, brand-string ledger. Publishes values, not stylesheets. claude-sonnet-5 · high 381k
devx engineering CI, gates, eval harness, test infrastructure. Owns what 'green' means. claude-opus-5 · high 3.1M
marketing gtm Positioning, gailleur.com marketing surfaces, outbound copy. Every public claim traceable to shi claude-sonnet-5 · high 1.1M
product product Acceptance against what was actually asked, and the order work happens in. Authors no feature sp claude-sonnet-5 · high 855k
security security Reads everything, writes only security documents, and can hold a release without asking. Cannot claude-opus-5 · high 1.1M
chief proxy JF's proxy: holds the conversation, turns it into queue entries in his own words, carries statio claude-sonnet-5 · high 168k

What must keep happening

  • ok every successful promote to production publishes release notes
  • ok the production error triage sweep keeps running
  • ok the cross-model reviewer keeps producing reviews
  • ok no station leaves a peer's request unanswered for days
  • lapsed product reviews the backlog and proposes what should become Ready

Agents that are not stations

  • ai-reviewgpt-5.6-terra · github-actions

    Cross-model PR review — Claude writes, a GPT model reviews in a read-only sandbox.

  • sentry-triageno LLM · github-actions

    Autonomous error-triage loop. Reads production errors, dedupes, files the next ticket with evidence.

  • dependabotno LLM · github

    Dependency PRs. Supply-chain entropy control.

Code and change

repositoryfileslinestest filesopen PRsmerged · 30d
gailleur/domi1,703311,3523954285
gailleur/domi-design00000
gailleur/domi-mobile13124,581420150
gailleur/software-factory3214,5661041
gailleur/website314,8111046
Generated from the factory's own tools — nothing here is typed by hand, and nothing is estimated. Open handoffs over-report: openRequests counts a request no reply correlates to AND whose thread (contextId) carries nothing later from the recipient. Messages sent before contextId existed have only the first test, so they still OVER-report: treat an open request as

the_machinery →

what_it_produces →