A user can navigate after a page read begins, leaving an older observation to arrive late. Saving the last reply as the newest data would make the current page description move backward in time. I retained the identity captured at read start through the decision to accept its result.

Arrival time does not establish freshness

Observation of page A can finish after a quicker observation of page B. Writing both into a shared current value lets late A overwrite B. The collected content may be accurate for A while being wrong for the present screen. Accuracy and currentness are separate questions.

Prepare captures document epoch, destination and the tab's preparation generation at start. A current predicate requires a live, non-dormant page with those identities unchanged. A successful read reply alone is insufficient for admission to the current cache.

Document and preparation generations detect different changes

Document epoch identifies navigation or document replacement. Generation belongs to the preparation layer and increases on invalidation. Even returning to the same destination should not let an earlier preparation overwrite the current result. It binds more narrowly than URL equality alone.

Content revision is checked too because text and control state can change without navigation. Destination, document, preparation generation and content revision are not four copies of one value. They detect different changes and cannot all be replaced by one marker.

Recheck after asynchronous boundaries

Currentness is checked after destination verification and again after observation. The observation needs the expected destination and a content revision. Another revision read and currentness check precede cache insertion.

A check only at function entry would miss changes during waiting. State valid before an await cannot simply be assumed valid afterward. These checks do not atomically lock the page, however. Changes between reading and an actual operation still require the execution layer's live checks.

Discard errors belonging to an older page too

Catch checks currentness before reporting preparation failure. An error arriving after navigation must not overwrite the current page's status. Old failures can misdescribe the present as easily as old successes.

Pending promises are tracked per tab, and cleanup removes an entry only when it still belongs to that operation. A late operation must not clean another operation's waiting marker. Asynchronous ownership applies to progress and cleanup as well as stored data.

Separate existing test scope from reviewed implementation

The unit test checks that peek refuses a changed revision and returns updated content after another observation. It also covers changed document epoch, another tab and removal of denied-page data. These establish selected freshness boundaries.

I compared those tests with the checks around asynchronous preparation. I did not newly exercise every possible event ordering in a real browser. Nor does the evidence establish that revision tracks every visual change at the same destination. Observation tracking and action-time checks need to be considered together.

Retain ownership even when the interface changes quickly

A company's search or account-switching screen faces a similar race. Unconditionally displaying a late reply can show data for a destination the user has already left. Results need an identity tying them to the request and screen that produced them.

Northstar applies that question to tabs, documents and preparation generations. Discarding an old result can preserve the meaning of the present rather than lose useful data. An irreversible operation needs more than discarding its reply, but passive reading can explicitly refuse to promote obsolete material into the current view.