Stateful accumulator that watches FlowRecorder events and answers
"which decision allowed this stage to run?" Attach via
executor.attachCombinedRecorder(recorder) (or attachFlowRecorder).
Stateful accumulator that watches FlowRecorder chart-boundary events
(run start/end + subflow entry/exit) and pushes InOutEntry records to
its composed SequenceStore (Convention 1 — one purpose per recorder).
KeyedStore
Pluggable observer for scope operations.
SequenceStore
Stateful accumulator that watches FlowRecorder events and maintains a live
composition graph. Attach via executor.attachCombinedRecorder(recorder) —
footprintjs detects the FlowRecorder method shape and routes events.
One recorded decision/selection event (RFC-003 D5).
What it cost to get through a boundary: the attempts made inside it (at any depth) by series that retried, gave
up or timed out — count, per outcome (timeout included), and how many of those series gave up (exhausted,
declined, no-time-left).
One half of a chart execution boundary. Entry/exit pairs share runtimeStageId.
Per-step quality data stored by QualityRecorder.
A single frame in the quality stack trace.
Options for QualityRecorder.
The full quality stack trace.
Engine history whose storage evidence matched. Channels and native limitations retain their original meanings.
Snapshot of the composition graph.
A traversal transition between two nodes.
A composition-significant point in the graph.
Scoring function called at the end of each stage. Receives the runtimeStageId, stage event, and a summary of reads/writes. Return a score (0.0–1.0) and optional factors explaining the score.
How the traversal reached this node — drives consumer layout decisions.
The kind of composition unit a node represents.
The reserved marker separating a parent stage id from a branch index in a
generated subflow path segment. Reserved from 9.14.0 forward — the builder
refuses it in user-authored subflow ids and in addParallelForEach ids.
Synthetic runtimeStageId for the top-level run boundary pair.
Synthetic id for the top-level run's boundary pair.
Build the generated subflow path segment for one parallelForEach branch.
Factory — matches the topologyRecorder() / inOutRecorder() style.
Format a QualityStackTrace as human-readable text.
True when value contains the reserved marker anywhere.
Factory — matches the topologyRecorder() / narrative() style.
True when segment is a generated branch segment — i.e. it splits at the
LAST marker into a non-empty parent id and a non-negative integer index.
Decompose a generated branch segment back into its parts, or undefined
when segment is not one.
Build a quality stack trace by decorating a causal chain with scores. Root cause is the largest positive score drop across a recorded parent→child dependency with known scores. Ties retain the first edge in BFS node / parent order. This score comparison is a diagnostic hint, not proof of why quality fell.
Read authorized stored entries using Foottrace's sequence/gap checks, then validate FootPrint's opaque metadata. A receipt is a host-adapter assertion, not a signature. Callers still own storage authorization and trust. Never performs causal analysis or upgrades partial native capture to complete.
Factory — matches the narrative() / metrics() style.
Walk a subflow spec, yielding its structure as flat ordered items.
Engine recorders, recorder stores and structure walkers. Not the record.
Record readers, types and runtime-ID grammar belong to
foottrace; record path helpers belong tofoottrace/paths, and record writers tofoottrace/write. This door exports only engine-owned observer tools. Record symbols are never re-exported across the package boundary.