Data Flow
Follow one action from caller input to the next terminal snapshot.
Default SDK Flow
In the default path, MEL has already declared the rules, Core computes what should change, and Host converges the next Snapshot. A caller usually enters that loop through the SDK:
caller
-> createManifesto()
-> activate()
-> app.action.<name>.submit(input?)
-> Host
-> Core
-> terminal Snapshot
-> observe.state()/observe.event()/snapshot()That is the application-facing route into the core loop a new developer should keep in mind.
Step by Step
1. The caller activates the runtime and submits an action
Usually with app.action.someAction.submit(...args) or app.action.someAction.submit({ ...params }), depending on the action shape.
2. SDK submits the work
submit() is the canonical v5 ingress path and resolves to a mode-specific runtime result.
3. Host runs the compute/execution loop
Host orchestrates the loop, asks Core to compute semantic transitions, fulfills declared work, and applies Core-emitted concrete patches.
4. Core computes semantic changes
Core stays pure. Given the same schema, snapshot, intent, and materialized context, it computes the same result. Core evaluates Flow semantics, including dynamic patch target resolution, before emitting concrete patches.
5. SDK publishes the terminal snapshot
Once the intent reaches a terminal result, consumers observe it through:
observe.state()for selected state changesobserve.event()for lifecycle telemetrysnapshot()for direct projected reads
Effect Flow
If an action declares an effect, the flow expands like this:
intent
-> Core evaluates action
-> effect declared
-> Host runs matching effect handler
-> handler returns patches
-> patches applied
-> next terminal SnapshotThe effect handler does not bypass Snapshot. Its output still lands as patches.
Optional Approval/History Flow
When you need review, audit history, restore, or approval policies, add the optional extension runtime before activation:
participant
-> createManifesto()
-> withLineage()
-> withGovernance()
-> activate()
-> action.<name>.submit(input?)
-> review / approval flow
-> Host
-> Core
-> terminal Snapshot
-> history seal
-> published snapshot + historyThat is a deliberate deployment choice, not an implicit part of the basic SDK onboarding path.
What New Developers Should Remember
action.<name>.submit()submits runtime work- Snapshot is the visible result
- Effects still resolve through patches
- approval/history composition is optional and explicit
If those four points are clear, the rest of the architecture follows naturally.