data(content): use WantKind enum keywords in NPC profiles

Change want.primary from narrative strings to WantKind enum keywords
(Safety, Wealth, Knowledge, etc.) across all 20 NPC profiles. Move
narrative text to want.description. Add Happiness to WantKind enum.
Add enum constraint to npc-profile.schema.json so make validate-content
catches invalid values at authoring time.

Fixes silent Want component drop where parse_want_kind() returned None
for all real NPCs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-13 01:19:21 +01:00
co-authored by Claude Opus 4.6
parent 90e6dcb8e9
commit 4c008d6191
21 changed files with 42 additions and 21 deletions
+1 -1
View File
@@ -38,7 +38,7 @@
"type": "object",
"description": "Primary want/need driving this NPC",
"properties": {
"primary": { "type": "string" },
"primary": { "type": "string", "enum": ["Wealth", "Safety", "Knowledge", "Connection", "Power", "Freedom", "Justice", "Revenge", "Happiness"] },
"intensity": { "type": "integer", "minimum": 0, "maximum": 10 },
"description": { "type": "string" }
},
@@ -17,9 +17,10 @@ description: >
regular seat at The Last Shift.
want:
primary: "keep the operation running smoothly and profitably"
primary: "Wealth"
intensity: 7
description: >
Keep the operation running smoothly and profitably.
Devra is the ring's operational brain. She manages external supply chain
coordination, schedules handoffs, and maintains timing between gate transits
and dock processing. She is good at this — better than Nils, though she would
@@ -18,9 +18,10 @@ description: >
commission.
want:
primary: "clear the debt and stop looking over his shoulder"
primary: "Freedom"
intensity: 8
description: >
Clear the debt and stop looking over his shoulder.
Drin wants to return to when the job was just a job — maintenance rounds, dock
inspections, clocking out, going home. The work was repetitive and that was
fine. Now every inspection cycle carries a second calculation: which containers
@@ -18,9 +18,10 @@ description: >
because investigating would mean confronting what the card game created.
want:
primary: "maintain his comfortable position"
primary: "Happiness"
intensity: 4
description: >
Maintain his comfortable position.
Harek has a good thing: security officer with a predictable schedule, card games
at the bar, social capital. He doesn't want promotions (more responsibility, more
visibility). He doesn't want trouble. Secondary want: keep Drin's debt
@@ -20,9 +20,10 @@ description: >
contradiction surfaces.
want:
primary: "protect the operation and the people in it"
primary: "Safety"
intensity: 8
description: >
Protect the operation and the people in it.
Two years in, Kael is shifting from "keep things running" to "keep people
safe." The operation is escalating — higher volume, tighter margins, more
risk. Secondary want: protect Naia from the truth and the consequences.
@@ -18,9 +18,10 @@ description: >
solvent.
want:
primary: "keep the bar viable"
primary: "Wealth"
intensity: 7
description: >
Keep the bar viable.
The Last Shift operates on thin margins. The after-shift crowd is what keeps
the lights on. Lera knows some regulars have grey-market income — she does not
ask where the money comes from because the spending keeps her solvent. Secondary
@@ -22,9 +22,10 @@ description: >
on her personal lattice storage.
want:
primary: "understand the manifest discrepancies"
primary: "Knowledge"
intensity: 7
description: >
Understand the manifest discrepancies.
Maret processes freight schedules and the numbers are not adding up. Container
counts do not reconcile, manifests are revised after Voss's schedule adjustments,
Drin's inspection reports are suspiciously clean. She is paralyzed between duty
@@ -16,9 +16,10 @@ description: >
exactly what she appears to be: a teacher worried about her partner.
want:
primary: "understand what is happening with Kael"
primary: "Knowledge"
intensity: 8
description: >
Understand what is happening with Kael.
Naia and Kael have been together 6 years. It was good — stable, warm,
predictable. Then Kael started coming home late. Evasive answers. Money
that did not match the hours. Stress that Kael will not explain. Naia does
@@ -18,8 +18,9 @@ description: >
without seeing him. Tier 1 in schema; functionally off-stage (tier 0).
want:
primary: "control"
primary: "Power"
description: >
Control.
Grow the operation. Increase volume. Maintain authority over the ring from
a distance. Nils sets volume targets, applies escalation pressure, and makes
personnel decisions. The ring's growth imperative comes from Nils; the
@@ -15,8 +15,9 @@ description: >
attention, convenience is suspicious. Ambiguity is deliberate and unresolved.
want:
primary: "employment"
primary: "Safety"
description: >
Employment.
Find work. Settle in. Start over. Whether this is genuine or a cover story
is left deliberately ambiguous for v0.1.
@@ -18,9 +18,10 @@ description: >
threat to avoid. Second playthrough: "That's me. That's what I was doing."
want:
primary: "answers"
primary: "Knowledge"
intensity: 5
description: >
Answers.
Wants to understand the freight discrepancies. Follows the investigation
methodically. Does not make dramatic decisions on the neutral path -- no
confrontations, no leverage plays, no dramatic revelations.
@@ -19,9 +19,10 @@ description: >
neutral path and the player's actual choices IS the narrative distance traveled.
want:
primary: "stability"
primary: "Safety"
intensity: 4
description: >
Stability.
Keep the day smooth. Keep the operation running, the team safe, the shift
uneventful. Does not make dramatic decisions on the neutral path.
@@ -18,9 +18,10 @@ description: >
a handler.
want:
primary: "get out without getting killed"
primary: "Freedom"
intensity: 9
description: >
Get out without getting killed.
Pell is past the point of wanting to stay. The escalating volume, the increasing
risk, the paranoia — the ring has gone from manageable supplement to existential
threat. Secondary want: find someone — anyone — who can offer protection in
@@ -18,9 +18,11 @@ description: >
wavering to Devra.
want:
primary: "stay useful to the ring without getting caught"
primary: "Power"
intensity: 6
description: >
Prove loyalty to the ring and earn trust.
Stay useful without getting caught.
Renn is the physical courier — lifting, carrying, timing runs through
maintenance corridors during Meridian dead spots. Takes pride in the execution.
The job feels important. Secondary want: prove loyalty to Nils and Devra. Renn
@@ -18,9 +18,10 @@ description: >
match what she observes.
want:
primary: "prove herself at the job"
primary: "Power"
intensity: 5
description: >
Prove herself at the job.
Resha wants to be competent, reliable, valued. She studies shift protocols,
asks questions about procedures, and takes notes. Some of those questions —
about locked bays, irregular schedule changes, containers with routing codes
@@ -17,8 +17,9 @@ description: >
ring members' dialogue.
want:
primary: "profit"
primary: "Wealth"
description: >
Profit.
Deliver. Get paid. Maintain the supply chain. If the operation on Sova is
compromised, Sabel cuts the connection and finds another distribution point.
@@ -21,9 +21,10 @@ description: >
evidence from the detective she calls a friend. The quiet life she wanted is gone.
want:
primary: "keep her life stable and her friendships intact"
primary: "Connection"
intensity: 8
description: >
Keep her life stable and her friendships intact.
Sova was supposed to be quiet — routine calibration checks, scheduled
inspections, paperwork. For 12 months, it was exactly that. Then Naia started
confiding about Kael's late nights, and Sera's competence made her curious, and
@@ -14,8 +14,9 @@ description: >
full of people with secrets, Sess's lack of hidden agenda is camouflage.
want:
primary: "stability"
primary: "Safety"
description: >
Stability.
Do the job. Go home. Don't get involved. The work is steady, the tips are
adequate, the regulars are predictable. No ambitions beyond maintaining
this equilibrium.
@@ -16,8 +16,9 @@ description: >
on watch but visibly nervous to anyone who knows what to look for.
want:
primary: "belonging"
primary: "Connection"
description: >
Belonging.
Do the watch. Don't get noticed. Prove useful. The role is simple — watch,
signal, move — but it is the first thing Tav has been trusted with and
the consequences of failure are immediate and severe.
@@ -17,9 +17,10 @@ description: >
without intent.
want:
primary: "enjoy the good life while it lasts"
primary: "Wealth"
intensity: 5
description: >
Enjoy the good life while it lasts.
Torek is young, single, and flush for the first time. He buys rounds, tips well,
has a new jacket and lattice accessories. He is performing generosity — and the
performance is the problem. In a district where everyone knows everyone's salary,
@@ -18,9 +18,10 @@ description: >
Voss's schedule first.
want:
primary: "operational stability"
primary: "Safety"
intensity: 6
description: >
Operational stability.
Keep his shift running without incident. Clean handoffs, zero incident reports.
The smuggling operation introduces variables he cannot control, but the cut he
receives smooths the rough edges of a supervisor's salary. Secondary want: