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>
This commit is contained in:
@@ -253,7 +253,7 @@ Every dialogue line requires 6 structural tags + up to 3 selection tags.
|
||||
|
||||
| Tag | Type | Format | Description |
|
||||
|-----|------|--------|-------------|
|
||||
| `id` | string | `{location}_{d}_{###}` | Stable line ID. Machine-parseable. Never reused. |
|
||||
| `id` | string | `{npc-slug}_d_{###}` | Stable line ID. Machine-parseable. Never reused. NPC-scoped per D-035 Sprint 15 amendment. |
|
||||
| `text` | string | The line | The authored dialogue text |
|
||||
| `role` | enum | lowercase-slug | Template role, not NPC name. NPCs fill roles at runtime. |
|
||||
| `access` | list | `[public, insider, ...]` | D-028 Layer 1 hard filter. Who can hear this. |
|
||||
@@ -352,7 +352,7 @@ Same trigger, different pool. That's how mirror moments work.
|
||||
|
||||
| Tag | Type | Description |
|
||||
|-----|------|-------------|
|
||||
| `id` | string | `{location}_m_{s\|d}_{###}` — `s` for smuggler, `d` for detective |
|
||||
| `id` | string | `{npc-slug}_m_{s\|d}_{###}` — `s` for smuggler, `d` for detective. NPC-scoped per D-035 Sprint 15 amendment. |
|
||||
| `text` | string | The monologue line (160 char max) |
|
||||
| `character` | enum | `smuggler` or `detective` |
|
||||
| `trigger` | enum | What causes this line to fire (see trigger types below) |
|
||||
@@ -630,7 +630,7 @@ Before submitting any content, run through these checks. Items marked **HARD** w
|
||||
|
||||
### Dialogue Lines
|
||||
|
||||
- [ ] **HARD:** `id` matches pattern `{location}_d_{###}` (lowercase, underscore-separated)
|
||||
- [ ] **HARD:** `id` matches pattern `{npc-slug}_d_{###}` (e.g. `kael-davan_d_001`) — NPC-scoped per D-035 Sprint 15 amendment
|
||||
- [ ] **HARD:** `role` is a valid lowercase slug matching a template role
|
||||
- [ ] **HARD:** `access` is a non-empty list of valid access tier enums
|
||||
- [ ] **HARD:** `trust` is one of `surface`, `real`, `secret`
|
||||
@@ -643,7 +643,7 @@ Before submitting any content, run through these checks. Items marked **HARD** w
|
||||
|
||||
### Monologue Lines
|
||||
|
||||
- [ ] **HARD:** `id` matches pattern `{location}_m_{s|d}_{###}`
|
||||
- [ ] **HARD:** `id` matches pattern `{npc-slug}_m_{s|d}_{###}` (e.g. `pc-smuggler_m_s_001`) — NPC-scoped per D-035 Sprint 15 amendment
|
||||
- [ ] **HARD:** `text` is 160 characters or fewer
|
||||
- [ ] **HARD:** `trigger` is a valid trigger enum
|
||||
- [ ] **HARD:** Character partition: smuggler lines in smuggler files, detective in detective files
|
||||
@@ -755,9 +755,9 @@ All YAML content files must validate against their JSON Schema:
|
||||
|
||||
| Content Type | Pattern | Example |
|
||||
|-------------|---------|---------|
|
||||
| Dialogue | `{location}_d_{###}` | `transit_d_044` |
|
||||
| Monologue (smuggler) | `{location}_m_s_{###}` | `transit_m_s_011` |
|
||||
| Monologue (detective) | `{location}_m_d_{###}` | `transit_m_d_042` |
|
||||
| Dialogue | `{npc-slug}_d_{###}` | `kael-davan_d_001` |
|
||||
| Monologue (smuggler) | `{npc-slug}_m_s_{###}` | `pc-smuggler_m_s_001` |
|
||||
| Monologue (detective) | `{npc-slug}_m_d_{###}` | `pc-detective_m_d_001` |
|
||||
|
||||
IDs are stable identifiers. Once assigned, never reused or reassigned. Number gaps are acceptable.
|
||||
|
||||
@@ -865,20 +865,20 @@ Every generated line must pass:
|
||||
### Step 2: Assign Tags
|
||||
|
||||
```yaml
|
||||
- id: transit_d_071
|
||||
- id: dock-worker_d_071
|
||||
text: "Morning. Voss kept the rotation thin -- we've got a clear window after 14:00."
|
||||
role: dock-worker
|
||||
access: [insider]
|
||||
trust: real
|
||||
situation: [shift_start]
|
||||
topic: [cargo, routine]
|
||||
mood: [comfortable]
|
||||
mood: [content]
|
||||
tags: [ring-operational]
|
||||
```
|
||||
|
||||
### Step 3: Validate
|
||||
|
||||
- `id`: `transit_d_071` -- valid pattern.
|
||||
- `id`: `dock-worker_d_071` -- valid pattern (NPC-scoped per D-035 Sprint 15 amendment).
|
||||
- `role`: `dock-worker` -- valid slug.
|
||||
- `access: [insider]` -- only ring members hear this. Detective never sees it. Correct.
|
||||
- `trust: real` -- requires earned trust. Not surface-level small talk. Correct for operational ring dialogue.
|
||||
|
||||
Reference in New Issue
Block a user