content(atlas): sprint 36 — atlas refinement and brand corps #133

Closed
jpmschweitzer wants to merge 0 commits from sprint-36/copy into main
Owner

Summary

Sprint 36 copy team — closes Phase 3 atlas (refinement + brand layer), establishes Phase 4 foundations via the shared infrastructure.

  • #838 — Baseline atlas refine pass across all 273 inhabited bodies. Cross-body city name collisions: 119+ → 0 (Forum Veritas ×10, Jade Harbor ×19, Fort Iron ×10, Eisenstadt ×7, and 20+ smaller clusters eliminated). 80% of roads/rail were unnamed at generator output; all named using city-pair convention.
  • #849 — Core-world atlas cohesion hand-refine across 6 hop 0-1 systems: GJ 144 (Ran), GJ 71 (Tau Ceti), GJ 244A (Sirius), GJ 380 (Groombridge), GJ 699 (Barnard's), GJ 0 (Sol). 56 name edits across 13 inhabited bodies. Sol imported with IAU-accurate lunar mountain names; Earth trimmed from real-world top-50 cities to 11 cultural touchstones. Reusable atlas_cohesion_audit.py + sol_name_fixes.py tooling added.
  • #828 — 124 notable brand corps authored in wiki/economics/corporations/brands.toml across all 8 D-189 categories (terroir / heritage_craft / tech_premium / cultural / service_premium / commodity_branded / design_heritage / platform_catalogue). 248 brand_products entries total. 112 new wiki corp stub pages (minimal frontmatter — full three-layer authoring tracked separately in #861). Brand layer validation V-B01..V-B06 passes. D-189 §5 amended with locked price_tier enum: mass / premium / luxury / flagship / institutional.

Also in this PR: /sprint-start skill lifecycle update (team stays alive through review AND merge, not just approval).

Audit metrics (#849)

System Empty Lazy Cardinals Resolved
GJ 144 Ran 0 → 0 10+ → 0 1 → 0 Aldren cross-system dup
GJ 71 Tau Ceti 0 → 0 2 → 0 0 → 0 Concordia, Basilica Nova
GJ 244A Sirius 0 → 0 2 → 0 3 → 0 Westwall/Cairnside
GJ 380 Groombridge 0 → 0 2 → 0 0 → 0 Lazy #833 suffixes
GJ 699 Barnard's 0 → 0 1 → 0 0 → 0 Civic vocab / street addrs
GJ 0 Sol 33 → 0 0 → 0 0 → 0 Null-name features, IAU lunar

Known deferred issues (tracked, not blocking merge)

  • 186 bodies with empty mountain range names (SEVERE in refinement notes, but pipeline-level — needs generator patch, not per-body hand-fix). Tracked in #853.
  • Cross-body non-city collisions on rivers/oceans on uninhabited bodies (Rio Grande ×23, Steinbruch ×19, Concordia ×3, Basilica Nova ×18). Tracked in #853.
  • 21 raw-commodity/system coverage-gate gaps in existing tier1 corps. Pre-existing, not introduced here. Tracked in #860.
  • 112 corp wiki stubs at minimal frontmatter depth (per reviewer-accepted split protocol). Three-layer narrative authoring tracked in #861.

Follow-up tickets filed

  • #853 — Generator patch: cross-system dedup, empty mountains, suffix monotony, compass-name defaults, cultural-crossmix threading, river navigational vocab, unnamed infrastructure, POI dedup (server team).
  • #860 — Resolve 21 raw-commodity/system coverage-gate gaps in tier1 corps (server team, pre-existing, not in brand layer).
  • #861 — Author 112 brand corp wiki stubs to three-layer narrative depth (copy team, follow-up to #828 review).

Files

333 files changed, +14,055 / -718. Full systematic-issue notes in docs/design/atlas-generator-refinement-notes.md and per-body log in tooling/planet-gen/refine_log_849.md.

Test plan

  • make economy-db builds brand_products table from wiki/economics/corporations/brands.toml (coverage gate still fails on #860 items — pre-existing, not introduced here)
  • Atlas cohesion audit re-run confirms zero empty / lazy / cardinal names on the 13 touched bodies
  • Visual spot-check: open implant atlas app on Sol, Tau Ceti, Sirius, Barnard's — names render, no truncation
  • python3 tooling/planet-gen/generate_atlas.py --body <id> round-trips markers.json ↔ atlas_* tables cleanly

🤖 Generated with Claude Code

## Summary Sprint 36 copy team — closes Phase 3 atlas (refinement + brand layer), establishes Phase 4 foundations via the shared infrastructure. - **#838** — Baseline atlas refine pass across all 273 inhabited bodies. Cross-body city name collisions: 119+ → 0 (Forum Veritas ×10, Jade Harbor ×19, Fort Iron ×10, Eisenstadt ×7, and 20+ smaller clusters eliminated). 80% of roads/rail were unnamed at generator output; all named using city-pair convention. - **#849** — Core-world atlas cohesion hand-refine across 6 hop 0-1 systems: GJ 144 (Ran), GJ 71 (Tau Ceti), GJ 244A (Sirius), GJ 380 (Groombridge), GJ 699 (Barnard's), GJ 0 (Sol). 56 name edits across 13 inhabited bodies. Sol imported with IAU-accurate lunar mountain names; Earth trimmed from real-world top-50 cities to 11 cultural touchstones. Reusable `atlas_cohesion_audit.py` + `sol_name_fixes.py` tooling added. - **#828** — 124 notable brand corps authored in `wiki/economics/corporations/brands.toml` across all 8 D-189 categories (terroir / heritage_craft / tech_premium / cultural / service_premium / commodity_branded / design_heritage / platform_catalogue). **248 brand_products entries** total. 112 new wiki corp stub pages (minimal frontmatter — full three-layer authoring tracked separately in **#861**). Brand layer validation V-B01..V-B06 passes. D-189 §5 amended with locked `price_tier` enum: `mass` / `premium` / `luxury` / `flagship` / `institutional`. Also in this PR: `/sprint-start` skill lifecycle update (team stays alive through review AND merge, not just approval). ## Audit metrics (#849) | System | Empty | Lazy | Cardinals | Resolved | |--------|-------|------|-----------|----------| | GJ 144 Ran | 0 → 0 | 10+ → 0 | 1 → 0 | Aldren cross-system dup | | GJ 71 Tau Ceti | 0 → 0 | 2 → 0 | 0 → 0 | Concordia, Basilica Nova | | GJ 244A Sirius | 0 → 0 | 2 → 0 | 3 → 0 | Westwall/Cairnside | | GJ 380 Groombridge | 0 → 0 | 2 → 0 | 0 → 0 | Lazy #833 suffixes | | GJ 699 Barnard's | 0 → 0 | 1 → 0 | 0 → 0 | Civic vocab / street addrs | | GJ 0 Sol | 33 → 0 | 0 → 0 | 0 → 0 | Null-name features, IAU lunar | ## Known deferred issues (tracked, not blocking merge) - **186 bodies with empty mountain range names** (SEVERE in refinement notes, but pipeline-level — needs generator patch, not per-body hand-fix). Tracked in **#853**. - **Cross-body non-city collisions** on rivers/oceans on uninhabited bodies (Rio Grande ×23, Steinbruch ×19, Concordia ×3, Basilica Nova ×18). Tracked in **#853**. - **21 raw-commodity/system coverage-gate gaps** in existing tier1 corps. Pre-existing, not introduced here. Tracked in **#860**. - **112 corp wiki stubs** at minimal frontmatter depth (per reviewer-accepted split protocol). Three-layer narrative authoring tracked in **#861**. ## Follow-up tickets filed - **#853** — Generator patch: cross-system dedup, empty mountains, suffix monotony, compass-name defaults, cultural-crossmix threading, river navigational vocab, unnamed infrastructure, POI dedup (server team). - **#860** — Resolve 21 raw-commodity/system coverage-gate gaps in tier1 corps (server team, pre-existing, not in brand layer). - **#861** — Author 112 brand corp wiki stubs to three-layer narrative depth (copy team, follow-up to #828 review). ## Files 333 files changed, +14,055 / -718. Full systematic-issue notes in `docs/design/atlas-generator-refinement-notes.md` and per-body log in `tooling/planet-gen/refine_log_849.md`. ## Test plan - [ ] `make economy-db` builds brand_products table from `wiki/economics/corporations/brands.toml` (coverage gate still fails on #860 items — pre-existing, not introduced here) - [ ] Atlas cohesion audit re-run confirms zero empty / lazy / cardinal names on the 13 touched bodies - [ ] Visual spot-check: open implant atlas app on Sol, Tau Ceti, Sirius, Barnard's — names render, no truncation - [ ] `python3 tooling/planet-gen/generate_atlas.py --body <id>` round-trips markers.json ↔ atlas_* tables cleanly 🤖 Generated with [Claude Code](https://claude.com/claude-code)
jpmschweitzer added 11 commits 2026-04-19 14:59:48 +02:00
Adds two reusable scripts for the core-world hand-refine pass:

- atlas_cohesion_audit.py: SQL analysis against atlas_* tables. Reports
  empty names, lazy/generic outputs, cardinal direction density, earth-echo
  concentration, same-body cross-feature stem duplicates, and cross-body
  stem collisions within a system. Supports --system, --body, --db flags.
  Baseline run ranked Ran and Tau Ceti as highest-priority targets.

- apply_name_fixes.py: Applies curated name replacement tables to
  markers.json files (name fields only; geometry preserved). Supports
  --dry-run. After running, caller syncs DB via generate_atlas.py --body.

- refine_log_849.md: Hand-refine log documenting each body touched, the
  rationale per change, cross-reference arcs established, and systems
  flagged as blocked or needing follow-up (Sol, Barnard's Star, Proxima).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
White-glove name pass on the five highest-traffic inhabited bodies in the
Ran (GJ 144) and Tau Ceti (GJ 71) systems. All markers.json edits synced
to atlas_* tables via generate_atlas.py.

GJ144d Kallast (2B pop): 4 fixes — "Aldren Pass" river renamed to
Randalfoss (avoids cross-system stem collision with Lendel's "Aldren");
two generic oceans renamed (Keldmere, Seterfjord — the latter cross-refs
mountain Seterfjellet); POI renamed to "Kallast Gate Terminal".
Established cross-ref arcs: Rán-, Seter-, Keld-.

GJ144e Vethis (1.2B pop): 9 fixes — 4 river renames (1 cardinal, 1
earth-echo, 2 generics), 1 ocean (Ash- overuse → Veth Mere), 3 mountain
renames (2 generics, 1 Ash- overuse). Established arcs: Grey- (4 names),
Thorn- (2), Kel- (3), Veth- (3), Ash- (2, down from 3).

GJ71c Threshold (600M pop): 1 fix — river "Aethelred" (Anglo-Saxon)
replaced with "Gaius" to complete the all-Latin survey-team arc (Octavius,
Septimus, Quintus, Valeria, Marcus, Gaius).

GJ71d Arden (500M pop): 2 fixes — "Concordia Hall" city renamed "The
Praxis" (Concordia = GJ71c ocean, cross-body stem collision); "Basilica
Nova" river renamed "Via Principia" (exact name match with GJ71c POI).

GJ71d-1 Verantis (20M pop): no name changes — mountains already updated
in prior pass (The Lateranum, The Curia Magna, etc.); DB sync only.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Continues the core-world cohesion pass. All markers.json edits synced to
atlas_* tables. apply_name_fixes.py extended with all new fix tables.

GJ244Ad Edict (400M pop): 5 fixes — 2 lazy mountain names replaced with
Edict-vocabulary terms ("The Statute", "Charter Spur"); 3 cardinal oceans
replaced with cross-referential names (Veil Shelf → Veil Institute POI,
Concord Mere → Concord Assembly Archive POI, Charter Tarn → Charter Spur
mountain). Note: "Westwall" flagged by Gestalt not found in markers.json
or DB; stale data issue. Arcs established: Charter-, Concord-, Veil-.

GJ380c Lendel (900M pop): 2 fixes — "Pale Run" river renamed "Durneth
Beck" (cross-refs Durneth Range; "beck" = British stream); "Tember Ridge"
renamed "Tember Spine" (keeps stem, removes lazy Ridge suffix). Aldren-
stem arc (capital + river + exchange) is intentional — preserved.

GJ699b Verada (1.9B pop): 8 fixes — all 3 rivers renamed from civic-grid
names to geographic names (Verada Reach, The Meridian, Capitol Beck); 5
oceans renamed to replace architectural/district suffixes with geographic
ones (Prospect Sea, Haven Sea, Meridian Sound, Capitol Mere, Sterling
Pool). Arcs: Capitol- (city + river + ocean), Meridian- (river + ocean),
Haven/Port- (city + ocean).

GJ699b-1 Verada moon: 8 fixes — all 8 mountains renamed from street
addresses (Grandview Avenue, Harmony Boulevard, Beacon Street, etc.) to
geological/institutional cross-references. The moon's peaks now carry the
names of Verada's civic institutions as seen from orbit: Tribunal Spur,
Zenith Spine, Keystone Scarp, Ironwood Spur, Consulate Scarp, Prefecture
Spur, Barnard Heights, Verada Scarp (largest range).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds city sections to three sol_markers/ feature files so sol_import.py
produces inhabited bodies with atlas_cities coverage.

luna_features.json (GJ0d-1, 350M pop): 3 cities — Artemis (capital, south
polar region, water ice access, 200M), Tranquility Station (Mare
Tranquillitatis, historic first settlement, 90M), Selene (Mare Imbrium,
industrial hub, 60M).

mars_features.json (GJ0e, 1.2B pop): 4 cities — Olympia (capital, Olympus
Mons region, lava tube habitat, 450M), Hellas Station (Hellas Basin, deep
low-pressure warmth, 350M), Elysium City (Elysium Mons, 250M), Chryse
Landing (Chryse Planitia, historic Viking site and port gateway, 150M).

outer_features.json (GJ0f-2 Europa, 30M pop): 2 cities — Conamara Station
(capital, Conamara Chaos, geothermal near ice plate faults, 20M), Pwyll
Base (Pwyll Crater, sub-ice ocean access, 10M).

earth_features.json already had comprehensive city coverage (40+ cities)
and required no changes.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Systematic sweep eliminated all city name cross-body collisions across the
273 inhabited bodies. Started from Forum Veritas/Jade Harbor/Fort Iron
clusters identified during the #849 analysis pass.

Strategy: use world proper_name as capital city name wherever unique.
For worlds sharing a proper_name, author corridor-appropriate alternates.
All edits synced to atlas_cities via generate_atlas.py --body.

Before: 119+ cross-body city collisions, worst-case ×20 (Jade Harbor)
After: 0 cross-body city collisions

Clusters eliminated: Forum Veritas ×10, Jade Harbor ×19, Fort Iron ×10,
Eisenstadt ×7, Fjordheim/Fjordholm ×6 each, Eisenberg/Eisenfels/Hanseong ×5
each, Ridge Marker ×5, plus 20+ smaller clusters down to ×2.

River/ocean collisions (Rio Grande ×23 rivers, Steinbruch ×19, etc.)
remain — these affect uninhabited secondary bodies at scale and require a
dedicated batch-script pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Names all 33 null-name auto-detected Sol features: Earth ocean + 3 rivers,
24 Luna mountain ranges (real IAU lunar mountain names), 4 Mars mountains,
1 Europa mountain. All using real-world geographic names. Cross-reference
arcs added on Mars (Hellas-, Chryse-) and Europa (Conamara-, Pwyll-).

Adds sol_name_fixes.py for reproducible Sol feature naming. Updates refine
log to mark Sol complete with full audit metrics for all 6 touched systems.

DB synced: GJ0d, GJ0d-1, GJ0e, GJ0f-2 (all Sol inhabited bodies).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds brands.toml with 124 brand_products entries (plus halo/volume pairs
and brand_inputs) covering all 8 D-189 categories: terroir, heritage_craft,
tech_premium, cultural, service_premium, commodity_branded, design_heritage,
platform_catalogue. Includes 112 new wiki/corporations stub pages for FK
integrity. Brand layer validation V-B01–V-B06 passes; Phase 2 coverage gate
failures are pre-existing raw-commodity gaps (out of scope for #828).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Finalizes #849 core-world atlas cohesion: GJ0d (Earth/Sol) markers.json
cleaned of erroneous data, refine_log updated with Sol body gap notes,
atlas_quality_analysis.py added for ongoing metric tracking.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Header still said "4 anchor brands only, Phase 3 deferred". Now reflects
Sprint 36 #828 reality: 124 brand corps, full D-189 census, all 8 categories.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixes F401 errors caught by pre-push hook.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author
Owner

Review: sprint-36/copy → main (type: copy)

Pre-review checks:

  • ruff: clean on new tooling
  • Brand validator (V-B01..V-B06): passes per PR
  • Runtime smoke test: not mentioned in PR description — process gap
  • Test plan items (4 checkboxes) all unchecked — aspirational, not evidence

Hoshe (QA / data integrity): REQUEST_CHANGES

Brands structurally solid (D-189 coverage complete, FK integrity passes, 112 wiki stubs match corp_ids one-to-one, make economy-db demonstrably run). But price_tier — documented in D-189 §5 as a locked enum field — is entirely absent from the DB schema, importer, and validator. The field gets authored into TOML and silently discarded. Five smaller issues.

Paula (narrative depth): REQUEST_CHANGES

Atlas hand-refine work is good: internal cross-reference arcs intentional, cardinal labels gone, Earth/Luna selections carry real weight. But the 112 new corp wiki stubs are all 24-line frontmatter-only placeholders ("X is a Y operating out of Z. Details to be expanded.") in a codebase whose canonical stubs (Calloway, Thrds, VGV, Thalassa) run 95–125 lines with origin histories, political relationships, and concealed facts. Either populate to the three-layer minimum or split the PR.

Miri (worldbuilding): REQUEST_CHANGES (with retractions — see below)

Substantive setting-level concerns on Earth's selection logic and Groombridge's monocultural texture stand. Several other comments were based on stale reads and have been verified against the branch and retracted.


Consolidated comments

# File Sev Issue
1 wiki/economics/corporations/brands.toml + tooling/economy-db/import_economics.py:55-110, 795-801 blocker price_tier documented in D-189 §5 as locked enum (mass/premium/luxury/flagship/institutional), present in 240/248 TOML entries, absent from schema, INSERT, and V-B06 enum_checks. Silently discarded on import. Either add price_tier TEXT + V-B06 entry, or strip from TOML and mark D-189 §5 as Phase 3+ authoring stub.
2 wiki/corporations/*.md (all 112 new stubs) blocker All are 24-line frontmatter-only placeholders. Canonical stubs (Calloway/Thrds/VGV/Thalassa) carry 95–125 lines with three-layer content (public identity, actual operation, one concealed fact). 112 stubs saying "Details to be expanded" undercut the standard across the brand layer. Populate to three-layer minimum, or split the PR and ship stubs on a separate ticket with narrative completion as DoD.
3 wiki/economics/corporations/brands.toml (Calloway, VGV, Thrds, Bífröst + run of pre-Sato entries) issue 4 pre-amendment canonical brands + subsequent pre-Sato run missing price_tier entirely. Will become V-B06 gap once field lands in schema. Fix now.
4 decisions/economics.md:340 issue D-189 §5 amendment embedded as inline parenthetical (amended Sprint 36 … locked on sprint-36/copy branch) rather than standard **Amendment (YYYY-MM-DD):** block (see D-019/D-091/D-191). Branch-scoped language becomes factually wrong on merge. Reformat.
5 tooling/planet-gen/sol_name_fixes.py:47-48 issue Both range_606 and range_570 assigned "Montes Riphaeus". range_606 absent in current markers.json so the duplicate didn't fire, but re-import will silently produce a Luna duplicate. Add dedup guard or remove the redundant entry.
6 tooling/planet-gen/sol_markers/earth_features.json issue Source JSON retains all 46 cities. Trim to 11 happens elsewhere in the pipeline and is invisible in source. DB confirmed to have 11 (London/Istanbul/Moscow/New York/São Paulo/Cairo/Tokyo/Delhi/Beijing/Singapore/Sydney), skewing Euro-heavy (3 EU) with only 1 African (Cairo) and 1 Latin American (São Paulo). Either trim source to 11 with selection rationale in a comment, or document the filter location. Consider rebalancing — Lagos / Mexico City / Buenos Aires as candidates for genuinely global-cultural weight.
7 wiki/star-systems/GJ-380/bodies/GJ380c/markers.json issue Verified: all 24 named features on Groombridge capital are Lendel/Anglo-Germanic register (Aldren/Sethvale/Caldenmere/Durneth/Brantfell/Keslar/Pallach/Tember/Holt/Golvane/Cresswell/Kesset/Rethain/Lenden/Corsam/Selet). Zero cross-corridor influence from neighboring Kumasi/south_reach trade lanes — contradicts #849's explicit "corridors are tendencies, not borders" requirement. Add 1–2 cross-corridor names on secondary features.
8 wiki/star-systems/GJ-251/bodies/GJ251c/markers.json + wiki/star-systems/GJ-71/bodies/GJ71c/markers.json issue "Aethelred" was removed from GJ71c river (now Gaius/Octavius/Septimus/…) but persists as POI "Aethelred's Gate" on GJ251c (Renaissance). Either intentional lore migration of the name to Renaissance (document in hand-refine-log) or accidental persistence (rename).
9 PR description + docs/design/atlas-generator-refinement-notes.md nit "186 bodies with empty mountain range names" is documented in refinement notes as SEVERE, but PR description doesn't surface it. Deferred to #853 is fine, but the merger should see it in the PR body.
10 tooling/planet-gen/sol_name_fixes.py, tooling/generate_corp_stubs.py nit Missing argparse / --help / --dry-run. apply_name_fixes.py has --dry-run; these don't. A file-rewriting tool without a dry-run is a footgun.
11 PR description nit Says "249 brand_products entries"; file + DB both show 248.
12 wiki/corporations/{calloway-distillery,thrds,vins-de-grand-vide,thalassa-resort-group}.md nit Empty cross_refs: [] despite body text explicitly cross-referencing each other (Thrds→Calloway; Calloway/VGV→untraced holding structure). Populate cross_refs to match assertions in prose.
13 docs/atlas/hand-refine-log.md + tooling/planet-gen/refine_log_849.md nit Not redundant but don't reference each other. Add a "see also: refine_log_849.md for cross-reference arc analysis" line to hand-refine-log.md §#849.

Retractions (reviewer comments verified as stale against branch)

Retracted Reason
Aethelred river on GJ71c GJ71c rivers are now Gaius/Octavius/Septimus/Quintus/Valeria/Marcus — all Latinate. (The Aethelred name survives as a POI on GJ251c, retained as a separate issue — see #8.)
Forum Veritas / Capitolium on GJ251c GJ251c cities are now Tributarium, Ruhr. The hand-refine did touch it.
Aldren Pass on Ran (GJ144d) GJ144d has no Aldren; names are Kallast/Rán-register. Aldren is contained to GJ380c (Groombridge) as intended.
Keel Ridge on GJ244Ad Already renamed to "Charter Spur"; Westwall renamed to "The Statute" per the refinement notes.
Concordia ×3 / Basilica Nova ×18 cross-body Non-city cross-body/cross-type collisions are explicitly deferred to #853 per the refinement notes — documented known issue, not a hidden bug.
Westwall on GJ664c Same — cross-body mountain collision, explicitly in #853 scope per refinement notes.
atlas-generator-refinement-notes.md missing File exists (255 lines), comprehensive; reviewer couldn't access branch files.

Verdict: CHANGES REQUESTED

2 blockers, 6 issues, 4 nits. Blockers are fundamentally about price_tier discipline and stub narrative depth; everything else is concrete pass-before-merge work.

Please address each (or push back with a concrete technical rationale per the review-disagreement protocol).

## Review: `sprint-36/copy` → main (type: copy) **Pre-review checks:** - ruff: clean on new tooling - Brand validator (V-B01..V-B06): passes per PR - Runtime smoke test: not mentioned in PR description — **process gap** - Test plan items (4 checkboxes) all unchecked — aspirational, not evidence --- ### Hoshe (QA / data integrity): REQUEST_CHANGES Brands structurally solid (D-189 coverage complete, FK integrity passes, 112 wiki stubs match corp_ids one-to-one, `make economy-db` demonstrably run). But `price_tier` — documented in D-189 §5 as a locked enum field — is **entirely absent from the DB schema, importer, and validator**. The field gets authored into TOML and silently discarded. Five smaller issues. ### Paula (narrative depth): REQUEST_CHANGES Atlas hand-refine work is good: internal cross-reference arcs intentional, cardinal labels gone, Earth/Luna selections carry real weight. But the 112 new corp wiki stubs are all 24-line frontmatter-only placeholders ("X is a Y operating out of Z. Details to be expanded.") in a codebase whose canonical stubs (Calloway, Thrds, VGV, Thalassa) run 95–125 lines with origin histories, political relationships, and concealed facts. Either populate to the three-layer minimum or split the PR. ### Miri (worldbuilding): REQUEST_CHANGES *(with retractions — see below)* Substantive setting-level concerns on Earth's selection logic and Groombridge's monocultural texture stand. Several other comments were based on stale reads and have been verified against the branch and retracted. --- ### Consolidated comments | # | File | Sev | Issue | |---|------|-----|-------| | 1 | `wiki/economics/corporations/brands.toml` + `tooling/economy-db/import_economics.py:55-110, 795-801` | blocker | `price_tier` documented in D-189 §5 as locked enum (`mass/premium/luxury/flagship/institutional`), present in 240/248 TOML entries, **absent from schema, INSERT, and V-B06 enum_checks**. Silently discarded on import. Either add `price_tier TEXT` + V-B06 entry, or strip from TOML and mark D-189 §5 as Phase 3+ authoring stub. | | 2 | `wiki/corporations/*.md` (all 112 new stubs) | blocker | All are 24-line frontmatter-only placeholders. Canonical stubs (Calloway/Thrds/VGV/Thalassa) carry 95–125 lines with three-layer content (public identity, actual operation, one concealed fact). 112 stubs saying "Details to be expanded" undercut the standard across the brand layer. Populate to three-layer minimum, or split the PR and ship stubs on a separate ticket with narrative completion as DoD. | | 3 | `wiki/economics/corporations/brands.toml` (Calloway, VGV, Thrds, Bífröst + run of pre-Sato entries) | issue | 4 pre-amendment canonical brands + subsequent pre-Sato run missing `price_tier` entirely. Will become V-B06 gap once field lands in schema. Fix now. | | 4 | `decisions/economics.md:340` | issue | D-189 §5 amendment embedded as inline parenthetical `(amended Sprint 36 … locked on sprint-36/copy branch)` rather than standard `**Amendment (YYYY-MM-DD):**` block (see D-019/D-091/D-191). Branch-scoped language becomes factually wrong on merge. Reformat. | | 5 | `tooling/planet-gen/sol_name_fixes.py:47-48` | issue | Both `range_606` and `range_570` assigned `"Montes Riphaeus"`. `range_606` absent in current markers.json so the duplicate didn't fire, but re-import will silently produce a Luna duplicate. Add dedup guard or remove the redundant entry. | | 6 | `tooling/planet-gen/sol_markers/earth_features.json` | issue | Source JSON retains all 46 cities. Trim to 11 happens elsewhere in the pipeline and is invisible in source. DB confirmed to have 11 (London/Istanbul/Moscow/New York/São Paulo/Cairo/Tokyo/Delhi/Beijing/Singapore/Sydney), skewing Euro-heavy (3 EU) with only 1 African (Cairo) and 1 Latin American (São Paulo). Either trim source to 11 with selection rationale in a comment, or document the filter location. Consider rebalancing — Lagos / Mexico City / Buenos Aires as candidates for genuinely global-cultural weight. | | 7 | `wiki/star-systems/GJ-380/bodies/GJ380c/markers.json` | issue | Verified: all 24 named features on Groombridge capital are Lendel/Anglo-Germanic register (Aldren/Sethvale/Caldenmere/Durneth/Brantfell/Keslar/Pallach/Tember/Holt/Golvane/Cresswell/Kesset/Rethain/Lenden/Corsam/Selet). Zero cross-corridor influence from neighboring Kumasi/south_reach trade lanes — contradicts #849's explicit "corridors are tendencies, not borders" requirement. Add 1–2 cross-corridor names on secondary features. | | 8 | `wiki/star-systems/GJ-251/bodies/GJ251c/markers.json` + `wiki/star-systems/GJ-71/bodies/GJ71c/markers.json` | issue | "Aethelred" was removed from GJ71c river (now Gaius/Octavius/Septimus/…) but persists as **POI "Aethelred's Gate" on GJ251c** (Renaissance). Either intentional lore migration of the name to Renaissance (document in hand-refine-log) or accidental persistence (rename). | | 9 | PR description + `docs/design/atlas-generator-refinement-notes.md` | nit | "186 bodies with empty mountain range names" is documented in refinement notes as SEVERE, but PR description doesn't surface it. Deferred to #853 is fine, but the merger should see it in the PR body. | | 10 | `tooling/planet-gen/sol_name_fixes.py`, `tooling/generate_corp_stubs.py` | nit | Missing argparse / `--help` / `--dry-run`. `apply_name_fixes.py` has `--dry-run`; these don't. A file-rewriting tool without a dry-run is a footgun. | | 11 | PR description | nit | Says "249 brand_products entries"; file + DB both show 248. | | 12 | `wiki/corporations/{calloway-distillery,thrds,vins-de-grand-vide,thalassa-resort-group}.md` | nit | Empty `cross_refs: []` despite body text explicitly cross-referencing each other (Thrds→Calloway; Calloway/VGV→untraced holding structure). Populate `cross_refs` to match assertions in prose. | | 13 | `docs/atlas/hand-refine-log.md` + `tooling/planet-gen/refine_log_849.md` | nit | Not redundant but don't reference each other. Add a "see also: refine_log_849.md for cross-reference arc analysis" line to hand-refine-log.md §#849. | --- ### Retractions *(reviewer comments verified as stale against branch)* | Retracted | Reason | |-----------|--------| | Aethelred river on GJ71c | GJ71c rivers are now Gaius/Octavius/Septimus/Quintus/Valeria/Marcus — all Latinate. (The Aethelred name survives as a POI on GJ251c, retained as a separate issue — see #8.) | | Forum Veritas / Capitolium on GJ251c | GJ251c cities are now Tributarium, Ruhr. The hand-refine did touch it. | | Aldren Pass on Ran (GJ144d) | GJ144d has no Aldren; names are Kallast/Rán-register. Aldren is contained to GJ380c (Groombridge) as intended. | | Keel Ridge on GJ244Ad | Already renamed to "Charter Spur"; Westwall renamed to "The Statute" per the refinement notes. | | Concordia ×3 / Basilica Nova ×18 cross-body | Non-city cross-body/cross-type collisions are explicitly deferred to #853 per the refinement notes — documented known issue, not a hidden bug. | | Westwall on GJ664c | Same — cross-body mountain collision, explicitly in #853 scope per refinement notes. | | `atlas-generator-refinement-notes.md` missing | File exists (255 lines), comprehensive; reviewer couldn't access branch files. | --- ### Verdict: CHANGES REQUESTED 2 blockers, 6 issues, 4 nits. Blockers are fundamentally about `price_tier` discipline and stub narrative depth; everything else is concrete pass-before-merge work. Please address each (or push back with a concrete technical rationale per the review-disagreement protocol).
jpmschweitzer added 3 commits 2026-04-19 15:51:23 +02:00
price_tier was documented in D-189 §5 and present in brands.toml but
silently discarded on import — absent from schema, INSERT, and V-B06.

- Add price_tier TEXT column to brand_products CREATE TABLE
- Add COLUMN_MIGRATIONS entry for ALTER TABLE on existing DBs
- Add VALID_PRICE_TIERS constant (mass/premium/luxury/flagship/institutional)
- Include price_tier in product_rows tuple and INSERT OR REPLACE
- Add price_tier to V-B06 enum checks; skip NULL (nullable column)
- Backfill 4 pre-amendment anchor brands (8 entries): Calloway flagship/premium,
  VGV luxury/premium, thrds luxury/premium, Bífröst flagship/luxury

V-B01..V-B06 all pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- generate_corp_stubs.py: add argparse with --dry-run (prints planned stub
  creations without writing files) and --help
- calloway-distillery.md: cross_refs → [thrds, mercado-travessia]
- thrds.md: cross_refs → [calloway-distillery, mercado-travessia]
- vins-de-grand-vide.md: cross_refs → [nordmark-skog]
- thalassa-resort-group.md: cross_refs → [the-registry, prometheus-labs]

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
jpmschweitzer added 1 commit 2026-04-19 15:52:02 +02:00
Parallel addition to the rebalance addendum already in the GJ 0 Sol
section — Paula's header-style entry at the summary level complements
the in-context detail.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author
Owner

Review: sprint-36/copy → main (round 2)

Round 1 recap: 2 blockers, 6 issues, 4 nits, 7 retractions.
Team response: 4 commits, 9 items resolved, 1 blocker (112-stub narrative depth) split to ticket #861 under reviewer-accepted protocol.


Hoshe (QA): APPROVE

All 9 Hoshe-relevant items correctly resolved. price_tier present in schema / INSERT (16 columns, 16 placeholders) / V-B06 enum validation (mandatory on every make economy-db). Column migration is idempotent (_add_column catches duplicate-column errors). D-189 §5 amendment uses standard **Amendment (2026-04-19):** format, no branch-scoped language. Dedup guard on sol_name_fixes.py. argparse/--dry-run on both scripts. PR description updated (248 + deferred-issues section). Ticket #861 DoD matches split conditions.

Paula (narrative depth): APPROVE

All 4 Paula-relevant items resolved. Canonical stub cross_refs populated honestly (no stuffing, no omissions). Logs cross-reference each other. Aethelred lore migration is "the strongest narrative addition in this diff" — the inference chain from Threshold's all-Latin rivers to Renaissance's "Aethelred's Gate" POI is genuine systems-emergent lore. Brussels-for-London swap is defensible given the documented rationale; Paula notes the tradeoff (London carries cultural weight Brussels doesn't) but doesn't block since the swap is user-approved and the log is explicit about what is being traded. #861 DoD captures the split conditions with actionable specificity.

Miri (worldbuilding): REQUEST_CHANGES

Aethelred migration fully resolved — inference chain is exactly the environmental storytelling the setting should reward. Earth + Groombridge fixes partially resolved; three small items remain.


Remaining comments

# File Sev Issue
1 tooling/planet-gen/earth_blocklist.txt:60 + tooling/planet-gen/sol_markers/earth_features.json issue Brussels is on the Earth-names blocklist (line 60, verified) but now sits as a canonical Earth city. Policy collision: the blocklist blocks Earth major-city names from being used as alien-world feature names, but Earth itself is the intended exception. Next sol_import.py run may strip or flag Brussels as a violation unless GJ0d is explicitly exempt. Add a one-line comment in earth_blocklist.txt noting GJ0d (Earth body) is blocklist-exempt, or document the exemption at the sol_import.py callsite.
2 wiki/star-systems/GJ-380/bodies/GJ380c/markers.json issue GJ380c has 29 named features; 2 Akan names (Nkwanta Beck, Bosomtwe Spur) = ~7%, both confined to minor feature types (a secondary river and a peripheral spur range). A financial hub with multi-generational Kumasi trade corridor contact would plausibly carry more than one river and one spur. Recommend adding one more Akan feature — a natural candidate is Selet Basin (mid-eastern lake at [220,336], currently Anglo-compound name) → Subin Basin (Subin = the river running through Kumasi itself). Brings Akan presence to 3/29 and distributes across three feature types (river, mountain, lake), converting the minimum-viable patch into a credible corridor read. Single rename + DB re-sync.
3 docs/atlas/hand-refine-log.md:119 nit Line 119 shows river_1 "Gap Crossing" → "Aldren Pass" as the final state for GJ144d, but the DB has Randalfoss (verified: ['Rán's Run', 'Randalfoss', 'Scarp Fork', 'Timber Keld', 'Ranfall Beck', 'Cliff Leat']). The Aldren stem was subsequently removed to eliminate the cross-system dup with GJ380c Groombridge. Update the log entry: …→ "Aldren Pass" (subsequently renamed Randalfoss in a later fix pass to eliminate the cross-system Aldren stem collision with GJ380c).

Verdict: CHANGES REQUESTED

Very close — all 9 original items resolved cleanly, the split to #861 is clean, two reviewers approve. Only three small items remain, all on Miri's worldbuilding axis: one documentation-only (log stale), one one-line policy exemption comment, one single-feature rename. No new blockers. Expect round 3 to be short.

## Review: `sprint-36/copy` → main (round 2) **Round 1 recap:** 2 blockers, 6 issues, 4 nits, 7 retractions. **Team response:** 4 commits, 9 items resolved, 1 blocker (112-stub narrative depth) split to ticket #861 under reviewer-accepted protocol. --- ### Hoshe (QA): APPROVE All 9 Hoshe-relevant items correctly resolved. `price_tier` present in schema / INSERT (16 columns, 16 placeholders) / V-B06 enum validation (mandatory on every `make economy-db`). Column migration is idempotent (`_add_column` catches duplicate-column errors). D-189 §5 amendment uses standard `**Amendment (2026-04-19):**` format, no branch-scoped language. Dedup guard on `sol_name_fixes.py`. argparse/`--dry-run` on both scripts. PR description updated (248 + deferred-issues section). Ticket #861 DoD matches split conditions. ### Paula (narrative depth): APPROVE All 4 Paula-relevant items resolved. Canonical stub cross_refs populated honestly (no stuffing, no omissions). Logs cross-reference each other. Aethelred lore migration is "the strongest narrative addition in this diff" — the inference chain from Threshold's all-Latin rivers to Renaissance's "Aethelred's Gate" POI is genuine systems-emergent lore. Brussels-for-London swap is defensible given the documented rationale; Paula notes the tradeoff (London carries cultural weight Brussels doesn't) but doesn't block since the swap is user-approved and the log is explicit about what is being traded. #861 DoD captures the split conditions with actionable specificity. ### Miri (worldbuilding): REQUEST_CHANGES Aethelred migration fully resolved — inference chain is exactly the environmental storytelling the setting should reward. Earth + Groombridge fixes partially resolved; three small items remain. --- ### Remaining comments | # | File | Sev | Issue | |---|------|-----|-------| | 1 | `tooling/planet-gen/earth_blocklist.txt:60` + `tooling/planet-gen/sol_markers/earth_features.json` | issue | **Brussels is on the Earth-names blocklist (line 60, verified) but now sits as a canonical Earth city.** Policy collision: the blocklist blocks Earth major-city names from being used as alien-world feature names, but Earth itself is the intended exception. Next `sol_import.py` run may strip or flag Brussels as a violation unless GJ0d is explicitly exempt. Add a one-line comment in `earth_blocklist.txt` noting GJ0d (Earth body) is blocklist-exempt, or document the exemption at the sol_import.py callsite. | | 2 | `wiki/star-systems/GJ-380/bodies/GJ380c/markers.json` | issue | GJ380c has 29 named features; 2 Akan names (Nkwanta Beck, Bosomtwe Spur) = ~7%, both confined to minor feature types (a secondary river and a peripheral spur range). A financial hub with multi-generational Kumasi trade corridor contact would plausibly carry more than one river and one spur. Recommend adding one more Akan feature — a natural candidate is `Selet Basin` (mid-eastern lake at [220,336], currently Anglo-compound name) → `Subin Basin` (Subin = the river running through Kumasi itself). Brings Akan presence to 3/29 and distributes across three feature types (river, mountain, lake), converting the minimum-viable patch into a credible corridor read. Single rename + DB re-sync. | | 3 | `docs/atlas/hand-refine-log.md:119` | nit | Line 119 shows `river_1 "Gap Crossing" → "Aldren Pass"` as the final state for GJ144d, but the DB has `Randalfoss` (verified: `['Rán's Run', 'Randalfoss', 'Scarp Fork', 'Timber Keld', 'Ranfall Beck', 'Cliff Leat']`). The Aldren stem was subsequently removed to eliminate the cross-system dup with GJ380c Groombridge. Update the log entry: `…→ "Aldren Pass" (subsequently renamed Randalfoss in a later fix pass to eliminate the cross-system Aldren stem collision with GJ380c)`. | --- ### Verdict: CHANGES REQUESTED Very close — all 9 original items resolved cleanly, the split to #861 is clean, two reviewers approve. Only three small items remain, all on Miri's worldbuilding axis: one documentation-only (log stale), one one-line policy exemption comment, one single-feature rename. No new blockers. Expect round 3 to be short.
jpmschweitzer added 1 commit 2026-04-19 16:34:20 +02:00
- tooling/planet-gen/earth_blocklist.txt: document GJ0d (Earth body) as
  blocklist-exempt so Brussels (and other Earth-canonical city names) are
  not flagged on next sol_import.py run (R2 issue 1)
- wiki/star-systems/GJ-380/bodies/GJ380c/markers.json: rename Selet Basin
  → Subin Basin (Kumasi river namesake). Brings Akan register on GJ380c
  to 3/29 features distributed across river, mountain, lake — credible
  multi-generational trade corridor read instead of minimum-viable patch
  (R2 issue 2)
- server/data/systems.db: atlas_oceans resynced for GJ380c
- docs/atlas/hand-refine-log.md:119: corrected stale log entry — Aldren
  Pass was subsequently renamed Randalfoss to eliminate the cross-system
  Aldren stem collision with GJ380c (R2 nit 3)
- tooling/planet-gen/refine_log_849.md: Groombridge cross-corridor
  addendum updated to reflect 3/29 Akan register distribution

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Author
Owner

Review: sprint-36/copy → main (round 3, final)

Scope of round 3: 1 commit (6d9bb6ea), 5 lines changed across 4 files + 1 binary DB resync, closing the 3 remaining Miri items from round 2.


Miri (worldbuilding): APPROVE

  • R2 issue 1 — Brussels / earth_blocklist collision: RESOLVED. One-line exemption comment at earth_blocklist.txt:60 correctly scopes the blocklist to alien worlds only.
  • R2 issue 2 — GJ380c Akan ratio: RESOLVED. Selet Basin → Subin Basin brings Akan register to 3/29 features across three feature types (river: Nkwanta Beck, mountain: Bosomtwe Spur, lake: Subin Basin). Geographic placement is honest — features dispersed east-center and west rather than co-located, consistent with multi-directional corridor influence. Reads as credible Kumasi trade-lane presence, not token patch.
  • R2 nit 3 — hand-refine-log.md:119 stale entry: RESOLVED. Line 119 now documents the full supersession chain: Gap Crossing → Aldren Pass (subsequently renamed Randalfoss to eliminate cross-system Aldren stem collision with GJ380c).

Hoshe (round 2: APPROVE, no new items) + Paula (round 2: APPROVE, no new items)

No remaining items from rounds 1–2. Round-3 commit surface is minimal (5 text lines + DB resync). Ruff clean. No regression vectors introduced.


Overall verdict: APPROVED

Recommend merge. Known-deferred items (186 empty mountain range names, non-city cross-body collisions, 112 stub narrative depth via #861) remain tracked as documented out-of-scope items per reviewer-accepted protocol.

## Review: `sprint-36/copy` → main (round 3, final) **Scope of round 3:** 1 commit (`6d9bb6ea`), 5 lines changed across 4 files + 1 binary DB resync, closing the 3 remaining Miri items from round 2. --- ### Miri (worldbuilding): APPROVE - **R2 issue 1 — Brussels / earth_blocklist collision:** RESOLVED. One-line exemption comment at `earth_blocklist.txt:60` correctly scopes the blocklist to alien worlds only. - **R2 issue 2 — GJ380c Akan ratio:** RESOLVED. `Selet Basin → Subin Basin` brings Akan register to 3/29 features across three feature types (river: Nkwanta Beck, mountain: Bosomtwe Spur, lake: Subin Basin). Geographic placement is honest — features dispersed east-center and west rather than co-located, consistent with multi-directional corridor influence. Reads as credible Kumasi trade-lane presence, not token patch. - **R2 nit 3 — hand-refine-log.md:119 stale entry:** RESOLVED. Line 119 now documents the full supersession chain: `Gap Crossing → Aldren Pass (subsequently renamed Randalfoss to eliminate cross-system Aldren stem collision with GJ380c)`. ### Hoshe (round 2: APPROVE, no new items) + Paula (round 2: APPROVE, no new items) No remaining items from rounds 1–2. Round-3 commit surface is minimal (5 text lines + DB resync). Ruff clean. No regression vectors introduced. --- ### Overall verdict: APPROVED Recommend merge. Known-deferred items (186 empty mountain range names, non-city cross-body collisions, 112 stub narrative depth via #861) remain tracked as documented out-of-scope items per reviewer-accepted protocol.
jpmschweitzer closed this pull request 2026-04-19 16:43:17 +02:00

Pull request closed

This pull request cannot be reopened because the branch was deleted.
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jpmschweitzer/settled-reach#133