stitchu

Journal · Developer story

Why we split Stitchu into four work lanes

On 17 October 2026, Stitchu's pattern engine, its website, a new account service and the site's own pages were worked on at the same time, each in its own lane, with one integrator merging the results. This is the record of that day, written from the lanes' status files, messages and test receipts: who did what, where we waited for each other, which problems got past green tests, and what is still open. None of the dresses has been sewn yet.

  1. Before: one dress and one writer at a time
  2. Who did what
  3. Why in parallel
  4. Where we waited for each other
  5. Problems that got past green tests
  6. What we learned
  7. What is still unsolved

Before: one dress and one writer at a time

Until mid-October the work ran as a single queue. From 27 September the rule was to finish one dress completely before starting another, and only one agent wrote code at a time. The two AI coding tools we use took turns: a run orchestrated by Claude from 10 to 13 October, then Codex on 14 and 15 October, with no Claude run. The hand-off notes of 13 October replaced the one-dress lock and the one-writer rule with lanes split by file ownership.

On 17 October both tools worked in the same run. Root, the integrator, and the reader thread were Codex threads. The engine, web, account and marketing lanes were Claude sessions. The Claude sessions could not message the Codex threads directly, so every lane wrote to two files that the others read: a status file (what it owns, what it is doing, what is open) and an outbox of numbered messages.

Who did what

Everything below is on the lanes' own branches. When this was written, none of it was on the live site yet.

Why in parallel

The engine work was tied to the reader: every fix had to be tried on real model output, and each model call took minutes. The website, the account service and the site's pages did not depend on those results. Holding them until the engine was done would have left three lanes idle for most of the day, so they ran at the same time and met at Root's merges.

Where we waited for each other

Problems that got past green tests

Each of these passed the checks of the lane that made it. They were found by a reviewer that had not done the work, by another lane, or by reading the real output (the PDF text, the screen) instead of the test result.

  1. Share cards promised a feature we do not have. About 20 pages used a link preview that said: “Photograph a dress. Get a real sewing pattern. A hand-built C++ engine drafts it to your exact body.” The public workshop does not read your photo or draft to your body. The page checks were green; an independent reviewer marked the card critical. It now shows three drawn dresses, free EU36 PDFs and “not yet sewn”, and the story pages have their own cards.
  2. A phone header hid the dresses. On a 390 × 844 phone screen the shared header took 177 px, so the home page showed no dress in its first screen. Overflow was 0 and page errors were 0. The web lane's one-row header is 57 px; it waits for the next merge.
  3. The first real package failed review after passing its checks. From a short written description of a straight, sleeveless dress ending above the knee, with a zip at the centre back, the pipeline produced all six files; browser tests passed and Root matched the file hashes. A reviewer reading the PDFs found that the pattern was shaped to the waist (finished bust, waist and hip 90, 77 and 96 cm), the hem sat at the knee, and the neck binding instructions closed the zip opening into a ring. After engine and reader fixes, the next fresh package cleared all three: a straight side line, the hem 40 mm above the knee, the binding open at the zip. This was an internal test; the public workshop does not take descriptions yet.
  4. An account error stayed on “loading”. When the account service answered 404, the account page kept its loading state and said the service had refused. Root's consistency agent found it in a browser run. The account branch now shows an “unavailable” state with a retry; it waits for merge.
  5. The workshop example builds an unpublished dress. The example design in the workshop is the pink pinstripe back-bow mini with four PDFs in sizes EU34 to EU44, while the journal said that dress's PDF package was not published. Both pages passed their own checks. The story now says what the workshop builds and why the dress is not with the free patterns; whether the example should be a published dress instead is Root's decision.
  6. PDF titles did not match the site. The keyhole mini's PDFs are titled “Bow Cap-Sleeve Mini Dress”, and both wrap minis are “Draped Mini Dress”. Downloads now save under the dress's site name, and the marketing lane proposed one names file for both the site and the PDF covers; the engine lane has not answered yet.
  7. The marketing lane stopped another lane's Chrome. During a browser check it stopped a headless Chrome it took for its own hung browser. The browser's parent process was not the marketing lane's, so it may have been another lane's test. It told every lane to rerun any browser test that failed at that time. Since then it stops only processes it started and checks the parent process first.

It went the other way once. A browser test reported that the engine's WebAssembly bundle failed to start in Chrome. Root traced it to the test server, which sent the files without a UTF-8 charset; the bundle was fine and was not rebuilt. The correction went out as its own message to every lane that had read the first one.

What we learned

None of this is a new method. Branches, code owners, a merge queue and independent review are ordinary software practice. The day showed where they mattered when AI agents did most of the work.

What is still unsolved

← All journal stories