fix(content): PR #133 review — 9 remaining items resolved

Closes 9 of 10 review items (blocker 1 handled in add2507e + d78d3b59):

- decisions/economics.md: reformat D-189 §5 amendment to standard
  Amendment (YYYY-MM-DD) block pattern (review #4)
- tooling/planet-gen/sol_name_fixes.py: dedup guard + argparse
  --dry-run (reviews #5, #10a)
- tooling/planet-gen/sol_markers/earth_features.json: trim to 11
  cities with selection rationale (review #6A); user-approved
  rebalance Sydney → Lagos and London → Brussels (review #6B)
- wiki/star-systems/GJ-380/bodies/GJ380c/markers.json: 2 secondary
  features renamed to Akan/Asante register — Kesset → Nkwanta Beck,
  Holt Spur → Bosomtwe Spur (review #7)
- docs/atlas/hand-refine-log.md: Aethelred lore-migration
  documentation + see-also cross-link to refine_log_849.md
  (reviews #8, #13)
- tooling/planet-gen/refine_log_849.md: rebalance addendum
- wiki/star-systems/GJ-0/bodies/GJ0d/markers.json, server/data/
  systems.db: re-synced after rebalance

Stub depth (review blocker #2) handled via split — tracked as
follow-up ticket #861 (three-layer narrative authoring).

Final Earth cities (11): Beijing, Brussels, Cairo, Delhi, Istanbul,
Lagos, Moscow, New York, São Paulo, Singapore, Tokyo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-19 15:51:17 +02:00
co-authored by Claude Opus 4.7
parent d78d3b599c
commit 2c3e3ff5eb
8 changed files with 109 additions and 75 deletions
+19
View File
@@ -174,6 +174,19 @@ suffixes incompatible with the British-Isles naming style.
**DB sync:** `generate_atlas.py --body GJ380c` ✓
**Addendum (PR #133 review):** Initial pass left GJ380c 100% Anglo-British register with zero
cross-corridor influence from the Kumasi/south_reach trade lanes. Added two secondary features
in Akan/Asante register, keeping primary features (Aldren capital, Durneth Range, Rethain Sea)
in their established Anglo register:
| Feature type | Old name | New name | Reason |
|---|---|---|---|
| river | The Kesset | Nkwanta Beck | Nkwanta = Akan "junction/crossroads" — trade-route name; Beck suffix localizes it |
| mountain | Holt Spur | Bosomtwe Spur | Bosomtwe = sacred Asante lake in Ghana; Spur suffix preserved from Groombridge convention |
**Corridors are tendencies, not borders** — capital and primary geography stay Anglo-British;
peripheral features reflect Kumasi trade influence. DB re-synced.
---
### GJ 699 — Barnard's Star system
@@ -261,6 +274,12 @@ Ankara, Karachi, Shanghai, Mumbai, Jakarta, Dhaka, Manila, Bangkok, Seoul, Osaka
Kolkata, Lahore, Shenzhen, Bangalore, Ho Chi Minh City, Luanda, Addis Ababa, Santiago, Taipei,
Hong Kong, Casablanca.
**PR #133 review rebalance (user-approved Option 1 + London swap):**
- `Sydney → Lagos` — improves African representation (Cairo + Lagos = 2 African cities; Sydney was the weakest cultural-touchstone anchor).
- `London → Brussels` — Brussels chosen for future-strong-EU-capital setting fit over London's legacy cultural weight.
**Final 11:** Beijing, Brussels, Cairo, Delhi, Istanbul, Lagos, Moscow, New York, São Paulo, Singapore, Tokyo.
**Generator note:** sol_import.py has no `--top-n` city filter — it uses the full earth_features.json
list. If Sol is regenerated, earth_features.json should be trimmed to the 11 kept cities, or a
filter added in sol_import.py. Filed as finding in #853.
@@ -1,5 +1,6 @@
{
"GJ0d": {
"_city_selection_note": "11 cultural touchstones, one per major historical/cultural cluster. Criterion: would a player setting a bookmark to 'Earth' recognize this city? Full 46-city reference list is in git history (trimmed Sprint 36 #849). PR #133 review rebalance: Sydney → Lagos (African representation); London → Brussels (future EU capital fit). To adjust: edit this array and re-run sol_import.py, then generate_atlas.py --body GJ0d.",
"oceans": [
{"name": "Pacific Ocean", "center": [128, 440]},
{"name": "Atlantic Ocean", "center": [128, 170]},
@@ -33,62 +34,22 @@
{"name": "Murray", "mouth": [170, 417]}
],
"cities": [
{"name": "London", "center": [79, 260], "population": 9000000, "region": "europe"},
{"name": "Istanbul", "center": [83, 279], "population": 15000000, "region": "europe"},
{"name": "Moscow", "center": [72, 294], "population": 12700000, "region": "europe"},
{"name": "Paris", "center": [80, 261], "population": 11000000, "region": "europe"},
{"name": "Berlin", "center": [77, 269], "population": 3700000, "region": "europe"},
{"name": "Brussels", "center": [80, 266], "population": 2100000, "region": "europe"},
{"name": "Istanbul", "center": [83, 279], "population": 15000000, "region": "europe"},
{"name": "Moscow", "center": [72, 294], "population": 12700000, "region": "europe"},
{"name": "Mexico City", "center": [107, 101], "population": 21800000, "region": "north_america"},
{"name": "New York", "center": [87, 130], "population": 20100000, "region": "north_america"},
{"name": "Los Angeles", "center": [93, 95], "population": 13200000, "region": "north_america"},
{"name": "Toronto", "center": [84, 123], "population": 6200000, "region": "north_america"},
{"name": "Chicago", "center": [85, 115], "population": 9500000, "region": "north_america"},
{"name": "New York", "center": [87, 130], "population": 20100000, "region": "north_america"},
{"name": "São Paulo", "center": [143, 164], "population": 22400000, "region": "south_america"},
{"name": "Lima", "center": [133, 131], "population": 10700000, "region": "south_america"},
{"name": "Bogotá", "center": [121, 135], "population": 11300000, "region": "south_america"},
{"name": "Rio de Janeiro", "center": [142, 168], "population": 13500000, "region": "south_america"},
{"name": "Buenos Aires", "center": [151, 153], "population": 15200000, "region": "south_america"},
{"name": "São Paulo", "center": [143, 164], "population": 22400000, "region": "south_america"},
{"name": "Lagos", "center": [120, 262], "population": 15400000, "region": "africa"},
{"name": "Kinshasa", "center": [124, 270], "population": 15600000, "region": "africa"},
{"name": "Cairo", "center": [97, 286], "population": 21300000, "region": "africa"},
{"name": "Johannesburg", "center": [156, 279], "population": 6000000, "region": "africa"},
{"name": "Nairobi", "center": [128, 293], "population": 5100000, "region": "africa"},
{"name": "Cairo", "center": [97, 286], "population": 21300000, "region": "africa"},
{"name": "Tehran", "center": [92, 308], "population": 9000000, "region": "west_asia"},
{"name": "Baghdad", "center": [94, 303], "population": 8100000, "region": "west_asia"},
{"name": "Riyadh", "center": [103, 304], "population": 7700000, "region": "west_asia"},
{"name": "Ankara", "center": [87, 284], "population": 5700000, "region": "west_asia"},
{"name": "Karachi", "center": [103, 327], "population": 16500000, "region": "west_asia"},
{"name": "Tokyo", "center": [92, 400], "population": 37400000, "region": "east_asia"},
{"name": "Delhi", "center": [99, 339], "population": 32900000, "region": "east_asia"},
{"name": "Beijing", "center": [87, 383], "population": 21500000, "region": "east_asia"},
{"name": "Tokyo", "center": [92, 400], "population": 37400000, "region": "east_asia"},
{"name": "Delhi", "center": [99, 339], "population": 32900000, "region": "east_asia"},
{"name": "Shanghai", "center": [97, 387], "population": 28500000, "region": "east_asia"},
{"name": "Beijing", "center": [87, 383], "population": 21500000, "region": "east_asia"},
{"name": "Mumbai", "center": [107, 333], "population": 21700000, "region": "east_asia"},
{"name": "Jakarta", "center": [120, 374], "population": 34500000, "region": "fill"},
{"name": "Dhaka", "center": [103, 351], "population": 23000000, "region": "fill"},
{"name": "Manila", "center": [109, 388], "population": 14400000, "region": "fill"},
{"name": "Bangkok", "center": [109, 370], "population": 11000000, "region": "fill"},
{"name": "Seoul", "center": [90, 393], "population": 9800000, "region": "fill"},
{"name": "Osaka", "center": [93, 398], "population": 19300000, "region": "fill"},
{"name": "Chongqing", "center": [97, 375], "population": 17000000, "region": "fill"},
{"name": "Kolkata", "center": [103, 349], "population": 15100000, "region": "fill"},
{"name": "Lahore", "center": [97, 336], "population": 14000000, "region": "fill"},
{"name": "Shenzhen", "center": [104, 382], "population": 13400000, "region": "fill"},
{"name": "Bangalore", "center": [111, 339], "population": 13200000, "region": "fill"},
{"name": "Ho Chi Minh City", "center": [113, 374], "population": 9300000, "region": "fill"},
{"name": "Luanda", "center": [132, 268], "population": 9000000, "region": "fill"},
{"name": "Addis Ababa", "center": [119, 292], "population": 5500000, "region": "fill"},
{"name": "Santiago", "center": [147, 137], "population": 7000000, "region": "fill"},
{"name": "Taipei", "center": [103, 388], "population": 7000000, "region": "fill"},
{"name": "Hong Kong", "center": [104, 382], "population": 7500000, "region": "fill"},
{"name": "Singapore", "center": [119, 372], "population": 5900000, "region": "fill"},
{"name": "Sydney", "center": [161, 421], "population": 5300000, "region": "fill"},
{"name": "Casablanca", "center": [93, 249], "population": 3800000, "region": "fill"}
{"name": "Singapore", "center": [119, 372], "population": 5900000, "region": "southeast_asia"},
{"name": "Lagos", "center": [119, 263], "population": 15000000, "region": "africa"}
]
}
}
+39 -7
View File
@@ -4,7 +4,12 @@ sol_name_fixes.py — Name previously-unnamed Sol body auto-detected features.
Targets features with null names: Earth oceans/rivers, Luna/Mars/Europa mountain ranges.
All names are real-world geographic names for Sol bodies.
Usage:
python3 sol_name_fixes.py # apply all fixes
python3 sol_name_fixes.py --dry-run # print planned changes without writing
"""
import argparse
import json
from pathlib import Path
@@ -44,7 +49,6 @@ FIXES = {
"range_579": "Haemus Montes", # 33 cells — south of Mare Serenitatis
"range_231": "Gruithuisen Domes", # 25 cells — volcanic domes
"range_580": "Mons La Hire", # 25 cells — volcanic dome, Mare Imbrium
"range_606": "Montes Riphaeus", # fallback ID
"range_570": "Montes Riphaeus", # 24 cells — Oceanus Procellarum ridge
"range_596": "Montes Secchi", # 24 cells — east of Mare Fecunditatis
"range_604": "Montes Spitzbergen", # 24 cells — isolated massif
@@ -79,7 +83,22 @@ SECTION_MAP = {
}
def apply_sol_fixes():
def _check_dedup(fixes: dict) -> None:
"""Raise if any name is assigned to more than one feature ID within a body."""
for body_id, sections in fixes.items():
for section, id_map in sections.items():
seen: dict[str, str] = {}
for fid, name in id_map.items():
if name in seen:
raise ValueError(
f"Duplicate name {name!r} in {body_id}/{section}: "
f"{seen[name]} and {fid} both assigned"
)
seen[name] = fid
def apply_sol_fixes(dry_run: bool = False) -> None:
_check_dedup(FIXES)
for body_id, body_fixes in FIXES.items():
path = WIKI / body_id / "markers.json"
if not path.exists():
@@ -99,17 +118,30 @@ def apply_sol_fixes():
new = id_map[fid]
if old != new:
print(f" [{body_id}/{section}] {fid}: {old!r} → {new!r}")
feature["name"] = new
if not dry_run:
feature["name"] = new
changed = True
if changed:
with open(path, "w") as f:
json.dump(markers, f, indent=2)
print(f" Written: {path}")
if dry_run:
print(f" (dry-run) Would write: {path}")
else:
with open(path, "w") as f:
json.dump(markers, f, indent=2)
print(f" Written: {path}")
else:
print(f" No changes for {body_id}")
print()
if __name__ == "__main__":
apply_sol_fixes()
parser = argparse.ArgumentParser(
description="Name previously-unnamed Sol body auto-detected features."
)
parser.add_argument(
"--dry-run",
action="store_true",
help="print planned changes without writing any files",
)
args = parser.parse_args()
apply_sol_fixes(dry_run=args.dry_run)