Base text (layers 1+2) playable without LLM. Authoring cost O(zone_types + cultures), not O(locations).
Server dependency
#663: Server needs ZoneTypeTemplate + LocationSpec structs and validate-ron schema update to match the new content format. Content is ahead of server — no breakage, just validator gap.
Test plan
All RON files validate via tooling/validate-ron (culture schema)
Pre-commit hook passes (fact_id and decision_id checks)
cargo check passes (no references to deleted content)
## Summary
- Remove v0.1 hand-authored Krenn dialogue/monologue/NPC content (64 files) and detective mission system (#656, #657)
- Add Vael and Osse culture profiles with voice personas, behavior modifiers, NEVER blocks (#653)
- Author behavior primitives for all roles + culture modifiers across 3 cultures (#634)
- Restructure behavior primitives into zone-type template files — primitives are now zone-type-generic, not per-location (#661, D-142)
- File D-140 (dialogue quality rules), D-142 (zone-type template architecture: 31 zone types, POI 3-tier system, 300+ cultures, LLM flavor layer rules)
- Add authoring guides: base text elevation, culture creation, content directory structure
- Clean investigation.* fact_id references from environmental/triangle files
## Architecture (D-142)
Three-layer behavior system for 300+ planetary systems:
1. **Zone-type primitives** (what the body does) — universal per zone type, ~1,860 lines for 31 types
2. **Culture modifiers** (how this culture does it) — 7 categories, ~3,600 lines for 300+ cultures
3. **Gemma LLM flavor** (local color) — culture-neutral runtime enrichment (weather, time, environment)
Base text (layers 1+2) playable without LLM. Authoring cost O(zone_types + cultures), not O(locations).
## Server dependency
#663: Server needs ZoneTypeTemplate + LocationSpec structs and validate-ron schema update to match the new content format. Content is ahead of server — no breakage, just validator gap.
## Test plan
- [x] All RON files validate via tooling/validate-ron (culture schema)
- [x] Pre-commit hook passes (fact_id and decision_id checks)
- [x] cargo check passes (no references to deleted content)
- [ ] Server team adds ZoneTypeTemplate struct (#663)
- [ ] Integration test: generator spike loads zone-type template + culture, produces composed behaviors
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Author two new culture RON files (culture-vael.ron, culture-osse.ron)
with voice_persona, voice_examples, occasional_injections, explicit
NEVER blocks, and behavior_modifiers (7 categories each). Add
behavior_modifiers to culture-krenn.ron and explicit NEVER block.
Modifier categories: work_pace, physical_manner, social_signal,
task_completion, environmental_scan, offduty_posture, authority_response.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move behavior_primitives from per-location zone specs into global
zone-type template files (content/global/zone-types/). Location specs
now declare zone_type and contain only metadata (role weights, social
sites, economic/density levels). Primitives are culture-neutral and
reusable across all 300+ systems. Scrub Krenn-specific language.
New files: rural_agricultural.ron, industrial_freight.ron
Modified: krenn-rural-zone.ron, krenn-industrial-zone.ron (metadata only)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
D-140: Paula's six rules for dialogue re-voicing quality — secret-tier
passthrough, epistemic weight, access tier feel, named entity
passthrough, relationship-specific lines, culture register override.
D-142: Zone-type template architecture — three-layer behavior system,
31 zone types for v1.0, POI three-tier system, scale math for 300+
systems with 300+ cultures. Amend D-123 (baked vs pre-voiced modes),
supersede D-124 (resolved by two-spike strategy).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Three scalability-focused authoring guides for content production
across 300+ systems:
- base-text-authoring-guide.md: elevation checklist, quality test
- culture-authoring-guide.md: 8-step workflow, modifier contract,
cross-cultural contrast test, one-day-per-culture target
- content-structure-canonical.md: directory template, surviving
structure audit, culture RON field reference
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Well-structured content rework. Deletion of v0.1 content is clean, zone-type templates are high quality. Several defects need resolution.
#
File
Severity
Issue
1
zone-types/*.ron:7
critical
References D-141 which doesn't exist — should be D-142
2
culture-*.ron
warning
Behavior modifier coverage below spec minimum (2 per category) — offduty_posture, authority_response, environmental_scan have only 1 each across all three cultures
3
culture-*.ron
warning
6 name pool cross-contaminations: Vel, Ness (Osse/Krenn), Sorel, Tessik, Harven (Vael/Krenn), Arven (Osse/Vael)
4
content-structure-canonical.md:208
warning
Says Krenn lacks NEVER block and behavior_modifiers — both false after this PR
5
overheard.yaml
warning
Not in canonical path, all 48 entries reference deleted named NPCs, not flagged as legacy or assigned to a ticket
6
environmental/*.yaml
warning
dual_lens properties retained — dead fields referencing removed archetypes
7
insert-hud-wireframe-v01.md
suggestion
Retains smuggler labels as "tycoon reference" but active tickets point here
8
base-text-authoring-guide.md:45
suggestion
Example crop-row primitive doesn't match actual RON content
Uncaptured work: D-142 defines 31 zone types but only 2 templates shipped — remaining 29 need a backlog ticket. overheard.yaml needs a disposition decision.
Paula (Narrative Depth): REQUEST_CHANGES
Genuinely strong work. Zone-type primitives are high quality, overheard pool is exceptional. Two blockers are documentation hygiene, not design failures.
#
File
Severity
Issue
1
environmental/*.yaml
warning
dual_lens dead properties — strip or annotate as v01_example
2
content-structure-canonical.md:208
warning
Stale note says Krenn lacks NEVER block and behavior_modifiers
3
culture-osse.ron / culture-krenn.ron
warning
authority_response modifiers semantically identical ("at the same pace as before" vs "without a change in pace")
4
culture-osse.ron
suggestion
Strongest voice example (#4, equipment warning) should be example #1
5
industrial_freight.ron:128
suggestion
Foreman primitive "because she knows who did it" embeds Krenn cultural judgment in culture-neutral template
6
overheard.yaml
suggestion
13 consecutive high-value gossip pairs — signal density may feel staged
Miri (World Consistency): REQUEST_CHANGES
Cultures are well-constructed, distinct, internally coherent, no significant IP originality problems. One notable blocker on lore extension.
#
File
Severity
Issue
1
culture-osse.ron:12,23
warning
"Syndic" and "Meridian registration" extend setting without a D-record — file a decision or replace with generic descriptors
2
culture-osse.ron:32,36
suggestion
"Ness" and "Vel" name collisions with Krenn pool
3
culture-vael.ron:34
suggestion
"Ariel" — Earth name, fails IP check
4
culture-vael.ron:44-45
suggestion
"Arven"/"Harven" family name collision with Krenn
5
culture-osse.ron:74
suggestion
"See you at handoff" farewell verbatim in both Osse and Krenn
6
industrial_freight.ron:44
suggestion
Gendered pronoun in culture-neutral template
7
culture-vael.ron:113
suggestion
Voice persona instruction 7 uses third-person, rest is second-person imperative
Cross-reviewer consensus
content-structure-canonical.md stale (Hoshe + Paula)
dual_lens dead properties (Hoshe + Paula)
Name pool cross-contamination — 6 overlaps (Hoshe + Miri)
## Review: copy -> main (type: copy) — PR #91
### Hoshe (QA): REQUEST_CHANGES
Well-structured content rework. Deletion of v0.1 content is clean, zone-type templates are high quality. Several defects need resolution.
| # | File | Severity | Issue |
|---|------|----------|-------|
| 1 | zone-types/*.ron:7 | critical | References D-141 which doesn't exist — should be D-142 |
| 2 | culture-*.ron | warning | Behavior modifier coverage below spec minimum (2 per category) — `offduty_posture`, `authority_response`, `environmental_scan` have only 1 each across all three cultures |
| 3 | culture-*.ron | warning | 6 name pool cross-contaminations: Vel, Ness (Osse/Krenn), Sorel, Tessik, Harven (Vael/Krenn), Arven (Osse/Vael) |
| 4 | content-structure-canonical.md:208 | warning | Says Krenn lacks NEVER block and behavior_modifiers — both false after this PR |
| 5 | overheard.yaml | warning | Not in canonical path, all 48 entries reference deleted named NPCs, not flagged as legacy or assigned to a ticket |
| 6 | environmental/*.yaml | warning | `dual_lens` properties retained — dead fields referencing removed archetypes |
| 7 | insert-hud-wireframe-v01.md | suggestion | Retains smuggler labels as "tycoon reference" but active tickets point here |
| 8 | base-text-authoring-guide.md:45 | suggestion | Example crop-row primitive doesn't match actual RON content |
**Uncaptured work:** D-142 defines 31 zone types but only 2 templates shipped — remaining 29 need a backlog ticket. `overheard.yaml` needs a disposition decision.
### Paula (Narrative Depth): REQUEST_CHANGES
Genuinely strong work. Zone-type primitives are high quality, overheard pool is exceptional. Two blockers are documentation hygiene, not design failures.
| # | File | Severity | Issue |
|---|------|----------|-------|
| 1 | environmental/*.yaml | warning | `dual_lens` dead properties — strip or annotate as v01_example |
| 2 | content-structure-canonical.md:208 | warning | Stale note says Krenn lacks NEVER block and behavior_modifiers |
| 3 | culture-osse.ron / culture-krenn.ron | warning | `authority_response` modifiers semantically identical ("at the same pace as before" vs "without a change in pace") |
| 4 | culture-osse.ron | suggestion | Strongest voice example (#4, equipment warning) should be example #1 |
| 5 | industrial_freight.ron:128 | suggestion | Foreman primitive "because she knows who did it" embeds Krenn cultural judgment in culture-neutral template |
| 6 | overheard.yaml | suggestion | 13 consecutive high-value gossip pairs — signal density may feel staged |
### Miri (World Consistency): REQUEST_CHANGES
Cultures are well-constructed, distinct, internally coherent, no significant IP originality problems. One notable blocker on lore extension.
| # | File | Severity | Issue |
|---|------|----------|-------|
| 1 | culture-osse.ron:12,23 | warning | "Syndic" and "Meridian registration" extend setting without a D-record — file a decision or replace with generic descriptors |
| 2 | culture-osse.ron:32,36 | suggestion | "Ness" and "Vel" name collisions with Krenn pool |
| 3 | culture-vael.ron:34 | suggestion | "Ariel" — Earth name, fails IP check |
| 4 | culture-vael.ron:44-45 | suggestion | "Arven"/"Harven" family name collision with Krenn |
| 5 | culture-osse.ron:74 | suggestion | "See you at handoff" farewell verbatim in both Osse and Krenn |
| 6 | industrial_freight.ron:44 | suggestion | Gendered pronoun in culture-neutral template |
| 7 | culture-vael.ron:113 | suggestion | Voice persona instruction 7 uses third-person, rest is second-person imperative |
### Cross-reviewer consensus
- `content-structure-canonical.md` stale (Hoshe + Paula)
- `dual_lens` dead properties (Hoshe + Paula)
- Name pool cross-contamination — 6 overlaps (Hoshe + Miri)
- `authority_response` Krenn/Osse overlap (Paula + Miri)
### Lead notes
- D-138 has an inline model provenance policy addition — will be removed post-merge (confirmed by lead)
- #661 (zone-type templates) is new work not in the original sprint plan — needs retroactive ticket
- D-142's 31-type taxonomy implies ~29 unauthored zone-type templates — needs backlog ticket
### Verdict: CHANGES REQUESTED
D-141→D-142 reference in zone-type templates, name pool
cross-contamination resolved (zero overlaps across cultures),
modifier coverage expanded to 2+ per category, authority_response
differentiated Krenn/Osse, gendered pronouns removed from neutral
templates, Osse ungrounded lore terms replaced, dual_lens dead
properties stripped from environmental YAML, overheard.yaml
annotated as legacy (#664).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update content-structure-canonical.md to reflect Krenn NEVER block
and behavior_modifiers now present. Fix base-text-authoring-guide
example to match actual RON primitive format.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Architecture (D-142)
Three-layer behavior system for 300+ planetary systems:
Base text (layers 1+2) playable without LLM. Authoring cost O(zone_types + cultures), not O(locations).
Server dependency
#663: Server needs ZoneTypeTemplate + LocationSpec structs and validate-ron schema update to match the new content format. Content is ahead of server — no breakage, just validator gap.
Test plan
🤖 Generated with Claude Code
Review: copy -> main (type: copy) — PR #91
Hoshe (QA): REQUEST_CHANGES
Well-structured content rework. Deletion of v0.1 content is clean, zone-type templates are high quality. Several defects need resolution.
offduty_posture,authority_response,environmental_scanhave only 1 each across all three culturesdual_lensproperties retained — dead fields referencing removed archetypesUncaptured work: D-142 defines 31 zone types but only 2 templates shipped — remaining 29 need a backlog ticket.
overheard.yamlneeds a disposition decision.Paula (Narrative Depth): REQUEST_CHANGES
Genuinely strong work. Zone-type primitives are high quality, overheard pool is exceptional. Two blockers are documentation hygiene, not design failures.
dual_lensdead properties — strip or annotate as v01_exampleauthority_responsemodifiers semantically identical ("at the same pace as before" vs "without a change in pace")Miri (World Consistency): REQUEST_CHANGES
Cultures are well-constructed, distinct, internally coherent, no significant IP originality problems. One notable blocker on lore extension.
Cross-reviewer consensus
content-structure-canonical.mdstale (Hoshe + Paula)dual_lensdead properties (Hoshe + Paula)authority_responseKrenn/Osse overlap (Paula + Miri)Lead notes
Verdict: CHANGES REQUESTED
Re-review: copy -> main (type: copy) — PR #91
Hoshe (QA): APPROVE
All 15 previous issues fixed. No new issues.
Paula (Narrative Depth): APPROVE
Both blockers resolved, all mediums and suggestions addressed. Content quality is strong.
Miri (World Consistency): REQUEST_CHANGES (1 suggestion)
5/6 previous issues fixed. Remaining: Vael "Arven" / Krenn "Harven" near-collision.
Verdict: APPROVED with post-merge fix
2/3 approve outright. Miri's remaining item (one-word cosmetic name fix) resolved post-merge: "Arven" → "Arvenis" in commit
88de04d.Also removed inline model provenance policy from D-138 per lead direction (commit
aa55abb).Pull request closed