From c90a91623042571f62cb8c6a6912677f6b4c01a6 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 25 Mar 2026 13:43:53 +0100 Subject: [PATCH] =?UTF-8?q?data(atlas):=20Schuilhoek=20=E2=80=94=20four=20?= =?UTF-8?q?Dutch=20farming=20worlds=20behind=20Cairn?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GJ 68/Schuilhoek: Zomer (800K, warm, grains), Lente (600K, cool, leafy staples), Herfst (400K, soft fruit), Winter (200K, low-g pasture). 300-year-old farming commune, no external contact, 2M total across four cultivated worlds. No orbital infrastructure. Fixed sync-wiki topology clobbering bug. Restored topology sections for Cairn (GJ 845) and Aurelius (GJ 783A). Co-Authored-By: Claude Opus 4.6 (1M context) --- docs/atlas/proposals/GJ68.json | 32 ++++++++++++++++++++++++++++++ server/src/bin/atlas.rs | 25 ++++++----------------- wiki/star-systems/GJ-68/index.md | 25 +++++++++++++++++++++++ wiki/star-systems/GJ-783A/index.md | 4 ++++ wiki/star-systems/GJ-845/index.md | 4 ++++ 5 files changed, 71 insertions(+), 19 deletions(-) create mode 100644 docs/atlas/proposals/GJ68.json diff --git a/docs/atlas/proposals/GJ68.json b/docs/atlas/proposals/GJ68.json new file mode 100644 index 000000000..8e2b49270 --- /dev/null +++ b/docs/atlas/proposals/GJ68.json @@ -0,0 +1,32 @@ +{ + "system_id": "GJ 68", + "proper_name": "Schuilhoek", + "star_type": "K", + "spectral_class": "K1V", + "wiki_data": { + "habitable_count": 4, + "inhabited_count": 4, + "has_gas_giant": true, + "has_asteroid_belt": true, + "has_horizon_station": true, + "raw_bodies_line": null + }, + "bodies": [ + {"body_id": "GJ68b", "proper_name": null, "body_type": "planet", "orbit_index": 1, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "terrestrial", "surface_gravity": 0.28, "orbital_period_days": 22, "rotation_period_hours": 528, "atmosphere": "none", "biome_summary": "barren", "hydrosphere": "none", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "inner rocky"}, + {"body_id": "GJ68c", "proper_name": "Zomer", "body_type": "planet", "orbit_index": 2, "parent_body_id": null, "inhabited": true, "population": 800000, "mass_class": "terrestrial", "surface_gravity": 0.88, "orbital_period_days": 180, "rotation_period_hours": 22.0, "atmosphere": "breathable", "biome_summary": "arid", "hydrosphere": "rivers", "economic_role": "agricultural", "settlement_pattern": "dispersed_rural", "industrial_corridor": null, "notes": "warm and dry, root vegetables, legumes, crossbred grains, Raad meets here"}, + {"body_id": "GJ68d", "proper_name": "Lente", "body_type": "planet", "orbit_index": 3, "parent_body_id": null, "inhabited": true, "population": 600000, "mass_class": "terrestrial", "surface_gravity": 0.84, "orbital_period_days": 320, "rotation_period_hours": 25.5, "atmosphere": "breathable", "biome_summary": "temperate", "hydrosphere": "ocean", "economic_role": "agricultural", "settlement_pattern": "dispersed_rural", "industrial_corridor": null, "notes": "cool, high moisture, leafy staples"}, + {"body_id": "GJ68e", "proper_name": "Herfst", "body_type": "planet", "orbit_index": 4, "parent_body_id": null, "inhabited": true, "population": 400000, "mass_class": "terrestrial", "surface_gravity": 0.80, "orbital_period_days": 480, "rotation_period_hours": 23.0, "atmosphere": "breathable", "biome_summary": "temperate", "hydrosphere": "rivers", "economic_role": "agricultural", "settlement_pattern": "dispersed_rural", "industrial_corridor": null, "notes": "soft fruit land"}, + {"body_id": "GJ68e-1", "proper_name": null, "body_type": "moon", "orbit_index": 1, "parent_body_id": "GJ68e", "inhabited": false, "population": 0, "mass_class": "dwarf", "surface_gravity": 0.06, "orbital_period_days": 14.0, "rotation_period_hours": 336, "atmosphere": "none", "biome_summary": "barren", "hydrosphere": "none", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": ""}, + {"body_id": "GJ68f", "proper_name": "Winter", "body_type": "planet", "orbit_index": 5, "parent_body_id": null, "inhabited": true, "population": 200000, "mass_class": "terrestrial", "surface_gravity": 0.72, "orbital_period_days": 700, "rotation_period_hours": 28.0, "atmosphere": "breathable", "biome_summary": "temperate", "hydrosphere": "rivers", "economic_role": "agricultural", "settlement_pattern": "dispersed_rural", "industrial_corridor": null, "notes": "low gravity pasture, livestock herds"}, + {"body_id": "GJ68g", "proper_name": null, "body_type": "planet", "orbit_index": 6, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "terrestrial", "surface_gravity": 0.45, "orbital_period_days": 1100, "rotation_period_hours": 17.0, "atmosphere": "thin", "biome_summary": "frozen", "hydrosphere": "ice", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": ""}, + {"body_id": "GJ68h", "proper_name": null, "body_type": "planet", "orbit_index": 7, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "terrestrial", "surface_gravity": 0.38, "orbital_period_days": 1600, "rotation_period_hours": 15.5, "atmosphere": "none", "biome_summary": "frozen", "hydrosphere": "none", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": "outer frozen"}, + {"body_id": "GJ68-belt", "proper_name": null, "body_type": "asteroid_belt", "orbit_index": 8, "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": ""}, + {"body_id": "GJ68i", "proper_name": null, "body_type": "gas_giant", "orbit_index": 9, "parent_body_id": null, "inhabited": false, "population": 0, "mass_class": "gas_giant", "surface_gravity": null, "orbital_period_days": 3000, "rotation_period_hours": 11.5, "atmosphere": "dense", "biome_summary": null, "hydrosphere": null, "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": ""}, + {"body_id": "GJ68i-1", "proper_name": null, "body_type": "moon", "orbit_index": 1, "parent_body_id": "GJ68i", "inhabited": false, "population": 0, "mass_class": "dwarf", "surface_gravity": 0.08, "orbital_period_days": 4.5, "rotation_period_hours": 108, "atmosphere": "none", "biome_summary": "barren", "hydrosphere": "none", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": ""}, + {"body_id": "GJ68i-2", "proper_name": null, "body_type": "moon", "orbit_index": 2, "parent_body_id": "GJ68i", "inhabited": false, "population": 0, "mass_class": "dwarf", "surface_gravity": 0.05, "orbital_period_days": 11.0, "rotation_period_hours": 264, "atmosphere": "none", "biome_summary": "frozen", "hydrosphere": "ice", "economic_role": null, "settlement_pattern": null, "industrial_corridor": null, "notes": ""}, + {"body_id": "GJ68-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": ""} + ], + "stations": [ + {"station_id": "GJ68-oort-S1", "proper_name": "Horizon Station", "orbits_body_id": "GJ68-oort", "station_type": "horizon", "population": 0, "economic_role": "transit", "docking_class": "standard", "has_gate_infrastructure": true, "notes": "2 apertures"} + ] +} diff --git a/server/src/bin/atlas.rs b/server/src/bin/atlas.rs index 66600c098..fdc48c8d3 100644 --- a/server/src/bin/atlas.rs +++ b/server/src/bin/atlas.rs @@ -1666,26 +1666,13 @@ fn cmd_sync_wiki(conn: &Connection, system_id: Option<&str>, wiki_dir: &str) { .unwrap_or(content.len()); format!("{}{}\n{}", &content[..start_pos], section.trim_end(), &content[end_offset..]) } else { - // Insert after the System Profile section (after the first "---" pair) - // Find the second "---" which ends the System Profile - let mut dashes = 0; - let mut insert_pos = None; - for (i, line) in content.lines().enumerate() { - if line.trim() == "---" { - dashes += 1; - if dashes == 3 { - // Third --- is end of System Profile - let byte_pos: usize = content.lines().take(i + 1).map(|l| l.len() + 1).sum(); - insert_pos = Some(byte_pos); - break; - } - } - } - if let Some(pos) = insert_pos { - format!("{}\n{}\n---\n\n{}", &content[..pos], section.trim_end(), &content[pos..]) + // Insert before ## Topology if it exists, otherwise before end of file + if let Some(topo_pos) = content.find("\n## Topology") { + let insert_pos = topo_pos + 1; // after the newline + format!("{}{}\n\n{}", &content[..insert_pos], section.trim_end(), &content[insert_pos..]) } else { - // Fallback: append at end - format!("{}\n{}", content, section) + // No topology section — append at end + format!("{}\n{}", content.trim_end(), section) } }; diff --git a/wiki/star-systems/GJ-68/index.md b/wiki/star-systems/GJ-68/index.md index f81a99952..319aa1c04 100644 --- a/wiki/star-systems/GJ-68/index.md +++ b/wiki/star-systems/GJ-68/index.md @@ -78,6 +78,31 @@ Three hundred years of multi-world agricultural knowledge, held by a community t --- +## Celestial Bodies + + +| Orbit | ID | Name | Type | Inhabited | Pop | Mass | Gravity | Year (d) | Day (h) | Atmo | Biome | Hydro | Economy | Settlement | Industrial | +|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---| +| 1 | `GJ68b` | — | planet | no | — | terrestrial | 0.28g | 22 | 528.0 | none | barren | none | — | — | — | +| 2 | `GJ68c` | Zomer | planet | yes | 800K | terrestrial | 0.88g | 180 | 22.0 | breathable | arid | rivers | agricultural | dispersed_rural | — | +| 3 | `GJ68d` | Lente | planet | yes | 600K | terrestrial | 0.84g | 320 | 25.5 | breathable | temperate | ocean | agricultural | dispersed_rural | — | +| 4 | `GJ68e` | Herfst | planet | yes | 400K | terrestrial | 0.80g | 480 | 23.0 | breathable | temperate | rivers | agricultural | dispersed_rural | — | +| ↳ 4.1 | `GJ68e-1` | — | moon | no | — | dwarf | 0.06g | 14 | 336.0 | none | barren | none | — | — | — | +| 5 | `GJ68f` | Winter | planet | yes | 200K | terrestrial | 0.72g | 700 | 28.0 | breathable | temperate | rivers | agricultural | dispersed_rural | — | +| 6 | `GJ68g` | — | planet | no | — | terrestrial | 0.45g | 1100 | 17.0 | thin | frozen | ice | — | — | — | +| 7 | `GJ68h` | — | planet | no | — | terrestrial | 0.38g | 1600 | 15.5 | none | frozen | none | — | — | — | +| 8 | `GJ68-belt` | — | asteroid_belt | no | — | — | — | — | — | — | — | — | — | — | — | +| 9 | `GJ68i` | — | gas_giant | no | — | gas_giant | — | 3000 | 11.5 | dense | — | — | — | — | — | +| ↳ 9.1 | `GJ68i-1` | — | moon | no | — | dwarf | 0.08g | 4 | 108.0 | none | barren | none | — | — | — | +| ↳ 9.2 | `GJ68i-2` | — | moon | no | — | dwarf | 0.05g | 11 | 264.0 | none | frozen | ice | — | — | — | +| 10 | `GJ68-oort` | — | oort_cloud | no | — | — | — | — | — | — | — | — | — | — | — | + +### Stations & Facilities + +| ID | Name | Type | Orbits | Population | Economy | Governance | Docking | Gate | Districts | +|---|---|---|---|---|---|---|---|---|---| +| `GJ68-oort-S1` | Horizon Station | horizon | `GJ68-oort` | — | transit | — | standard | yes | 1 | + ## Topology - **Hop Distance from Gateway:** 4 diff --git a/wiki/star-systems/GJ-783A/index.md b/wiki/star-systems/GJ-783A/index.md index 815a53ce0..214511e08 100644 --- a/wiki/star-systems/GJ-783A/index.md +++ b/wiki/star-systems/GJ-783A/index.md @@ -81,3 +81,7 @@ Five centuries of the Reach's best gate physics research, all built on a theoret | `GJ783A-oort-S1` | Horizon Station | horizon | `GJ783A-oort` | — | transit | — | major | yes | 1 | | `GJ783Ad-S1` | Via Exedra | research | `GJ783Ad` | 5M | research | — | major | no | 1 | +## Topology + +- **Hop Distance from Gateway:** 3 +- **Adjacent Systems:** GJ 1, GJ 1286, GJ 251, GJ 570A diff --git a/wiki/star-systems/GJ-845/index.md b/wiki/star-systems/GJ-845/index.md index 1c4f97f08..f3f70897f 100644 --- a/wiki/star-systems/GJ-845/index.md +++ b/wiki/star-systems/GJ-845/index.md @@ -81,3 +81,7 @@ The system name "Cairn" does not appear in any official Commission or Assembly r |---|---|---|---|---|---|---|---|---|---| | `GJ845-oort-S1` | Horizon Station | horizon | `GJ845-oort` | — | transit | — | standard | yes | 1 | +## Topology + +- **Hop Distance from Gateway:** 2 +- **Adjacent Systems:** GJ 34A, GJ 406, GJ 559B, GJ 661A, GJ 663A, GJ 780, GJ 892