footprintjs 9.9.0 → 9.10.0

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.
Files changed (227) hide show
  1. package/AGENTS.md +9 -9
  2. package/CLAUDE.md +82 -753
  3. package/README.md +51 -20
  4. package/dist/esm/advanced.d.ts +52 -0
  5. package/dist/esm/detach.d.ts +59 -0
  6. package/dist/esm/index.d.ts +202 -0
  7. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +475 -0
  8. package/dist/esm/lib/builder/FlowChartBuilder.js +4 -3
  9. package/dist/esm/lib/builder/index.d.ts +11 -0
  10. package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +349 -0
  11. package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.d.ts +77 -0
  12. package/dist/esm/lib/builder/typedFlowChart.d.ts +25 -0
  13. package/dist/esm/lib/builder/types.d.ts +154 -0
  14. package/dist/esm/lib/capture/envelope.d.ts +169 -0
  15. package/dist/esm/lib/capture/index.d.ts +16 -0
  16. package/dist/esm/lib/capture/policies.d.ts +42 -0
  17. package/dist/esm/lib/capture/summarize.d.ts +65 -0
  18. package/dist/esm/lib/contract/defineContract.d.ts +18 -0
  19. package/dist/esm/lib/contract/index.d.ts +14 -0
  20. package/dist/esm/lib/contract/openapi.d.ts +18 -0
  21. package/dist/esm/lib/contract/schema.d.ts +13 -0
  22. package/dist/esm/lib/contract/types.d.ts +105 -0
  23. package/dist/esm/lib/decide/decide.d.ts +47 -0
  24. package/dist/esm/lib/decide/evaluator.d.ts +39 -0
  25. package/dist/esm/lib/decide/evidence.d.ts +22 -0
  26. package/dist/esm/lib/decide/index.d.ts +12 -0
  27. package/dist/esm/lib/decide/types.d.ts +111 -0
  28. package/dist/esm/lib/detach/drivers/immediate.d.ts +39 -0
  29. package/dist/esm/lib/detach/drivers/microtaskBatch.d.ts +57 -0
  30. package/dist/esm/lib/detach/drivers/sendBeacon.d.ts +38 -0
  31. package/dist/esm/lib/detach/drivers/setImmediate.d.ts +32 -0
  32. package/dist/esm/lib/detach/drivers/setTimeout.d.ts +34 -0
  33. package/dist/esm/lib/detach/drivers/workerThread.d.ts +50 -0
  34. package/dist/esm/lib/detach/flush.d.ts +62 -0
  35. package/dist/esm/lib/detach/handle.d.ts +83 -0
  36. package/dist/esm/lib/detach/registry.d.ts +82 -0
  37. package/dist/esm/lib/detach/runChild.d.ts +41 -0
  38. package/dist/esm/lib/detach/spawn.d.ts +64 -0
  39. package/dist/esm/lib/detach/types.d.ts +200 -0
  40. package/dist/esm/lib/engine/errors/errorInfo.d.ts +46 -0
  41. package/dist/esm/lib/engine/errors/index.d.ts +2 -0
  42. package/dist/esm/lib/engine/graph/StageNode.d.ts +108 -0
  43. package/dist/esm/lib/engine/graph/index.d.ts +2 -0
  44. package/dist/esm/lib/engine/handlers/ChildrenExecutor.d.ts +32 -0
  45. package/dist/esm/lib/engine/handlers/ContinuationResolver.d.ts +95 -0
  46. package/dist/esm/lib/engine/handlers/DeciderHandler.d.ts +56 -0
  47. package/dist/esm/lib/engine/handlers/NodeResolver.d.ts +41 -0
  48. package/dist/esm/lib/engine/handlers/RuntimeStructureManager.d.ts +37 -0
  49. package/dist/esm/lib/engine/handlers/SelectorHandler.d.ts +27 -0
  50. package/dist/esm/lib/engine/handlers/StageRunner.d.ts +17 -0
  51. package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +34 -0
  52. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +8 -1
  53. package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +40 -0
  54. package/dist/esm/lib/engine/handlers/index.d.ts +13 -0
  55. package/dist/esm/lib/engine/handlers/types.d.ts +32 -0
  56. package/dist/esm/lib/engine/index.d.ts +28 -0
  57. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +139 -0
  58. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +47 -0
  59. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +34 -0
  60. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +27 -0
  61. package/dist/esm/lib/engine/narrative/index.d.ts +15 -0
  62. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +196 -0
  63. package/dist/esm/lib/engine/narrative/recorders/AdaptiveNarrativeFlowRecorder.d.ts +25 -0
  64. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +69 -0
  65. package/dist/esm/lib/engine/narrative/recorders/MilestoneNarrativeFlowRecorder.d.ts +24 -0
  66. package/dist/esm/lib/engine/narrative/recorders/ProgressiveNarrativeFlowRecorder.d.ts +30 -0
  67. package/dist/esm/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.d.ts +25 -0
  68. package/dist/esm/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.d.ts +32 -0
  69. package/dist/esm/lib/engine/narrative/recorders/SilentNarrativeFlowRecorder.d.ts +25 -0
  70. package/dist/esm/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.d.ts +29 -0
  71. package/dist/esm/lib/engine/narrative/recorders/index.d.ts +9 -0
  72. package/dist/esm/lib/engine/narrative/types.d.ts +384 -0
  73. package/dist/esm/lib/engine/runtimeStageId.d.ts +103 -0
  74. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +376 -0
  75. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +1 -1
  76. package/dist/esm/lib/engine/traversal/index.d.ts +2 -0
  77. package/dist/esm/lib/engine/types.d.ts +417 -0
  78. package/dist/esm/lib/engine/walkSubflowSpec.d.ts +95 -0
  79. package/dist/esm/lib/memory/DiagnosticCollector.d.ts +33 -0
  80. package/dist/esm/lib/memory/EventLog.d.ts +27 -0
  81. package/dist/esm/lib/memory/SharedMemory.d.ts +31 -0
  82. package/dist/esm/lib/memory/StageContext.d.ts +368 -0
  83. package/dist/esm/lib/memory/StageContext.js +44 -2
  84. package/dist/esm/lib/memory/TransactionBuffer.d.ts +183 -0
  85. package/dist/esm/lib/memory/TransactionBuffer.js +35 -13
  86. package/dist/esm/lib/memory/backtrack.d.ts +252 -0
  87. package/dist/esm/lib/memory/backtrack.js +79 -8
  88. package/dist/esm/lib/memory/commitLogUtils.d.ts +41 -0
  89. package/dist/esm/lib/memory/index.d.ts +14 -0
  90. package/dist/esm/lib/memory/pathOps.d.ts +54 -0
  91. package/dist/esm/lib/memory/types.d.ts +230 -0
  92. package/dist/esm/lib/memory/types.js +1 -1
  93. package/dist/esm/lib/memory/utils.d.ts +124 -0
  94. package/dist/esm/lib/observer-queue/deferredDispatcher.d.ts +169 -0
  95. package/dist/esm/lib/observer-queue/flushDriver.d.ts +124 -0
  96. package/dist/esm/lib/observer-queue/index.d.ts +25 -0
  97. package/dist/esm/lib/observer-queue/mergedQueue.d.ts +85 -0
  98. package/dist/esm/lib/observer-queue/ring.d.ts +99 -0
  99. package/dist/esm/lib/pause/index.d.ts +2 -0
  100. package/dist/esm/lib/pause/types.d.ts +238 -0
  101. package/dist/esm/lib/pause/types.js +2 -2
  102. package/dist/esm/lib/reactive/allowlist.d.ts +30 -0
  103. package/dist/esm/lib/reactive/arrayTraps.d.ts +23 -0
  104. package/dist/esm/lib/reactive/createTypedScope.d.ts +24 -0
  105. package/dist/esm/lib/reactive/index.d.ts +14 -0
  106. package/dist/esm/lib/reactive/pathBuilder.d.ts +31 -0
  107. package/dist/esm/lib/reactive/types.d.ts +159 -0
  108. package/dist/esm/lib/reactive/types.js +1 -1
  109. package/dist/esm/lib/recorder/BoundaryStateStore.d.ts +115 -0
  110. package/dist/esm/lib/recorder/CombinedRecorder.d.ts +215 -0
  111. package/dist/esm/lib/recorder/CombinedRecorder.js +2 -2
  112. package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +147 -0
  113. package/dist/esm/lib/recorder/CompositeRecorder.d.ts +95 -0
  114. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +133 -0
  115. package/dist/esm/lib/recorder/EmitRecorder.d.ts +135 -0
  116. package/dist/esm/lib/recorder/InOutRecorder.d.ts +176 -0
  117. package/dist/esm/lib/recorder/KeyedStore.d.ts +70 -0
  118. package/dist/esm/lib/recorder/QualityRecorder.d.ts +122 -0
  119. package/dist/esm/lib/recorder/RecorderOperation.d.ts +35 -0
  120. package/dist/esm/lib/recorder/SequenceStore.d.ts +120 -0
  121. package/dist/esm/lib/recorder/TopologyRecorder.d.ts +165 -0
  122. package/dist/esm/lib/recorder/TopologyRecorder.js +1 -1
  123. package/dist/esm/lib/recorder/index.d.ts +9 -0
  124. package/dist/esm/lib/recorder/invokeHook.d.ts +32 -0
  125. package/dist/esm/lib/recorder/qualityTrace.d.ts +54 -0
  126. package/dist/esm/lib/runner/ComposableRunner.d.ts +33 -0
  127. package/dist/esm/lib/runner/DeferredObserverTier.d.ts +204 -0
  128. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +162 -0
  129. package/dist/esm/lib/runner/ExecutionRuntime.js +16 -1
  130. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +660 -0
  131. package/dist/esm/lib/runner/FlowChartExecutor.js +35 -3
  132. package/dist/esm/lib/runner/RunContext.d.ts +42 -0
  133. package/dist/esm/lib/runner/RunnableChart.d.ts +57 -0
  134. package/dist/esm/lib/runner/checkpointSanitize.d.ts +44 -0
  135. package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +70 -0
  136. package/dist/esm/lib/runner/index.d.ts +11 -0
  137. package/dist/esm/lib/runner/runId.d.ts +45 -0
  138. package/dist/esm/lib/runner/validateInput.d.ts +11 -0
  139. package/dist/esm/lib/schema/detect.d.ts +32 -0
  140. package/dist/esm/lib/schema/errors.d.ts +36 -0
  141. package/dist/esm/lib/schema/index.d.ts +14 -0
  142. package/dist/esm/lib/schema/validate.d.ts +33 -0
  143. package/dist/esm/lib/scope/ScopeFacade.d.ts +250 -0
  144. package/dist/esm/lib/scope/detectCircular.d.ts +47 -0
  145. package/dist/esm/lib/scope/index.d.ts +16 -0
  146. package/dist/esm/lib/scope/protection/createProtectedScope.d.ts +9 -0
  147. package/dist/esm/lib/scope/protection/index.d.ts +2 -0
  148. package/dist/esm/lib/scope/protection/readonlyInput.d.ts +26 -0
  149. package/dist/esm/lib/scope/protection/types.d.ts +13 -0
  150. package/dist/esm/lib/scope/providers/baseStateCompatible.d.ts +24 -0
  151. package/dist/esm/lib/scope/providers/guards.d.ts +14 -0
  152. package/dist/esm/lib/scope/providers/index.d.ts +6 -0
  153. package/dist/esm/lib/scope/providers/providers.d.ts +8 -0
  154. package/dist/esm/lib/scope/providers/registry.d.ts +11 -0
  155. package/dist/esm/lib/scope/providers/resolve.d.ts +8 -0
  156. package/dist/esm/lib/scope/providers/types.d.ts +40 -0
  157. package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +63 -0
  158. package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +125 -0
  159. package/dist/esm/lib/scope/recorders/index.d.ts +5 -0
  160. package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +7 -0
  161. package/dist/esm/lib/scope/recorders/summarizeValue.js +3 -3
  162. package/dist/esm/lib/scope/state/installResolvers.d.ts +4 -0
  163. package/dist/esm/lib/scope/state/zod/defineScopeFromZod.d.ts +9 -0
  164. package/dist/esm/lib/scope/state/zod/index.d.ts +5 -0
  165. package/dist/esm/lib/scope/state/zod/resolver.d.ts +5 -0
  166. package/dist/esm/lib/scope/state/zod/schema/builder.d.ts +12 -0
  167. package/dist/esm/lib/scope/state/zod/scopeFactory.d.ts +9 -0
  168. package/dist/esm/lib/scope/state/zod/utils/validateHelper.d.ts +25 -0
  169. package/dist/esm/lib/scope/types.d.ts +142 -0
  170. package/dist/esm/lib/slice/elementProvenance.d.ts +74 -0
  171. package/dist/esm/lib/slice/elementProvenance.js +181 -0
  172. package/dist/esm/lib/slice/index.d.ts +16 -0
  173. package/dist/esm/lib/slice/index.js +16 -0
  174. package/dist/esm/lib/slice/keysReadSources.d.ts +51 -0
  175. package/dist/esm/lib/slice/keysReadSources.js +96 -0
  176. package/dist/esm/lib/slice/serialize.d.ts +40 -0
  177. package/dist/esm/lib/slice/serialize.js +97 -0
  178. package/dist/esm/lib/slice/sliceForKey.d.ts +47 -0
  179. package/dist/esm/lib/slice/sliceForKey.js +72 -0
  180. package/dist/esm/lib/slice/types.d.ts +240 -0
  181. package/dist/esm/lib/slice/types.js +20 -0
  182. package/dist/esm/recorders.d.ts +70 -0
  183. package/dist/esm/trace.d.ts +57 -0
  184. package/dist/esm/trace.js +2 -1
  185. package/dist/esm/zod.d.ts +18 -0
  186. package/dist/lib/builder/FlowChartBuilder.js +4 -3
  187. package/dist/lib/engine/handlers/SubflowExecutor.js +8 -1
  188. package/dist/lib/engine/traversal/FlowchartTraverser.js +1 -1
  189. package/dist/lib/memory/StageContext.js +44 -2
  190. package/dist/lib/memory/TransactionBuffer.js +35 -13
  191. package/dist/lib/memory/backtrack.js +79 -8
  192. package/dist/lib/memory/types.js +1 -1
  193. package/dist/lib/pause/types.js +2 -2
  194. package/dist/lib/reactive/types.js +1 -1
  195. package/dist/lib/recorder/CombinedRecorder.js +2 -2
  196. package/dist/lib/recorder/TopologyRecorder.js +1 -1
  197. package/dist/lib/runner/ExecutionRuntime.js +16 -1
  198. package/dist/lib/runner/FlowChartExecutor.js +35 -3
  199. package/dist/lib/scope/recorders/summarizeValue.js +3 -3
  200. package/dist/lib/slice/elementProvenance.js +186 -0
  201. package/dist/lib/slice/index.js +28 -0
  202. package/dist/lib/slice/keysReadSources.js +102 -0
  203. package/dist/lib/slice/serialize.js +102 -0
  204. package/dist/lib/slice/sliceForKey.js +77 -0
  205. package/dist/lib/slice/types.js +21 -0
  206. package/dist/trace.js +12 -2
  207. package/dist/types/lib/builder/FlowChartBuilder.d.ts +25 -2
  208. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -1
  209. package/dist/types/lib/memory/StageContext.d.ts +28 -1
  210. package/dist/types/lib/memory/TransactionBuffer.d.ts +10 -1
  211. package/dist/types/lib/memory/backtrack.d.ts +26 -0
  212. package/dist/types/lib/memory/types.d.ts +26 -0
  213. package/dist/types/lib/pause/types.d.ts +4 -3
  214. package/dist/types/lib/reactive/types.d.ts +1 -1
  215. package/dist/types/lib/recorder/CombinedRecorder.d.ts +1 -1
  216. package/dist/types/lib/recorder/TopologyRecorder.d.ts +1 -1
  217. package/dist/types/lib/runner/ExecutionRuntime.d.ts +15 -1
  218. package/dist/types/lib/runner/FlowChartExecutor.d.ts +34 -3
  219. package/dist/types/lib/scope/recorders/summarizeValue.d.ts +2 -2
  220. package/dist/types/lib/slice/elementProvenance.d.ts +74 -0
  221. package/dist/types/lib/slice/index.d.ts +16 -0
  222. package/dist/types/lib/slice/keysReadSources.d.ts +51 -0
  223. package/dist/types/lib/slice/serialize.d.ts +40 -0
  224. package/dist/types/lib/slice/sliceForKey.d.ts +47 -0
  225. package/dist/types/lib/slice/types.d.ts +240 -0
  226. package/dist/types/trace.d.ts +3 -0
  227. package/package.json +75 -21
package/AGENTS.md CHANGED
@@ -124,10 +124,10 @@ const executor = new FlowChartExecutor(chart);
124
124
  const executor = new FlowChartExecutor(chart, { scopeFactory: myFactory });
125
125
  await executor.run({ input: data, env: { traceId: 'req-123' } });
126
126
 
127
- executor.attachRecorder(recorder) // plug scope observer
128
- executor.getNarrative() // combined flow + data narrative
127
+ executor.attachScopeRecorder(recorder) // plug scope observer
128
+ executor.getNarrativeEntries() // combined flow + data narrative
129
129
  executor.getNarrativeEntries() // structured entries with type/depth/stageName/stageId
130
- executor.getFlowNarrative() // flow-only (no data ops)
130
+ executor.getNarrativeEntries() // flow-only (no data ops)
131
131
  executor.getSnapshot() // full memory state (includes recorder snapshots)
132
132
  executor.attachFlowRecorder(r) // plug flow observer
133
133
  executor.setRedactionPolicy({}) // PII protection
@@ -205,7 +205,7 @@ Four pluggable observer channels — three fire at runtime (Scope, Flow, Emit) a
205
205
  - `onStageExecuted` (universal "did this stage run", carries `stageType: 'linear' | 'decider' | 'fork' | 'selector' | 'subflow-mount'`), `onNext`, `onDecision`, `onFork`, `onSelected`, `onSubflowEntry/Exit`, `onSubflowRegistered`, `onLoop`, `onBreak`, `onError`, `onPause`/`onResume`, `onRunStart`/`onRunEnd`, `onRunFailed`
206
206
  - All events carry `traversalContext: TraversalContext` (includes per-run `runId`)
207
207
  - `onDecision`/`onSelected` carry optional `evidence` from decide()/select()
208
- - Built-in: 8 strategies (Narrative, Adaptive, Windowed, RLE, Milestone, Progressive, Separate, Manifest, Silent)
208
+ - Built-in: 9 strategies (Narrative, Adaptive, Windowed, RLE, Milestone, Progressive, Separate, Manifest, Silent)
209
209
 
210
210
  **Emit Recorder** (consumer-emitted events — fired by `scope.$emit(name, payload)`):
211
211
  - `onEmit(EmitEvent)` — see the "Emit Channel" section below.
@@ -281,7 +281,7 @@ const llmCommit = findCommit(commitLog, 'call-llm', 'adapterRawResponse');
281
281
  | `KeyedStore<T>` | class (v5 primary) | Storage shelf for 1:1 Map keyed by runtimeStageId (`set`/`get`/`aggregate`/`accumulate`/`filterByKeys`) |
282
282
  | `SequenceStore<T>` | class (v5 primary) | Storage shelf for 1:N ordered entries (`push`/`getByKey`/`getEntryRanges()` for O(1) time-travel/`getEntriesUpTo`) |
283
283
  | `BoundaryStateStore<TState>` | class (v5 primary) | Storage shelf for transient bracket-scoped state — live state DURING a `[start, stop]` interval; clears on stop. O(1) reads via `get` / `hasActive` / `activeCount`; lifecycle via `start` / `update` / `stop`. |
284
- | `KeyedRecorder<T>` / `SequenceRecorder<T>` / `BoundaryStateTracker<TState>` | abstract bases — **DEPRECATED** | v5 migration window only, slated for removal. Superseded by the `*Store` classes above — new code MUST own a store as a field and implement the channel interface itself. |
284
+ | `KeyedRecorder<T>` / `SequenceRecorder<T>` / `BoundaryStateTracker<TState>` | abstract bases — **REMOVED in 7.0.0** | Gone no inheritance path remains. Superseded by the `*Store` classes above: own a store as a field and implement the channel interface yourself. |
285
285
  | `CommitRangeIndex<TLabel>` | class | Interval index over commit indices (`open`/`close`/`enclosing`/`overlapping`) |
286
286
  | `topologyRecorder()` / `TopologyRecorder` | factory / class | Live composition graph for streaming consumers (subflow nodes + control-flow edges) |
287
287
  | `inOutRecorder()` / `InOutRecorder` | factory / class | Chart in/out stream — `entry`/`exit` pairs at every chart boundary (top-level run + every subflow) |
@@ -316,7 +316,7 @@ flowChart() builder → STATIC flowchart (design-time definition)
316
316
 
317
317
  **What it ISN'T:**
318
318
  - Not a full execution tree — that's `StageContext` / `executor.getSnapshot()`
319
- - Not per-stage data — that's `MetricRecorder` / custom `KeyedRecorder<T>`
319
+ - Not per-stage data — that's `MetricRecorder` / a custom recorder composing `KeyedStore<T>`
320
320
  - Not agent-specific — agentfootprint composes it; footprintjs owns it
321
321
 
322
322
  **Why live consumers need it:** The executor already has the topology internally (execution tree in `StageContext`). But streaming consumers can't access that tree mid-run — they only see events. `TopologyRecorder` = "the tree, reconstructed from events, live-queryable."
@@ -388,7 +388,7 @@ Each chart execution → 2 boundaries:
388
388
  Loop re-entry produces distinct pairs because the parent stage's executionIndex increments.
389
389
 
390
390
  **What it IS:**
391
- - `SequenceRecorder<InOutEntry>` — flat ordered list + per-`runtimeStageId` index
391
+ - composes `SequenceStore<InOutEntry>` — flat ordered list + per-`runtimeStageId` index
392
392
  - Captures the **payloads** at every chart boundary (what flowed IN and OUT)
393
393
  - Path-aware: `subflowPath` is decomposed from the engine's path-prefixed `subflowId` and rooted under `__root__`
394
394
  - Domain-agnostic — knows nothing about LLMs, tools, agents
@@ -436,7 +436,7 @@ inOut.getEntryRanges(); // O(1) per-step range index for time-trave
436
436
 
437
437
  Example: [examples/runtime-features/flow-recorder/07-inout.ts](examples/runtime-features/flow-recorder/07-inout.ts)
438
438
 
439
- **Three recorder STORAGE PRIMITIVES (v5 primary API)** — "one purpose per recorder": a store is storage ONLY. You own one as a field and implement the channel interface (`ScopeRecorder` / `FlowRecorder` / `EmitRecorder` / `CombinedRecorder`) yourself, delegating storage to the store. The abstract base classes (`KeyedRecorder` / `SequenceRecorder` / `BoundaryStateTracker`) are DEPRECATED they exist only for the v5 migration window and are slated for removal. Choose a store by data shape and durability:
439
+ **Three recorder STORAGE PRIMITIVES (v5 primary API)** — "one purpose per recorder": a store is storage ONLY. You own one as a field and implement the channel interface (`ScopeRecorder` / `FlowRecorder` / `EmitRecorder` / `CombinedRecorder`) yourself, delegating storage to the store. The abstract base classes (`KeyedRecorder` / `SequenceRecorder` / `BoundaryStateTracker`) were REMOVED in 7.0.0 composition is the only model. Choose a store by data shape and durability:
440
440
 
441
441
  | Store | Relationship | Time scope | Use When |
442
442
  |------------|-------------|------------|----------|
@@ -486,7 +486,7 @@ class LiveLLMTracker implements EmitRecorder {
486
486
  // Lifecycle: call store.clear() between runs; dev-mode warns on leaked-stop bugs.
487
487
  ```
488
488
 
489
- **`getEntryRanges()`** returns a precomputed `Map<runtimeStageId, {firstIdx, endIdx}>` maintained during `emit()`. Use for O(1) per-step range lookups during time-travel scrubbing. Same shape as `buildEntryRangeIndex()` in `footprint-explainable-ui`.
489
+ **`getEntryRanges()`** returns a precomputed `Map<runtimeStageId, {firstIdx, endIdx}>` maintained during `push()`. Use for O(1) per-step range lookups during time-travel scrubbing. Same shape as `buildEntryRangeIndex()` in `footprint-explainable-ui`.
490
490
 
491
491
  **`CombinedNarrativeEntry.direction`** — subflow entries carry `direction: 'entry' | 'exit'`. Use for programmatic subflow boundary detection instead of text scanning (which breaks with custom `NarrativeRenderer`).
492
492