New end-to-end pipeline that walks every markers.json in the reach and
fills empty `name` fields using the Gemma 2 voice pipeline via
`sr-voice serve --stdio`. Per D-191 §4: the same Gemma 2 pipeline the
client uses for NPC voicing also produces the atlas content, which is
dual-purposed as a quality test of the LLM plumbing.
Pipeline per body (hop-ordered, core-first):
1. Load markers.json; identify feature records whose `name` is
blank (null or ""). Hand-authored names are never overwritten;
the 6 template bodies and any partial authoring stay put.
2. Look up body context (planet_class, settlement_pattern,
cultural_corridor, population, economic_role) from systems.db.
3. Build a short corridor-aware few-shot prompt per feature type.
Prompts carry 3 concrete `Style: X. Answer: Y` examples so
Gemma 2 2B completes a pattern instead of generating to an
open-ended instruction — this is the single biggest lever
against placeholder echoes on a small model.
4. Stream the prompt into a long-lived sr-voice subprocess, read
the JSONL response, post-process (strip markdown, label
prefixes, brackets, reject 5+ word outputs and placeholder
tokens), check the earth-name blocklist, check per-(corridor,
feature_type) + per-body dedup, check the per-stem cap, retry
up to 3 times with a bumped seed.
5. On persistent failure, fall back to a deterministic palette
generator so every feature ends up with a name.
6. Write markers.json atomically and refresh atlas_* DB rows via
sync_markers_to_db. Commit the DB per body so a crash loses
at most one body of state.
7. Restart the sr-voice subprocess every `--refresh` requests
(default: 200) to prevent KV-cache context bleed.
Core design decisions:
- Determinism: per-(world_seed, body_id, feature_local_id, attempt)
seed so the full run is reproducible.
- Ordering: bodies are processed in ascending `hop_distance_from_gateway`
so core bodies get first pick at every unique Gemma output and
outer sectors fall into the palette fallback when they lose the
dedup race.
- Dedup scope: (cultural_corridor, feature_type) across the run,
PLUS a per-body cross-type set so the same name can't be a river
AND an ocean AND a mountain on the same world. Hand-authored names
are seeded into both sets on load so templates win priority.
- Stem cap: each non-generic root token (e.g. 'Arcturus', 'Meridian')
may appear at most `--stem-cap` times across the full run (default
20), preventing single-word runaway. Fallback names bypass the cap.
- Earth blocklist: 181 curated entries covering major Earth cities,
mountains, rivers, oceans, historical/colonial spellings, and
Greek/Roman mythology that reads too literally. Prefixed variants
('Nouveau Paris', 'New Tokyo') explicitly allowed per the product
intent that Earth-echo names are fine but must not dominate.
Leading 'The ' is stripped before comparison so 'The Great Divide'
also matches.
Operational features:
- `--shard N/M` slices the body list into M partitions for parallel
runs. Two terminals × `--shard 0/2` + `--shard 1/2` fits the
~2.5 GB/instance VRAM footprint twice under the 50% cap on a
16 GB AMD GPU and roughly halves wall time.
- `--log PATH` writes a timestamped tee of every status line to a
file. Default: `.tmp/gemma_naming.shard{N}of{M}.log` when a
non-trivial shard is in use.
- SQLite `PRAGMA journal_mode=WAL` + `busy_timeout=15000` so two
concurrent shards serialize writes without lock errors.
- Per-body progress lines report `body K/N`, `sys K/N`, and
`hop=H` so the user can watch core sectors finish first.
- Each body logs the new names it produced per feature type so the
user can eyeball quality as the run progresses.
- Checkpoint summary every 25 bodies: cumulative names, rate,
ETA — gives the log regular scroll points.
- `--mock` uses `server/sr-voice/mock-stdio.sh` for dry-fire
pipeline validation without a model load (tested end-to-end).
Supporting files:
- `tooling/planet-gen/earth_blocklist.txt` — 181 curated entries.
- `tooling/db/backfill_cultural_corridor.py` — one-off migration
that fills the `cultural_corridor` column on both `star_systems`
and `bodies` from the `geographic_sector` values. Before this
pass, 99.4% of rows (3221/3240) had a NULL cultural_corridor
despite `wiki_sync.py` being aware of the column — the wiki
index.md files only carry the sector header, which was never
propagated to the DB column. Idempotent, safe to re-run after
any wiki_sync rebuild, explicit transaction wrapper with
rollback on failure.
Full batch runtime estimate: ~20 hours single-shard / ~10 hours
double-shard on this hardware. Smoke tests across five hardened
iterations (v1–v5) on GJ71b/c/d/d-1/e confirm the pipeline produces
clean, varied, culturally-coherent names with zero post-processing
residue.
The Settled Reach
A top-down immersive sim where you only know what you can see, hear, and prove.
You're not the hero. You're a witness with a gun.
Pick a character. Step into their life. Figure out what's happening before it's too late.
The Settled Reach is a single-character detective game where information is the real weapon. You play from one perspective in a simulated world full of people who lie, withhold, and reveal on their own schedules. What you know depends on where you are, who you trust, and whether you're asking the right questions.
What You Do
Investigate. Follow leads through a city you can't see all at once. Line-of-sight isn't a gameplay abstraction - it's the core mechanic. You see what your character sees. Walls block vision. Corners hide threats. Fog returns when you leave. Information decays.
Navigate. Your neural lattice gives you directions, but only to places you've learned about. Contacts send locations. Research reveals addresses. Physical exploration fills the gaps. The map is sparse and frightening at first. By the end, you realize how much you missed.
Decide. Every conversation is a negotiation over what gets shared. NPCs have their own goals, their own information, and their own reasons to lie. You choose who to trust based on incomplete data. Sometimes you're wrong.
Act. When investigation fails, violence is an option. Fights are tactical, asymmetric, and often a terrible idea. Power mismatches run in both directions. Death costs you everything since your last backup - lost knowledge, lost relationships, lost deals. The world knows what you forgot.
Survive. An AI storyteller paces events for dramatic tension. The conspiracy's structure is set at game start. When things happen is driven by how you're doing. Comfortable? Something breaks. Desperate? A break appears. The game wants a story, not a grind.
Core Features
Information Asymmetry as Master Mechanic
You only know what your character knows. The same world looks completely different from different perspectives. A Senator sees political venues on their map. A Guardian sees safehouses. Same conspiracy, different game.
Occlusion-Based Detection
Vision is line-of-sight with a directional cone. You see what's in front of you. Peripheral vision is reduced. Behind you is fog. Sound gives partial information outside your view - footsteps, voices, gunfire. You make decisions based on what you can piece together.
Internal Monologue
Your character interprets what they sense in their own voice. Footsteps behind you. Thermal signatures through walls. A contact's nervous tells. The monologue bridges what the camera can't show and creates atmosphere. It can also be wrong.
Perception Modes
Different characters access different sensors. Natural vision shows detail but is blocked by walls. Thermal imaging shows heat signatures with no identity. Camera feeds give remote vision but can be spoofed. Unisphere tracking pings known contacts but can be masked. Each mode reveals different information with different trust tradeoffs.
Diegetic Interface
The map is your character's neural lattice - Settled Reach technology, not a game UI. Points of interest appear when you learn them through gameplay. Tips can be traps. Navigation is pulled by player intent, not pushed by map design.
Multiple Playable Characters
Every character starts in a different position with different knowledge and different tools. A cop has case files and legal authority. An investigator has contacts and freedom to operate. A politician has institutional access and public constraints. Replayability comes from perspective, not randomness.
Rimworld-Style Storyteller
Events emerge from simulation, paced by an AI director. No timers. No scripts. Consequences of what's already in motion. The storyteller knows what you've lost and can exploit it.
Wildly Asymmetric Combat
Balanced fights are the exception. You're outgunned or overpowered, rarely evenly matched. Tactical clarity from the top-down view. Z-levels create verticality - fights across floors of a building. Perception boundaries mean you can be ambushed. Victory often means not fighting at all.
The Setting
Humanity spread across hundreds of star systems by learning to activate alien gates it didn't build. The result is the Settled Reach - a civilization stitched together by infrastructure it doesn't fully understand.
You live in a society where death is temporary (if you can afford the backup), enhancement is political (who gets augmented and why), and the gates that connect everything were made by someone who hasn't introduced themselves.
Wormholes aren't fast travel markers. They're physical locations you traverse. Social chokepoints. Surveillance points. The infrastructure you depend on to move between worlds.
Something is breaking. Or something is waking up. You're in the wrong place at the right time to figure out which.
Built For Replayability
Structural randomness set at game start: who's compromised, where evidence is hidden, which contacts can be trusted. Play the same scenario as different characters and encounter a different game. The conspiracy's skeleton is fixed. The flesh changes every time.
Development Philosophy
Single-character perspective. Asymmetric information as core mechanic. Top-down camera locked to character position. Godot 4 client + Rust simulation server. Client-server architecture from day one, designed for multiplayer even though single-player ships first.
No fog-of-war as an afterthought. No tutorial popups. No omniscient map reveals. The game is built around what you don't know.
[LOREM IPSUM PLACEHOLDER]
Screenshots
[Gameplay screenshot: character navigating fog-of-war through urban environment] [Gameplay screenshot: thermal vision showing heat signatures through building] [Gameplay screenshot: conversation interface with internal monologue overlay] [Gameplay screenshot: tactical combat with vision cone and z-level interaction]
Media
[Trailer: Character selection → Investigation → Revelation → Crisis] [Dev diary: Information asymmetry as game mechanic]
Awards & Recognition
[To be populated as development progresses]
Community & Updates
[Discord link] [Development blog] [Steam community hub]
System Requirements
Minimum
OS: [TBD] Processor: [TBD] Memory: [TBD] Graphics: [TBD] Storage: [TBD]
Recommended
OS: [TBD] Processor: [TBD] Memory: [TBD] Graphics: [TBD] Storage: [TBD]
About This Project
Official Title: The Settled Reach (D-021) Repository: commonwealth (historical code name) Engine: Godot 4 + Rust/bevy_ecs simulation server via subprocess/IPC Setting: Original science fiction IP, inspired by space opera traditions Status: Pre-alpha development
For development documentation, see the decisions/ directory and TEAM.md.
The Settled Reach is in active development. All features, systems, and content are subject to change.