Astrasum

Why two repositories and not one

· P1 D6

Two products, two languages, two teams that will move at different speeds. The obvious structure is a monorepo with two apps and a shared package. We did not do that.

What a monorepo would have cost

A monorepo makes the code cheap to share and the teams expensive to separate. One release train, one review queue, one CI budget, one set of merge conflicts. Neither repository could be cloned and run without the other’s dependencies. That fails the first principle at the largest scale we have: a repository that cannot stand alone is not a whole part.

What we do instead

Each brother is a complete repository. Each contains genome/ — principles, schemas, change contracts, design token shapes, tooling — and the two copies are byte-identical, verified in CI against a lock file. Everything a team may decide alone lives in expression/ or inside a project.

The cost

The genome exists twice. That is real duplication, and duplication is something we normally refuse. We accepted it here because the failure mode of duplication is silent drift, and a hash check removes exactly that failure mode while keeping both repositories whole. A tradeoff you have measured is a decision; one you have not is an accident.

The full reasoning is recorded as ADR-0001 in both repositories, under the same number.