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>
This commit is contained in:
2026-04-06 17:10:35 +02:00
co-authored by Claude Opus 4.6
parent 6ce708a15a
commit db241b88bd
654 changed files with 3807 additions and 7203 deletions
+14 -7
View File
@@ -156,13 +156,20 @@ moist_hi = 0.15
# ─────────────────────────────────────────────────────────────────────
[temperature_bands]
temperate = [275, 305]
oceanic = [278, 300]
forest = [275, 308]
arid = [295, 340]
frozen = [210, 265]
volcanic = [290, 380]
barren = [180, 380]
# Core classes
temperate = [275, 305]
oceanic = [278, 300]
forest = [275, 308]
arid = [295, 340]
frozen = [210, 265]
volcanic = [290, 380]
barren = [180, 380]
# Extended classes
temperate_terminator = [260, 310] # sharp day/night gradient, wide band
cold_arid = [240, 290] # cold desert (Mars-analog)
hot_arid = [310, 360] # scorching desert
tropical = [295, 315] # hot and wet
boreal = [245, 278] # cold forest / taiga
# ─────────────────────────────────────────────────────────────────────
# Biome color palette
+54 -14
View File
@@ -72,12 +72,20 @@ STAR_UV = {
}
# atmosphere field → density string
# Wiki atmosphere value → pipeline atmosphere density.
# Both legacy ("breathable") and current ("standard") wiki values mapped.
ATMO_MAP = {
"none": "none",
"thin": "thin",
"breathable": "standard",
"dense": "thick",
"toxic": "thick", # Venus-style reducing atmosphere
"none": "none",
"trace": "none", # too thin for weather/clouds
"thin": "thin",
"breathable": "standard", # legacy wiki value
"standard": "standard", # current wiki value
"dense": "thick",
"thick": "thick",
"toxic": "thick", # Venus-style reducing atmosphere
"reducing": "thick", # same as toxic
"hydrogen-helium": "thick", # gas giant
"gas_giant": "thick", # gas giant atmosphere field
}
# hydrosphere → approximate land_fraction range [min, max]
@@ -91,14 +99,44 @@ HYDRO_LAND = {
}
# biome → planet_class
BIOME_CLASS = {
"temperate": "temperate",
"arid": "arid",
"frozen": "frozen",
"volcanic": "volcanic",
"barren": "barren",
"forest": "forest",
"oceanic": "oceanic",
# Wiki planet class → pipeline planet class.
# All 26 known wiki values mapped explicitly.
# Unknown values default to "temperate" (safe for modders adding new classes).
PLANET_CLASS_MAP = {
# Direct matches
"temperate": "temperate",
"arid": "arid",
"frozen": "frozen",
"volcanic": "volcanic",
"barren": "barren",
"oceanic": "oceanic",
# Temperate variants
"temperate_terminator": "temperate_terminator",
"temperate-cool": "temperate",
"temperate_highland": "temperate",
"temperate_maritime": "temperate",
"temperate_savanna": "temperate",
"temperate_coastal": "temperate",
"temperate_riverine": "temperate",
"temperate_ocean": "oceanic",
"cold_temperate": "temperate",
"floodplain_temperate": "temperate",
# Arid variants
"cold_arid": "cold_arid",
"hot_arid": "hot_arid",
# Tropical
"tropical": "tropical",
"tropical_ocean": "oceanic",
"subtropical": "tropical",
# Cold
"ice": "frozen",
"boreal": "boreal",
# Warm ocean
"warm_ocean": "oceanic",
# Geothermal
"geothermal": "volcanic",
# Forest (from prototype)
"forest": "forest",
}
# planet_class → axial tilt range [min, max] degrees
@@ -414,7 +452,9 @@ def _build_body_def(
if btype == "gas_giant" or mass in ("gas_giant", "ice_giant"):
planet_class = "gas_giant"
else:
planet_class = BIOME_CLASS.get(biome, "barren")
planet_class = PLANET_CLASS_MAP.get(biome, "temperate")
if biome and biome not in PLANET_CLASS_MAP and biome != "—":
log.warning(f" {bid}: unknown planet class '{biome}' — defaulting to temperate")
planet_class = ov.get("planet_class", planet_class)