Opaque build identity at record time. Layer 2 supplies whatever stable build hash it has (e.g. a dist-manifest hash); Layer 1 only compares it to decide the replay tier. Empty when the caller has none.
Opaque app/package version at record time (generic — Layer 2 stamps its own version string, e.g. an MJ package version). Compared, never parsed.
Hash of the frozen goal text — a goal edit demotes to LLM tier.
Final goal-level deterministic assertions.
ISO-8601 timestamp when this trace was recorded.
The resolved, ordered replay steps.
Stable per-test identifier the trace is keyed by.
Names of variables the test declares (e.g. ['recordName']). Values are
NEVER stored — only names; replay substitutes fresh values into the
%placeholder% tokens in step Text/Url (Stagehand discipline).
Viewport at record time.
A recorded, replayable trajectory for one test. Keyed by TestId; validated on load by AppBuildHash + AppVersion
steps.jsonin a run's artifacts is this in embryo — this is the durable, normalized, variable-disciplined form.