@miadi/wampum-narrative-engine
v0.1.1
Published
The belt as a narrative model: an authored W/P notation field, narrative anchors placed at (row, col) each holding several co-valid readings, a renewable commitment log, and an open registry of relational reading positions. A peer narrative engine — it ho
Readme
@miadi/wampum-narrative-engine
The belt as a narrative model: an authored W/P notation field, narrative
anchors placed at (row, col) each holding several co-valid readings, a
renewable commitment log, and an open registry of relational reading positions.
In the Miadi stack, this is one of two narrative models. A linear story model such as the
Narrative Context Protocol (@miadi/ncp-story-studio) tells a story as a sequence of beats. A
wampum belt holds a narrative as positions on a field, each read differently from different
relational positions, bound by a commitment that has to be renewed. This package gives that
structure to software without carrying any community's content.
npm install @miadi/wampum-narrative-engineWhat this package is
A peer narrative engine, not a view of another one. It has no dependencies,
and it imports no other narrative schema — deliberately. The moment this package
knows what a Storyform is, the belt has been absorbed into the model it was
meant to stand beside. Crossing between the two is the entire job of @miadi/ncp-wampum-bridge, which is the only
package that knows both.
What it holds that a linear story model does not
| | |
|---|---|
| Position instead of order | An anchor sits at (row, col). anchorsInFieldOrder offers a reading order because a screen needs one — it is not the order, and a caller that treats it as a sequence has put the line back. |
| Several readings, none promoted | NarrativeAnchor.readings maps a perspective id to what that position says. There is no canonical field, on purpose: adding one would collapse the plurality the type exists to hold. |
| A bond that must be re-affirmed | CommitmentLog moves active → under_review → renewed_bond and settles back to active. renewed_bond is not terminal. A record that stays true only by being re-affirmed has no equivalent in a store where everything is true until edited. The status is moved by the people who hold the bond — this package computes no expiry and has no lapsed state. |
| An open set of positions | createRegistry() seeds ELDER, HOST, GUEST, OBSERVER and accepts any id after that. A work with no standing to fill ELDER registers its own positions instead. |
A notation is authored, never derived
blankNotation(rows, columns) returns an unwoven field, and that is a real
state rather than a placeholder — anchors can be placed and read on blank
ground. Nothing in this package will invent a weave from a story, because no
arrangement of events implies a pattern. isWoven() says whether anybody has
woven one, so a consumer can say so rather than presenting blank ground as
meaning.
The generation boundary
mayGenerateInto(perspective) returns false for the sacred register and for
any position requiring consent. A caller that receives false records a refusal;
it does not generate and filter afterwards. A machine reading rendered in an
Elder's register would be mistaken for testimony, and that is the one failure
this boundary exists to prevent.
Custodianship travels on the belt rather than beside it, is never derived and
never defaulted. An absent record reads as absent, never as permission.
Cultural protocol
The seed belts of the tradition (Kaswentha, Hiawatha, Dish with One Spoon, Covenant Chain) are public, community-held treaty records. They are cited as public teachings and are not templates for fiction. This package ships the structure — a field, positions on it, readings, a renewable bond — and no community's content. Build the loom; let the keepers weave.
The research behind it, and the cultural protocol that governs its use, ship as
@miadi/foundations-wampum-narrative-engine.
API
- Types —
Belt,Notation,BeadKind,NarrativeAnchor,CommitmentLog,CommitmentStatus,RelationalPerspective,PerspectiveRegister,BeltCategory,Custodianship - Notation —
blankNotation,cellAt,setCell,notationRows,isWoven - Anchors —
anchorAt,anchorById,readingsOf,anchorsInFieldOrder - Commitment —
openCommitment,callUnderReview,polishTheChain,restToActive - Registry —
SEED_PERSPECTIVES,createRegistry,mayGenerateInto - Validation —
validateBelt(structure only: field size, anchors on the field, unique ids. Whether a belt is right is not decidable by a validator.)
MIT © Miadi
