@xmachines/docs 1.0.0-beta.19 → 1.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api/@xmachines/play/README.md +1 -1
- package/api/@xmachines/play/classes/PlayError.md +4 -4
- package/api/@xmachines/play/type-aliases/PlayEvent.md +3 -3
- package/api/@xmachines/play-actor/README.md +2 -2
- package/api/@xmachines/play-actor/classes/AbstractActor.md +4 -4
- package/api/@xmachines/play-actor/interfaces/PlaySpec.md +2 -2
- package/api/@xmachines/play-actor/interfaces/Routable.md +3 -3
- package/api/@xmachines/play-actor/interfaces/ViewMetadata.md +3 -3
- package/api/@xmachines/play-actor/interfaces/Viewable.md +2 -2
- package/api/@xmachines/play-dom/classes/PlayRenderer.md +4 -4
- package/api/@xmachines/play-dom/functions/connectRenderer.md +1 -1
- package/api/@xmachines/play-dom/functions/renderSpec.md +1 -1
- package/api/@xmachines/play-dom/interfaces/ConnectRendererOptions.md +7 -7
- package/api/@xmachines/play-dom/interfaces/DomRenderContext.md +7 -7
- package/api/@xmachines/play-dom/interfaces/PlayDomOptions.md +3 -3
- package/api/@xmachines/play-dom/type-aliases/DomComponentRenderer.md +1 -1
- package/api/@xmachines/play-dom/type-aliases/DomRegistry.md +1 -1
- package/api/@xmachines/play-react/README.md +1 -1
- package/api/@xmachines/play-react/classes/PlayErrorBoundary.md +5 -5
- package/api/@xmachines/play-react/functions/useActor.md +1 -1
- package/api/@xmachines/play-react/functions/useSignalEffect.md +1 -1
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryProps.md +4 -4
- package/api/@xmachines/play-react/interfaces/PlayErrorBoundaryState.md +3 -3
- package/api/@xmachines/play-react/interfaces/PlayRendererProps.md +6 -6
- package/api/@xmachines/play-react/type-aliases/PlayActor.md +1 -1
- package/api/@xmachines/play-react/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-react-router/classes/ReactRouterBridge.md +21 -21
- package/api/@xmachines/play-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-react-router/functions/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-react-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-react-router/interfaces/PlayRouterProviderProps.md +5 -5
- package/api/@xmachines/play-react-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-react-router/interfaces/RouterBridge.md +4 -4
- package/api/@xmachines/play-router/README.md +1 -1
- package/api/@xmachines/play-router/classes/BaseRouteMap.md +4 -4
- package/api/@xmachines/play-router/classes/RouterBridgeBase.md +21 -21
- package/api/@xmachines/play-router/functions/buildRouteTree.md +1 -1
- package/api/@xmachines/play-router/functions/connectRouter.md +1 -1
- package/api/@xmachines/play-router/functions/createBrowserHistory.md +1 -1
- package/api/@xmachines/play-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-router/functions/createRouter.md +1 -1
- package/api/@xmachines/play-router/functions/detectDuplicateRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/extractMachineRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/findRouteById.md +1 -1
- package/api/@xmachines/play-router/functions/findRouteByPath.md +1 -1
- package/api/@xmachines/play-router/functions/getNavigableRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/getRoutableRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/getTransitionReachableRoutes.md +1 -1
- package/api/@xmachines/play-router/functions/isRouteReachable.md +1 -1
- package/api/@xmachines/play-router/functions/machineToGraph.md +1 -1
- package/api/@xmachines/play-router/functions/routeExists.md +1 -1
- package/api/@xmachines/play-router/functions/sanitizePathname.md +1 -1
- package/api/@xmachines/play-router/functions/validateRouteFormat.md +1 -1
- package/api/@xmachines/play-router/functions/validateStateExists.md +1 -1
- package/api/@xmachines/play-router/interfaces/BaseRouteMapping.md +3 -3
- package/api/@xmachines/play-router/interfaces/BrowserHistory.md +14 -14
- package/api/@xmachines/play-router/interfaces/BrowserWindow.md +14 -14
- package/api/@xmachines/play-router/interfaces/ConnectRouterOptions.md +4 -4
- package/api/@xmachines/play-router/interfaces/MachineEdgeData.md +3 -3
- package/api/@xmachines/play-router/interfaces/MachineNodeData.md +5 -5
- package/api/@xmachines/play-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-router/interfaces/RouteInfo.md +8 -8
- package/api/@xmachines/play-router/interfaces/RouteMap.md +4 -4
- package/api/@xmachines/play-router/interfaces/RouteNode.md +10 -10
- package/api/@xmachines/play-router/interfaces/RouteObject.md +2 -2
- package/api/@xmachines/play-router/interfaces/RouteTree.md +5 -5
- package/api/@xmachines/play-router/interfaces/RouteWatcherHandle.md +3 -3
- package/api/@xmachines/play-router/interfaces/RouterBridge.md +4 -4
- package/api/@xmachines/play-router/interfaces/VanillaRouter.md +4 -4
- package/api/@xmachines/play-router/type-aliases/MachineGraph.md +1 -1
- package/api/@xmachines/play-router/type-aliases/RouteMetadata.md +1 -1
- package/api/@xmachines/play-signals/README.md +2 -2
- package/api/@xmachines/play-signals/functions/watchSignal.md +1 -1
- package/api/@xmachines/play-signals/interfaces/ComputedOptions.md +2 -2
- package/api/@xmachines/play-signals/interfaces/SignalComputed.md +2 -2
- package/api/@xmachines/play-signals/interfaces/SignalOptions.md +2 -2
- package/api/@xmachines/play-signals/interfaces/SignalState.md +3 -3
- package/api/@xmachines/play-signals/interfaces/SignalWatcher.md +4 -4
- package/api/@xmachines/play-signals/type-aliases/WatcherNotify.md +1 -1
- package/api/@xmachines/play-solid/README.md +1 -1
- package/api/@xmachines/play-solid/functions/useActor.md +1 -1
- package/api/@xmachines/play-solid/interfaces/PlayRendererProps.md +6 -6
- package/api/@xmachines/play-solid/type-aliases/PlayActor.md +1 -1
- package/api/@xmachines/play-solid/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-solid-router/README.md +1 -1
- package/api/@xmachines/play-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-solid-router/classes/SolidRouterBridge.md +22 -22
- package/api/@xmachines/play-solid-router/functions/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-solid-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-solid-router/interfaces/AbstractActor.md +4 -4
- package/api/@xmachines/play-solid-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-solid-router/interfaces/PlayRouterProviderProps.md +5 -5
- package/api/@xmachines/play-solid-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-solid-router/interfaces/RouterBridge.md +4 -4
- package/api/@xmachines/play-solid-router/type-aliases/RoutableActor.md +1 -1
- package/api/@xmachines/play-solid-router/type-aliases/SolidRouterHooks.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/classes/TanStackReactRouterBridge.md +21 -21
- package/api/@xmachines/play-tanstack-react-router/functions/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/createRouteMapFromTree.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/extractMachineRoutes.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/extractParams.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/functions/extractQueryParams.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-tanstack-react-router/interfaces/PlayRouterProviderProps.md +5 -5
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouteNavigateEvent.md +3 -3
- package/api/@xmachines/play-tanstack-react-router/interfaces/RouterBridge.md +4 -4
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-react-router/type-aliases/TanStackRouterLike.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/README.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/classes/RouteMap.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/classes/SolidRouterBridge.md +22 -22
- package/api/@xmachines/play-tanstack-solid-router/functions/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-tanstack-solid-router/interfaces/PlayRouterProviderProps.md +5 -5
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouteMapping.md +3 -3
- package/api/@xmachines/play-tanstack-solid-router/interfaces/RouterBridge.md +4 -4
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/RoutableActor.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterInstance.md +1 -1
- package/api/@xmachines/play-tanstack-solid-router/type-aliases/TanStackRouterLike.md +4 -4
- package/api/@xmachines/play-vue/README.md +1 -1
- package/api/@xmachines/play-vue/functions/defineRegistry.md +1 -1
- package/api/@xmachines/play-vue/functions/useActor.md +1 -1
- package/api/@xmachines/play-vue/interfaces/PlayRendererProps.md +5 -5
- package/api/@xmachines/play-vue/type-aliases/ComponentEntry.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/ComponentsMap.md +1 -1
- package/api/@xmachines/play-vue/type-aliases/DefineRegistryOptions.md +2 -2
- package/api/@xmachines/play-vue/type-aliases/PlayActor.md +1 -1
- package/api/@xmachines/play-vue/variables/PlayRenderer.md +1 -1
- package/api/@xmachines/play-vue-router/README.md +1 -1
- package/api/@xmachines/play-vue-router/classes/RouteMap.md +7 -7
- package/api/@xmachines/play-vue-router/classes/VueBaseRouteMap.md +7 -7
- package/api/@xmachines/play-vue-router/classes/VueRouterBridge.md +22 -22
- package/api/@xmachines/play-vue-router/functions/createRouteMap.md +1 -1
- package/api/@xmachines/play-vue-router/interfaces/PlayRouteEvent.md +7 -7
- package/api/@xmachines/play-vue-router/interfaces/RouteMapping.md +4 -4
- package/api/@xmachines/play-vue-router/interfaces/RouterBridge.md +4 -4
- package/api/@xmachines/play-vue-router/type-aliases/RoutableActor.md +1 -1
- package/api/@xmachines/play-vue-router/variables/PlayRouterProvider.md +1 -1
- package/api/@xmachines/play-xstate/README.md +1 -1
- package/api/@xmachines/play-xstate/classes/PlayerActor.md +12 -12
- package/api/@xmachines/play-xstate/functions/buildRouteUrl.md +1 -1
- package/api/@xmachines/play-xstate/functions/composeGuards.md +1 -1
- package/api/@xmachines/play-xstate/functions/composeGuardsOr.md +1 -1
- package/api/@xmachines/play-xstate/functions/contextFieldMatches.md +1 -1
- package/api/@xmachines/play-xstate/functions/definePlayer.md +2 -2
- package/api/@xmachines/play-xstate/functions/deriveRoute.md +2 -2
- package/api/@xmachines/play-xstate/functions/eventMatches.md +1 -1
- package/api/@xmachines/play-xstate/functions/formatPlayRouteTransitions.md +1 -1
- package/api/@xmachines/play-xstate/functions/hasContext.md +1 -1
- package/api/@xmachines/play-xstate/functions/isAbsoluteRoute.md +1 -1
- package/api/@xmachines/play-xstate/functions/negateGuard.md +1 -1
- package/api/@xmachines/play-xstate/interfaces/PlayerConfig.md +3 -3
- package/api/@xmachines/play-xstate/interfaces/PlayerFactoryResumeOptions.md +2 -2
- package/api/@xmachines/play-xstate/interfaces/PlayerOptions.md +6 -6
- package/api/@xmachines/play-xstate/interfaces/RouteContext.md +5 -5
- package/api/@xmachines/play-xstate/type-aliases/ComposedGuard.md +1 -1
- package/api/@xmachines/play-xstate/type-aliases/Guard.md +1 -1
- package/api/@xmachines/play-xstate/type-aliases/GuardArray.md +1 -1
- package/api/@xmachines/play-xstate/type-aliases/PlayerFactory.md +1 -1
- package/api/@xmachines/play-xstate/type-aliases/RouteMachineConfig.md +4 -4
- package/api/@xmachines/play-xstate/type-aliases/RouteStateNode.md +4 -4
- package/api/@xmachines/shared/functions/defineXmVitestConfig.md +2 -2
- package/api/@xmachines/shared/functions/xmAliases.md +1 -1
- package/package.json +5 -3
- package/rfc/broker.md +100 -0
- package/rfc/browser.md +44 -0
- package/rfc/cli.md +118 -0
- package/rfc/git.md +61 -0
- package/rfc/mcp.md +43 -0
- package/rfc/node.md +36 -0
- package/rfc/play.md +447 -0
- package/rfc/rest.md +102 -0
- package/rfc/run.md +159 -0
- package/rfc/streams.md +168 -0
- /package/api/{_media → rfc}/play.md +0 -0
package/rfc/run.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# RFC: Run
|
|
2
|
+
|
|
3
|
+
**Status:** Draft
|
|
4
|
+
**Version:** 1
|
|
5
|
+
**Scope:** Machine execution, runs, events, ports, snapshots
|
|
6
|
+
**Non-goals:** Transport protocols, persistence backends
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Purpose
|
|
11
|
+
|
|
12
|
+
This RFC defines what a **run** is and how machines execute in XMachines.
|
|
13
|
+
|
|
14
|
+
A run is the sole execution unit.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 2. Core Concepts
|
|
19
|
+
|
|
20
|
+
### 2.1 Machine
|
|
21
|
+
|
|
22
|
+
A deterministic state transition system.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
### 2.2 Run
|
|
27
|
+
|
|
28
|
+
A **run** is a single execution lineage of a machine.
|
|
29
|
+
|
|
30
|
+
Properties:
|
|
31
|
+
|
|
32
|
+
- bound to exactly one machine
|
|
33
|
+
- progresses only by events
|
|
34
|
+
- history is immutable
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
### 2.3 Run Identity
|
|
39
|
+
|
|
40
|
+
- Run IDs are **opaque and hash-like**
|
|
41
|
+
- The algorithm is **Git OID–compatible**
|
|
42
|
+
- With Git enabled: run ID **is** a commit hash
|
|
43
|
+
- Without Git: the same algorithm is used
|
|
44
|
+
|
|
45
|
+
Run IDs never change and never require migration.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 3. Lifecycle
|
|
50
|
+
|
|
51
|
+
### 3.1 Creation
|
|
52
|
+
|
|
53
|
+
- forked from a machine
|
|
54
|
+
- initial state only
|
|
55
|
+
- no applied events
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
### 3.2 Progression
|
|
60
|
+
|
|
61
|
+
- events are applied sequentially
|
|
62
|
+
- batches are atomic (all-or-nothing)
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
### 3.3 Completion
|
|
67
|
+
|
|
68
|
+
- completion is machine-defined
|
|
69
|
+
- runs may remain open indefinitely
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## 4. Ports
|
|
74
|
+
|
|
75
|
+
All ports are **Web Streams**.
|
|
76
|
+
|
|
77
|
+
### `in`
|
|
78
|
+
|
|
79
|
+
WritableStream of events.
|
|
80
|
+
The only external mutation mechanism.
|
|
81
|
+
|
|
82
|
+
### `out`
|
|
83
|
+
|
|
84
|
+
ReadableStream of outputs emitted by the machine.
|
|
85
|
+
|
|
86
|
+
### `err`
|
|
87
|
+
|
|
88
|
+
ReadableStream of errors.
|
|
89
|
+
|
|
90
|
+
### `snapshot`
|
|
91
|
+
|
|
92
|
+
ReadableStream of snapshots.
|
|
93
|
+
|
|
94
|
+
Snapshots are:
|
|
95
|
+
|
|
96
|
+
- produced internally
|
|
97
|
+
- observable externally
|
|
98
|
+
- **never writable or triggerable externally**
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 5. Events
|
|
103
|
+
|
|
104
|
+
- immutable
|
|
105
|
+
- ordered
|
|
106
|
+
- atomic
|
|
107
|
+
- deterministic
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 6. Snapshots
|
|
112
|
+
|
|
113
|
+
Snapshots are materialized state views.
|
|
114
|
+
|
|
115
|
+
Rules:
|
|
116
|
+
|
|
117
|
+
- optional
|
|
118
|
+
- derived from events
|
|
119
|
+
- never replace event history
|
|
120
|
+
- represent latest truth
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 7. Determinism
|
|
125
|
+
|
|
126
|
+
Given the same machine and ordered event sequence,
|
|
127
|
+
a run is deterministic.
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## 8. Concurrency
|
|
132
|
+
|
|
133
|
+
- single-writer semantics
|
|
134
|
+
- concurrent senders serialize at `in`
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 9. Errors
|
|
139
|
+
|
|
140
|
+
- errors are observable via `err`
|
|
141
|
+
- fatality is machine-defined
|
|
142
|
+
- errors do not mutate history
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## 10. Invariants
|
|
147
|
+
|
|
148
|
+
1. Events are the only mutation mechanism
|
|
149
|
+
2. Snapshots are read-only externally
|
|
150
|
+
3. History is immutable
|
|
151
|
+
4. IDs are Git OID–compatible
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 11. Lock statement
|
|
156
|
+
|
|
157
|
+
> A run is the execution of a machine driven solely by ordered events.
|
|
158
|
+
> All interaction happens through streams.
|
|
159
|
+
> This is Run.
|
package/rfc/streams.md
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# RFC: Streams
|
|
2
|
+
|
|
3
|
+
**Status:** Draft
|
|
4
|
+
**Version:** 1
|
|
5
|
+
**Scope:** Stream primitives, transforms, framing, durability
|
|
6
|
+
**Non-goals:** Execution semantics, protocols, storage backends
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Purpose
|
|
11
|
+
|
|
12
|
+
This RFC defines the **stream abstraction** used throughout XMachines.
|
|
13
|
+
|
|
14
|
+
Streams are the **only integration boundary** between:
|
|
15
|
+
|
|
16
|
+
- runtimes
|
|
17
|
+
- transports
|
|
18
|
+
- durability backends
|
|
19
|
+
- adapters (REST, MCP, Git, server, browser)
|
|
20
|
+
|
|
21
|
+
Everything that moves data in XMachines moves through **streams**.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 2. Canonical Stream Type
|
|
26
|
+
|
|
27
|
+
### 2.1 Web Streams (authoritative)
|
|
28
|
+
|
|
29
|
+
All streams in XMachines are defined using **WHATWG Web Streams**:
|
|
30
|
+
|
|
31
|
+
- `ReadableStream<T>`
|
|
32
|
+
- `WritableStream<T>`
|
|
33
|
+
- `TransformStream<I, O>`
|
|
34
|
+
|
|
35
|
+
This applies uniformly to:
|
|
36
|
+
|
|
37
|
+
- browsers
|
|
38
|
+
- Node.js
|
|
39
|
+
- servers
|
|
40
|
+
- workers
|
|
41
|
+
|
|
42
|
+
No other stream type is part of the core contract.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### 2.2 Node.js interop (non-core)
|
|
47
|
+
|
|
48
|
+
Node classic streams (`stream.Readable`, `stream.Writable`) are **not** part of the
|
|
49
|
+
contract.
|
|
50
|
+
|
|
51
|
+
Interop with Node streams is handled by explicit Node adapter packages
|
|
52
|
+
(see [Node RFC](node.md)).
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 3. Stream Roles
|
|
57
|
+
|
|
58
|
+
Streams appear in four distinct roles:
|
|
59
|
+
|
|
60
|
+
| Role | Type | Meaning |
|
|
61
|
+
| -------- | -------------- | ------------------------ |
|
|
62
|
+
| Input | WritableStream | accepts events |
|
|
63
|
+
| Output | ReadableStream | emits outputs |
|
|
64
|
+
| Error | ReadableStream | emits errors |
|
|
65
|
+
| Snapshot | ReadableStream | emits materialized state |
|
|
66
|
+
|
|
67
|
+
Roles are never overloaded.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 4. Transforms
|
|
72
|
+
|
|
73
|
+
A **transform** is a `TransformStream` that:
|
|
74
|
+
|
|
75
|
+
- preserves ordering
|
|
76
|
+
- preserves backpressure
|
|
77
|
+
- does not buffer unbounded data
|
|
78
|
+
|
|
79
|
+
Transforms are the **only mechanism** for:
|
|
80
|
+
|
|
81
|
+
- framing (NDJSON, SSE)
|
|
82
|
+
- durability
|
|
83
|
+
- filtering
|
|
84
|
+
- projection
|
|
85
|
+
- multiplexing
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## 5. Framing Transforms
|
|
90
|
+
|
|
91
|
+
### 5.1 NDJSON
|
|
92
|
+
|
|
93
|
+
- newline-delimited JSON
|
|
94
|
+
- one logical record per chunk
|
|
95
|
+
- ordering preserved
|
|
96
|
+
- used for logs and bulk streaming
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
### 5.2 SSE
|
|
101
|
+
|
|
102
|
+
- text-based framing
|
|
103
|
+
- browser-friendly
|
|
104
|
+
- transform-only
|
|
105
|
+
- no protocol semantics
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
### 5.3 JSON (single value)
|
|
110
|
+
|
|
111
|
+
- non-streaming
|
|
112
|
+
- used for snapshots and acknowledgements
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 6. Durability Transforms
|
|
117
|
+
|
|
118
|
+
Durability is implemented as **stream transforms**.
|
|
119
|
+
|
|
120
|
+
Examples:
|
|
121
|
+
|
|
122
|
+
- Git-backed transforms
|
|
123
|
+
- Valkey-backed transforms
|
|
124
|
+
- filesystem-backed transforms
|
|
125
|
+
|
|
126
|
+
Rules:
|
|
127
|
+
|
|
128
|
+
- append-only
|
|
129
|
+
- ordering preserved
|
|
130
|
+
- replayable
|
|
131
|
+
- never implicit
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 7. Replay & Projection
|
|
136
|
+
|
|
137
|
+
**Replay** is reading from a durable stream and piping it into another stream.
|
|
138
|
+
|
|
139
|
+
**Projection** is transforming a stream into another representation **without
|
|
140
|
+
changing semantics**.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 8. Backpressure & Cancellation
|
|
145
|
+
|
|
146
|
+
- Backpressure MUST be respected
|
|
147
|
+
- Cancellation MUST propagate across transforms
|
|
148
|
+
- Closing a stream signals upstream cancellation
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 9. Invariants
|
|
153
|
+
|
|
154
|
+
1. Web Streams are the only core abstraction
|
|
155
|
+
2. Everything is a stream or transform
|
|
156
|
+
3. Framing does not change semantics
|
|
157
|
+
4. Durability is implemented as transforms
|
|
158
|
+
5. Ordering is preserved
|
|
159
|
+
6. Replay is deterministic
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 10. Lock statement
|
|
164
|
+
|
|
165
|
+
> Streams are the universal integration boundary in XMachines.
|
|
166
|
+
> All execution, transport, durability, and projection is expressed as streams
|
|
167
|
+
> and transforms.
|
|
168
|
+
> This is Streams.
|
|
File without changes
|