Files
settled-reach/server/data/systems-schema.sql
T
jpmschweitzerandClaude Opus 4.6 e05444f708 data(atlas): complete hop-2 body catalogs + corporations table
Hop-2 systems authored: Tessera/Corvel (legal archive, 1.3B),
Proxima/Ancora (first colony, Zheng He lore, 400M),
Meridian/Provenance (boomtown, 150M), Barnard's Star/Verada
(commuter town, 2B, wiki prose adjusted for surface-majority pop),
Prometheus/Galen+Chiron+Site Anterior (longevity monopoly, 55K),
Cygni B/Ferrath+Kihl Works (shipyards, 1.8B, 7 combines named),
Cairn (the anomaly — 7 apertures, 2 garden planets, zero population).

New: corporations table in systems.db schema. 20 records populated
from wiki/corporations/ + DSMC + 7 Cygni B combines (Vethara,
Kossler-Drun, Amberan Works, Talavec & Sons, Orren-Skel, Marhoud
Fabrication, Drevast Extraction).

Atlas CLI: fixed planet count defaults (6-8 minimum per star type,
was 2-4). Miri added Zheng He lore to Proxima wiki.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 23:23:12 +01:00

227 lines
9.1 KiB
SQL

-- Star Systems Database Schema — server/data/systems.db
-- Source of truth for all structured star system data.
-- Authored via tooling pipeline; wiki pages are generated views.
-- Shipped with the game — read-only from the server's perspective.
--
-- Rebuild: tooling/process-wiki-system-changes --rebuild-db
PRAGMA journal_mode=WAL;
PRAGMA foreign_keys=ON;
-- Core identity, physical character, political character
CREATE TABLE IF NOT EXISTS star_systems (
system_id TEXT PRIMARY KEY, -- GJ catalog number (e.g., "GJ 244A")
proper_name TEXT,
system_name TEXT,
star_type TEXT,
spectral_class TEXT,
dist_ly REAL,
geographic_sector TEXT,
geographic_band TEXT,
political_zone TEXT,
-- Physical character
habitable_planet_count INTEGER,
inhabited_planet_count INTEGER,
asteroid_belt INTEGER, -- boolean 0/1
gas_giant INTEGER, -- boolean 0/1
habitability_profile TEXT,
-- Political character
earth_alignment TEXT,
earth_proximity TEXT,
earth_tension TEXT,
-- Content notes
stability_index INTEGER,
system_volatility TEXT,
cultural_corridor TEXT,
generation_priority TEXT,
updated_at TEXT DEFAULT (datetime('now'))
);
-- Gate infrastructure — queried independently for pathfinding/topology
CREATE TABLE IF NOT EXISTS system_gates (
system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id),
horizon_station INTEGER, -- boolean 0/1
aperture_count INTEGER,
gate_connections INTEGER,
gate_topology TEXT,
hop_distance_from_gateway INTEGER,
span_gate_network TEXT
);
-- Settlement history
CREATE TABLE IF NOT EXISTS system_history (
system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id),
settlement_wave TEXT,
founding_motivation TEXT,
founding_culture_primary TEXT,
founding_culture_secondary TEXT,
cultural_persistence TEXT,
religious_status TEXT,
religious_generation_count INTEGER
);
-- Historical events — proper 1:N child table
CREATE TABLE IF NOT EXISTS historical_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
system_id TEXT NOT NULL REFERENCES star_systems(system_id),
event_type TEXT NOT NULL,
age_years INTEGER,
sort_order INTEGER NOT NULL DEFAULT 0 -- 0 = most recent
);
-- Economic life
CREATE TABLE IF NOT EXISTS system_economy (
system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id),
economic_tier INTEGER,
population INTEGER,
economic_base_primary TEXT,
economic_base_secondary TEXT,
distribution_index TEXT,
imprint_access TEXT
);
-- Faction presence
CREATE TABLE IF NOT EXISTS system_factions (
system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id),
governance_type TEXT,
dominant_faction TEXT,
primary_fault_line TEXT,
secondary_fault_line TEXT,
assembly_presence TEXT,
commission_presence TEXT,
syndic_presence TEXT,
syndic_type TEXT,
separatist_presence TEXT,
separatist_type TEXT,
institute_presence TEXT,
guardians_presence TEXT
);
-- Cultural voice
CREATE TABLE IF NOT EXISTS system_culture (
system_id TEXT PRIMARY KEY REFERENCES star_systems(system_id),
cultural_register TEXT,
cultural_register_secondary TEXT,
ambient_anxiety TEXT,
local_pride TEXT,
atmospheric_tone TEXT,
atmospheric_tone_secondary TEXT,
active_situation TEXT,
silence_threshold TEXT,
primary_archetype TEXT,
secondary_archetype TEXT,
narrative_notable INTEGER -- boolean 0/1
);
-- Authored prose (supply_dependency, faction_notes, silence_topic,
-- narrative_hook, calibration_note) lives in wiki markdown files only.
-- No DB mirror — read the file if you need the text.
-- Celestial bodies — planets, moons, gas giants, asteroid belts, oort clouds
-- Naming convention:
-- GJ-{n}b/c/d... — planets (innermost first)
-- GJ-{n}Ab/c/d... — planets orbiting primary (binary systems)
-- GJ-{n}d-1 — first moon of third planet
-- GJ-{n}-oort — oort cloud region
-- GJ-{n}-belt — asteroid belt
CREATE TABLE IF NOT EXISTS bodies (
body_id TEXT PRIMARY KEY,
system_id TEXT NOT NULL REFERENCES star_systems(system_id),
parent_body_id TEXT REFERENCES bodies(body_id), -- NULL for planets; parent planet for moons
-- Classification
body_type TEXT NOT NULL, -- planet, moon, gas_giant, asteroid_belt, oort_cloud
orbit_index INTEGER, -- innermost = 1 (planets around star, moons around planet)
proper_name TEXT, -- "Xin Chengdu", NULL for unnamed
-- Physical
mass_class TEXT, -- terrestrial, super_earth, ice_giant, gas_giant, dwarf
atmosphere TEXT, -- breathable, thin, toxic, none, dense
surface_gravity REAL, -- in g (Earth = 1.0), NULL for gas giants
orbital_period_days REAL, -- orbital period in Earth days, NULL for oort/belt
rotation_period_hours REAL, -- rotation period in Earth hours (Earth = 24), NULL for tidally locked/gas giants
biome_summary TEXT, -- temperate, arid, frozen, oceanic, volcanic, barren, mixed
hydrosphere TEXT, -- ocean, ice, rivers, none, subsurface
-- Settlement
inhabited INTEGER NOT NULL DEFAULT 0,
population INTEGER DEFAULT 0,
economic_role TEXT, -- manufacturing, agricultural, extraction, research, transit
founding_age_years INTEGER,
settlement_pattern TEXT, -- urban_concentrated, dispersed_rural, orbital_only, domed, cave
-- Cultural (inherited from system, can override)
cultural_corridor TEXT, -- override system corridor if different
industrial_corridor TEXT, -- MVG, Gate_Corp, DSMC, Prometheus, Agricultural_Syndic
-- Rendering
terrain_reference TEXT, -- heightmap path when authored, NULL otherwise
screenshot_path TEXT, -- planetary shader screenshot path
updated_at TEXT DEFAULT (datetime('now'))
);
-- Stations and orbital facilities
-- Naming: GJ-{n}b-S1 (first station orbiting planet b), GJ-{n}-oort-S1 (horizon station)
CREATE TABLE IF NOT EXISTS stations (
station_id TEXT PRIMARY KEY,
system_id TEXT NOT NULL REFERENCES star_systems(system_id),
orbits_body_id TEXT REFERENCES bodies(body_id),
-- Classification
station_type TEXT NOT NULL, -- horizon, commercial, military, research, industrial, agricultural, transit
proper_name TEXT, -- "Chengdu Orbital", "Horizon Station"
-- Settlement
population INTEGER DEFAULT 0,
economic_role TEXT,
governance_type TEXT, -- can differ from system governance
-- Infrastructure
docking_class TEXT, -- major, standard, restricted, none
has_gate_infrastructure INTEGER DEFAULT 0,
district_count INTEGER DEFAULT 1,
updated_at TEXT DEFAULT (datetime('now'))
);
-- Corporations, combines, and major economic entities
-- Source: wiki/corporations/ pages (canonical)
CREATE TABLE IF NOT EXISTS corporations (
corp_id TEXT PRIMARY KEY, -- slug from wiki (e.g., "gate-corporation", "vethara")
proper_name TEXT NOT NULL, -- display name
corp_type TEXT NOT NULL, -- corporation, combine, syndic, institution, independent
scope TEXT, -- reach-wide, sector, system, local
headquarters_system TEXT REFERENCES star_systems(system_id),
headquarters_body TEXT, -- body_id or station_id
specialization TEXT, -- primary product/service
parent_corp TEXT REFERENCES corporations(corp_id),
notes TEXT,
updated_at TEXT DEFAULT (datetime('now'))
);
-- Indexes
-- astronomical_id removed: system_id IS the GJ catalog number
CREATE INDEX IF NOT EXISTS idx_star_systems_sector ON star_systems(geographic_sector);
CREATE INDEX IF NOT EXISTS idx_star_systems_wave ON system_history(settlement_wave);
CREATE INDEX IF NOT EXISTS idx_star_systems_topology ON system_gates(gate_topology);
CREATE INDEX IF NOT EXISTS idx_star_systems_star_type ON star_systems(star_type);
CREATE INDEX IF NOT EXISTS idx_star_systems_volatility ON star_systems(system_volatility);
CREATE INDEX IF NOT EXISTS idx_historical_events_system ON historical_events(system_id);
CREATE INDEX IF NOT EXISTS idx_system_factions_dominant ON system_factions(dominant_faction);
CREATE INDEX IF NOT EXISTS idx_system_economy_tier ON system_economy(economic_tier);
CREATE INDEX IF NOT EXISTS idx_system_culture_archetype ON system_culture(primary_archetype);
CREATE INDEX IF NOT EXISTS idx_bodies_system ON bodies(system_id);
CREATE INDEX IF NOT EXISTS idx_bodies_parent ON bodies(parent_body_id);
CREATE INDEX IF NOT EXISTS idx_bodies_type ON bodies(body_type);
CREATE INDEX IF NOT EXISTS idx_bodies_inhabited ON bodies(inhabited);
CREATE INDEX IF NOT EXISTS idx_stations_system ON stations(system_id);
CREATE INDEX IF NOT EXISTS idx_stations_orbits ON stations(orbits_body_id);
CREATE INDEX IF NOT EXISTS idx_stations_type ON stations(station_type);
CREATE INDEX IF NOT EXISTS idx_corps_system ON corporations(headquarters_system);
CREATE INDEX IF NOT EXISTS idx_corps_type ON corporations(corp_type);