Branch sizes are inherently skewed; previously only the cap (median quota)
applied, so a small faction could start with a one-system sliver.
- FLOOR (balance.minTerritory, data/factions.json): a faction below the
floor absorbs the nearest unowned eligible overflow first, then the
richest faction's least-core systems — territory stays contiguous; a
tiny galaxy with too few eligible systems is best-effort.
- Territory is now tracked per faction: g.factions.factionTerritories is
the truth, the branch view is derived; capitals are placed inside the
faction's post-floor territory, so a faction built entirely from
borrowed space still gets its seat in its own territory.
- The galaxy plate rings EVERY star: faction color for territory, neutral
silver for wild space (home included) — the ring color is the
ownership read at a glance.
- dev/factions.test.mjs now checks the floor, cap, disjointness, and
branch-view invariants; new throwaway diagnostics
dev/faction-balance.diag.mjs / dev/faction-sweep.diag.mjs sweep seeds
for the invariants + determinism.