You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: HISTORY.md
+4Lines changed: 4 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,10 @@
2
2
3
3
## Recent Schema Updates
4
4
5
+
- Closed the primary canonical narrative shapes so unexpected keys now fail validation unless a shape explicitly supports extension metadata.
6
+
- Clarified that Perspective, Player, and Overview IDs are opaque strings. Plain UUIDs are acceptable and type prefixes are optional.
7
+
- Canonicalized overview labels to the exact Title Case enum values `Logline`, `Genre`, and `Blended Throughlines`.
8
+
- Clarified that import/normalization layers may still accept legacy overview labels such as `logline`, `genre`, `blended_throughlines`, `Premise Overview`, and `Four Throughlines Extraction`, but canonical export/validation now requires the Title Case enum.
5
9
- Added an optional `story.ideation` object for pre-narrative concept development, with required domains `character`, `theme`, `plot`, and `genre` whenever `ideation` is present.
6
10
- Added lightweight shared ideation node validation requiring `id` and `summary`, with open metadata for beginner and LLM-assisted workflows.
7
11
- Added optional `narratives[].status` with canonical values `candidate`, `draft`, and `complete` to represent potential or in-progress narratives without splitting data into separate arrays.
Copy file name to clipboardExpand all lines: SPECIFICATION.md
+21-20Lines changed: 21 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -262,6 +262,8 @@ In this section, we'll explore examples of each narrative aspect, offering a bri
262
262
263
263
Perspectives are where the author positions the source of conflict to communicate the story’s intended meaning, independent of first- or third-person narrative style (those refer to storytelling, not subtext). These Perspectives shape how thematic conflicts are revealed, deepening the story by re-inforcing the author's intended message.
264
264
265
+
Perspectives are closed authorial POV records. They do not carry character identity, role, or conflict metadata; those belong on Players, Storypoints, and Storybeats.
266
+
265
267
For example, in _A Christmas Carol_, each of the four ghosts (Marley included) functions thematically as an Influence Character for Scrooge, sequentially handing off their unique perspectives from one ghost to another. While each ghost brings a distinct angle—progress, past, present, and future—their collective thematic role remains consistent: to provoke Scrooge’s transformation. Each ghost provides a unique lens on his life, amplifying narrative resonance by exploring different facets of the same thematic conflict.
266
268
267
269
Another example can be seen in *Inside Out 2*. Unlike the original *Inside Out*, where Joy alone carries the perspective of the Main Character, the sequel has both Joy and Riley sharing the same thematic perspective of Main Character. They seamlessly pass this viewpoint back and forth, allowing the audience to explore identical thematic issues through two distinct yet interconnected lenses. This shared perspective enriches the narrative by demonstrating how the same thematic conflicts can manifest uniquely in different characters, amplifying emotional resonance.
@@ -271,7 +273,7 @@ The implications for interactive narratives are significant. In interactive stor
271
273
```json
272
274
"perspectives": [
273
275
{
274
-
"id": "perspective_ab12cd34",
276
+
"id": "123e4567-e89b-12d3-a456-426614174000",
275
277
"author_structural_pov": "i",
276
278
"summary": "Michael Radford",
277
279
"storytelling": "Michael Radford has spent his life convincing himself that control is the key to survival, but every step forward only tightens the noose around him. When his instincts betray him at the worst possible moment, he’s forced to confront the truth—his carefully built defenses aren’t protecting him, they’re suffocating him."
@@ -281,28 +283,21 @@ The implications for interactive narratives are significant. In interactive stor
281
283
282
284
### Players
283
285
284
-
Characters whose actions and motivations reveal deeper thematic layers (subtext), moving beyond superficial characterization. Each Player should be linked to one or more relevant Perspectives to maintain narrative coherence.
286
+
Players own character identity within the narrative. They carry names, roles, sensory characterization, summaries, and the links to any Perspectives they express in the story.
285
287
286
288
```json
287
289
"players": [
288
290
{
289
-
"id": "player_def456",
291
+
"id": "123e4567-e89b-12d3-a456-426614174001",
290
292
"name": "Dr. Michael Hayes",
291
-
"role": "the world's leading psychologist",
293
+
"role": "Main Character",
292
294
"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.",
293
295
"audio": "His voice is calm and measured, carrying the weight of experience but occasionally betraying a hint of hesitation when discussing personal matters.",
294
-
"bio": "Dr. Michael Hayes is a renowned psychologist known for his groundbreaking research on trauma and memory. Despite his professional success, he struggles with the ghosts of his past—mistakes he can never take back and patients he couldn’t save. As he delves deeper into the minds of others, he finds himself unable to escape his own unresolved grief.",
295
-
"storytelling": "A psychologist haunted by his past.",
296
-
"motivations": [
297
-
{
298
-
"narrative_function": "Avoid",
299
-
"illustration": "avoiding confronting past failures",
300
-
"storytelling": "In therapy sessions, he changes topics when pressed."
301
-
}
302
-
],
296
+
"summary": "A celebrated trauma specialist whose command over others cannot protect him from unresolved grief.",
297
+
"storytelling": "Michael presents authority and polish, but every personal question exposes how fragile that control really is.",
@@ -348,7 +343,7 @@ Temporal elements that demonstrate how the narrative unfolds over time. Each bea
348
343
"storytelling": "Michael has spent years outrunning his past, but in an instant, it catches up to him. His patient’s words land like a ghostly echo, dredging up memories he’s tried to bury, his composure cracking under the weight of old wounds. For the first time, he isn’t just remembering—he’s reliving it, trapped in a moment he thought he’d left behind.",
@@ -378,16 +373,22 @@ Surface-level narrative elements that quickly orient the audience, such as Logli
378
373
```json
379
374
"overviews": [
380
375
{
381
-
"id": "overview_12345abc",
382
-
"label": "logline",
376
+
"id": "123e4567-e89b-12d3-a456-426614174010",
377
+
"label": "Logline",
383
378
"storytelling": "In a neon-lit cyberpunk metropolis, a determined detective races to outsmart a rogue AI before it reshapes humanity's future.",
384
379
"summary": "A cyberpunk crime thriller about a rogue AI and the detective trying to stop it."
385
380
},
386
381
{
387
-
"id": "overview_67890def",
388
-
"label": "genre_dynamics",
382
+
"id": "123e4567-e89b-12d3-a456-426614174011",
383
+
"label": "Genre",
389
384
"storytelling": "Cyber Noir: Merging shadowy detective intrigue with dystopian futurism to subvert classic crime narratives.",
390
385
"summary": "A fusion of cyberpunk and detective noir."
386
+
},
387
+
{
388
+
"id": "123e4567-e89b-12d3-a456-426614174012",
389
+
"label": "Blended Throughlines",
390
+
"storytelling": "The detective's private guilt, the rogue AI's challenge, the city's institutional corruption, and the unstable alliance between hunter and hunted all converge into one unified audience-facing summary of the argument.",
391
+
"summary": "A single overview blending Main Character, Influence Character, Objective Story, and Relationship Story tensions."
`perspectives` must be an array of objects, each with required `perspective_id`.
151
+
Player identity belongs here, not on `perspectives`.
152
+
IDs are opaque strings. Plain UUIDs are fine; type prefixes are optional.
147
153
148
154
### Dynamics
149
155
@@ -224,9 +230,17 @@ Optional keys:
224
230
225
231
Required keys per item:
226
232
227
-
-`label`, `summary`, `storytelling`
233
+
-`id`, `label`, `summary`, `storytelling`
234
+
235
+
IDs are opaque strings. Plain UUIDs are fine; type prefixes are optional.
236
+
`label` must be exactly one of:
237
+
238
+
-`Logline`
239
+
-`Genre`
240
+
-`Blended Throughlines`
228
241
229
-
`label` must be normalized snake_case (`^[a-z][a-z0-9_]*$`), e.g. `logline`, `genre_dynamics`.
242
+
Canonical exporters should emit those exact Title Case values.
243
+
Importers/normalizers may accept legacy inputs such as `logline`, `genre`, `blended_throughlines`, `Premise Overview`, and `Four Throughlines Extraction`, but they should normalize those values before schema validation or export.
230
244
231
245
### Moments
232
246
@@ -279,7 +293,7 @@ Example (storypoint):
279
293
"summary": "A recurring refusal to accept what is in front of them.",
280
294
"storytelling": "The protagonist keeps dismissing direct warnings.",
0 commit comments