feat(atlas): author GJ 71 (Gateway/Tau Ceti) body catalog

First system fully authored via atlas author/commit workflow.
7 bodies + 1 station: Threshold (primary garden, 600M), Arden
(secondary garden, 500M), Verantis (domed moon, 20M), inner rocky,
outer ice, debris disk, oort cloud, Horizon Station (80M).

Atlas CLI updated with proper_name, population, hydrosphere,
economic_role, settlement_pattern, industrial_corridor fields in
proposal format. Commit-system writes all fields to DB.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-24 18:16:09 +01:00
co-authored by Claude Opus 4.6
parent fb401e80d2
commit 080732d2ac
2 changed files with 202 additions and 3 deletions
+148
View File
@@ -0,0 +1,148 @@
{
"system_id": "GJ 71",
"proper_name": "Tau Ceti",
"star_type": "G",
"spectral_class": "G8V",
"wiki_data": {
"habitable_count": 2,
"inhabited_count": 3,
"has_gas_giant": false,
"has_asteroid_belt": true,
"has_horizon_station": true,
"raw_bodies_line": "| **Bodies** | 2 habitable · 3 inhabited |"
},
"bodies": [
{
"body_id": "GJ71b",
"proper_name": null,
"body_type": "planet",
"orbit_index": 1,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": "terrestrial",
"atmosphere": "none",
"biome_summary": "barren",
"hydrosphere": "none",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "inner rocky"
},
{
"body_id": "GJ71c",
"proper_name": "Threshold",
"body_type": "planet",
"orbit_index": 2,
"parent_body_id": null,
"inhabited": true,
"population": 600000000,
"mass_class": "terrestrial",
"atmosphere": "breathable",
"biome_summary": "temperate",
"hydrosphere": "ocean",
"economic_role": "agricultural",
"settlement_pattern": "urban_concentrated",
"industrial_corridor": null,
"notes": "primary garden world, first colony world through the gates"
},
{
"body_id": "GJ71d",
"proper_name": "Arden",
"body_type": "planet",
"orbit_index": 3,
"parent_body_id": null,
"inhabited": true,
"population": 500000000,
"mass_class": "terrestrial",
"atmosphere": "breathable",
"biome_summary": "temperate",
"hydrosphere": "rivers",
"economic_role": "agricultural",
"settlement_pattern": "dispersed_rural",
"industrial_corridor": null,
"notes": "secondary garden world, pastoral"
},
{
"body_id": "GJ71d-1",
"proper_name": "Verantis",
"body_type": "moon",
"orbit_index": 1,
"parent_body_id": "GJ71d",
"inhabited": true,
"population": 20000000,
"mass_class": "dwarf",
"atmosphere": "none",
"biome_summary": "barren",
"hydrosphere": "none",
"economic_role": "transit",
"settlement_pattern": "domed",
"industrial_corridor": null,
"notes": "domed service settlement"
},
{
"body_id": "GJ71e",
"proper_name": null,
"body_type": "planet",
"orbit_index": 4,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": "terrestrial",
"atmosphere": "thin",
"biome_summary": "frozen",
"hydrosphere": "ice",
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "outer ice world"
},
{
"body_id": "GJ71-belt",
"proper_name": null,
"body_type": "asteroid_belt",
"orbit_index": 5,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": null,
"atmosphere": null,
"biome_summary": null,
"hydrosphere": null,
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": "debris disk"
},
{
"body_id": "GJ71-oort",
"proper_name": null,
"body_type": "oort_cloud",
"orbit_index": 6,
"parent_body_id": null,
"inhabited": false,
"population": 0,
"mass_class": null,
"atmosphere": null,
"biome_summary": null,
"hydrosphere": null,
"economic_role": null,
"settlement_pattern": null,
"industrial_corridor": null,
"notes": ""
}
],
"stations": [
{
"station_id": "GJ71-oort-S1",
"proper_name": "Horizon Station",
"orbits_body_id": "GJ71-oort",
"station_type": "horizon",
"population": 80000000,
"economic_role": "transit",
"docking_class": "major",
"has_gate_infrastructure": true,
"notes": "Veil Institute founding site + gate infrastructure"
}
]
}
+54 -3
View File
@@ -221,21 +221,31 @@ struct TypeCount {
#[derive(Serialize, serde::Deserialize, Clone)]
struct ProposalBody {
body_id: String,
proper_name: Option<String>,
body_type: String,
orbit_index: i32,
parent_body_id: Option<String>,
inhabited: bool,
population: Option<i64>,
mass_class: Option<String>,
atmosphere: Option<String>,
biome_summary: Option<String>,
hydrosphere: Option<String>,
economic_role: Option<String>,
settlement_pattern: Option<String>,
industrial_corridor: Option<String>,
notes: String,
}
#[derive(Serialize, serde::Deserialize, Clone)]
struct ProposalStation {
station_id: String,
proper_name: Option<String>,
orbits_body_id: String,
station_type: String,
population: Option<i64>,
economic_role: Option<String>,
docking_class: Option<String>,
has_gate_infrastructure: bool,
notes: String,
}
@@ -785,9 +795,12 @@ fn generate_body_matrix(
orbit_index: orbit,
parent_body_id: None,
inhabited: false,
proper_name: None,
population: None,
mass_class: Some("terrestrial".into()),
atmosphere: Some("none".into()),
biome_summary: Some("barren".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
notes: "inner rocky, uninhabited".into(),
});
orbit += 1;
@@ -807,9 +820,12 @@ fn generate_body_matrix(
orbit_index: orbit,
parent_body_id: None,
inhabited: true,
proper_name: None,
population: None,
mass_class: Some("terrestrial".into()),
atmosphere: Some("breathable".into()),
biome_summary: Some("temperate".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
notes: format!("inhabited planet {}/{}", i + 1, wiki_inh),
});
orbit += 1;
@@ -830,9 +846,12 @@ fn generate_body_matrix(
orbit_index: orbit,
parent_body_id: None,
inhabited: false,
proper_name: None,
population: None,
mass_class: Some("terrestrial".into()),
atmosphere: Some("breathable".into()),
biome_summary: Some("temperate".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
notes: "habitable, uninhabited".into(),
});
orbit += 1;
@@ -854,9 +873,12 @@ fn generate_body_matrix(
orbit_index: orbit,
parent_body_id: None,
inhabited: false,
proper_name: None,
population: None,
mass_class: Some("terrestrial".into()),
atmosphere: Some("thin".into()),
biome_summary: Some("frozen".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
notes: "outer rocky/ice, uninhabited".into(),
});
orbit += 1;
@@ -870,9 +892,12 @@ fn generate_body_matrix(
orbit_index: orbit,
parent_body_id: None,
inhabited: false,
proper_name: None,
population: None,
mass_class: None,
atmosphere: None,
biome_summary: None,
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
notes: "asteroid belt".into(),
});
orbit += 1;
@@ -892,9 +917,12 @@ fn generate_body_matrix(
orbit_index: orbit,
parent_body_id: None,
inhabited: false,
proper_name: None,
population: None,
mass_class: Some("gas_giant".into()),
atmosphere: Some("dense".into()),
biome_summary: None,
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
notes: "gas giant".into(),
});
// 2 default moons
@@ -905,9 +933,12 @@ fn generate_body_matrix(
orbit_index: m,
parent_body_id: Some(gg_id.clone()),
inhabited: false,
proper_name: None,
population: None,
mass_class: Some("dwarf".into()),
atmosphere: Some("none".into()),
biome_summary: Some("barren".into()),
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
notes: format!("moon {} of gas giant", m),
});
}
@@ -922,9 +953,12 @@ fn generate_body_matrix(
orbit_index: orbit,
parent_body_id: None,
inhabited: false,
proper_name: None,
population: None,
mass_class: None,
atmosphere: None,
biome_summary: None,
hydrosphere: None, economic_role: None, settlement_pattern: None, industrial_corridor: None,
notes: "oort cloud".into(),
});
@@ -932,8 +966,12 @@ fn generate_body_matrix(
if has_horizon {
stations.push(ProposalStation {
station_id: format!("{}-oort-S1", sid),
proper_name: None,
orbits_body_id: oort_id,
station_type: "horizon".into(),
population: None,
economic_role: Some("transit".into()),
docking_class: Some("major".into()),
has_gate_infrastructure: true,
notes: "horizon station — gate infrastructure".into(),
});
@@ -1058,18 +1096,26 @@ fn cmd_commit_system(conn: &Connection, path: &str) {
for body in &proposal.bodies {
tx.execute(
"INSERT INTO bodies (body_id, system_id, parent_body_id, body_type, orbit_index,
inhabited, mass_class, atmosphere, biome_summary)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)",
proper_name, inhabited, population, mass_class, atmosphere,
biome_summary, hydrosphere, economic_role, settlement_pattern,
industrial_corridor)
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, ?10, ?11, ?12, ?13, ?14, ?15)",
params![
body.body_id,
proposal.system_id,
body.parent_body_id,
body.body_type,
body.orbit_index,
body.proper_name,
body.inhabited as i32,
body.population.unwrap_or(0),
body.mass_class,
body.atmosphere,
body.biome_summary,
body.hydrosphere,
body.economic_role,
body.settlement_pattern,
body.industrial_corridor,
],
)
.unwrap_or_else(|e| {
@@ -1081,13 +1127,18 @@ fn cmd_commit_system(conn: &Connection, path: &str) {
for station in &proposal.stations {
tx.execute(
"INSERT INTO stations (station_id, system_id, orbits_body_id, station_type,
proper_name, population, economic_role, docking_class,
has_gate_infrastructure)
VALUES (?1, ?2, ?3, ?4, ?5)",
VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9)",
params![
station.station_id,
proposal.system_id,
station.orbits_body_id,
station.station_type,
station.proper_name,
station.population.unwrap_or(0),
station.economic_role,
station.docking_class,
station.has_gate_infrastructure as i32,
],
)