The eyes & ears of agent-supported film production — witness a belt-device recording as a stream of perceptual events and seed a production knowledge graph, honoring relationship rather than extracting footage.
Version: 0.1.0 (draft)
Package: @medicine-wheel/perception-layer
Document ID: rispec-perception-layer-v1
Last Updated: 2026-06-21
A production participant (human or agent) creates a witnessed event stream:
PerceptualEvents.knowledge nodes (metadata.kind) connected by ProductionRelation edges — additive over @medicine-wheel/ontology-core.observedBy), not its extractor.What this enables: An agent becomes part of the production. It does not act on the world — it subscribes and witnesses (Renaud’s “witnessed relationship, not extractive observation”). The eyes/ears metaphor from episode 066 becomes a real, queryable surface that downstream packages cluster and edit.
Structural Tension: Between a raw, opaque recording (a single text blob) and a witnessed, typed, relational stream that the rest of the suite can reason over. Resolved by classification + graph seeding, with the witness recorded in-band.
@medicine-wheel/perception-layer/types)type PerceptualSense = 'ear' | 'eye';
type PerceptualEventType =
| 'transcript-segment' | 'director-intent' | 'ambient-sound' // ear
| 'shot-composition' | 'relational-moment'; // eye
interface PerceptualEvent {
id: string;
sense: PerceptualSense;
type: PerceptualEventType;
text: string;
source: string; // file path or device id
index: number; // order in the stream
observedBy?: string; // AgentParticipant id — the witness
timestamp: string;
}
interface AgentParticipant {
id: string;
name: string;
role: 'witness' | 'observer' | 'storyteller';
signature: string[]; // persistent persona markers carried across sessions
}
interface ProductionGraphSeed {
recording: RelationalNode; // kind: 'recording'
segments: RelationalNode[]; // kind per event type
relations: ProductionRelation[]; // rush-of / witnessed-by
}
ingestTranscript(text, opts): PerceptualEvent[] — segment + classify a transcript via the observer registry.buildProductionGraph(events, opts): ProductionGraphSeed — emit nodes + ProductionRelation edges; each segment is rush-of the recording and witnessed-by the participant.registerParticipant(name, role, signature): AgentParticipant.observers.ts): earObservers + eyeObservers — pure classifiers (shot-composition-observer, ambient-sound-observer, director-intent-observer, relational-witnessing-observer). No world action.@medicine-wheel/ontology-core (RelationalNode, ProductionRelation, NodeType)@medicine-wheel/session-reader (event-stream lineage; optional at runtime)observedBy; capture is relational.knowledge nodes + metadata.kind; no NodeType change.PerceptualEvent shape, not internal state.ProductionRelations with a recorded witness.