Readonlyname: stringOptional Readonlydescription?: stringOptional Readonlyurl?: stringAbsolute, or relative to the seed URL. Defaults to the seed URL.
Optional Readonlyextends?: stringPrepend another state's steps to this one's. The child still starts from a fresh page load in a fresh context and replays the parent — states never inherit live page state from each other.
Optional Readonlyprecondition?: stringA selector probed on the fresh load, before any step. When it is absent,
the state is recorded as skipped rather than failed: "this state does
not exist here" is a different event from "this state's script is broken".
A selector that cannot be evaluated — a typo, a malformed CSS — is neither: the state fails, because a probe that silently answers "not here" to a broken selector produces a green run with nothing captured.
Optional ReadonlypreconditionTimeoutMs?: numberBudget for this state's precondition probe, overriding
preconditionTimeout for the run.
Per state because readiness is not uniform: a state gated on a nav link present at first paint should not wait as long as one gated on a WebGL console's first frame, and a probe that gives up early reports the state as absent here rather than slow.
Optional Readonlyviewports?: readonly string[]Restrict this state to named viewports. The script runs once and the viewport loop resizes afterwards, so a dialog that unmounts below a breakpoint would otherwise be screenshotted as the boot view.
An empty array is rejected rather than treated as "none": it would capture zero screenshots and still be reported as captured, and a state that captured nothing must never report success. Omit the field to use every configured viewport.
Readonlysteps: readonly (Optional ReadonlytimeoutMs?: numberBudget for reaching this state — navigation, the precondition probe
and the script — overriding stateTimeout for the run.
It stops there, exactly as the run-wide default does: screenshot and
video capture run outside it, under their own timeouts. A budget that
covered capture too could not be satisfied by any value once --video
was on.
Optional ReadonlyallowVideoReplay?: booleanRecord video for this state even though its script contains a request
step. Video replays the script in a second context, so a non-idempotent
seed would run twice and the video would disagree with the stills; such
states skip video unless this says otherwise.
Optionaloptions: MakeOptionsStatic ReadonlyTypeStatic ReadonlyEncodedStatic ReadonlyContextStatic Readonly[Static ReadonlyastStatic ReadonlyfieldsReadonlyname: filter<Schema<string, string, never>>Readonlydescription: optional<typeof String$>Readonlyurl: optional<typeof String$>Absolute, or relative to the seed URL. Defaults to the seed URL.
Readonlyextends: optional<typeof String$>Prepend another state's steps to this one's. The child still starts from a fresh page load in a fresh context and replays the parent — states never inherit live page state from each other.
Readonlyprecondition: optional<typeof String$>A selector probed on the fresh load, before any step. When it is absent,
the state is recorded as skipped rather than failed: "this state does
not exist here" is a different event from "this state's script is broken".
A selector that cannot be evaluated — a typo, a malformed CSS — is neither: the state fails, because a probe that silently answers "not here" to a broken selector produces a green run with nothing captured.
ReadonlypreconditionTimeoutMs: optional<filter<Schema<number, number, never>>>Budget for this state's precondition probe, overriding
preconditionTimeout for the run.
Per state because readiness is not uniform: a state gated on a nav link present at first paint should not wait as long as one gated on a WebGL console's first frame, and a probe that gives up early reports the state as absent here rather than slow.
Readonlyviewports: optional<filter<Schema<readonly string[], readonly string[], never>>>Restrict this state to named viewports. The script runs once and the viewport loop resizes afterwards, so a dialog that unmounts below a breakpoint would otherwise be screenshotted as the boot view.
An empty array is rejected rather than treated as "none": it would capture zero screenshots and still be reported as captured, and a state that captured nothing must never report success. Omit the field to use every configured viewport.
Readonlysteps: Array$<ReadonlytimeoutMs: optional<filter<Schema<number, number, never>>>Budget for reaching this state — navigation, the precondition probe
and the script — overriding stateTimeout for the run.
It stops there, exactly as the run-wide default does: screenshot and
video capture run outside it, under their own timeouts. A budget that
covered capture too could not be satisfied by any value once --video
was on.
ReadonlyallowVideoReplay: optionalWith<typeof Boolean$, { default: () => false }>Record video for this state even though its script contains a request
step. Video replays the script in a second context, so a non-idempotent
seed would run twice and the video would disagree with the stills; such
states skip video unless this says otherwise.
Static ReadonlyidentifierReadonlynameOptional ReadonlydescriptionOptional ReadonlyurlAbsolute, or relative to the seed URL. Defaults to the seed URL.
Optional ReadonlyextendsPrepend another state's steps to this one's. The child still starts from a fresh page load in a fresh context and replays the parent — states never inherit live page state from each other.
Optional ReadonlypreconditionA selector probed on the fresh load, before any step. When it is absent,
the state is recorded as skipped rather than failed: "this state does
not exist here" is a different event from "this state's script is broken".
A selector that cannot be evaluated — a typo, a malformed CSS — is neither: the state fails, because a probe that silently answers "not here" to a broken selector produces a green run with nothing captured.
Optional ReadonlypreconditionBudget for this state's precondition probe, overriding
preconditionTimeout for the run.
Per state because readiness is not uniform: a state gated on a nav link present at first paint should not wait as long as one gated on a WebGL console's first frame, and a probe that gives up early reports the state as absent here rather than slow.
Optional ReadonlyviewportsRestrict this state to named viewports. The script runs once and the viewport loop resizes afterwards, so a dialog that unmounts below a breakpoint would otherwise be screenshotted as the boot view.
An empty array is rejected rather than treated as "none": it would capture zero screenshots and still be reported as captured, and a state that captured nothing must never report success. Omit the field to use every configured viewport.
ReadonlystepsOptional ReadonlytimeoutBudget for reaching this state — navigation, the precondition probe
and the script — overriding stateTimeout for the run.
It stops there, exactly as the run-wide default does: screenshot and
video capture run outside it, under their own timeouts. A budget that
covered capture too could not be satisfied by any value once --video
was on.
ReadonlyallowRecord video for this state even though its script contains a request
step. Video replays the script in a second context, so a non-idempotent
seed would run twice and the video would disagree with the stills; such
states skip video unless this says otherwise.
StaticmakeStaticannotationsMerges a set of new annotations with existing ones, potentially overwriting any duplicates.
StaticextendStatictransformStatictransformStaticpipe
A named interaction script performed on a page before capture, so the state it produces gets its own capture set.
nameis pattern-constrained because it becomes a directory component: rejecting loudly beats silently slugifying two states into one directory, and lowercase-only avoidsSpawn/spawncolliding on a case-insensitive filesystem.