refactor(content): rename mood vocabulary to match voice guide (D-035 Sprint 14 amendment)
Schema and Rust Mood enum renamed for author-friendly vocabulary: fond→warm, comfortable→content, worried→anxious, concerned→frustrated. Dropped: analytical (merged into focused), conflicted (modeled as suspicious+warm collision). Added: hostile. Final 8 moods: anxious, frustrated, content, suspicious, warm, hostile, relieved, focused. Neutral = untagged. Resolves Gestalt's blocking issue on #121. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -461,65 +461,9 @@ For Mellanie — a vocabulary guide per background to use when writing example l
|
||||
|
||||
## Gestalt — Mood → Delivery Validation (2026-02-20)
|
||||
|
||||
**Status: BLOCKING ISSUE — mood vocabulary mismatch between this document and the schema.**
|
||||
**Status: RESOLVED — schema renamed Sprint 14 to match voice guide vocabulary.**
|
||||
|
||||
---
|
||||
|
||||
### The problem
|
||||
|
||||
Chapter 4 uses mood names that do **not match** the D-035 schema enum values or the Rust `Mood` type in `server/src/content/line_pool.rs`. Content authors following this guide will write `mood: warm` in their YAML files, but the schema only accepts `mood: fond`. The selection pipeline will silently skip lines with unrecognized mood tags.
|
||||
|
||||
**Voice guide names:** `neutral`, `anxious`, `frustrated`, `content`, `suspicious`, `warm`, `hostile`, `focused`
|
||||
**Schema/Rust enum names:** `fond`, `comfortable`, `worried`, `suspicious`, `analytical`, `conflicted`, `concerned`, `relieved`, `focused`
|
||||
|
||||
---
|
||||
|
||||
### Mapping table (interim — for use until the vocabulary is reconciled)
|
||||
|
||||
Authors MUST use schema names in YAML files. Use this table to translate from Chapter 4 concepts:
|
||||
|
||||
| Chapter 4 concept | Schema tag to use | Fit quality | Notes |
|
||||
|-------------------|------------------|-------------|-------|
|
||||
| `neutral` | *(no tag — omit mood field)* | ✅ Good | Neutral = baseline = untagged. Selection system defaults to eligible untagged lines. |
|
||||
| `anxious` | `worried` | ✅ Good | Schema description: "Anxious about something specific." Exact match. |
|
||||
| `frustrated` | `concerned` | ⚠️ Imperfect | Schema description: "Worried about someone else's wellbeing." Close enough for v0.1 authoring, but semantically different. |
|
||||
| `content` | `comfortable` | ✅ Good | Schema description: "At ease, relaxed." Good match. |
|
||||
| `suspicious` | `suspicious` | ✅ Exact | Same word. |
|
||||
| `warm` | `fond` | ✅ Good | Schema description: "Warm, affectionate." Exact match. |
|
||||
| `hostile` | *(no clean match)* | ❌ GAP | `hostile` is not in the current schema enum. `conflicted` (torn between impulses) is the closest but doesn't capture adversarial register. See resolution below. |
|
||||
| `focused` | `focused` | ✅ Exact | Sprint 8 addition. Same word. |
|
||||
|
||||
**Uncovered schema values** (not addressed in Chapter 4):
|
||||
- `analytical` — described as "Thoughtful, assessing. Processing information." This is a mood the voice guide doesn't model explicitly. It surfaces in the detective's NPC interaction monologue during passive evidence-gathering. Mellanie: treat as a subdued version of `suspicious` without a specific object — the character is processing, not alarmed.
|
||||
- `relieved` — described as "Tension has eased." The voice guide doesn't model this but it's mechanically useful post-confrontation or after a drop completes cleanly. Author a handful of `relieved` atmosphere lines per character per location; use the opposite of `anxious` as the authoring direction.
|
||||
- `conflicted` — described as "Torn between competing impulses." The voice guide doesn't model this explicitly but it IS the dominant emotional state during the FRIEND arc's middle phase. FRIEND arc lines where the character is caught between loyalty and evidence should carry `conflicted` (not `suspicious` alone).
|
||||
|
||||
---
|
||||
|
||||
### Resolution proposal
|
||||
|
||||
**Recommended resolution (Gestalt proposes — Lead to decide):**
|
||||
|
||||
The voice guide's mood vocabulary is more intuitive for authors. Recommend updating the schema enum and Rust `Mood` type to match Chapter 4 names:
|
||||
|
||||
| Current schema name | Proposed new name | Rationale |
|
||||
|--------------------|-------------------|-----------|
|
||||
| `fond` | `warm` | Chapter 4 name is clearer for authors |
|
||||
| `comfortable` | `content` | Chapter 4 name is clearer |
|
||||
| `worried` | `anxious` | Chapter 4 name is more precise |
|
||||
| `analytical` | keep or → `focused` | Overlaps with `focused`; consider merging |
|
||||
| `conflicted` | keep as `conflicted` | Has specific meaning, Chapter 4 doesn't cover it |
|
||||
| `concerned` | `frustrated` | Schema `concerned` = "worried about others" ≠ author intent; `frustrated` is more useful |
|
||||
| `relieved` | keep as `relieved` | Useful, add coverage in voice guide |
|
||||
| `suspicious` | `suspicious` | No change |
|
||||
| `focused` | `focused` | No change |
|
||||
| *(missing)* | add `hostile` | Required for adversarial register modeled in Chapter 4 |
|
||||
|
||||
This would require: schema update, Rust enum update (5 renames + 1 addition), global enums YAML update, and any existing content using the old names updated. Content volume is low enough that this is feasible now before large-scale authoring begins.
|
||||
|
||||
**Alternative (minimal change):** Update only the voice guide to use the current schema names. Authors use less-intuitive terms but no code changes needed. Lower cost but worse authoring experience.
|
||||
|
||||
---
|
||||
Schema and Rust `Mood` enum updated to use Chapter 4 names directly: `anxious`, `frustrated`, `content`, `suspicious`, `warm`, `hostile`, `relieved`, `focused`. Neutral mood = omit tag (untagged lines are always eligible). `analytical` and `conflicted` dropped (merged into `focused` and modeled as `suspicious`+`warm` collision respectively). `hostile` added. Authors can now use voice guide mood names directly in YAML files.
|
||||
|
||||
### Mood as selection weight — mechanical coherence
|
||||
|
||||
@@ -529,12 +473,8 @@ The selection model in Section 4.3 is mechanically coherent with how the pipelin
|
||||
- Untagged lines remain eligible — correct
|
||||
- Mood-tagged lines are preferred when mood matches — correct
|
||||
|
||||
No issues with the model. The only mechanical problem is the vocabulary mismatch documented above.
|
||||
**Trait modifier system (Chapters 2-3):** Mechanically coherent. Traits are authoring modifiers, not runtime filters. No engine-side trait tracking needed for monologue. The authoring guide is sufficient.
|
||||
|
||||
**Trait modifier system (Chapters 2-3):** Mechanically coherent. Traits are authoring modifiers, not runtime filters. No engine-side trait tracking needed for monologue (unlike NPC dialogue, where trait modifiers shape the transformation guide). The authoring guide is sufficient. ✅
|
||||
**FRIEND arc special case (Section 4.3):** The note about prioritizing mood-tagging for crisis beats is correct. The collision of `suspicious` + `warm` as the trust-contamination zone is the right call.
|
||||
|
||||
**FRIEND arc special case (Section 4.3):** The note about prioritizing mood-tagging for crisis beats is correct. The collision of `suspicious` (or `conflicted` in schema) + `warm` as the trust-contamination zone is the right call — that tension is what makes those lines land. ✅
|
||||
|
||||
---
|
||||
|
||||
**Mood → delivery validation: CONDITIONAL PASS.** The delivery model is mechanically coherent. Blocking issue: vocabulary mismatch with schema must be resolved before Mellanie authors any mood-tagged lines. Lead decision required on resolution path (schema rename vs. voice guide rename). All other mood system design is approved.
|
||||
**Mood → delivery validation: PASS.** The delivery model is mechanically coherent. Vocabulary mismatch resolved. All mood system design approved.
|
||||
|
||||
Reference in New Issue
Block a user