The Incidents exposed by any plugin have two things in common: a) they have a selector (either defined on its props or inherited from its Group parents) and b) they take animated attributes passed on the animatedAttrs key of their attributes (key-value pairs).

E.g. (anime plugin):

//TODO example

When a plugin’s Incidents enter a Clip’s timeline, the later generates and preserves a distinct, unique Channel for it. This Channel stores every single mono-Incident of the plugin that enters the Clip, with all of its positioning and construction information.

No addition or edit action can be performed on any of the Clip’s plugin’s Incidents if the plugin’s Channel doesn’t first check and approve it. This check and approval operation takes place on every single addition & edit action on any of the Clip’s Incidents.

Neither MotorCortex final users nor MotorCortex plugin developers will ever need to mess with Channels as this functionality is on the core of the system and it’s automatically handled by MotorCortex itself, it’s good to know this though as you might experience add or edit rejections due to conflicts.

There are cases where plugins use other plugins’ Incidents. For example plugin B might use Incidents of plugin A, placing them with specific order and duration, forming a complex/composite action. In turn, plugin C might use plugin B’s Incidents along with plugin D’s Incidents to form even more complex and higher-level Incidents and so on. No matter if plugin A’s Incidents have been explicitly created by the developer or have been instantiated on the background by Incidents of other plugins, still they participate in all add & edit checks and still they are handled and monitored directly by their own plugin’s Channel on the Clip.