Building a release in parallel

0.2.7 was built as five feature bundles, a stack of four workflow features and two early fixes, with a merge coordinator. What made it fast, where the pull requests collided, and what we'd do the same way again.

21 October 2026QuorX v0.2.7testsresearch

0.2.7 was built in parallel. The work was split into five feature bundles, a stack of four workflow features and two early fixes, with a merge coordinator who reviewed each pull request, ran the full suite on main after merges, and decided the order. From the first pull request opened to the last one merged took a little under four hours.

The pull requests, opened to merged

Each lane is one pull request's life on GitHub, from opened to merged (UTC, 20 to 21 October). Most work started before its pull request was opened. Click a lane for what it did.

buildingin reviewsent back21:30 → 01:30
22:0023:0000:0001:00#35 resumed replies#36 setup and lockfile#37 diff review#38 hooks#39 schedules#40 tests on every PR#41 nested projects#42 cache share#43 pre-releases#44 production plans#45 memory#46 check time-outs#47 video and ffmpeg#49 clear quitting#50 rename retry#51 harder benchmark#52 model cards#53 installer modules#54 export and import#56 first-run tour#57 sign-in per port#58 smaller prompt#59 high-port crash#61 this computer only
#35 resumed repliesbuilding 21:33–23:15

Early fix: a reply resumed after a restart stays in one bubble and keeps its result.

Passing tests on main

The coordinator ran the full suite on main after each wave of merges. Some runs had one flaky test that passed on a rerun; this chart counts passes only. #61 replaced a few tests with one check that other devices are refused.

Passing tests on main, UTC tests
20022024026028023:1523:3800:0000:1000:5301:0801:26Passing, 23:15: 217 tests217Passing, 23:38: 224 tests224Passing, 00:00: 233 tests233Passing, 00:10: 241 tests241Passing, 00:53: 257 tests257Passing, 01:08: 274 tests274Passing, 01:26: 271 tests271

What worked, and what hurt

GainedBundles that owned their files merged cleanly

The three media pull requests touched the agent loop in separate places and merged in any order.

CostTwo pull requests in one file

#37 and #58 both changed the agent loop, so one waited for the other and rebased.

Kept small by: Split work by file ownership, not by feature size.
GainedA stack of four was quick to review

Each workflow feature showed only its own diff.

Costand slow to merge

After each squash merge, the next one retargeted to main and had conflicts to settle.

Kept small by: Stack only when a feature really needs the one below it.
GainedIntegration found real bugs

A crash on high ports (#59) and copies of QuorX signing each other out (#57).

CostFlaky tests on busy machines

Process-count tests sometimes failed with several test runs on one computer, then passed alone.

Kept small by: Kept strict, documented, and rerun on a quiet machine.

Risky platform work waited

The macOS and Linux installers (#55) were ready to review, but their publish and promote steps had never run end to end. A release-pipeline change is the kind that breaks everyone at once, so they moved to 0.2.8.

The longer version is in docs/research/parallel-release.md.