Merge remote-tracking branch 'origin/copy'

# Conflicts:
#	content/npc-conversations/overheard.yaml
#	server/content/global/zone-types/administrative_civil.ron
#	server/content/global/zone-types/administrative_judicial.ron
#	server/content/global/zone-types/archaeological_site.ron
#	server/content/global/zone-types/commercial_market.ron
#	server/content/global/zone-types/commercial_transit.ron
#	server/content/global/zone-types/detention_facility.ron
#	server/content/global/zone-types/diplomatic_elite.ron
#	server/content/global/zone-types/entertainment_hospitality.ron
#	server/content/global/zone-types/entertainment_venue.ron
#	server/content/global/zone-types/extraction_platform.ron
#	server/content/global/zone-types/extraction_space.ron
#	server/content/global/zone-types/extraction_surface.ron
#	server/content/global/zone-types/industrial_manufacturing.ron
#	server/content/global/zone-types/industrial_processing.ron
#	server/content/global/zone-types/medical_facility.ron
#	server/content/global/zone-types/military_garrison.ron
#	server/content/global/zone-types/port_fishing.ron
#	server/content/global/zone-types/port_maritime.ron
#	server/content/global/zone-types/port_space.ron
#	server/content/global/zone-types/port_surface.ron
#	server/content/global/zone-types/research_station.ron
#	server/content/global/zone-types/residential_dispersed.ron
#	server/content/global/zone-types/residential_station.ron
#	server/content/global/zone-types/residential_surface.ron
#	server/content/global/zone-types/rural_aquaculture.ron
#	server/content/global/zone-types/rural_orbital.ron
#	server/content/global/zone-types/rural_pastoral.ron
#	server/content/global/zone-types/security_checkpoint.ron
#	server/content/global/zone-types/wilderness_frontier.ron
#	server/content/npc-conversations/overheard.ron
#	server/content/npc-conversations/overheard.yaml
#	server/content/npc-conversations/overheard.yaml.deprecated
#	tooling/validate-ron
This commit is contained in:
2026-03-17 12:31:38 +01:00
35 changed files with 5115 additions and 1 deletions
+136
View File
@@ -0,0 +1,136 @@
# Zone-Type Template Consistency Review
**Sprint 27 · Ticket #662 · Task #6**
**Reviewed by:** Mellanie
**Files reviewed:** 31 (29 new + 2 canonical references)
---
## Summary
All 31 zone-type templates pass the core authoring criteria. Two issues
were found and resolved: one stale header comment, one cosmetic
inconsistency affecting 5 files.
**Status: PASS — all issues resolved**
---
## Check Results
### 1. RON schema structure
**PASS — all 31 files**
Every file validates against the `ZoneTypeTemplate` schema. All required
fields present: `id`, `subtype`, `label`, `description`, `economic_level`,
`population_density`, `roles`, `social_site_types`. Role entries all have
`id`, `label`, `skill_focus`, `combat_eligible`, `behavior_primitives`.
Primitive tuples all have `action`, `context`, `modifier_hint`.
### 2. Culture-neutrality
**PASS — all 31 files**
No cultural attitudes, speech patterns, naming conventions, or social
assumptions encoded in any action text. All primitives describe physical
behavior and professional practice only. The layer composes cleanly — no
primitive will read as contradicted by a culture modifier.
### 3. modifier_hint coverage
**PASS — all 31 files**
2383 total primitives across all files. Every primitive has
`modifier_hint: Some(...)`. Zero with `None`. All 7 categories represented
across the set: `work_pace`, `physical_manner`, `social_signal`,
`task_completion`, `environmental_scan`, `offduty_posture`, `authority_response`.
### 4. Context tag coverage
**PASS — all 31 files**
All files have OnShift primitives and Social/OffDuty primitives. 18 of 31
files use the `OffDuty` context tag for break/rest behavior alongside
`Social` for interaction primitives (matching the canonical references).
13 of 31 files use `Social` only, folding both posture and interaction under
one tag. Both are schema-valid. The OffDuty/Social split is richer where
the zone character warrants it (security-heavy, institutional, or isolated
settings) and the Social-only approach works where the distinction carries
less meaning. No file is missing off-shift coverage.
### 5. social_site_types coverage
**PASS — all 31 files**
All files declare ≥ 2 social site types. `detention_facility.ron` declares 4
(`guard_post`, `exercise_yard`, `medical_bay`, `administrative_office`), which
is compliant — the schema has no upper bound.
### 6. Role count
**PASS — all 31 files**
All files declare exactly 4 roles. Role labels are appropriate to zone
character and non-overlapping within each file.
### 7. Standalone readability
**PASS — all 31 files**
All action text reads as specific, concrete, and informative without a
culture modifier appended. No primitive requires cultural context to be
legible. The behavior is the information.
### 8. Grammar constraint
**PASS — all 31 files**
All action text accepts trailing prepositional phrases and coordinating
conjunctions cleanly. No action ends in a word that would create a
grammatical collision with modifier additions (e.g., actions ending in
prepositions, incomplete phrases, or conjunction stubs).
---
## Issues
### Issue 1 — Stale header comment in `residential_station.ron` ⚠️ Fix required
**File:** `content/global/zone-types/residential_station.ron`
**Line:** 19
The header comment reads:
```
// Roles: resident, maintenance_tech, block_admin, child (no combat, low authority)
```
The actual implementation has four roles: `resident`, `maintenance_tech`,
`block_admin`, **`security`**. The `child` role was not implemented.
**Fix:** Update header comment to:
```
// Roles: resident, maintenance_tech, block_admin, security
```
### Issue 2 — Missing explanatory comment before `social_site_types` in 5 files (cosmetic)
**Files affected:**
- `content/global/zone-types/entertainment_hospitality.ron`
- `content/global/zone-types/entertainment_venue.ron`
- `content/global/zone-types/residential_station.ron`
- `content/global/zone-types/residential_surface.ron`
- `content/global/zone-types/residential_dispersed.ron`
All other 26 files include the explanatory comment before the
`social_site_types` field:
```ron
// Valid social site types for this zone type.
// Location specs declare which appear, with their own label, min_npcs, max_npcs.
social_site_types: [
```
The 5 affected files go straight to `social_site_types: [` without the comment.
The field itself is correct in all cases — this is a documentation consistency
gap only.
**Fix:** Add the two-line comment block before `social_site_types:` in each
affected file.
---
## No action required
- `detention_facility.ron` declaring 4 social site types: within spec, no upper bound
- OffDuty/Social context variation: intentional, both valid per D-142
- `diplomatic_elite.ron` using `OffDuty` for ambassador and aide social primitives
while protocol officer and security use `Social`: appropriate zone-level distinction