This is a minimal deterministic companion demo for the paper "Narrative Coupling." It replays the same fixed event stream across multiple profile settings and shows how different active fields and coupling parameters produce different thematic trajectories over time.
The demo focuses on temporal interpretive accumulation inside one profile at a time. It is meant to be small, inspectable, and easy to replay from the command line.
This project does not claim to model full cognition, social interpretation, policy, or memory in any realistic sense. It does not use machine learning, embeddings, or probabilistic sampling. It is a transparent toy mechanism for illustrating one specific point about path-dependent thematic drift.
This demo is a runnable companion to the Narrative Coupling paper:
- Paper (Zenodo): https://zenodo.org/records/19041297
If you use or discuss this demo, please read the paper for the full conceptual framing and scope.
The demo uses exactly three themes:
- warning
- return
- loss
Each event has deterministic symbolic tags and theme hints. Theme totals accumulate through time, decay between steps, receive contradiction penalties, and are clamped by per-theme saturation caps.
The demo includes exactly three profiles:
low_coupling_contradiction_sensitivemoderate_balancedhigh_coupling_weak_damping
They differ in coupling gain, decay, contradiction damping, saturation caps, state-weighting, and modest initial field / initial theme biases.
Two streams are included:
neutral: a six-event ambiguous stream intended to produce visibly different thematic trajectories across profilesbreak: a shorter contradiction-heavy stream intended to test how quickly profiles revise under corrective evidence
Sample deterministic results from the current parameters:
| Stream | Profile | Warning | Return | Loss | Dominant |
|---|---|---|---|---|---|
| neutral | low_coupling_contradiction_sensitive | 0.411 | 0.269 | 0.506 | loss |
| neutral | moderate_balanced | 1.442 | 1.214 | 1.382 | warning |
| neutral | high_coupling_weak_damping | 2.873 | 2.470 | 2.512 | warning |
| break | low_coupling_contradiction_sensitive | 0.079 | 1.635 | 0.158 | return |
| break | moderate_balanced | 0.542 | 2.939 | 0.463 | return |
| break | high_coupling_weak_damping | 1.343 | 3.000 | 0.945 | return |
For each event, the engine:
- Reads the event tags and theme hints.
- Computes overlap for each theme from the event's theme hint plus a transparent amplification term derived from the current active field.
- Converts overlap into theme charge using:
coupling_gain * state_weight * overlap - Applies contradiction penalties to any event-declared contradiction targets.
- Updates theme totals by applying decay, then adding charge, then subtracting contradiction, then clamping to the theme's saturation cap.
- Updates the active field by blending prior field weights, current event tags, and a small theme-derived contribution.
- Derives forward bias from normalized theme totals, including the dominant theme and ranked theme ordering.
All formulas are deterministic and directly inspectable in the source.
The break stream is meant to show revision without magical erasure. Contradiction
does not simply delete prior accumulation. It interacts with coupling gain, decay,
contradiction damping, and the active field built up by earlier events, so cleanup
toward return can be partial and history-dependent.
The neutral stream is intentionally mixed. Early signal and reappearance cues can
support return, interruption and silence can push toward warning or loss, and
the final mixed location cue can stabilize different end states depending on how
strongly a profile reinforces, forgets, and revises what came before.
There is no randomness, no external service, and no hidden persistence. Running the same stream with the same profile always yields the same trace and the same final theme totals.
From a clean clone:
git clone <repo-url>
cd narrative-coupling-demo
python -m pip install -e .
narrative-coupling-demo --stream neutral
narrative-coupling-demo --stream break
narrative-coupling-demo --stream all
narrative-coupling-demo --stream all --pretty --json-out outputs/narrative_coupling_trace.jsonYou can also run the module form after editable install:
python -m narrative_coupling_demo.demo --stream all- The neutral stream should yield visibly different thematic trajectories across profiles, even though the underlying events are identical.
- The break stream should show stronger revision under strong contradiction damping and more persistence under weak damping.
The point is not to declare a correct reading of the stream. The point is to show how active field and coupling parameters steer interpretive accumulation over time.
This is a companion micro-demo, not a full architecture. It models a single profile processing a single stream at a time. It does not represent memory consolidation, cross-profile interaction, world models, uncertainty estimates, or learning across runs.
This project is licensed under CC-BY-NC-4.0 International.
You may use, study, share, and adapt this work for non-commercial purposes with attribution. Commercial use requires separate permission.
See the LICENSE file for details.
Feedback is appreciated. This version is intentionally minimal, and thoughtful suggestions or practical observations may help improve later iterations.
Stephen A. Putman
GitHub: putmanmodel
Email: putmanmodel@pm.me