Canonical Vocabulary¶
The terms StoryTangl uses, what they mean, and where they live in the code.
This glossary maps between narratological concepts, engineering metaphors, and implementation names. When design docs, docstrings, or commit messages use these terms, they mean exactly what’s defined here.
Core Graph Primitives¶
Term |
Metaphor |
Definition |
Implementation |
|---|---|---|---|
Entity |
managed object |
Base data structure with identity, labels, tags, and comparison semantics |
|
Registry |
collection |
Indexed collection of entities with criteria-based search |
|
Node |
vertex |
Graph member; may carry state, children, and handler registrations |
|
Edge |
constraint |
Directed link between nodes; carries predicate and effect semantics |
|
Subgraph |
scope boundary |
Named partition of related nodes with source/sink entry points |
|
Graph |
program |
Registry of nodes, edges, and subgraphs with membership and ancestry |
|
Narrative Architecture¶
Term |
Metaphor |
Definition |
Implementation |
|---|---|---|---|
Fabula |
possibility space |
The complete graph of events, characters, and relationships — all possible stories |
|
Episodic process |
execution |
Cursor-driven traversal that collapses fabula into a specific story |
|
Syuzhet |
output trace |
The linear journal of content fragments as experienced by the reader |
|
Block |
instruction |
Traversable structural node that generates content when visited |
|
Scene |
function |
Structural subgraph containing blocks, with local roles and settings |
|
Action |
branch |
Traversable edge representing a player choice between blocks |
|
Actor |
resource |
Non-traversable concept node representing a character |
|
Location |
resource |
Non-traversable concept node representing a place |
|
Role |
dependency slot |
Named placeholder linking a structural node to a required actor |
|
Setting |
dependency slot |
Named placeholder linking a structural node to a required location |
|
Execution Model¶
Term |
Metaphor |
Definition |
Implementation |
|---|---|---|---|
Frame |
stack frame |
Runtime context for a single traversal step: cursor, namespace, phase state |
|
Phase |
compiler pass |
One stage of the resolution pipeline; pure contract on inputs/outputs |
|
Cursor |
program counter |
Current position in the structural graph |
|
Frontier |
enabled set |
Available outgoing edges from the current cursor position |
Computed by |
Namespace |
symbol table |
Scoped mapping of identifiers, layered local → ancestor → domain → global |
|
Ledger |
event log |
Append-only record of patches (state changes) per story instance |
|
Patch |
diff hunk |
Single atomic state change: |
Ledger entries |
Snapshot |
checkpoint |
Serialized graph state at a point in time; replayable with patch log |
|
Provisioning¶
Term |
Metaphor |
Definition |
Implementation |
|---|---|---|---|
Requirement |
package.json line |
Declarative specification of what a dependency edge needs |
|
Offer |
candidate package |
A proposed binding that could satisfy a requirement |
|
Resolver |
package manager |
Walks open dependencies, gathers offers, selects bindings by policy |
|
Provisioner |
provider strategy |
Concrete strategy for generating offers (find, create, template, clone) |
|
Scope group |
search radius |
Set of registries to search for offer candidates, ordered by proximity |
Resolver constructor args |
Binding |
lock-file entry |
Committed assignment of a specific resource to a dependency edge |
Resolved edge with destination |
Narrative debt |
technical debt |
Provisioned concept not yet introduced to the reader via journal |
Bound dependency with no journal coverage |
Narrative credit |
foreshadowing |
Concept introduced in journal before any structural need requires it |
Namespace-published, no dependency yet |
Open Links and Projection¶
Canonical model: Open Links: Requirement-Bearing Edges and the Planning Matrix. The entries below are the shared vocabulary; the model doc owns the definitions, the planning matrix, and the filled audit table.
The canonical pipeline ordering, used consistently across design docs:
binding/admission → projection → live availability → submission → backend
validation → mutation → journal output. Binding answers “can this
relationship be formed?”; projection turns a bound link into the Action that
carries its predicates; live availability — a use-time filter applied after
binding and projection — answers “can this bound relationship be used now?” The
model doc’s “Availability is after binding” section is the source of truth for
that distinction.
Term |
Metaphor |
Definition |
Implementation |
|---|---|---|---|
Open link |
binding site |
The planning primitive: a relationship represented before both endpoints are known — fixed endpoint + |
|
Dependency |
addressed pull |
Open link with the requester fixed and the provider endpoint open. A hard dependency is consumer-side pressure: if it cannot bind, the frontier blocks and provisioning is driven to make a provider exist |
|
Affordance |
broadcast offer |
The same open-link object with the provider fixed and the context endpoint open. Provider-side availability: if no taker, nothing is offered and nothing fails |
|
Fanout |
edge generator |
A cardinality/rule-generation mode that produces many open links — not a third peer of dependency/affordance |
|
Scoped contribution |
open mic |
Cross-domain pattern: a concept visible in the current scope contributes a phase-appropriate artifact (action, info affordance, journal fragment, modifier, redirect) |
Pattern, not a class; sandbox’s |
Dynamic action projection |
JIT menu build |
Phase-local creation of ordinary |
|
Self-fanout |
REPL loop |
A re-entrant game block re-projecting its currently available moves as self-loop actions until a terminal state routes outward. Conceptual coordinate; implemented as a local projector by design |
|
Cleanup ownership |
tag-scoped GC |
Which projector may delete a generated action: a compound key of source-node scoping (the owner’s |
Audit table in the model doc; invariant tests in |
Interaction request |
form submission |
Conceptual name for the client-to-backend submission of a backend-issued interaction id plus collected payload. The wire field remains |
|
Projection provenance |
audit stamp |
Additive, non-authoritative lifecycle metadata recording which projector emitted a generated edge and why. Diagnostic only — never legality authority |
Discriminator tags; sandbox source fields currently ride in |
Dispatch and Behavior¶
Term |
Metaphor |
Definition |
Implementation |
|---|---|---|---|
Behavior |
plugin |
Callable registered for a specific task at a specific priority |
|
Task |
hook point |
Named extension point in the pipeline (e.g., |
Task name string |
Priority |
ordering |
Execution order within a task: EARLY → NORMAL → LATE |
|
Layer |
override scope |
Dispatch tier: SYSTEM < APPLICATION < DOMAIN < INSTANCE |
|
Aggregation mode |
fold strategy |
How multiple handler results combine: |
|
Receipt |
audit record |
Record of what a handler did: blame_id, result, timing |
|
on_ / do_** |
event / handler |
Hook pair: |
|
Content and Presentation¶
Term |
Metaphor |
Definition |
Implementation |
|---|---|---|---|
Fragment |
log record |
Atomic unit of journal output: content, type, source reference, metadata |
|
Content fragment |
prose block |
Text content rendered from a structural node |
|
Choice fragment |
menu item |
Available action with caption, availability status, and blocker diagnostics |
|
Media fragment |
asset reference |
Pointer to media content (image, audio) with staging hints |
|
Journal |
narrative log |
Ordered sequence of fragments constituting the syuzhet so far |
|
RIT |
inventory tag |
Resource Inventory Tag — content-addressed reference to a media asset |
|
Render profile |
Accept header |
Client capability declaration guiding fragment → presentation transformation |
Service-layer configuration |
Staging hints |
CSS-like metadata |
Rendering suggestions (orientation, placement, z-index) for media fragments |
|
Templates and Compilation¶
Term |
Metaphor |
Definition |
Implementation |
|---|---|---|---|
World |
source distribution |
Singleton factory holding scripts, templates, and handlers for a story domain |
|
Script |
source code |
YAML (or other format) defining structural and conceptual content |
Authored |
Compiler |
front-end |
Transforms scripts into a world bundle (graph template + registries) |
|
Materializer |
linker |
Instantiates a live story graph from a compiled world bundle |
|
Template |
class definition |
Prototype data for creating new node instances during provisioning |
Template registries |
Vocabulary bank |
word list |
Themed word/phrase collections for procedural prose generation |
Namespace contributors |
Cross-Cutting Concerns¶
Term |
Metaphor |
Definition |
Implementation |
|---|---|---|---|
Singleton |
immutable constant |
Named, immutable entity serializable by reference |
|
Token |
wrapped constant |
Graph-attachable wrapper adding mutable instance state to a singleton |
|
Domain |
library / plugin |
Named scope contributing variables, handlers, and templates |
|
Scope layer |
stack frame |
Local |
Namespace assembly during |
Source / Sink |
entry / exit |
Dominator and post-dominator nodes of a subgraph scope |
Subgraph structural properties |
Metaphor Families¶
The vocabulary above draws on several metaphor families. When explaining the system, prefer the metaphor that fits the audience:
For software engineers: compiler pipeline, package resolution, event sourcing, stack frames. “The resolver is a dependency solver; the ledger is an event log; phases are compiler passes.”
For narratologists: fabula/syuzhet, kernels/satellites, focalization, morphological functions. “The graph is the fabula; the journal is the syuzhet; dependency edges are Chatman’s kernels.”
For game designers: possibility space, state collapse, choice consequences, character casting. “The story starts wide open and narrows through play; roles are cast at runtime; choices close off branches.”
For the philosophically inclined: Platonic forms casting shadows, Kantian noumenal/phenomenal distinction, quantum superposition collapsing through observation. Use sparingly. These are analogies, not implementations. The engine does not do quantum mechanics.