MCCF V6 Design Specification: Event Clusters and EBPS Traceability



Watch the MCCF demo

A short video of the Multi-Channel Coherence Field working in an X3D scene. Watch it on YouTube.



MCCF V6
Design Specification:
Event Clusters and EBPS Traceability

Associates semantically related events across modalities, preserves their causal relationships, and makes the evolution of EBPS state inspectable over narrative time, without adding a second source of truth.

StatusDraft specification for review (revision 2)
Date30 October 2026
BasisWorking proposal of 30 October 2026, revised against the V5 implementation and a reviewer's reading of Agent.observe()
PostureAdditive. V5 EBPS dynamics are unchanged and remain authoritative
Primary usersAuthors, integrators, diagnosticians, researchers
Primary concernObservability and provenance
Record the event once. Associate its manifestations. Record the EBPS transition with provenance. Derive the timeline, the dashboard overlays, replay and diagnostics from that shared history.

What this revision changes. The proposal is adopted in full with six amendments, each grounded in the V5 code: (1) the transition record is reconciled with what Agent.observe() actually changes (verified in code, and by an independent reading of the public main source); (2) Gardener interventions are traced; (3) three separate ordering concepts are defined: take time, a server sequence and a source sequence; (4) an event is a typed reference to existing identities, not a new stream; (5) the first clusters are seeded from structure V5 already has; (6) a non-interference acceptance test is added that seeds every random source. Appendix A lists what was verified against V5 and what remains to confirm.



1. Purpose and scope

The EBPS dashboard shows the present behaviour of the field. It does not keep a durable, inspectable history of how the field arrived there, how that change was expressed across modalities, and what followed. This specification adds an event-cluster and EBPS-trace capability around the existing event pipeline. A cluster groups semantically related occurrences. Transition records link field changes to what caused them. Timeline, dashboard overlay, replay and diagnostic views are projections of this trace.

Decisions this specification makes:

  • Adopt event clusters as semantic associations over existing event identities.
  • Record EBPS transitions with event references, sequence, input and changed fields, and cause.
  • Represent modality as event metadata, not as a separate semantic universe.
  • Build timeline and diagnostic views from the trace, not the other way round.
  • Defer cross-modal inference and any coherence scoring until the trace model is validated.

Out of scope for this increment is listed in Section 16.

2. Terminology

TermMeaning in V6Distinction
EventA uniquely identified occurrence: a dialogue line, a cue, an engine episode, a Gardener action.Has its own identity, time, source and payload or reference.
ModalityThe channel through which an event is observed or expressed: speech, face, gesture, action, narration, sound.A property of an event instance, not the semantic occurrence.
Event clusterA semantic association of events that take part in one narrative occurrence or causal episode.An association, not a replacement for its members.
EBPS transitionA recorded change to the state the EBPS engine holds, linked to what caused it.The live engine state stays authoritative. The record explains its evolution.
ProvenanceThe traceable source, sequence and cause of an event or transition.Supports explanation. Never asserts more certainty than the recorded evidence.
Event cue (V5)A timeline entry in the Events Editor (the Cue element of a scene).Not the same as a trace event. A cue may be the source of one. The Guide glossary must say so.

The term "observation modality" means the channel through which an event is sensed, represented or expressed. It does not make the dashboard a modality, and speech, facial and gesture events are not interchangeable records. They remain distinct events that may be associated with one occurrence.

3. Architecture

A traceability layer sits beside the existing event and EBPS path. It observes and records. It does not take ownership of any EBPS calculation.

Figure 1. Processing flow


Figure 1. The trace layer records references and transitions. The engine continues to compute field behaviour.

3.1 Logical model



Figure 2. A cluster associates event records and transition records. Views are projections over these records.

Membership is associative. An event may belong to more than one cluster, and a cluster may hold several events and transitions. The trace supports these relationships:

  • memberOf: event to cluster.
  • causedBy: transition to event, action or rule.
  • expresses / observes: event to semantic occurrence or associated event, where known.
  • respondsTo: event to preceding event, where the sequencing is known. V5 dialogue already carries this (see Section 4).
  • affects: transition to agent or field scope.

4. Event identity (amendment 4)

V5 has no single event envelope. Different parts of the system identify things differently, so a "V6 event stream" would create exactly the parallel identities this specification forbids. Instead, an event is a typed reference to an identity that already exists, plus the trace metadata.

Source in V5Identity todayReference formChange needed
Dialogue lineLine id (for example line_new_v5t92). Unique, checked by Schematron.dialogue:<lineId>None. Its trigger (declared:n or sensed:<lineId>) already gives a respondsTo link.
Timeline cuetriggerRef only (for example EC_cue_restored_1). No id attribute.cue:<triggerRef>Give each cue a stable id; keep triggerRef working.
Engine episodeNone. A dict in the episode log with from, to, channels, outcome_delta, timestamp.episode:<id>Issue an id, a sequence number and an interaction id when the episode is logged.
Gardener actionEntry in the intervention log with action, agent, reason, timestamp.gardener:<id>Issue an id and sequence; route it into the trace as a transition.
Zone, waypoint, cameraName or id in the scene file.zone:<id> etc.None for Phase 1.

Rule: the trace never copies a payload. It stores the reference, modality, direction, agent and target, source, sequence and time. The payload stays where it already lives.

5. Timebase and ordering (amendment 3)

The EBPS engine runs on the server. Cues, gesture playback and X3D animation run in the browser. These are two clocks. The channel vector today carries a floating-point wall-clock time, and ordering is only the position in an in-memory list, which is lost on restart. A single server sequence is necessary but not sufficient. Three separate concepts are kept:

ConceptIssued byPurpose
takeTimeShared playback timeline of the take (seconds from take start)Aligns browser cues, gestures and audio with server-side interactions. It is the alignment mechanism.
sequenceServer, when a record is accepted into the take traceOne unambiguous, persisted append order. The canonical recording order. Not necessarily the order in which things happened in the browser.
sourceSequenceEach event producer, in particular the browserPreserves the producer's own order when events arrive late, batched or out of order. Lets the trace detect missing or reordered browser events.

The server also keeps receipt time for diagnostics. Wall-clock time is not used to synchronise across systems. Where clocks cannot be reconciled the trace says so (see Section 12, incomplete intervals) rather than inventing an order.

6. EBPS transition record (amendment 1)

The proposal sketched a transition as before and after values for the E and B channels. V5 does not work that way. E, B, P and S arrive as the input to Agent.observe(), called from CoherenceField.interact(). One call to observe() does the following (checked in the local V5 source and, independently, in the public main source):

Step in observe()What it does
1. Pair recordCreates or retrieves the directed CoherenceRecord for the other agent. If the fidelity limit is reached, the new record is created inactive with a shortened history.
2. RegulationApplies the agent's affect regulation to the incoming E value, producing a regulated vector. B, P and S pass through. Regulation itself is not changed by observe().
3. HistoryAppends the regulated vector to the pair history, which also updates the record's credibility.
4. MetaStateRecomputes coherence, surprise, learning progress, uncertainty, novelty, valence, intrinsic reward and mode. MetaState is an aggregate over all the agent's known relationships, so one observation can change the whole agent, not only the pair.
5. IdentityUpdates identity traits and the episode count.
6. CCSUpdates coupling strength and appends to its history.
7. Delta historyAppends the outcome delta to the rolling window, evicting the oldest entry when full.

Two further facts shape the record. interact() builds a perturbed, mirrored vector for the second agent, so the two agents receive related but different inputs. And the pair coherence score is computed from the record history when asked for. It is derived, not independent stored state.

Record a transition for each observation the engine commits, and tie the two observations of one interaction together with an interaction id. Fields:

FieldContent
transitionId, interactionUnique id, and the id of the interaction that links both agents' observations. The originating event is referenced.
takeTime, sequence, sourceSequenceAs in Section 5.
agent, counterpartThe direction of this observation.
inputThe actual E, B, P, S vector this agent received, with outcome delta and dissonance flag. For the second agent this is the mirrored vector, not the originator's.
regulatedThe vector actually appended to the pair history.
pairRecordCreation, fidelity status, the history append, and the credibility change.
metaStateBefore and after for each stored MetaState field.
identityTrait deltas and episode count.
ccsPrevious and new coupling strength, and the history entry.
deltaHistoryThe appended outcome delta and any rolling-window eviction.
provenanceCause (interact, gardener, coupler, rule, operation), mechanism, and causeRef to the event or action.
engine versionVersion and schema identifier sufficient to interpret the record, and the source commit it was built from.

Stored versus derived. Pair coherence, echo risk, entanglement and alignment coherence are derived from recorded history and the engine version. They are not stored as independent state. Where a snapshot is useful for inspection, it is labelled a snapshot and is never authoritative.

6.1 The Gardener is a source of transitions (amendment 2)

The Gardener can adjust regulation, reweight channels, reset identity drift to the cultivar baseline, nudge a mode and set coupling strength. These change state outside interact() and are logged separately with a reason. If they are not traced, an author will see a character change with no event to explain it. Each intervention is recorded as a transition with cause gardener, its reason, and before and after for the fields it changed (regulation, channel weights, identity traits, mode conditions, CCS). A reset of identity drift is shown as such on the timeline.

Prefer recording only changed fields plus a reference to the prior state or checkpoint. Full snapshots may be taken at cluster boundaries and checkpoints. They are not copied into every event.

The transition table must be frozen against one exact source commit. It was checked against the local V5 tree and against the public main source by an independent reader. If the two differ, the commit that ships is the authority.

7. Constituent event metadata

Retain each existing event contract. Add or standardise, where not already present:

  • modality: speech, facial, gesture, action, narration, audio, visual observation, or a declared extension value.
  • direction: inputToEBPS, outputFromEBPS, bidirectional, notApplicable.
  • agent and target: the originating and affected entities, where known.
  • seq and t: as in Section 5.
  • source: subsystem, authoring asset, sensor, dialogue engine, sequencer, external input.
  • confidence / status: optional, always distinct from EBPS values.
Direction belongs to the event instance, not to the modality. Speech can enter EBPS as received dialogue, and speech can be produced as the expression of an existing EBPS state. The record states the role this event played in the sequence.

8. Event clusters (amendment 5)

A cluster is a lightweight association: a stable id, an author-facing label, participants, member references, derived time bounds, and optional relationships. It never duplicates event payloads and never forces a single-cluster partition.

Seed clusters from structure V5 already has. A dialogue line, its generated audio, and the gesture and face cues that accompany it, chained by trigger (declared or sensed), already form a natural cluster. The first increment derives these automatically and read-only. Authoring and annotation of clusters wait for Phase 5. The reference test scene is Garden of the Goddess, which has two Anna lines connected by a sensed trigger.

9. Vocabulary, storage and validation

  • Namespace. The trace has its own namespace and version, for example http://mccf.artistinprocess.com/trace/v1, used as the default namespace of the trace document. The proposal's mccf: prefix does not match V5 practice.
  • Validation. A dedicated XSD and Schematron pair, built as the PI lesson schema was, validated with the existing validator and fixtures.
  • Storage. One append-only trace file per take under scenes/<scene>/arcs/<take>/, written in batches. A record sent again with the same id replaces its earlier line. Nothing blocks the tick on storage.
  • Header. MCCF version, schema version, engine and build identifiers, trace level, clock mapping, and any incomplete intervals.

9.1 Illustrative XML

Conceptual only. Element names, cardinalities and datatypes must be reconciled with the V5 schema before implementation. All numbers, ids and the engine identifier are illustrative.

<Trace xmlns="http://mccf.artistinprocess.com/trace/v1" schemaVersion="1.0"
       scene="GardenOfTheGoddess_Scene01" take="take_003" level="summary"
       engine="mccf-core" source="commit:TO-BE-FROZEN">

  <Event id="ev-41" ref="dialogue:line_new_v5t92" modality="speech"
         direction="inputToEBPS" agent="Anna" target="Jack" source="dialogEngine"
         takeTime="12.30" sequence="41" sourceSequence="7"/>

  <Transition id="tr-42" interaction="ix-17" agent="Jack" counterpart="Anna"
              cause="interact" causeRef="ev-41"
              takeTime="12.31" sequence="42">
    <Input E="0.40" B="0.30" P="0.20" S="0.10"/>
    <Regulated E="0.28" B="0.30" P="0.20" S="0.10"/>
    <PairRecord credibilityBefore="0.80" credibilityAfter="0.78"/>
    <MetaState field="mode" before="explore" after="repair"/>
    <Ccs before="0.70" after="0.71"/>
  </Transition>

  <Transition id="tr-43" interaction="ix-17" agent="Anna" counterpart="Jack"
              cause="interact" causeRef="ev-41"
              takeTime="12.31" sequence="43">
    <Input E="0.43" B="0.29" P="0.22" S="0.10"/>  <!-- mirrored, perturbed -->
    ...
  </Transition>

  <Transition id="tr-45" agent="Jack" cause="gardener" causeRef="gardener:int-3"
              takeTime="19.80" sequence="45">
    <Intervention action="regulate" before="0.60" after="0.70"
                  reason="stagnation report"/>
  </Transition>

  <Cluster id="cl-1042" label="Jack learns of the pregnancy">
    <Member eventRef="ev-41"/>
    <Member transitionRef="tr-42"/>
    <Member transitionRef="tr-43"/>
  </Cluster>
</Trace>

10. Timeline and authoring experience

The principal user-facing deliverable is an event-cluster timeline that aligns events, modalities and EBPS transitions on one axis.

 

mccf_v6_fig1.png 


Figure 3. Illustrative cluster timeline. Events keep their own identities. Transitions are linked to the event or action that caused them. The Gardener appears as its own lane.

10.1 Capabilities

  • Expand and collapse a cluster to inspect its events.
  • Filter by agent, modality, source, EBPS field, or transition cause.
  • Overlay EBPS fields and selected derived measures against the sequence.
  • Select a transition to see input, before and after values, cause and linked events.
  • Select an expressive event to see the recorded state at the time it was produced, where recorded.
  • Replay a cluster in sequence, optionally synchronised with the dashboard.
  • Compare intended, generated and received expression when the source data holds those distinctions.

10.2 Reaper analogy and a shared component

The authoring model is a multitrack audio workstation: the event stream is the performance, transitions are automation curves, modalities are tracks, and a cluster is a named passage. The analogy concerns aligned inspection and editing. It does not make EBPS audio, and it does not mean every transition is authorable. The lane view is also what the Route Editor needs to show timer imports and exports (register item IMPL-R36), so the lane component should be built once and shared.

The dashboard remains the live view of current field state. The timeline adds history and provenance. Neither silently becomes the source of truth for the other.

11. Coherence: what to measure and what not to

V6 lets an author inspect relationships across modalities. It does not impose a rule that all modalities agree numerically. Concealment, restraint, irony and misreading are valid narrative choices. Anna may feel compassion, speak reassuringly, show sadness and use a restrained gesture, and Jack may read that gesture differently from her intention. The sequence can be coherent because of those differences.

The distinctions below are kept in metadata and links where V5 already has the concept. V5 has no data for the last three, so they are optional unknown fields and are not Phase 1 deliverables.

ConceptMeaningV5 data today
Field stateWhat the EBPS engine currently holds.Yes (engine state, Librarian snapshots)
ExpressionWhat the agent emits through speech, face, gesture or action.Yes (dialogue lines, cues, gesture and expression clips)
PerceptionWhat another agent or subsystem receives or infers.No
InterpretationThe meaning a character, subsystem or author assigns.No
Audience knowledgeWhat the narrative makes available to the observer.No
V6 preserves these distinctions. It does not invent inference certainty or collapse them into a single coherence score.

12. Runtime, persistence and replay

  • Emit transition records at a defined commit boundary after the engine has calculated and accepted a change.
  • Use stable ids plus deterministic sequence numbers so order survives equal timestamps.
  • Support trace levels: off, summary, detailed. Verbose collection is never mandatory for normal playback.
  • Buffer or batch persistence. Never block scene behaviour on slow storage. The trace never sits in the tick path as a synchronous write.
  • Make loss visible. If records are dropped, mark the affected interval or cluster as incomplete rather than presenting a misleading complete history.
  • Keep live state and trace history separate.

A trace supports visualisation and diagnostic replay. It does not guarantee deterministic reconstruction. Deterministic replay also needs all relevant inputs, timing decisions, random seeds (V5 scenes carry a seed attribute), engine versions, external dependencies and state checkpoints. Every replay is labelled with the fidelity it can actually provide: visual, diagnostic, or deterministic.

13. Versioning, compatibility and migration

  • V5 event and EBPS behaviour works unchanged when tracing is off.
  • The trace vocabulary is versioned in its own namespace.
  • Existing ids are reused where stable. No parallel identities are created for the same event.
  • Older events that lack modality, direction or provenance are marked unknown, not guessed.
  • V5 scenes and assets load without clusters. Clusters are added incrementally.
  • Exported traces carry the MCCF version, schema version and engine and build identifiers.

14. Validation and acceptance criteria (amendment 6)

AreaCriterion
IdentityEvery trace event and transition has a stable, resolvable id. Cluster membership does not duplicate payloads.
CausalityA transition names its cause, its causing event or action, its sequence and agent scope.
State fidelityRecorded input, regulated vector and before and after values agree with the engine's committed state at the capture boundary. Each agent's own received vector is recorded.
OrderingThe timeline gives a stable order from sequence numbers even when timestamps are equal or coarse.
ModalityThe same modality can be input or output depending on the event instance.
MultiplicityA cluster can hold several modalities and events. An event can belong to several clusters.
GardenerEvery Gardener intervention in a take appears as a transition with its reason.
PerformanceTrace collection does not materially disturb real-time sequencing. Levels and buffering are configurable.
CompatibilityV5 assets run unchanged with tracing off, and can be annotated incrementally.
Non-interferenceRun the same scene with tracing off and then on, with every random source reset identically (the novelty term in compute_meta_state() uses random.uniform, and the mirrored vector in interact() uses random.gauss). The tracing path must not consume random values. Compare the full final state: MetaState, identity, CCS, pair histories and credibility, delta history, not just the visible coherence field.
DiagnosticsAn unexpected transition can be navigated to its event, source and cluster.
HonestyIncomplete intervals and replay limits are stated explicitly.

15. Implementation sequence

PhaseWork
1. Vocabulary and contractGive cues and engine episodes stable ids and server sequence numbers. Define the trace namespace, XSD and Schematron. Define the minimal event, transition and cluster contracts. Freeze the transition table against one source commit. Validate on fixtures.
2. Runtime instrumentationOptional capture at the commit boundary in interact() (both observations, one interaction id) and in each Gardener method. Link transitions to events. Trace levels. Incomplete-trace signalling. Write the per-take trace file.
3. Inspection and timeline

Read-only cluster and timeline view with event lanes, a Gardener lane and EBPS transition curves. Drill-down from transition to event and source. Derived clusters from dialogue chains. Share the lane component with the Route Editor.
4. Replay and diagnosticsCluster replay where supported, dashboard synchronisation, trace export, regression fixtures including the non-interference test.
5. Authoring assistanceCreate and manage clusters, annotate relationships, compare expressions, inspect cross-modal coherence. Automated suggestions only after trace quality is established.

Risks and mitigations

RiskMitigation
Over-instrumentation raises runtime cost.Trace levels, selective capture, batching, profiling.
The trace becomes a second source of truth.Engine state is authoritative. Records are observations of committed transitions. The non-interference test enforces it.
False causal certainty.Record explicit causes separately from inferred associations. Mark unknown or inferred links.
Ambiguous cluster boundaries.Allow overlapping associations. Never force a single partition.
Brittle modality list.Controlled values with namespace-qualified extensions. Preserve unknown values.
Coherence metrics flatten dramatic nuance.Start with inspectable relationships and author annotations, not a scalar score.
Replay mistaken for determinism.Declare replay fidelity and capture requirements.
Two clocks disagree.Server sequence is authoritative. State the clock mapping. Mark unreconcilable intervals.

16. Out of scope for the initial V6 increment

  • Replacing or redesigning EBPS field equations, couplings or tick semantics.
  • Requiring every event to belong to exactly one cluster.
  • Treating any one modality as the canonical form of an event.
  • Automatically inferring character intent, audience interpretation or emotional truth from expression.
  • A universal cross-modal coherence score.
  • Guaranteeing deterministic replay without complete capture of runtime dependencies.
  • Changing V5 asset validity or requiring a server-side service for local scene operation.

Appendix A. Findings against the V5 implementation

The proposal listed seven questions to resolve against V5. Answers from the code, with what remains to confirm.

QuestionFinding
Authoritative event envelope and ID policy?None. Dialogue lines have ids; cues have triggerRef only; engine episodes have no id. Schematron checks id uniqueness for dialogue lines only. Resolved by the typed-reference rule (Section 4).
Where is a transition committed?CoherenceField.interact(): observe() on the first agent, a perturbed mirrored observe() on the second, then the episode is appended to the log. Gardener methods change state separately. observe() changes the pair record and credibility, MetaState, identity, CCS and the delta history (Section 6).
Are values timestamped or sequenced?Timestamped with wall-clock floats. Not sequenced. Order is list position, lost on restart. Resolved by takeTime, sequence and sourceSequence (Section 5).
State, delta or derived?Input: channel vector (raw, then regulated). Stored: pair history and credibility, MetaState, identity, CCS and history, delta history. Derived: pair coherence, echo risk, entanglement, alignment coherence. Resolved in Section 6.
Does the event model express source, target, cause, response?Episodes: source and target (from, to), no cause. Dialogue: a response link through the trigger. Cues: triggerRef. Gardener: action, agent and reason. Cause must be added to episodes.
Which persistence options fit local-host?Takes already live in scenes/<scene>/arcs/<take>/. A per-take append-only file fits. The PI performance log already uses the same pattern.
Which schemas own validation?mccf.xsd and mccf_rules.sch exist for scenes. The trace gets its own pair and namespace.

Still to confirm

  • The exact source commit the transition table is frozen against (local tree versus public main).
  • How browser-side cue and playback time is reported to the server per take, and how late or out-of-order batches are handled.
  • The cost of adding ids to cues and episodes for existing scenes (migration).
  • Whether credibility is updated inside add_episode() on every path (confirmed only from the call site, not its body).

Revision 2 incorporates an independent review of Agent.observe() against the public main source. Prepared as a design specification for review. XML fragments and diagrams are illustrative; final names and contracts are reconciled against the V5 schema and documentation during Phase 1.




Comments

Popular posts from this blog

MCCF Philosophy & Manifesto

Domain Awareness: Trust But Verify: Schemas, Metacognition, and the Limits of LLM Intelligence

AI Folk Art