fix(atlas): address PR #100 review — star_type audit, data quality fixes

- Fix star_type/spectral_class mismatches across 36 proposals
- Differentiate GJ1002 copy-paste planets (c-g had identical params)
- Fix GJ880 malformed spectral_class (M2: → M2V) and Leirvik station pop
- Fix GJ3325 malformed spectral_class (K: → K)
- Correct white dwarf star_type (GJ1221, GJ3991 → D)
- Correct "unusual" star_type (GJ3877, GJ661A → K)
- Delete tooling/atlas-helpers.sh (superseded by clean scripts on main)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-26 08:16:18 +01:00
co-authored by Claude Opus 4.6
parent 841b81b443
commit 4b68cb455e
37 changed files with 5153 additions and 510 deletions
+283 -16
View File
@@ -1,7 +1,7 @@
{
"system_id": "GJ 877",
"proper_name": "Holmgren's Passage",
"star_type": "F",
"star_type": "K",
"spectral_class": "K",
"wiki_data": {
"habitable_count": 2,
@@ -12,22 +12,289 @@
"raw_bodies_line": null
},
"bodies": [
{"body_id": "GJ877b", "proper_name": null, "body_type": "planet", "orbit_index": 1, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "terrestrial", "surface_gravity": 0.35, "orbital_period_days": 25, "rotation_period_hours": 600, "atmosphere": "none", "biome_summary": "barren", "hydrosphere": "none", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "inner rocky, tidally locked"},
{"body_id": "GJ877c", "proper_name": "Sundsvall", "body_type": "planet", "orbit_index": 2, "parent_body_id": null, "inhabited": true, "population": 250000000, "mass_class": "terrestrial", "surface_gravity": 0.88, "orbital_period_days": 80, "rotation_period_hours": 22.0, "atmosphere": "breathable", "biome_summary": "temperate-cool", "hydrosphere": "moderate", "economic_role": "transit", "settlement_pattern": "urban", "industrial_corridor": null, "notes": "primary inhabited world, marginal but workable, Wave 2 Swedish-heritage colony, 400 years continuous occupation, agriculture, manufacturing, institutional services, Holmgren Transit Authority, Assembly liaison office, parliamentary governance"},
{"body_id": "GJ877c-1", "proper_name": null, "body_type": "moon", "orbit_index": 1, "parent_body_id": "GJ877c", "inhabited": false, "population": 0, "mass_class": "dwarf", "surface_gravity": 0.05, "orbital_period_days": 8, "rotation_period_hours": 192, "atmosphere": "none", "biome_summary": "barren", "hydrosphere": "none", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "small moon"},
{"body_id": "GJ877d", "proper_name": "Härnösand", "body_type": "planet", "orbit_index": 3, "parent_body_id": null, "inhabited": true, "population": 12000000, "mass_class": "terrestrial", "surface_gravity": 0.72, "orbital_period_days": 180, "rotation_period_hours": 20.0, "atmosphere": "breathable", "biome_summary": "arid", "hydrosphere": "minimal", "economic_role": "agriculture", "settlement_pattern": "dispersed", "industrial_corridor": null, "notes": "secondary inhabited world, marginal conditions, agricultural expansion settlement, outer habitable zone"},
{"body_id": "GJ877e", "proper_name": null, "body_type": "planet", "orbit_index": 4, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "terrestrial", "surface_gravity": 0.40, "orbital_period_days": 400, "rotation_period_hours": 18.0, "atmosphere": "thin", "biome_summary": "frozen", "hydrosphere": "ice", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "cold rocky"},
{"body_id": "GJ877f", "proper_name": null, "body_type": "planet", "orbit_index": 5, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "terrestrial", "surface_gravity": 0.32, "orbital_period_days": 900, "rotation_period_hours": 16.0, "atmosphere": "none", "biome_summary": "frozen", "hydrosphere": "ice", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "frozen rocky"},
{"body_id": "GJ877g", "proper_name": null, "body_type": "gas_giant", "orbit_index": 6, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "gas_giant", "surface_gravity": null, "orbital_period_days": 2500, "rotation_period_hours": 11.0, "atmosphere": "dense", "biome_summary": null, "hydrosphere": null, "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "moderate gas giant"},
{"body_id": "GJ877g-1", "proper_name": null, "body_type": "moon", "orbit_index": 1, "parent_body_id": "GJ877g", "inhabited": false, "population": 0, "mass_class": "dwarf", "surface_gravity": 0.06, "orbital_period_days": 5, "rotation_period_hours": 120, "atmosphere": "none", "biome_summary": "barren", "hydrosphere": "none", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "inner gas giant moon"},
{"body_id": "GJ877g-2", "proper_name": null, "body_type": "moon", "orbit_index": 2, "parent_body_id": "GJ877g", "inhabited": false, "population": 0, "mass_class": "dwarf", "surface_gravity": 0.04, "orbital_period_days": 14, "rotation_period_hours": 336, "atmosphere": "none", "biome_summary": "frozen", "hydrosphere": "ice", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "icy outer gas giant moon"},
{"body_id": "GJ877h", "proper_name": null, "body_type": "planet", "orbit_index": 7, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "terrestrial", "surface_gravity": 0.22, "orbital_period_days": 5500, "rotation_period_hours": 20.0, "atmosphere": "none", "biome_summary": "frozen", "hydrosphere": "ice", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "outer ice world"},
{"body_id": "GJ877i", "proper_name": null, "body_type": "planet", "orbit_index": 8, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "dwarf", "surface_gravity": 0.11, "orbital_period_days": 10000, "rotation_period_hours": 22.0, "atmosphere": "none", "biome_summary": "frozen", "hydrosphere": "ice", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "distant ice dwarf"},
{"body_id": "GJ877-belt", "proper_name": null, "body_type": "asteroid_belt", "orbit_index": 9, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": null, "surface_gravity": null, "orbital_period_days": null, "rotation_period_hours": null, "atmosphere": null, "biome_summary": null, "hydrosphere": null, "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "outer belt"},
{"body_id": "GJ877-oort", "proper_name": null, "body_type": "oort_cloud", "orbit_index": 10, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": null, "surface_gravity": null, "orbital_period_days": null, "rotation_period_hours": null, "atmosphere": null, "biome_summary": null, "hydrosphere": null, "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "oort cloud"}
{
"body_id": "GJ877b",
"proper_name": null,
"body_type": "planet",
"orbit_index": 1,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": "terrestrial",
"surface_gravity": 0.35,
"orbital_period_days": 25,
"rotation_period_hours": 600,
"atmosphere": "none",
"biome_summary": "barren",
"hydrosphere": "none",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "inner rocky, tidally locked"
},
{
"body_id": "GJ877c",
"proper_name": "Sundsvall",
"body_type": "planet",
"orbit_index": 2,
"parent_body_id": null,
"inhabited": true,
"population": 250000000,
"mass_class": "terrestrial",
"surface_gravity": 0.88,
"orbital_period_days": 80,
"rotation_period_hours": 22.0,
"atmosphere": "breathable",
"biome_summary": "temperate-cool",
"hydrosphere": "moderate",
"economic_role": "transit",
"settlement_pattern": "urban",
"industrial_corridor": null,
"notes": "primary inhabited world, marginal but workable, Wave 2 Swedish-heritage colony, 400 years continuous occupation, agriculture, manufacturing, institutional services, Holmgren Transit Authority, Assembly liaison office, parliamentary governance"
},
{
"body_id": "GJ877c-1",
"proper_name": null,
"body_type": "moon",
"orbit_index": 1,
"parent_body_id": "GJ877c",
"inhabited": false,
"population": 0,
"mass_class": "dwarf",
"surface_gravity": 0.05,
"orbital_period_days": 8,
"rotation_period_hours": 192,
"atmosphere": "none",
"biome_summary": "barren",
"hydrosphere": "none",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "small moon"
},
{
"body_id": "GJ877d",
"proper_name": "H\u00e4rn\u00f6sand",
"body_type": "planet",
"orbit_index": 3,
"parent_body_id": null,
"inhabited": true,
"population": 12000000,
"mass_class": "terrestrial",
"surface_gravity": 0.72,
"orbital_period_days": 180,
"rotation_period_hours": 20.0,
"atmosphere": "breathable",
"biome_summary": "arid",
"hydrosphere": "minimal",
"economic_role": "agriculture",
"settlement_pattern": "dispersed",
"industrial_corridor": null,
"notes": "secondary inhabited world, marginal conditions, agricultural expansion settlement, outer habitable zone"
},
{
"body_id": "GJ877e",
"proper_name": null,
"body_type": "planet",
"orbit_index": 4,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": "terrestrial",
"surface_gravity": 0.4,
"orbital_period_days": 400,
"rotation_period_hours": 18.0,
"atmosphere": "thin",
"biome_summary": "frozen",
"hydrosphere": "ice",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "cold rocky"
},
{
"body_id": "GJ877f",
"proper_name": null,
"body_type": "planet",
"orbit_index": 5,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": "terrestrial",
"surface_gravity": 0.32,
"orbital_period_days": 900,
"rotation_period_hours": 16.0,
"atmosphere": "none",
"biome_summary": "frozen",
"hydrosphere": "ice",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "frozen rocky"
},
{
"body_id": "GJ877g",
"proper_name": null,
"body_type": "gas_giant",
"orbit_index": 6,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": "gas_giant",
"surface_gravity": null,
"orbital_period_days": 2500,
"rotation_period_hours": 11.0,
"atmosphere": "dense",
"biome_summary": null,
"hydrosphere": null,
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "moderate gas giant"
},
{
"body_id": "GJ877g-1",
"proper_name": null,
"body_type": "moon",
"orbit_index": 1,
"parent_body_id": "GJ877g",
"inhabited": false,
"population": 0,
"mass_class": "dwarf",
"surface_gravity": 0.06,
"orbital_period_days": 5,
"rotation_period_hours": 120,
"atmosphere": "none",
"biome_summary": "barren",
"hydrosphere": "none",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "inner gas giant moon"
},
{
"body_id": "GJ877g-2",
"proper_name": null,
"body_type": "moon",
"orbit_index": 2,
"parent_body_id": "GJ877g",
"inhabited": false,
"population": 0,
"mass_class": "dwarf",
"surface_gravity": 0.04,
"orbital_period_days": 14,
"rotation_period_hours": 336,
"atmosphere": "none",
"biome_summary": "frozen",
"hydrosphere": "ice",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "icy outer gas giant moon"
},
{
"body_id": "GJ877h",
"proper_name": null,
"body_type": "planet",
"orbit_index": 7,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": "terrestrial",
"surface_gravity": 0.22,
"orbital_period_days": 5500,
"rotation_period_hours": 20.0,
"atmosphere": "none",
"biome_summary": "frozen",
"hydrosphere": "ice",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "outer ice world"
},
{
"body_id": "GJ877i",
"proper_name": null,
"body_type": "planet",
"orbit_index": 8,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": "dwarf",
"surface_gravity": 0.11,
"orbital_period_days": 10000,
"rotation_period_hours": 22.0,
"atmosphere": "none",
"biome_summary": "frozen",
"hydrosphere": "ice",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "distant ice dwarf"
},
{
"body_id": "GJ877-belt",
"proper_name": null,
"body_type": "asteroid_belt",
"orbit_index": 9,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": null,
"surface_gravity": null,
"orbital_period_days": null,
"rotation_period_hours": null,
"atmosphere": null,
"biome_summary": null,
"hydrosphere": null,
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "outer belt"
},
{
"body_id": "GJ877-oort",
"proper_name": null,
"body_type": "oort_cloud",
"orbit_index": 10,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": null,
"surface_gravity": null,
"orbital_period_days": null,
"rotation_period_hours": null,
"atmosphere": null,
"biome_summary": null,
"hydrosphere": null,
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "oort cloud"
}
],
"stations": [
{"station_id": "GJ877c-S1", "proper_name": "Vadstena", "orbits_body_id": "GJ877c", "station_type": "commercial", "population": 15000000, "economic_role": "transit", "docking_class": "major", "has_gate_infrastructure": false, "notes": "Holmgren Transit Authority, 400-year transit archive, Assembly regional liaison office (15-year tenure), through-route transit services, institutional services hub for outer reach"},
{"station_id": "GJ877-oort-S1", "proper_name": "Arjeplog", "orbits_body_id": "GJ877-oort", "station_type": "horizon", "population": 1500, "economic_role": "transit", "docking_class": "major", "has_gate_infrastructure": true, "notes": "horizon station, 2 apertures, through-route transit toward GJ 880 and Okoro's Claim"}
{
"station_id": "GJ877c-S1",
"proper_name": "Vadstena",
"orbits_body_id": "GJ877c",
"station_type": "commercial",
"population": 15000000,
"economic_role": "transit",
"docking_class": "major",
"has_gate_infrastructure": false,
"notes": "Holmgren Transit Authority, 400-year transit archive, Assembly regional liaison office (15-year tenure), through-route transit services, institutional services hub for outer reach"
},
{
"station_id": "GJ877-oort-S1",
"proper_name": "Arjeplog",
"orbits_body_id": "GJ877-oort",
"station_type": "horizon",
"population": 1500,
"economic_role": "transit",
"docking_class": "major",
"has_gate_infrastructure": true,
"notes": "horizon station, 2 apertures, through-route transit toward GJ 880 and Okoro's Claim"
}
]
}