A button correct when found can change before a click. Its name or form may change, or another node may occupy the same location. I treated observation references as temporary identities, rechecking the current document and actual node before input.

Attach the observation identity to the reference

ElementRef binds tab, frame, document epoch, snapshot and local reference ID. It is not one global number naming an arbitrary screen node. Driver context first checks that these identities still match the current page and frame.

Opening the same destination again does not reproduce the previous document. Equal control names cannot revive an old reference. Explicit ownership and lifetime also distinguish retained descriptions from references after tab restoration or restart.

Check whether the actual node changed meaning

The local reference store retains a node and signature containing tag, input type, role, name, link, form action and selected state metadata. A connected node can still be stale when those meanings change.

This is not a perfect fingerprint of every DOM attribute or business meaning. It covers the implemented fields. It nevertheless provides a more specific boundary than trusting a reference number despite changed form or label semantics. It identifies values that must remain stable and those needing fresh observation.

Separate node existence from actionability

After finding a reference, the implementation checks visibility, disabled and sensitive state. Occlusion and frame ownership continue through separate action-point checks. A node retained in memory is not necessarily available for input.

The Broker also checks the current execution epoch before dispatch. A late operation from an old task must not enter a new screen. These checks cover different lifetimes: task, document, node and screen point. Knowing which boundary refused the action makes recovery more precise.

Post-input verification needs a reference from that stage

Mutation replies can contain fresh observations. The page API accepts them and uses a matching fresh reference for field verification rather than retaining an earlier snapshot after input changed.

Some internal readback paths separately handle signatures changed by the input itself. That exception cannot become a relaxation of stale-reference checks for ordinary clicks. Read verification and action verification have different purposes. I checked the specific operation scope before describing the exception publicly. Editing a reference number in the caller does not create a fresh observation either. The host must issue a reference connected to an actual observed node rather than accept invented identity as a substitute.

Inspect tests for both rejection and fresh-reference use

The hidden-choice test obtains a reference, disables the associated control and checks rejection of a click using the old reference. The page-API test accepts a mutation's new observation and verifies with its fresh reference. Updating references and rejecting stale ones have distinct checks.

This article reads those tests and current driver, renderer operation and Broker code. I did not mutate a user's actual document for another race experiment or establish coverage of every possible page change. Reproduced conditions and untested changes remain separate claims.

Ask the same version question as a business record save

Saving a business record often requires checking that the version read earlier still matches current data. Browser actions face the same interval between observation and operation. A fast interface does not make intervening changes disappear.

Rather than recreating every piece of descriptive data repeatedly, I keep action-supporting references short-lived. Descriptions may be reused while execution conditions are checked for currentness. That lets an agent continue conveniently without using an old number to operate a new screen.