Skip to content

Domain profiles ​

A Domain Profile publishes ontology vocabulary over the core wire shapes: profile-specific entry_type labels, relation_type values, body-attribute traits, and modules.* dialects. The core schemas stay unchanged — the vocabulary rides open strings and the optional modules bag. Four profiles are documented on this page; each section lists the published open-string vocabulary integrators can emit and consume.

Narrative structure ​

Beat-assisted narrative outlining over existing SPOKE wire shapes: ordered story pivots, scene atoms, and structural roles.

Published vocabularyWire homeValues
Profile entry typeKnowledgeEntry.entry_typebeat (profile-only label, valid open string)
Structural rolesKnowledgeEntry.body.attributes[].trait_typestructural_role with slots such as midpoint, catalyst, finale
Beat orderingRelation.relation_typeprecedes (or follows) between dual KnowledgeEntry ids
Moment tierTimelineEvent.timeline_scale / Scope.timeline_scalemoment — atomic / scene beats are TimelineEvents at this tier
Beat–entry linkTimelineEvent.extensions.spoketimeline_entry_id pointing at the dual KnowledgeEntry
Parenthetical pausesSourceAnchor.spanscreenplay (beat) pauses on dialogue text

Key statements: an atomic / scene beat is a TimelineEvent with timeline_scale: "moment", optionally paired with a KnowledgeEntry (dual-concern); a structural beat is a BodyAttribute with trait_type: "structural_role"; ordering runs through precedes Relations; selection uses Scope filters with timeline_scale: "moment", timeline_event_ids, or entry_types including beat. The operations library exports moment-scale filters and beat-sheet ordering helpers (filterTimelineEventsByMomentScale, orderTimelineEventsByIds, orderTimelineEventsByPrecedes) — pure functions over caller-supplied arrays.

Lore activation ​

Lore activation defines the fire conditions under which a KnowledgeEntry prefers to surface into assembled context. It lives as the modules.activation inner dialect on the optional modules bag (capability-flagged narrative-modules); matching, scanning, and ranking stay product-local.

Published vocabularyWire homeValues
Trigger keysmodules.activation.keysprimary activation triggers (aliases, names, phrases)
Selective combinationmodules.activation.secondary_keys + .logicand_any, and_all, not_any, not_all
Always-on seedmodules.activation.constanttrue marks an always-on seed candidate (valid with empty keys)
Insertion hintsmodules.activation.order / .priorityordering and tie-break hints
Placement hintsmodules.activation.position_hint / .outletbefore_defs, after_defs, depth, outlet
Match flavormodules.activation.matchliteral, regex, or whole-word key matching (flavor defined by the product scanner)

Key statements: body.summary and AssemblePacket entry snippet read as complete lore facts without the trigger keys (standalone snippet); constant: true entries feed the always-on seed set while keyed entries feed the activation pool; lore adjacency expands through Relation edges.

Knowledge pack ​

A Narrative Knowledge Pack is a portable lore bundle: an ordered set of KnowledgeEntries, Relations, and optional SourceAnchors that travel between narrative hosts. Packs use existing wire atoms plus a product transport envelope for catalog metadata.

Published vocabularyWire homeValues
Pack atomsexisting wire objectsKnowledgeEntry (lore nodes), Relation (graph edges), SourceAnchor (optional provenance)
Catalog metadataproduct transport envelopetitle, version, creator, optional description — not modules.* on KE or AssemblePacket
Per-entry fire conditionsmodules.activation per KnowledgeEntrytravels with each entry when the pack carries activation
Round-tripextensions / modules / open stringsimporters preserve unknown namespaces, unknown module keys, and open-string vocabulary verbatim

Key statements: pack ≠ AssemblePacket (durable library interchange vs ephemeral assemble output); narrative hosts stack multiple packs product-side (world pack, character pack, session pack) — import atoms preserving export order, merge Relation graphs by id, union seed and pool sets, then run activation / scope / budget after the merge; stack policy (priority, override, soft-delete) is product-local.

Assemble recipes ​

Two packet-level companion dialects under the optional AssemblePacket.modules bag: where each assembled entry prefers to inject, and why it was activated.

Published vocabularyWire homeValues
Placement rowsAssemblePacket.modules.placement[]entry_id + position_hint (before_defs, after_defs, depth, outlet), optional depth / outlet
Activation trace rowsAssemblePacket.modules.activation_trace[]entry_id + reason (constant, key) with optional matched-key detail

Key statements: array order is the interchange order — hosts apply their own layout after reading the hints, and an entry may omit a placement row (hosts then use a local default); join placement[] / activation_trace[] to entries[] by entry_id; entry-level modules.activation is the durable authoring home for preferences, while packet-level placement[] is the assembled snapshot for this packet; baseline AssemblePacket stays wire-only slim entries — modules is opt-in via narrative-modules.

Mental state ​

Mental state defines how narrative hosts exchange mental-state data (beliefs, goals, intentions, emotions, observation access) without a shared engine. It lives as three modules.* dialects under capability flags l5-mind + narrative-modules; a temporal record object (MindState) carries derivative snapshots/deltas.

Published vocabularyWire homeValues
Mental fieldsKnowledgeEntry.modules.mentalnine-field vocabulary: identity, beliefs, attention, goals, intentions, emotions, dispositions, norms, constraints
Belief labelsKnowledgeEntry.modules.beliefholder (entry_id or world), proposition, order (0–3), seven-dimension labels (Truth/Access/Representation/Content/Source/Context)
Event observationTimelineEvent.modules.observationobservers: entry_id[], optional access (perceptual constraints)
Temporal recordMindState wire objectmind_state_id, holder_entry_id, snapshot, deltas — strictly derivative

Key statements: the settled home of mental fields and belief labels is the holder KnowledgeEntry modules.mental/modules.belief; MindState is strictly temporal/derivative (no dual authority); false belief = True world fact + False actor belief (one labeled row); unobserved event ⇒ stale belief ⇒ false belief (Knowledge Access derivation).