Why Docker
Three repositories that depend on each other in a chain.
| Repository |
Role in the chain |
moby/moby |
The engine. Defines the API and the Go client library everything else calls. |
docker/cli |
The docker command. Consumes the engine's client library. |
docker/compose |
docker compose. Consumes both the engine's client and the CLI. |
Three dependency edges from one ticket, with a forced order. The engine lands before the
CLI, which lands before Compose.
The dependencies are real and versioned. Each repository has a substantial test suite that
runs without exotic infrastructure. And a ticket's surface travels visibly, from an engine
API option through a command-line flag into a Compose flag, which makes behaviour easy to
observe.
Carving one repository into pieces was rejected as the only test bed. It exercises context
selection, but not discovery, merge sequencing or version skew, which need real boundaries.
The test tickets
Three repositories. A new soft limit on container processes, added to the engine API,
exposed as a docker run flag, surfaced as a Compose flag. One detail is deliberate. For
the Compose-to-CLI edge the ticket does not state what Compose should expect, so the run
has to handle an unstated dependency.
Two repositories. A timeout option on the engine's client library, surfaced as a global
CLI flag. A single edge, stated precisely.
Three more tickets exist only to seed scenarios. One names work that no repository in the
workspace can own, one collides with a seeded design record, and one forces an open
architectural decision. Each is written so the fault sits in the ticket's own text rather
than being smuggled in by the harness.
Keeping the numbers honest
Measurement runs live on a fresh workspace. Everything from the build-and-validate era —
every ledger, every checkpoint artifact — was archived out before the campaign, so no
earlier run contributes a row. The harness, not operator discipline, enforces the
boundary. A run resumed from a development checkpoint refuses to archive as a
measurement, so its timings and token counts can never quietly become a benchmark column.
What the clean path shows
The campaign's control run went through clean. Three repositories delivered in order,
three cross-linked draft pull requests, every check and review passed on the first
attempt, the integration gate passed. Zero stops, zero human interventions, 1h 35m 02s
end to end.
The clean run earns its place as a control. It proves the instrument does not stop on
its own — so every stop counted in the scenarios is attributable to the fault we planted.