-
Notifications
You must be signed in to change notification settings - Fork 1
Event Model
Events are how things happen in CORVID. Every event is a single step forward in the history of the World. The Observations it 'creates' are derived from the state of the World at that step. The limitation in Observation context scope is a function of that state.
- Subject - source of event
- Object, Relation, Degree - same as Observation
- Object - target
- Relation - nature of the event
- Degree - details
- Indirect Object - An event may be modified by a relationship.
- Example
- "Alice entered the room via the doorway"
- subject(alice) relation(entered) object(theRoom) indirectObject(theDoorway)
- Audience - the referents receiving the events
- Subject Agent uses a
- Dispatcher to create an
- Event which has
- an Object the event targets
- an EventType relation defining the event
- detail parameters
- The Dispatcher
- conveys the Event to all
- Listeners
- relevantly related to the Subject and the Object
- as defined by the EventType
- Listeners match the event to zero or more
- Behaviors which may
- reject the event, unwinding the event cycle and its parents
- or - start zero or more inner event cycles - create zero or more Changes
- If the event was not rejected the Dispatcher adds the Event to the
- History and transmits it over the
- Network
Re-stated:
An Agent creates a hypothetical event and submits it to the Engine to be logged. The Engine propagates it to all entities which could consume or object to the event. An entity objecting to the event and considering it to be non-canonical registers this objection as a new 'meta' (non-world) event, handling of which is described in more detail elsewhere. Until informed otherwise, all participants assume the event happened and update their own private cannon accordingly.
Recipients of events may emit their own events in response. A mirror in the example room might reflect the observation of the woman's entrance to someone located in a position from whence they can observe the doorway. The reflection is a new event filtered through the entity's context, capabilities, etc.
To prevent a house of mirrors from bringing down the nodes it lives on, events must 'degrade' in some sense and 'insignificant' events must not be broadcast. In addition to this, events should include a reference to the trigger event and should check the list of event triggers for references to themsleves and deal with that situation appropriately. In the case of a hall of mirrors, the mirrors should collaborate to make sense of how to represent the situation. A user should not see "Through the mirror you see a mirror showing a mirror showing a mirror ... showing you." Instead they should render their effect in a way more interesting to stories such as "looking around you the mirrors seem to reflect an enormous room in which there are dozens of you visible from various angles. Each of the clones you see moves in time with you, ..." etc.
The Avatar Alice enters a room.
-
She creates a movement event
exitDoorway = new Event({ subject: theDoorway, object: theWoman, iobject: theRoom, relationship: moving, });
-
She submits it to the engine
-
The engine propagates the event to the contents of theDoorway and theRoom
-
All recipients of the event add it to their own cannon.
-
theRoom generates a new event pertaining to Alice's entrance
enterRoom = new Event({ subject: theRoom, object: theWoman, iobject: theDoorway, relationship: accepting, });
-
theDoorway passes this to its contents and its relations (theRoom, theOtherRoom)
-
theRoom creates an event representing Alice's arrival
-
The additional step is necessary to provide the audience with full details of the transition and to ensure the events' vetting is "all or nothing".
-
Each object in theRoom, as well as its own container (theBuilding?) receives this movement event
-
Should an entity in the room, 'Malory' object to Alice's ability to enter the room given the force field he has in place...
Local objects are automatically canonical because that's how the security model works. The emissions of proxied objects are filtered through the policies. It is up to the policies to block events which violate them. If an event passes through the various applicable policies it is effectively local.