Skip to content

Commit 4df3c19

Browse files
committed
Clarify storybeat appreciation and expand player examples
1 parent ec099bd commit 4df3c19

8 files changed

Lines changed: 206 additions & 22 deletions

HISTORY.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
## Recent Schema Updates
44

5+
- Added optional `subtext.storybeats[].appreciation` as a derived interoperability field based on `throughline + scope + sequence`.
6+
- Clarified that Storybeat importers should derive the appreciation identity when the field is omitted so lighter-weight payloads remain compatible.
7+
- Clarified that canonical Storybeat objects do not expose a `signpost` key; any internal grouping should be derived from structural scope, sequence, and parent relationships.
58
- Closed the primary canonical narrative shapes so unexpected keys now fail validation unless a shape explicitly supports extension metadata.
69
- Clarified that Perspective, Player, and Overview IDs are opaque strings. Plain UUIDs are acceptable and type prefixes are optional.
710
- Canonicalized overview labels to the exact Title Case enum values `Logline`, `Genre`, and `Blended Throughlines`.

SPECIFICATION.md

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ Storypoints capture essential thematic concepts and core ideas integral to the n
162162
**Why?** Identifying Storypoints explicitly guides authors in maintaining narrative focus and coherence, allowing them to consistently reflect and reinforce core thematic elements throughout their story.
163163

164164
## Storybeats
165-
Storybeats map the chronological progression of narrative events, clearly delineating significant moments and signposts. They emphasize shifts in thematic exploration and character development, ensuring effective pacing and sustained thematic momentum throughout the narrative.
165+
Storybeats map the chronological progression of narrative events, clearly delineating significant structural turns. They emphasize shifts in thematic exploration and character development, ensuring effective pacing and sustained thematic momentum throughout the narrative.
166166

167167
**Why?** Storybeats help authors manage narrative flow and emotional impact, ensuring each event meaningfully contributes to character arcs and thematic progression, enhancing audience engagement and satisfaction.
168168

@@ -294,7 +294,15 @@ Players own character identity within the narrative. They carry names, roles, se
294294
"visual": "A distinguished man in his late 50s, with silver-streaked hair and piercing blue eyes. He wears a well-tailored suit but often appears slightly disheveled, as if sleep eludes him.",
295295
"audio": "His voice is calm and measured, carrying the weight of experience but occasionally betraying a hint of hesitation when discussing personal matters.",
296296
"summary": "A celebrated trauma specialist whose command over others cannot protect him from unresolved grief.",
297+
"bio": "Michael is a respected trauma specialist whose professional authority cannot resolve the private grief shaping his choices.",
297298
"storytelling": "Michael presents authority and polish, but every personal question exposes how fragile that control really is.",
299+
"motivations": [
300+
{
301+
"narrative_function": "Control",
302+
"illustration": "maintaining professional authority to suppress unresolved grief",
303+
"storytelling": "Michael leans on structure and expertise whenever his personal life threatens to overwhelm him."
304+
}
305+
],
298306
"perspectives": [
299307
{
300308
"perspective_id": "123e4567-e89b-12d3-a456-426614174000"
@@ -334,9 +342,9 @@ Temporal elements that demonstrate how the narrative unfolds over time. Each bea
334342
"storybeats": [
335343
{
336344
"id": "beat_9876bcde",
345+
"appreciation": "Main Character Signpost 4",
337346
"scope": "signpost",
338347
"sequence": 4,
339-
"signpost": 4,
340348
"throughline": "Main Character",
341349
"narrative_function": "Past",
342350
"summary": "Michael can no longer escape his past.",
@@ -350,6 +358,8 @@ Temporal elements that demonstrate how the narrative unfolds over time. Each bea
350358
]
351359
```
352360

361+
`appreciation` is supported on Storybeats as an optional derived interoperability field. When present, it should restate the structural slot identified by `throughline + scope + sequence`, such as `Objective Story Signpost 1` or `Main Character Event 12`. `signpost` is not part of the canonical Storybeat shape; consumers that need internal signpost grouping should derive it from structure or parent relationships instead.
362+
353363
### Dynamics
354364

355365
High-level narrative forces that reflect the author's intent, shaping the story's message and clearly communicating its Narrative Argument.

docs/narrative-context-protocol-schema.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,10 @@ Perspectives are closed authorial POV records; do not place role, conflict, or c
145145

146146
Required keys per item:
147147

148-
- `id`, `name`, `role`, `visual`, `audio`, `summary`, `storytelling`, `perspectives`
148+
- `id`, `name`, `role`, `visual`, `audio`, `summary`, `bio`, `storytelling`, `motivations`, `perspectives`
149149

150150
`perspectives` must be an array of objects, each with required `perspective_id`.
151+
`motivations` must be an array of closed objects with required `narrative_function`, `illustration`, and `storytelling`.
151152
Player identity belongs here, not on `perspectives`.
152153
IDs are opaque strings. Plain UUIDs are fine; type prefixes are optional.
153154

@@ -208,7 +209,7 @@ Required keys per item:
208209

209210
Optional keys:
210211

211-
- `signpost` (1-4)
212+
- `appreciation` (derived structural label such as `Objective Story Signpost 1`)
212213
- `throughline`
213214
- `narrative_function` (validated against canonical enum when provided)
214215
- `custom_narrative_function`, `custom_narrative_function_namespace`
@@ -219,6 +220,8 @@ Optional keys:
219220
- `progression`: `1-16`
220221
- `event`: `1-64`
221222

223+
When `appreciation` is present on a Storybeat, it should restate the structural slot implied by `throughline + scope + sequence`. Canonical Storybeats do not expose a `signpost` key; consumers should derive any internal grouping from structure or parent relationships when the field is omitted.
224+
222225
## Storytelling Model
223226

224227
`storytelling` contains two required arrays:

examples/anora.json

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,20 @@
4545
"visual": "A young dancer with a confident public persona.",
4646
"audio": "Quick, sharp, and defensive when cornered.",
4747
"summary": "A protagonist trying to hold onto self-worth under pressure.",
48+
"bio": "Ani is a young woman fighting to preserve her own sense of worth inside systems eager to commodify her.",
4849
"storytelling": "Ani resists being reduced to a bargaining chip.",
50+
"motivations": [
51+
{
52+
"narrative_function": "Pursuit",
53+
"illustration": "pushing toward a version of life that belongs to her rather than to the people trying to buy or manage her",
54+
"storytelling": "Ani keeps driving forward toward independence, even when every compromise asks her to settle."
55+
},
56+
{
57+
"narrative_function": "Consider",
58+
"illustration": "turning over the implications of each offer, promise, and threat around the marriage",
59+
"storytelling": "Ani repeatedly weighs what each new development means for her freedom and self-respect."
60+
}
61+
],
4962
"perspectives": [
5063
{
5164
"perspective_id": "persp_anora_mc"
@@ -59,12 +72,52 @@
5972
"visual": "Reserved enforcer with controlled body language.",
6073
"audio": "Low, economical speech.",
6174
"summary": "A pressure force pushing Ani toward a harsher worldview.",
75+
"bio": "Igor operates from within a coercive machine and has learned to survive through restraint and practical compromise.",
6276
"storytelling": "Igor challenges Ani's assumptions about freedom and safety.",
77+
"motivations": [
78+
{
79+
"narrative_function": "Help",
80+
"illustration": "stepping in with practical assistance when Ani is cornered by the people controlling the situation",
81+
"storytelling": "Igor helps in concrete ways, offering cover and small acts of protection inside a hostile system."
82+
},
83+
{
84+
"narrative_function": "Conscience",
85+
"illustration": "holding back from the most dehumanizing options even when they would be easier",
86+
"storytelling": "Igor's sense of conscience keeps surfacing whenever the job demands he ignore Ani's humanity."
87+
}
88+
],
6389
"perspectives": [
6490
{
6591
"perspective_id": "persp_anora_ic"
6692
}
6793
]
94+
},
95+
{
96+
"id": "player_anora_vanya",
97+
"name": "Ivan 'Vanya' Zakharov",
98+
"role": "Objective Story Player",
99+
"visual": "A wealthy, impulsive young heir moving through the world with careless entitlement.",
100+
"audio": "Restless, immature speech that pivots quickly from charm to panic.",
101+
"summary": "The privileged son whose recklessness triggers the central conflict around the marriage.",
102+
"bio": "Vanya is the Russian heir whose impulsive relationship with Ani pulls her into the power struggle controlled by his family.",
103+
"storytelling": "Vanya chases pleasure until consequences appear, then tries to back away from what he started.",
104+
"motivations": [
105+
{
106+
"narrative_function": "Avoid",
107+
"illustration": "dodging the obligations and fallout created by his sudden marriage",
108+
"storytelling": "Vanya tries to slip out of responsibility as soon as the relationship threatens his comfort."
109+
},
110+
{
111+
"narrative_function": "Reconsider",
112+
"illustration": "backtracking on grand romantic gestures once family pressure closes in",
113+
"storytelling": "He quickly reconsiders his commitment when the reality of the situation becomes unavoidable."
114+
}
115+
],
116+
"perspectives": [
117+
{
118+
"perspective_id": "persp_anora_os"
119+
}
120+
]
68121
}
69122
],
70123
"dynamics": [

examples/example-story.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,15 @@
6767
"visual": "A rumpled trench coat and tired eyes that miss nothing.",
6868
"audio": "Measured speech with an edge of impatience.",
6969
"summary": "A dedicated detective haunted by unresolved cases.",
70+
"bio": "A veteran investigator whose professional discipline masks unresolved personal grief.",
7071
"storytelling": "John exudes a stoic demeanor, masking the inner turmoil of his past.",
72+
"motivations": [
73+
{
74+
"narrative_function": "Consider",
75+
"illustration": "weighing every lead against the emotional cost of reopening old wounds",
76+
"storytelling": "John keeps circling the evidence, unable to separate the current case from his unresolved history."
77+
}
78+
],
7179
"perspectives": [
7280
{
7381
"perspective_id": "12345678-1234-1234-1234-123456789012"

examples/the-shawshank-redemption.json

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,25 @@
4545
"visual": "Longtime inmate with composed, observant bearing.",
4646
"audio": "Measured narration and dry humor.",
4747
"summary": "A pragmatic survivor who slowly reopens to hope.",
48+
"bio": "Red has survived prison by lowering expectations, trusting routine over the danger of hope.",
4849
"storytelling": "Red interprets Andy's choices against his own institutionalized habits.",
50+
"motivations": [
51+
{
52+
"narrative_function": "Support",
53+
"illustration": "keeping the prison's routines and informal economy running smoothly for everyone involved",
54+
"storytelling": "Red supports the existing system by helping it function day to day, even while privately recognizing its cruelty."
55+
},
56+
{
57+
"narrative_function": "Help",
58+
"illustration": "getting needed items and assistance for inmates who know how to ask",
59+
"storytelling": "He helps people survive Shawshank by supplying favors, tools, and guidance."
60+
},
61+
{
62+
"narrative_function": "Conscience",
63+
"illustration": "hesitating whenever self-protection conflicts with what he knows is right",
64+
"storytelling": "Red's conscience keeps pulling him toward decency, even when survival says to stay uninvolved."
65+
}
66+
],
4967
"perspectives": [
5068
{
5169
"perspective_id": "persp_shawshank_mc"
@@ -59,12 +77,57 @@
5977
"visual": "Quiet, deliberate, and emotionally guarded.",
6078
"audio": "Calm speech under pressure.",
6179
"summary": "A principled outsider who refuses to surrender internal freedom.",
80+
"bio": "Andy enters Shawshank with disciplined intelligence and an unwavering commitment to a life beyond confinement.",
6281
"storytelling": "Andy steadily applies intelligence and persistence to impossible odds.",
82+
"motivations": [
83+
{
84+
"narrative_function": "Pursuit",
85+
"illustration": "continually moving toward a concrete future outside prison walls",
86+
"storytelling": "Andy never stops working toward freedom, even when every circumstance argues for resignation."
87+
},
88+
{
89+
"narrative_function": "Consider",
90+
"illustration": "constantly weighing how each risk, alliance, and setback could move him closer to escape",
91+
"storytelling": "Andy studies each development carefully, turning possibilities over until he can use them."
92+
},
93+
{
94+
"narrative_function": "Oppose",
95+
"illustration": "resisting the prison's attempts to reduce him to obedience and despair",
96+
"storytelling": "He opposes the institution at every level, refusing to let its logic define who he is."
97+
}
98+
],
6399
"perspectives": [
64100
{
65101
"perspective_id": "persp_shawshank_ic"
66102
}
67103
]
104+
},
105+
{
106+
"id": "player_shawshank_norton",
107+
"name": "Warden Samuel Norton",
108+
"role": "Objective Story Player",
109+
"visual": "Authoritarian prison warden with rigid posture and polished public authority.",
110+
"audio": "Controlled, sermon-like speech masking threat and hypocrisy.",
111+
"summary": "The administrator who protects the prison's corruption and punishes anything that threatens it.",
112+
"bio": "Norton uses institutional power, religious posturing, and fear to preserve the corrupt order that benefits him.",
113+
"storytelling": "The warden clings to control by denying threats, rewriting reality, and crushing anyone who exposes the truth.",
114+
"motivations": [
115+
{
116+
"narrative_function": "Avoid",
117+
"illustration": "evading exposure, accountability, and any disruption to his corrupt operation",
118+
"storytelling": "Norton keeps steering away from scrutiny whenever the truth gets close."
119+
},
120+
{
121+
"narrative_function": "Reconsider",
122+
"illustration": "revising plans and tactics the moment Andy's resistance threatens his authority",
123+
"storytelling": "He repeatedly reconsiders his strategy in order to regain control when events stop cooperating."
124+
}
125+
],
126+
"perspectives": [
127+
{
128+
"perspective_id": "persp_shawshank_os"
129+
}
130+
]
68131
}
69132
],
70133
"dynamics": [

0 commit comments

Comments
 (0)