ScenarioRunStep class
One captured step: what it is a picture of, its sibling legs on disk, and what the app did on the way to it.
Constructors
-
ScenarioRunStep({required int index, required String position, required bool auto, ScenarioStepKind kind = ScenarioStepKind.screen, String? image, String? format, int? width, int? height, String? tree, String? file, String? mimeType, int? bytes, ScenarioNotification? notification, int? ms, String? keys, List<
String> texts = const [], String address = '', String root = '', String? semantics, int? parent, String? branch, String? name, List<String> tags = const [], String? statusBrightness, String? verb, String? target, ScenarioAim? aim, String? events, int? eventCount, Map<String, int> ? eventChannels, List<String> ? eventTitles, int? eventsDropped, String? frames, int? frameCount, int? frameWidth, int? frameHeight, int? frameIntervalMs, int? framesDropped, bool settled = true, bool waited = true, bool landed = true, int? guessed, List<String> stillTicking = const [], String? digest, int strayFrames = 0, double? keyboard, bool unchanged = false, String? failure}) -
ScenarioRunStep.fromJson(Map<
String, Object?> json) -
factory
Properties
- action → String?
-
The verb and its target as one label —
tap "Pay"— or null where nothing acted. What an unnamed step is labelled with, in place of its index.no setter - address → String
-
The step's
fw://address. Empty on the harness's own record; the host that knows the worktree fills it in via locate.final - aim → ScenarioAim?
-
Where the verb's finger went — the box it resolved, in the view's own
logical pixels, measured on the frame it was about to act on. Null for a
verb with nothing to point at (
wait,screen,back), for one whose target had no box, and for every run written before this was recorded.final - auto → bool
-
True when nothing named this capture — a collapsible detail step.
final
- branch → String?
-
The
splitbranch label when this step is a branch's first capture.final - bytes → int?
-
How big file is, so a reader knows before opening it.
final
- digest → String?
-
What this step captured, hashed — the pixels for a screen, the payload
for a document. Null where the step wrote no bytes.
final
-
eventChannels
→ Map<
String, int> ? -
final
- eventCount → int?
-
How many, and on which channels —
{platform: 3, print: 1}. The badge on the flow's arrow, and the part of the digest that survives filtering.final - events → String?
-
What the app did on the way here — logs, prints, platform channel
messages, and whatever the project's fakes reported through
recordAppEvent. Relative like image; null when this transition was quiet, which is distinct from a run too old to have captured any.final - eventsDropped → int?
-
Events dropped to stay inside the per-step or per-run cap. Reported
rather than swallowed: a truncated transition that said nothing would
read as an app that did nothing.
final
-
eventTitles
→ List<
String> ? -
The one-line summaries, capped,
systemexcluded — what a reader gets without opening events.POST /login → 401is the part an agent reasons about; the payloads are what it fetches when it cares.final - failure → String?
-
The error, when this is the step a scenario broke on. The frame is the
state at the failure, and the message carries the
splitbranch that reached it.final - file → String?
-
The payload of a ScenarioStepKind.document, relative to the worktree
root like image — a path rather than the bytes, for the reason the
tree and the events beside it are: a run's report stays readable, and
what a reader wants to do with a document is open it.
final
- format → String?
-
png, orraw— bare rgba8888 rows, width×height×4 bytes. Raw is the fast capture (~5× at 1×, ~25× at device resolution) for hosts that can display pixels directly;pngis the portable default therunaction serves. Null wherever image is.final - frameCount → int?
-
final
- frameHeight → int?
-
final
- frameIntervalMs → int?
-
Fake milliseconds between two frames — the speed a player runs at to
show the animation as the app would have played it.
final
-
framePaths
→ List<
String> -
The recorded frames in order, spelled the way image is — so whoever
reads them resolves them the same way, off a worktree's disk in the panel
or over HTTP on an exported page.
no setter
- frames → String?
-
The directory of numbered frames recorded on the way to this step —
what the transition looked like, where the events say what it did.
Relative like image; null on every run that did not record, which is
every CLI run and every run older than the capture.
final
- framesDropped → int?
-
Frames refused by the recorder's cap: the transition went on longer than
the recording does, and the last frame is not where the app stopped.
final
- frameWidth → int?
-
final
- guessed → int?
-
The turn of the real event loop on which work nothing announced landed
and was drawn into this step — the deepest, when several did — or null
when nothing had to be guessed at.
final
- hasEvents → bool
-
Whether anything happened on the way to this step.
no setter
- hashCode → int
-
The hash code for this object.
no setterinherited
- hasMotion → bool
-
Whether there is motion here to play. Two frames is the floor — one is
the still the transition started from.
no setter
- height → int?
-
final
- image → String?
-
The captured image, in format, relative to the worktree root — the
same convention the catalog's artifacts follow, so the value survives
being read on another machine and an agent whose tools are scoped to the
repo can open it.
final
- index → int
-
1-based position in the scenario's capture sequence.
final
- keyboard → double?
-
How tall the software keyboard was when this frame was taken, in logical
pixels, or null when it was down — which is nearly every step.
final
- keys → String?
-
The translation keys on this screen, and the words that belonged to no
catalog — relative like image. Null when no catalog was wired up,
which is every project that has not asked for this.
final
- kind → ScenarioStepKind
-
What this step is a picture of. See ScenarioStepKind.
final
- landed → bool
-
False when the shutter fell with an image decode or an asset read still
in flight — the picture is of a screen that was still filling in, and
the artwork it is missing turns up on the next step;
trueis the absence of a report rather than a claim that everything the screen wanted has arrived, and a step that is not ascreenhas nothing to land and readstruevacuously.final - mimeType → String?
-
What the document is, when the scenario said —
application/pdf. A viewer switches on this; absent means "offer it as a download".final - ms → int?
-
A
setupbeat's wall-clock duration in milliseconds; null elsewhere.final - name → String?
-
The
Shot's name; null for an automatic capture.final -
final
- notableEventCount → int
-
The events a reader will actually be shown — everything but
system.no setter - notification → ScenarioNotification?
-
The push a ScenarioStepKind.notification step is.
final
- parent → int?
-
The index of the step this one follows; null for the scenario's
first.
splitgives one parent several children — these are the flow graph's edges.final - position → String
-
Where the step sits in the scenario's shape — the
splitchoices taken to reach it by index, then the count since the last one:'#2'on the trunk,'0.1#3'two splits deep. Unlike index it shifts only within its own branch when a step is inserted.final - root → String
-
The worktree the paths above are relative to, on this machine.
final
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- semantics → String?
-
The semantics-tree JSON — what a screen reader gets — relative like
image. Null on artifacts from before the capture existed, and when the
run had no semantics tree to read; a reader states the absence rather
than inventing an empty screen.
final
- settled → bool
-
False when frames were still scheduled at the shutter: something on this
screen was still moving, and the capture is of a moving picture. Not a
failure.
final
- statusBrightness → String?
-
The
SystemUiOverlayStyleicon brightness the app had declared at capture time (light/dark), if any — what the fake status bar and home indicator tint themselves with.final -
stillTicking
→ List<
String> -
What kept asking for frames when a settle that waited gave up on the way
to this picture, one line each:
CircularProgressIndicator (lib/src/orders/status_cell.dart:42)for a framework widget, by the line of the app that built it;_PulseState.initState (package:app/src/pulse.dart:18)for an animation the app started, by its own frame.final - strayFrames → int
-
Frames drawn before this step that none of the scenario's verbs drew —
the scenario reached for the raw
tester, and whatever the app did in those frames is not in the flow. Zero is the healthy case.final -
final
- target → String?
-
final
-
texts
→ List<
String> -
The visible texts — the projection an agent reads next to the pixels.
final
- tree → String?
-
The widget-tree JSON captured at the same moment, relative like image.
Null wherever image is — there was no tree to read.
final
- unchanged → bool
-
True when this step's picture is byte-identical to its parent's: the
verb acted and nothing on screen changed. A fact, not a verdict — a
capture parked mid-flight with
Settle.noneis legitimately unchanged — but a run of these in a walking scenario is a stalled flow passing quietly, which is what the flag exists to make visible. Never set on the step a scenario failed at, nor on one that is not a screen — a document has no picture to be identical to anything.final - verb → String?
-
The verb that produced this step and what it was aimed at —
tap,"Pay". Together they name the transition into this step, which is what the events below happened during. Null on artifacts from before the capture existed, and on a step captured at a failure.final - waited → bool
-
Whether this step's settle policy was one that waits for the app to go
quiet —
Settle.upToandSettle.full, and notSettle.none,Settle.framesorSettle.elapse, which stop on a count or on the clock.final - width → int?
-
final
Methods
-
locate(
{required String root, required String address, required String path(String)}) → ScenarioRunStep -
This step, published: its artifact paths rewritten through
path, itsaddressassigned, itsrootrecorded. -
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
toJson(
) → Map< String, Object?> -
toString(
) → String -
A string representation of this object.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited