Files
settled-reach/content/_meta
jpmschweitzerandClaude Sonnet 4.6 c056ea1a1c feat(content): migrate line IDs to NPC-scoped namespace (D-035)
Line IDs in all dialogue and monologue pool files renamed from the
old location-scoped format (e.g. the-terminal_d_039) to the new
NPC-scoped format (e.g. kael-davan_d_001) per the D-035 Sprint 15
amendment.

Changes:
- 20 dialogue pool files across 3 locations renamed
- 14 monologue pool files (detective + smuggler) renamed
- Schema descriptions updated in dialogue/monologue schema files
- Authoring style guide and design docs updated with new examples
- Multi-location NPCs (kael-davan, pc-detective, pc-smuggler) given
  globally unique cross-file sequences to satisfy XREF uniqueness check

The location-scoped scheme already caused a collision (the-terminal_d_039
appearing in multiple NPC files) and would not scale to procedurally
generated NPC populations (D-029). Zero content changes — pure ID
substitution.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-23 21:04:43 +01:00
..

Content Infrastructure

Directories prefixed with _ are infrastructure, not game content. The server content loader skips directories starting with _ when scanning for content files.

  • _meta/ — Infrastructure metadata (this directory)
  • _schema/ — JSON Schema validation files (draft 2020-12)

Directory Hierarchy

Content is organized hierarchically to match the game universe:

content/
  content.yaml              # Manifest: campaign list, glob discovery patterns
  global/                   # Cross-campaign shared content (factions, enums, knowledge)
  campaigns/
    {campaign}/             # e.g., "main"
      campaign.yaml
      systems/
        {system}/           # e.g., "krenn"
          system.yaml
          stations/
            {station}/      # e.g., "sova"
              station.yaml
              districts/
                {district}/ # e.g., "transit"
                  district.yaml
                  npcs/
                  locations/
                  triangles/
                  dialogue/
                  monologue/
                  routines/
                  templates/

Canonical ID Derivation

Identity is derived from directory path at load time — no redundant ID fields in YAML.

  • District: {system}.{station}.{district} (e.g., krenn.sova.transit)
  • NPC (within district): npc:{slug} (e.g., npc:kael-davan)
  • NPC (cross-district): npc:{district}.{slug} (e.g., npc:transit.kael-davan)
  • Location: {system}.{station}.{district}.location.{slug}

Content Discovery

The loader reads content.yaml for enabled campaigns and their glob patterns. District discovery uses systems/**/districts/*/district.yaml — no per-district manifest entry needed. Adding a district = creating a directory with district.yaml.