# 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.