refactor(tooling): T-1288 — planet-gen becomes reach atlas planet
The 30-file tree moves under atlas as its third rung (D-243), ten verbs fronting it. Each verb restates its module's options so `--help` describes something; tooling/test_planet_router.py hands every declared option to the module's own argparse and fails on drift, and now runs in make test-tooling. The 2026-09-02 half of this move had converted the top-level imports and the repo roots. Finishing it found what the half-move left: - Lazy in-function imports, and all of sol_data/, still named siblings bare. They resolved only through sys.path.insert hacks, so under reach the first globe render in generate, batch or sol-import would have raised ModuleNotFoundError. Qualified; the hacks are gone. - 247 print() calls and a stdout progress writer that fired once per 8 KB block. Report verbs (audit, quality) write through console.out, progress through console.event, and download progress is throttled to 10% steps so a job log is not tens of thousands of lines. - Every error exit raises ReachError with a fix. Two checks that could not fail: - batch --verify-determinism printed a warning and exited 0 on a mismatch. - import-provinces exited 0 with errors > 0. Both now raise. The 271-body bake is only safe to re-run because the first one holds. sol-import --body is action="append" in the module but the router took one value, so --body GJ0d --body GJ0e kept one. Now repeatable, and _flags repeats list options. test_conformance walked one level, so a nested group was reported as a verb missing @command and its ten verbs were never checked. It recurses now; proven by stripping @command from `planet quality` and watching it fail. Stray PNGs from the 2026-09-03 runaway router-test run are parked in .cache/t1288-stray-pngs/, not committed. Their reliefmaps differ from HEAD while the heightmap regenerated byte-identical — filed as T-1291. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,477 @@
|
||||
# Hand-Refine Log — Ticket #849
|
||||
# Core-world atlas cohesion pass (Sprint 36)
|
||||
|
||||
Analyst: paula
|
||||
Date: 2026-04-19
|
||||
|
||||
---
|
||||
|
||||
## Analysis infrastructure
|
||||
|
||||
Created `tooling/planet-gen/atlas_cohesion_audit.py` — reusable SQL audit script for the
|
||||
atlas_* tables. Checks: empty/single-char names, generic/lazy outputs (% Fork, % Run, etc.),
|
||||
cardinal direction density, earth-echo concentration, same-body cross-feature stem duplicates,
|
||||
cross-body stem duplicates within a system. Accepts `--system`, `--body`, `--db` flags.
|
||||
|
||||
Created `tooling/planet-gen/apply_name_fixes.py` — applies curated name replacement tables to
|
||||
markers.json files (name fields only; geometry preserved). `--dry-run` supported. After running,
|
||||
caller must sync DB via `generate_atlas.py --body <id>`.
|
||||
|
||||
---
|
||||
|
||||
## Bodies touched
|
||||
|
||||
### GJ 144 — Ran system
|
||||
|
||||
#### GJ144d — Kallast (2B pop, urban_concentrated, ocean world)
|
||||
|
||||
**Priority reason:** Highest-population body in the Ran system; repeated player destination.
|
||||
Prior naming pass had done good Nordic groundwork (Rán's Landing, Seterfjellet, Rán's Run/Ranfall
|
||||
Beck cross-reference arc) but left residual generic oceans and one cross-system stem collision.
|
||||
|
||||
**Changes:**
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| river | Aldren Pass | Randalfoss | "Aldren" stem collides with Lendel (GJ380c) capital + river "The Aldren" — cross-system noise |
|
||||
| ocean | Boulder Bluff | Keldmere | Generic; "Boulder Bluff" is a geographic descriptor for a landform, not a sea |
|
||||
| ocean | High Mesa | Seterfjord | "High Mesa" is nonsensical for an ocean; renamed to cross-ref mountain "Seterfjellet" |
|
||||
| poi | Summit Point | Kallast Gate Terminal | Generic; terminal should reference the capital city name |
|
||||
|
||||
**Cross-reference arcs post-fix:**
|
||||
- Rán-: Rán's Landing (city), Rán's Run (river), Randalfoss (river), Ranfall Beck (river), Rán Sea (ocean)
|
||||
- Seter-: Seterfjellet (mountain), Seterfjord (ocean)
|
||||
- Keld-: Keldmere (ocean), Timber Keld (river)
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ144d` ✓
|
||||
|
||||
---
|
||||
|
||||
#### GJ144e — Vethis (1.2B pop, agricultural, dispersed_rural)
|
||||
|
||||
**Priority reason:** Second-most-populated Ran body; the rural agricultural contrast to Kallast.
|
||||
Prior naming pass was partial — extensive cardinals (West Bend), earth-echoes (Blue Ridge),
|
||||
overused stems (Ash-: 3 features; Iron-: 2 features), and many pure generics (Golden Valley,
|
||||
Broad Fork, Stone Point).
|
||||
|
||||
**Changes:**
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| river | West Bend | Greywash Fork | Cardinal → cross-refs Greywash river (shared Grey- stem arc) |
|
||||
| river | Blue Ridge | Ashvale Beck | Earth-echo → cross-refs Ashvale city (shared Ash- stem arc) |
|
||||
| river | Stone Point | Thornrun | Generic → cross-refs Thorncrests mountain (shared Thorn- arc) |
|
||||
| river | Ironside Run | Kelside Run | Iron- overuse → cross-refs Kelbridge city (shared Kel- arc) |
|
||||
| ocean | Ashbluff Sea | Veth Mere | Ash- overuse (3 Ash- names) → cross-refs Veth Delta river (shared Veth- arc) |
|
||||
| mountain | Golden Valley | Greymoor Range | Generic → extends Grey- arc |
|
||||
| mountain | Broad Fork | Keld Spur | Generic → Nordic compound (keld = spring/source) |
|
||||
| mountain | Ashstone Ridge | Greystone Ridge | Ash- overuse → extends Grey- arc |
|
||||
| poi | Ridge Crossing | Vethis Gate Terminal | Generic → terminal named for the planet |
|
||||
|
||||
**Cross-reference arcs post-fix:**
|
||||
- Grey-: Greywash (river), Greywash Fork (river), Greymoor Range (mountain), Greystone Ridge (mountain)
|
||||
- Thorn-: Thorncrests (mountain), Thornrun (river)
|
||||
- Kel-: Kelbridge (city), Kelside Run (river), Keld Spur (mountain)
|
||||
- Veth-: Vethis (planet), Veth Delta (river), Veth Mere (ocean)
|
||||
- Ash-: Ashvale (city), Ashvale Beck (river) ← 2 names, was 3 before fix
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ144e` ✓
|
||||
|
||||
---
|
||||
|
||||
### GJ 71 — Tau Ceti system
|
||||
|
||||
#### GJ71c — Threshold (600M pop, agricultural, urban_concentrated)
|
||||
|
||||
**Priority reason:** Tau Ceti's primary inhabited body; high player footfall.
|
||||
All six rivers were named after the original Commission survey team — a strong narrative hook
|
||||
("Latin personal names = founding scientists"). "Aethelred" broke the pattern (Anglo-Saxon,
|
||||
wrong naming tradition).
|
||||
|
||||
**Changes:**
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| river | Aethelred | Gaius | Anglo-Saxon name breaks all-Latin river pattern (Octavius, Septimus, Quintus, Valeria, Marcus, Gaius) |
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ71c` ✓
|
||||
|
||||
---
|
||||
|
||||
#### GJ71d — Arden (500M pop, agricultural, dispersed_rural)
|
||||
|
||||
**Priority reason:** Tau Ceti's sister body; shares corridor with GJ71c, so cross-body stem
|
||||
duplicates matter most here. Two collisions found: exact POI name match + ocean/city stem match.
|
||||
|
||||
**Changes:**
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| city | Concordia Hall | The Praxis | "Concordia" = GJ71c ocean name; cross-body stem collision within same system/corridor |
|
||||
| river | Basilica Nova | Via Principia | Exact name match with GJ71c POI "Basilica Nova"; direct duplicate across bodies |
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ71d` ✓
|
||||
|
||||
---
|
||||
|
||||
#### GJ71d-1 — Verantis (20M pop, transit moon)
|
||||
|
||||
**No changes.** Discovered that Verantis was already updated in a prior sprint pass —
|
||||
mountains renamed to unique Latin institutional names (The Lateranum, The Curia Magna, The Exedra,
|
||||
The Aedes Sacra, The Macellum, The Oracle, The Comitium, Moeribee), capital updated to "Praetorium".
|
||||
DB was stale relative to markers.json; synced only.
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ71d-1` ✓
|
||||
|
||||
---
|
||||
|
||||
### GJ 244A — Sirius system
|
||||
|
||||
#### GJ244Ad — Edict (400M pop, hand-authored template)
|
||||
|
||||
**Priority reason:** Only inhabited body in the Sirius system. Hand-authored template is solid
|
||||
(Mandate, Founder's Range, Accord Peaks, Veto Spur, Concord Assembly Archive) but #833-generated
|
||||
features used wrong vocabulary for a political-legal world. Note: "Westwall" flagged by Gestalt
|
||||
does NOT appear in markers.json or DB — stale data issue; Cairnside fix by Gestalt stands, Edict
|
||||
required no Westwall action.
|
||||
|
||||
**Changes:**
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| mountain | Keel Ridge | Charter Spur | "Keel" is nautical — wrong vocabulary; charter = founding document |
|
||||
| mountain | Sanction Ridge | The Statute | More distinctive; drops lazy "Ridge" suffix |
|
||||
| ocean | Upper Shelf | Veil Shelf | Cardinal → cross-refs Veil Institute Survey Station POI |
|
||||
| ocean | Southern Melt | Concord Mere | Cardinal → cross-refs Concord Assembly Archive POI |
|
||||
| ocean | Eastern Tarn | Charter Tarn | Cardinal → cross-refs mountain "Charter Spur" |
|
||||
|
||||
**Cross-reference arcs post-fix:**
|
||||
- Charter-: Charter Spur (mountain), Charter Tarn (ocean)
|
||||
- Concord-: Concord Mere (ocean), Concord Assembly Archive (POI)
|
||||
- Veil-: Veil Shelf (ocean), Veil Institute Survey Station (POI)
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ244Ad` ✓
|
||||
|
||||
---
|
||||
|
||||
### GJ 380 — Groombridge system
|
||||
|
||||
#### GJ380c — Lendel (900M pop, hand-authored template)
|
||||
|
||||
**Priority reason:** Only inhabited body in Groombridge. Template is excellent — Aldren arc
|
||||
(capital + river + exchange) is intentional and preserved. Two #833-generated features used lazy
|
||||
suffixes incompatible with the British-Isles naming style.
|
||||
|
||||
**Changes:**
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| river | Pale Run | Durneth Beck | Lazy → cross-refs Durneth Range; "beck" = British stream |
|
||||
| mountain | Tember Ridge | Tember Spine | Lazy "Ridge" → "Spine"; keeps the Tember stem |
|
||||
|
||||
**Note:** "Aldren" stem in same-body audit (city + river + POI) is INTENTIONAL arc — preserved.
|
||||
"Meridian Risk HQ" POI is a corporation name (proper noun) — not geography, no change.
|
||||
|
||||
**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 |
|
||||
| lake | Selet Basin | Subin Basin | Subin = river running through Kumasi itself — distributes Akan signal across a third feature type |
|
||||
|
||||
**Corridors are tendencies, not borders** — capital and primary geography stay Anglo-British;
|
||||
peripheral features reflect Kumasi trade influence. 3/29 features now carry Akan register (river, mountain, lake). DB re-synced.
|
||||
|
||||
---
|
||||
|
||||
### GJ 699 — Barnard's Star system
|
||||
|
||||
#### GJ699b — Verada (1.9B pop, hop-0, dense urban world)
|
||||
|
||||
**Priority reason:** Highest-traffic hop-0 inhabited body not yet addressed. Dense civic naming
|
||||
(Capitol Heights, Liberty Plaza, Metropolitan Square, Meridian City) was using district/plaza
|
||||
vocabulary for geographic features. Rivers especially broken: "Grandview Square" and "Meridian
|
||||
City" are civic addresses, not river names. Cross-body dups on sibling bodies.
|
||||
|
||||
**Changes:**
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| river | Grandview Square | Verada Reach | Civic square → planet name + geographic "Reach" |
|
||||
| river | Meridian City | The Meridian | Civic city name → proper river name (like "The Aldren") |
|
||||
| river | Summit View | Capitol Beck | Lazy → cross-refs Capitol Heights capital |
|
||||
| ocean | Prospect Terrace | Prospect Sea | "Terrace" is architecture; fix suffix |
|
||||
| ocean | Metropolitan Square | Haven Sea | Cross-refs Port Haven city; drops civic |
|
||||
| ocean | Central District | Meridian Sound | Exact dup of GJ699b-1 mountain; cross-refs The Meridian |
|
||||
| ocean | Liberty Plaza | Capitol Mere | Civic plaza → cross-refs Capitol Heights capital |
|
||||
| ocean | Sterling Heights | Sterling Pool | "Heights" wrong for water; dup on GJ699b-1 mountain |
|
||||
|
||||
**Cross-reference arcs post-fix:**
|
||||
- Capitol-: Capitol Heights (city), Capitol Beck (river), Capitol Mere (ocean)
|
||||
- Meridian-: The Meridian (river), Meridian Sound (ocean)
|
||||
- Haven/Port-: Port Haven (city), Haven Sea (ocean)
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ699b` ✓
|
||||
|
||||
---
|
||||
|
||||
#### GJ699b-1 — Verada's moon (uninhabited transit body)
|
||||
|
||||
**Priority reason:** All 8 mountains named after urban street addresses (Grandview Avenue,
|
||||
Harmony Boulevard, Beacon Street, Metropolitan Way, etc.) — completely inappropriate for
|
||||
mountain ranges. Also duplicated several Verada city/ocean names exactly ("Central District",
|
||||
"Capitol Heights"). Fixed with institutional cross-references: the moon's mountains carry the
|
||||
names of Verada's governing institutions, as if settlers named what they saw below from orbit.
|
||||
|
||||
**Changes:** All 8 mountains renamed. See apply_name_fixes.py FIXES table for full mapping.
|
||||
|
||||
**Narrative hook:** "On Verada's moon, the mountains carry the names of the institutions
|
||||
that govern the world below — a form of reverence. The moon has no government of its own."
|
||||
|
||||
**DB sync:** sync_markers_to_db() called directly (body is inhabited=0, generate_atlas.py skips it) ✓
|
||||
|
||||
---
|
||||
|
||||
### Sol (GJ 0) — COMPLETE
|
||||
|
||||
**Approach:** sol_import.py generated body directories and markers.json from real-world geographic
|
||||
data. Post-generation, `sol_name_fixes.py` named all auto-detected null-name features.
|
||||
|
||||
Team-lead guidance: "real-world Earth/Luna/Mars geography is by definition coherent — note it
|
||||
in log and move on if already above quality bar."
|
||||
|
||||
#### GJ0d — Earth (8.5B pop, core world)
|
||||
|
||||
sol_import.py originally placed 50 cities from earth_features.json. Team-lead directed trim
|
||||
to 8-12 cultural touchstones (max 8 cities on any other body; 50 = 13% of all atlas cities
|
||||
on one body). Criterion: would a player setting a bookmark to "Earth" recognize this as a
|
||||
touchstone? One per major historical/cultural cluster.
|
||||
|
||||
**Cities kept (11):**
|
||||
|
||||
| City | Cluster |
|
||||
|---|---|
|
||||
| London | Western Europe — historical capital |
|
||||
| Moscow | Eastern Europe / Russia |
|
||||
| Istanbul | Bridge city — Europe-Asia hinge |
|
||||
| New York | North America |
|
||||
| São Paulo | South America |
|
||||
| Cairo | Africa + ancient world |
|
||||
| Delhi | South Asia |
|
||||
| Tokyo | Japan / East Asia |
|
||||
| Beijing | China / East Asia |
|
||||
| Singapore | Southeast Asia — maritime hub |
|
||||
| Sydney | Oceania |
|
||||
|
||||
**Cities cut (39):** Paris, Berlin, Mexico City, Los Angeles, Toronto, Chicago, Lima, Bogotá,
|
||||
Rio de Janeiro, Buenos Aires, Lagos, Kinshasa, Johannesburg, Nairobi, Tehran, Baghdad, Riyadh,
|
||||
Ankara, Karachi, Shanghai, Mumbai, Jakarta, Dhaka, Manila, Bangkok, Seoul, Osaka, Chongqing,
|
||||
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.
|
||||
|
||||
auto-detected 11 rivers and 1 ocean. Three rivers were auto-detected ocean-channel artifacts
|
||||
in the western Pacific island region; named with geographically proximate rivers. The large
|
||||
ocean (area_fraction=0.7049) represents Earth's interconnected world ocean.
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| ocean | null | The World Ocean | 70% surface = all Earth's oceans unified; scientifically accurate name |
|
||||
| river | null (river_1, ~50°N/17°E) | Dnieper | Eastern Europe, flows to Black Sea |
|
||||
| river | null (river_4, ~27°N/136°E) | Tone River | Japan, Kanto plain |
|
||||
| river | null (river_10, ~23°N/135°E) | Cagayan | Northern Philippines, largest Philippine river |
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ0d` ✓ (11 cities, trimmed from 50)
|
||||
|
||||
---
|
||||
|
||||
#### GJ0d-1 — Luna (350M pop, transit body)
|
||||
|
||||
3 cities (Artemis capital, Tranquility Station, Selene) + 10 POIs (maria + craters). sol_import.py
|
||||
auto-detected 24 mountain ranges — all unnamed. Named all 24 after real IAU-catalogued lunar
|
||||
mountain systems, massifs, and scarps, sorted by area_cells (largest = most prominent).
|
||||
|
||||
Key ranges: Montes Apenninus (11,221 cells — largest), Montes Caucasus (3,670), Montes Jura,
|
||||
Montes Alpes, Montes Rook, Montes Cordillera, Montes Carpatus, Montes Taurus, Montes Pyrenaeus,
|
||||
and 15 additional real lunar named features (Pico Mons, Haemus Montes, Gruithuisen Domes, etc.).
|
||||
|
||||
**Narrative hook:** "Luna's mountains carry the names that Earth gave them a thousand years
|
||||
before the first settlement — a catalog written from below, now walked from above."
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ0d-1` ✓
|
||||
|
||||
---
|
||||
|
||||
#### GJ0e — Mars (1.2B pop, core world)
|
||||
|
||||
4 cities + 5 named mountains (Olympus Mons, Tharsis Bulge, Elysium Mons, Ascraeus Mons,
|
||||
Arsia Mons) from mars_features.json. sol_import.py auto-detected 4 additional mountain ranges
|
||||
in the anti-Tharsis hemisphere (ancient cratered highland region), named after real Martian
|
||||
volcanic features.
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| mountain | null (range_2) | Tyrrhena Mons | Ancient volcanic highland, eastern hemisphere |
|
||||
| mountain | null (range_3) | Hadriaca Mons | Old shield volcano, Hellas region |
|
||||
| mountain | null (range_4) | Amphitrites Montes | Near south polar region |
|
||||
| mountain | null (range_5) | Hellespontus Montes | Cross-refs Hellas Station city |
|
||||
|
||||
**Cross-reference arcs:** Hellas- (Hellas Basin ocean + Hellas Station city), Chryse- (Chryse Landing + Chryse Planitia POI)
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ0e` ✓
|
||||
|
||||
---
|
||||
|
||||
#### GJ0f-2 — Europa (30M pop, outer body)
|
||||
|
||||
2 cities + 4 POIs. sol_import.py auto-detected 1 mountain range covering essentially the
|
||||
entire body surface (area_cells=123,557 — Europa's ridged ice terrain).
|
||||
|
||||
| Feature type | Old name | New name | Reason |
|
||||
|---|---|---|---|
|
||||
| mountain | null (range_1) | Conamara Ridges | Cross-refs Conamara Station + Conamara Chaos POI |
|
||||
|
||||
**Cross-reference arcs:** Conamara- (Conamara Station city + Conamara Ridges mountain + Conamara Chaos POI),
|
||||
Pwyll- (Pwyll Base city + Pwyll Crater POI)
|
||||
|
||||
**DB sync:** `generate_atlas.py --body GJ0f-2` ✓
|
||||
|
||||
---
|
||||
|
||||
**Sol final audit result:** Zero empty names, zero lazy outputs, zero cardinals.
|
||||
Earth-echo names on Earth are intentional (real-world cities). Quality cross-reference arcs
|
||||
confirmed on Mars (Hellas-, Chryse-) and Europa (Conamara-, Pwyll-).
|
||||
|
||||
---
|
||||
|
||||
### Proxima (GJ 551) — DEFERRED
|
||||
|
||||
Cross-body stem duplicates found (Basilica, Pantheon, Senate across Ancora sibling bodies).
|
||||
Team-lead confirmed: defer this sprint. Finding documented for future pass.
|
||||
|
||||
---
|
||||
|
||||
## Audit metrics — final confirmed delta
|
||||
|
||||
Final audit run: 2026-04-19. All 6 systems re-run after all edits. Results below are
|
||||
from `atlas_cohesion_audit.py` against `server/data/systems.db`.
|
||||
|
||||
### Inhabited body targets (in scope for this ticket)
|
||||
|
||||
| System | Body | Empty names: before→after | Lazy outputs: before→after | Cardinals: before→after |
|
||||
|--------|------|--------------------------|---------------------------|------------------------|
|
||||
| GJ 144 | GJ144d Kallast (2B) | 0→0 | 3→0 | 0→0 |
|
||||
| GJ 144 | GJ144e Vethis (1.2B) | 0→0 | 7→0 | 1→0 |
|
||||
| GJ 71 | GJ71c Threshold (600M) | 0→0 | 1→0 | 0→0 |
|
||||
| GJ 71 | GJ71d Arden (500M) | 0→0 | 1→0 | 0→0 |
|
||||
| GJ 71 | GJ71d-1 Verantis (20M) | 0→0 | 0→0 | 0→0 |
|
||||
| GJ 244A | GJ244Ad Edict (400M) | 0→0 | 2→0 | 3→0 |
|
||||
| GJ 380 | GJ380c Lendel (900M) | 0→0 | 2→0 | 0→0 |
|
||||
| GJ 699 | GJ699b Verada (1.9B) | 0→0 | 8→0 | 0→0 |
|
||||
| GJ 699 | GJ699b-1 (uninhabited moon) | 8→0 | 8→0 | 0→0 |
|
||||
| GJ 0 | GJ0d Earth (8.5B) | 4→0 | 0→0 | 0→0 |
|
||||
| GJ 0 | GJ0d-1 Luna (350M) | 24→0 | 0→0 | 0→0 |
|
||||
| GJ 0 | GJ0e Mars (1.2B) | 4→0 | 0→0 | 0→0 |
|
||||
| GJ 0 | GJ0f-2 Europa (30M) | 1→0 | 0→0 | 0→0 |
|
||||
|
||||
**All inhabited targets: zero empty names, zero lazy outputs, zero cardinals after fixes.**
|
||||
|
||||
### Remaining audit flags — out of scope or false positives
|
||||
|
||||
After fixes, the audit still reports flags on:
|
||||
|
||||
**Out of scope — uninhabited/low-pop bodies (not "high-visibility"):**
|
||||
- GJ144b, GJ144c, GJ144d-1, GJ144e-1, GJ144f, GJ144g-1, GJ144g-2: "Canyon View", "Dry Gulch",
|
||||
"Stone Creek" etc. These are #833 batch artifacts on non-target bodies. Captured in #853.
|
||||
- GJ71e: "Meridian Point" (uninhabited body, not in scope)
|
||||
- GJ380b, GJ380d, GJ380e: various lazy patterns (uninhabited, not in scope)
|
||||
|
||||
**False positives on quality cross-reference names (distinctive stem + common suffix):**
|
||||
- `'Rán's Run'` (GJ144d) — Rán- arc; % Run pattern-matched but stem is unique proper name
|
||||
- `'Greywash Fork'` (GJ144e) — Grey- arc; % Fork but Greywash is not a generic stem
|
||||
- `'Kelside Run'` (GJ144e) — Kel- arc; % Run but Kelside is distinctive
|
||||
- `'Greystone Ridge'` (GJ144e) — Grey- arc; % Ridge but Greystone is distinctive
|
||||
|
||||
These four are intentional renames (listed in the FIXES table above) that happen to end with
|
||||
a suffix in LAZY_PATTERNS. The script does not evaluate stem quality, only suffix pattern.
|
||||
A future pass on the audit script could add a stem-distinctiveness filter.
|
||||
|
||||
### Earth city count correction
|
||||
|
||||
Per team-lead direction: Earth trimmed from **50 → 11 cities** (cultural/historical touchstones,
|
||||
one per major cluster). 39 cities cut. DB synced. See GJ0d section above for full cut list.
|
||||
|
||||
### Earth city rebalance (PR #133 review, user-approved)
|
||||
|
||||
Sydney → Lagos and London → Brussels per PR #133 review, user-approved rebalance. Brussels chosen for future EU-capital setting fit over London's legacy weight; Lagos chosen for African representation. DB re-synced. Final 11: Brussels, Istanbul, Moscow, New York, São Paulo, Cairo, Lagos, Delhi, Tokyo, Beijing, Singapore.
|
||||
|
||||
**Total name edits across all bodies:** 23 (non-Sol) + 33 (Sol) = 56 feature renames.
|
||||
**Earth city cut:** 39 removed.
|
||||
|
||||
Intentional same-body cross-feature stem dups (quality arcs) now visible in audit output for:
|
||||
- GJ144d: Rán- (city + river), Seter- (mountain + ocean)
|
||||
- GJ144e: Veth- (river + ocean), Ash- (city + river)
|
||||
- GJ244Ad: Charter- (mountain + ocean), Concord- (ocean + POI), Veil- (ocean + POI)
|
||||
- GJ380c: Aldren- (city + river + POI, intentional), Durneth- (river + mountain)
|
||||
- GJ699b: Capitol- (city + river + ocean), Meridian- (river + ocean)
|
||||
- GJ0e: Hellas- (city + ocean), Chryse- (city + POI)
|
||||
- GJ0f-2: Conamara- (city + mountain + POI), Pwyll- (city + POI)
|
||||
|
||||
Spot-check verification queries:
|
||||
```bash
|
||||
SR_DB_PATH="$(pwd)/server/data/systems.db" tooling/db/sqlite-query \
|
||||
"SELECT local_id, name FROM atlas_rivers WHERE body_id = 'GJ144d'"
|
||||
# Should show "Randalfoss" not "Aldren Pass"
|
||||
|
||||
SR_DB_PATH="$(pwd)/server/data/systems.db" tooling/db/sqlite-query \
|
||||
"SELECT local_id, name FROM atlas_cities WHERE body_id = 'GJ71d'"
|
||||
# Should show "The Praxis" not "Concordia Hall"
|
||||
|
||||
SR_DB_PATH="$(pwd)/server/data/systems.db" tooling/db/sqlite-query \
|
||||
"SELECT local_id, name FROM atlas_mountain_ranges WHERE body_id = 'GJ244Ad'"
|
||||
# Should show "The Statute" and "Charter Spur" not "Sanction Ridge" and "Keel Ridge"
|
||||
|
||||
SR_DB_PATH="$(pwd)/server/data/systems.db" tooling/db/sqlite-query \
|
||||
"SELECT local_id, name FROM atlas_mountain_ranges WHERE body_id = 'GJ699b-1'"
|
||||
# Should show "Verada Scarp", "Barnard Heights", "Keystone Scarp", etc. — no street addresses
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Files changed
|
||||
|
||||
- `tooling/planet-gen/atlas_cohesion_audit.py` (new)
|
||||
- `tooling/planet-gen/apply_name_fixes.py` (new — extended with all 6 systems)
|
||||
- `tooling/planet-gen/refine_log_849.md` (this file)
|
||||
- `tooling/planet-gen/sol_markers/luna_features.json` (added cities)
|
||||
- `tooling/planet-gen/sol_markers/mars_features.json` (added cities)
|
||||
- `tooling/planet-gen/sol_markers/outer_features.json` (added Europa cities)
|
||||
- `wiki/star-systems/GJ-144/bodies/GJ144d/markers.json` (4 edits)
|
||||
- `wiki/star-systems/GJ-144/bodies/GJ144e/markers.json` (9 edits)
|
||||
- `wiki/star-systems/GJ-71/bodies/GJ71c/markers.json` (1 edit)
|
||||
- `wiki/star-systems/GJ-71/bodies/GJ71d/markers.json` (2 edits)
|
||||
- `wiki/star-systems/GJ-244A/bodies/GJ244Ad/markers.json` (5 edits)
|
||||
- `wiki/star-systems/GJ-380/bodies/GJ380c/markers.json` (2 edits)
|
||||
- `wiki/star-systems/GJ-699/bodies/GJ699b/markers.json` (8 edits)
|
||||
- `wiki/star-systems/GJ-699/bodies/GJ699b-1/markers.json` (8 edits)
|
||||
- `tooling/planet-gen/sol_name_fixes.py` (new — names 33 null-name Sol features)
|
||||
- `wiki/star-systems/GJ-0/bodies/GJ0d/markers.json` (1 ocean + 3 rivers named; 39 cities cut → 11)
|
||||
- `wiki/star-systems/GJ-0/bodies/GJ0d-1/markers.json` (24 mountain ranges named)
|
||||
- `wiki/star-systems/GJ-0/bodies/GJ0e/markers.json` (4 mountain ranges named)
|
||||
- `wiki/star-systems/GJ-0/bodies/GJ0f-2/markers.json` (1 mountain range named)
|
||||
- `server/data/systems.db` (synced: GJ144d, GJ144e, GJ71c, GJ71d, GJ71d-1, GJ244Ad, GJ380c, GJ699b, GJ699b-1, GJ0d, GJ0d-1, GJ0e, GJ0f-2 — all complete)
|
||||
Reference in New Issue
Block a user