PB-004 — Storytelling POD Loop · pb-004-storytelling
Owner directive (2026-07-10), canonical. "this is the knowledge for the Storytelling POD and Playbook" [src: wiki/development/prompts-archive/by-topic/knowledge-management-and-concept-modeling.md:690] — with the engine spec: "The Neural Engine dictates the 'Sensory Genome'—applying the stylistic lenses of writers … to procedurally generate descriptions of the environment as the camera moves." [src: wiki/development/prompts-archive/by-topic/knowledge-management-and-concept-modeling.md:726]
Content
The loop that authors a slice's story block — beats, lens, diegetic labels, sensory fields — for any org genome (delivered under bp-003-codeland-engine D9). Run by the venture squads and squad-instance; each pass takes ONE slice from bare geometry to narrated world and lands it through the gateway. The sensory-genome is the engine this playbook feeds; the storytelling-lenses registry is what it selects from. Each table row is one work particle a squad loops on.
| step | action | cookbooks | gear-set | verify gate |
|---|---|---|---|---|
| 1 | Read the genome — load the org strand (library/genomes/orgs/<slug>.json), note theme.variant, palette, world_age, bake_tier, and the target slice's scenery + anchors | cb-sensory-genome | gear.knowledge | genome passes npx tsx scripts/regen-all.ts --check; target slice id exists |
| 2 | Pick the lens — evaluate cogni rule storytelling-lens against the slice's beat kind: establishing/aerial → atmospheric; interaction/economy → ecological; work/craft → land-ethic [src: HOS-Instance/packages/cogni/data/cogni-core.json:39] | — | gear.knowledge | story.lens is exactly one of the registry ids in storytelling-lenses |
| 3 | Write the beats — 1–2 sentences of ORIGINAL prose per beat, diegetic voice only: the world is described from inside it, no menus, no chrome, no second-person UI talk (diegetic-ui) | cb-sensory-genome | gear.page | every beats[].prose non-empty, ≤2 sentences, contains no UI vocabulary (menu/click/page/button) |
| 4 | Set the sensory fields — derive sensory.light, sensory.air, sensory.sound_words from the slice's position on the theme arc per the dawn→dusk mapping | cb-sensory-genome | gear.page | all three fields non-empty; sound_words is a non-empty string array |
| 5 | Label the anchors — fill story.diegetic_labels for every in-scene device on the slice: labels read as signposts/holograms in-world, never as navigation | cb-sensory-genome | gear.page | every anchor id on the slice has a label; zero labels phrased as menu items |
| 6 | Validate — run the house validator over the edited genome | — | gear.ops | npx tsx scripts/regen-all.ts --check exit 0 |
| 7 | Gateway POST — submit the patch via POST /genome/:slug (token, schema-validated, commits to genome-staging) per bp-003-codeland-engine D5 | — | gear.ops | 201 with a commit-sha receipt |
Constraint row (applies to every step): lens names describe nature-writing traditions; the output is ALWAYS original prose. No passage, phrase pattern, or distinctive image from any published author is ever reproduced — see the copyright rules in sensory-genome and storytelling-lenses, and the frame law in diegetic-ui.
Escalation: a slice whose beats cannot be grounded in the org's brand material goes back to the venture squad's Knowledge Analyst (ditto) for source hunting; definition conflicts go to sop-002-conflict-resolution. Never guess past a failed gate.
Composition
- uses: cb-sensory-genome (field derivation) · storytelling-lenses (lens registry) · sensory-genome (target engine) · diegetic-ui (frame constraint) · cogni (rule
storytelling-lens) · gear-sets - used-by: bp-003-codeland-engine (D9 delivery) · squad-instance · pb-001-spatial-site-loop (story pass feeds the slice loop)
See also
- pb-002-library-authoring — the sibling authoring loop for cards
- cycle-daynight — the clock the sensory fields sample
- schema-genome-spatial-strand — where the
storyblock lives