Commit Graph
10 Commits
Author SHA1 Message Date
jpmschweitzer 5619218e31 feat(tooling): generate_atlas.py city + infrastructure pipeline and atlas DB index (#832)
Implements the Phase 3 atlas content generator per D-191 §3, §8, and §9.

Pipeline per body (terrain-aware, deterministic per seed + body):
  1. Simulate terrain via planet_simulation.simulate().
  2. Analyse continents (flood-fill), habitability (temp/moisture/slope +
     coastal bonus), river mouths, and a terrain A* cost grid.
  3. Place cities sequentially — capital first (habitability + river-mouth
     bias), then corridor growth via multi-source Dijkstra, quadrant-spread
     penalty after 2 cities in a quadrant, port-on-new-continent bonus at
     cities 3–4. ±25% noise for seed variation.
  4. Generate roads and railroads as an MST over city positions, with
     A* paths on the terrain cost grid (rail follows roads where possible).
  5. Place a transit POI at the capital (15% chance to scatter to a
     secondary city).

Output (canonical markers.json schema, pixel space per D-191 §8):
  - cities:    {id, name, kind, center:[r,c], population}
  - roads:     {id, name, kind, path:[[r,c],...]}
  - railroads: {id, name, kind, path:[[r,c],...]}
  - pois:      {id, name, kind, center:[r,c]}
  - existing rivers/oceans/mountain_ranges preserved untouched.

City names are left empty for gemma_naming.py (#833). Body population is
split across cities with geometric decay (capital ~50%, each subsequent
city half the previous). The 6 hand-authored bodies (Lendel, Edict,
Vuurkloof, Røros, Cairnside, Estrade) are detected by existing
`cities` and skipped for regeneration; their markers are still synced
to the DB index below.

Atlas index in systems.db (new):
  - atlas_body_grids, atlas_cities, atlas_roads, atlas_railroads,
    atlas_pois, atlas_rivers, atlas_oceans, atlas_mountain_ranges
  - Scalar metadata mirror of every markers.json — the implant atlas app
    and development queries can lookup cities/POIs/features without
    scanning 267 JSON files. Polyline geometry stays in the markers.json
    files next to the heightmaps (used by the renderer); the DB only
    stores filterable scalar fields plus `point_count` as a length proxy.
  - Schema lives in server/data/systems-schema.sql; generate_atlas.py
    mirrors the CREATE TABLE IF NOT EXISTS block so it runs against any
    DB state (matches the economy-db importer pattern).
  - Populated and refreshed on every run. Each body's rows are deleted
    and reinserted deterministically — no stale state.

Also fixes a pre-existing WIP bug in the quadrant-saturation penalty
loop (a stray outer `for r in range(GRID_H)` with unreachable breaks
meant only the NW quadrant was ever checked).

Runtime: 280s for all 267 inhabited bodies on a single core. 265 bodies
updated this run, 6 hand-authored bodies synced to DB without
regeneration.

Atlas index after run:
  atlas_cities             329    (15 hand-authored + 314 awaiting #833)
  atlas_roads               46
  atlas_railroads           44
  atlas_pois               287
  atlas_rivers            2034
  atlas_oceans             696
  atlas_mountain_ranges   1953
  atlas_body_grids         267
2026-04-15 08:46:55 +02:00
jpmschweitzerandClaude Opus 4.6 4f1bf0f279 feat(wiki): generate body content for all 303 star systems
Scaffolded index.md, globe.png (512x512), heightmap.png (1024x512),
terrain.npz, and markers.json for ~2600 celestial bodies across the
Settled Reach. Heightmaps render at native simulation resolution.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 18:51:33 +02:00
jpmschweitzerandClaude Opus 4.6 db241b88bd refactor(schema): rename biome_summary to planet_class (D-188)
"Biome" describes per-zone vegetation classification (Whittaker table).
"Planet class" describes overall planetary character. The conflation
caused the planet generator to misclassify ~270 bodies as barren.

Scope: systems.db column, schema SQL, Rust atlas code, wiki table
headers (Biome → Class), atlas proposal JSONs, all docs/decisions,
tooling scripts. Also normalizes atmosphere vocabulary (breathable →
standard) and expands planet class mapping to all 26 wiki values.
Unknown classes default to temperate for modder safety.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 17:10:35 +02:00
jpmschweitzerandClaude Opus 4.6 199770ee41 data(wiki): add Bodies/Population rows + economic profiles to 301 systems (#790, #781)
Adds Bodies and Population rows to System Profile tables across all 301
star-system wiki pages. Adds Industries, Exports, and Imports economic
profile rows derived from systems.db economic_base + body type + topology.
Includes 9 body/station name changes from cultural diversity remediation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 16:03:56 +02:00
jpmschweitzerandClaude Opus 4.6 a97e2267f0 data(wiki): per-body GTTR entries for 25 moons and stations (#782)
Hub systems at hops 0-4 with pop >10K now have individual GTTR entries.
Covers Gateway, Sirius, ACB, Cygni B, Bastion, Nova Roma, Fremantle,
Kampala Gate, Aurelius, Puerto Rivera, and Okafor Station. Each follows
the established drifter's-voice format with Adams rating and practical
information sections.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 09:36:16 +02:00
jpmschweitzerandClaude Opus 4.6 05c3227b53 feat(atlas): add gravity, orbital period, rotation + sync-wiki command
Schema: added orbital_period_days and rotation_period_hours to bodies
table. Proposal format now includes surface_gravity, orbital_period_days,
rotation_period_hours with sensible defaults per body type.

New sync-wiki command generates a Celestial Bodies section in wiki
pages from DB data. All 16 fields rendered including Year (d) and
Day (h). Re-authored Gateway (GJ 71) with full physics.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 18:26:42 +01:00
jpmschweitzerandClaude Opus 4.6 b77c94a6d8 feat(atlas): add sync-wiki command, sync Gateway body catalog to wiki
New atlas subcommand: sync-wiki generates a Celestial Bodies section
in wiki pages from DB body/station data. All fields rendered: orbit,
ID, name, type, inhabited, population, mass, gravity, atmosphere,
biome, hydrosphere, economy, settlement pattern, industrial corridor.
Stations table includes docking class, governance, gate flag, districts.

Moons render indented under their parent body (↳ notation).
Section is idempotent — re-running overwrites the existing section.

DB is source of truth, wiki is generated output. No import direction.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 18:19:29 +01:00
jpmschweitzerandClaude Opus 4.6 4ac58e0968 feat(wiki): add Adams & Ford Publishing and Drifter's Guide template
New corporation page for Adams & Ford Publishing (GJ 280A).
Drifter's Guide template and initial entries for Tau Ceti,
Sirius, and Gateway. Updated corporations index.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 19:49:42 +01:00
jpmschweitzerandClaude Opus 4.6 3e607090fb feat(docs): write 10 core system wiki pages with full prose
Sol, Gateway (Tau Ceti), Sirius, Ran — core 4 with full prose.
ACB, Struve, Cygni B, Arbour, Groombridge, Bastion — inner orbit 6.

Each page has DB-generated infobox (READ-ONLY) plus 5 authored prose
sections: supply dependency, faction notes, silence topic, narrative
hook, calibration note. Cross-system relationships established
(Bastion-ACB adjacency, Institute geographic pattern, Cygni B design
rights connecting to Gateway silence).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 03:41:51 +01:00
jpmschweitzerandClaude Opus 4.6 de3e04c7a1 feat(data): add 301 star system wiki stubs with full frontmatter
Wiki pages are the single source of truth for all per-system data.
Each stub contains all 68 columns in YAML frontmatter, pre-filled
from star-map.json for identity/infrastructure fields. Includes
Sol (S-000/GJ 0) and Van Maanen's Star (S-057/GJ 35) with Sova
station content.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 00:23:39 +01:00