Replace the one-at-a-time Gemma 2 naming pipeline with a batch-oriented
Gemma 4 E2B pipeline. Key changes:
- naming_core.py: shared library with Levenshtein distinctiveness ranking,
batch prompt building, mood injection pool, name validation, and
adjacent-register refill logic
- Wiki-grounded register selection: per-system LLM call picks the cultural
register based on wiki/GTTR content instead of hash randomizer
- Batch naming: requests N*2 names per call, ranks by word-average
Levenshtein distance, fills quota from most-distinct candidates
- Mood pool: 13 emotional seeds randomized per-body for vocabulary
divergence (ambition, fear, isolation, defiance, etc.)
- Adjacent-register refill: when primary register exhausts, automatically
switches to next corridor substyle
- Inhabited-first body ordering: habitable worlds get first pick of
register vocabulary, barren moons get leftovers
- Process group cleanup: SIGTERM/SIGKILL the full distrobox chain on
subprocess refresh to prevent GPU zombie processes
- qa_naming.py: QA report, fix_fewshot_bleed.py: post-hoc fix script
- test_batch_naming.py, test_register_selection.py: test harnesses
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>