reticle_act_and_wait performs one action on an element and waits for a named consequence, returning a verdict in the same call. Reach for it whenever an action is supposed to cause something: it is one of only two Reticle tools that produce a verdict, the other being reticle_assert.
This is the tool Reticle exists for. It does the act, observe and assert steps in one round trip, and it makes you name the expected consequence before the action runs.
That ordering is not a convenience. An agent that acts first and then decides what counts as success will always find something that counts. Naming the consequence up front is the difference between a check and a rationalisation.
Example
initiatorStack, storageDiffs and per-event trace detail are trimmed out for length; nothing else is changed:
trace is a digest of what the app did in the window. When the counts are not enough, pass the top-level since cursor to reticle_observe for the per-event timeline.
The predicate grammar
until takes { kind, ...fields }. The kinds:
Predicates that catch real bugs
Reading verified
yes
The named consequence happened, with evidence attached.
no
It did not. A finding, with a source pointer.
unknown
Reticle could not tell. Not a pass. Report it as unknown.
The honesty block
grade is how strong the evidence was. A fired signal outranks an element appearing. coverage.partial: true means Reticle did not observe the whole window. integrity.clean: false means something interfered with the capture and the verdict deserves less trust.
A verification tool that cannot describe the quality of its own evidence is asking you to take its word for it, which is precisely the problem we started with.
Arguments
Omitting
until waits for network and DOM idle, which is the deterministic replacement for a fixed sleep. To assert a consequence and settle, combine them: