- Waypoints were comms-only beacons with no landing or trade; a second
deep-space station is a more useful destination in their place
- The old waypoint chance in systems.json becomes
deepSpaceStation.second, so a system can roll 0–2 stations
- StationFrames now assigns a distinct sprite variant per station
(Galaxy.stationFrames is id → [frame, …]) and a two-station system
always wears two different variants
- Rename the route-gate pulse from "destination's waypoint" to
"route's next stop" so the term no longer refers to a removed kind
- Assign each jump-tree branch a faction (apex/mindweave/zenith) with seeded
shuffle; territory = depth 2..maxDepth-1 per branch, ring + tips stay neutral
- Designate four capital worlds (neutral + one per faction) as the outermost
planet of their system, with fixed frames 18-21 and faction-owned settlements
- Add cross-branch bridge gates in the middle belt so factions can reach each
other without routing through the trunk; Dijkstra picks the shorter route
- Introduce arid planet class (always habitable, settles as colony) across all
system types with rebalanced class weights
- Wire Trestle's last brief to auto-set destination to the neutral capital on
acknowledgment (CommsHub onEnd → GameScene._commEnded)
- Render faction ring layer + capital seat marks on the galaxy plate; style
bridge lanes distinctly from trunk edges
- Populate settlement owner from system faction (reputation seam now live);
SystemReport reads faction label/color
- Add dev/factions.test.mjs covering config, branches, capitals, territory,
arid, bridges, determinism; update existing tests for new invariants
- Planet count is now a single global rule (20% barren, else 2–4 planets)
instead of per-type spreads; the starting system always holds a gas giant
plus a rocky world beside the home world.
- Every planet hosts one settlement by class (habitable rocky → colony, other
rocky/ice/lava → mining station, gas → cloud base); free-space stations and
beacons still roll per archetype with the core→rim gradient.
- Old probabilistic planet-settlement path kept behind allPlanetsSettled flag.
- Layout max drops to 6 objects (4 planets + 2 stations); the 11-object
two-orbit case remains as a defensive fallback.
- Update tests, docs, and add rocky-land video asset.
The galaxy was settled long before the player arrives. Systems now
host colonies on habitable worlds, mining stations over resource
worlds, cloud bases riding gas giants, stations adrift in open
space, and beacons — or report "charted · unclaimed" when empty.
- data/settlements.json: the shared kind vocabulary (label, theme,
population range, anchor type); add a kind = JSON + naming pool.
- Per-archetype rates in data/systems.json (chance + required
planet class) and a core→rim density gradient in data/galaxy.json
(falloff/floor), keyed off each record's new rNorm.
- Draws stay in a stable order on the system's own Rng stream, so
lazy and eager generation still produce identical content.
- Every settlement keeps owner: null, a reserved seam for the
factions/pirates that will claim them later.
- NameGenerator.station() names from anchor + kind ("Kest Skyspire").
- SystemReport.js is a pure, testable formatter (dossier lines,
"charted · unclaimed" for empty); GameScene's HUD renders it and
Node tests cover structure, mix, gradient, naming, lazy === eager.