A single click to restore a saved draft left the operation waiting. The historical verification record identified a browser-native confirmation rather than another button inside the page. Reviewing the case, I focused less on the ability to answer that confirmation and more on the work required to distinguish what was still unfinished after the answer.

The failure was at a different layer from page-element lookup

The confirmation in this case was not a popup represented in the page DOM. Repeatedly searching the document for a button with the right name and role could not handle it. An earlier verification used separate screen interaction; the subsequent implementation observed the browser's dialog events and added a fixed response path.

Calling the symptom only a failed button lookup would invite another click or an attempt to reveal hidden elements. I read this repair as a distinction between layers of input. Manipulating a page element and observing a native dialog require different paths, and neither path makes the page's text an instruction with fresh authority.

Expose observation and an explicit response rather than a general command

The external interface exposes fixed readDialog and respondDialog operations. A response requires the current dialog identifier and an explicit boolean choice. The interface is not widened into arbitrary protocol commands, executable code or a string-answering facility for prompts. The choice is intended to bind one response to the dialog that was actually observed.

The original contract checks supported kinds, message size and origin, and leaves sensitive login, permission and payment warnings for human handoff. A message filter is not a complete detector of every risk. A dialog looking ordinary does not authorize a new approval or external action that the user never requested. This content routine did not answer any actual dialog.

Use a failing test to expose the command left behind after the reply

The initial review identified a race: the original native command could remain unfinished after a dialog response. The implementation first reproduced that case in a failing test, then tracked the input promise and deferred cleanup until they settled. A dialog-closing event was not treated as the end of the original command's lifetime.

During that interval, both another input and verification of the original result are blocked. Moving to a new task after stop does not erase an unfinished command on the same tab. Requesting stop and proving cancellation of a command already dispatched are different facts. The repair tracks the remaining command instead of removing the wider input-protection boundary.

Separate closing the dialog from restoring the requested draft

A successful dialog-response path leaves the ActionBroker's original outcome pending. The text, state or change condition required by the original task must still be observed separately. The verification path reads that condition without clicking the original button again. A successful answer to a confirmation must not be rewritten as a successful draft restoration.

Verification is also not an opportunity to choose an easier condition after the fact. It retains the original expectation and does not begin while the command or cleanup remains unsettled. The existing shared outcome-comparison module explains before-and-after observations against an original condition. The new synthetic package isolates the preceding responsibility: distinguishing dialog lifetime from command lifetime.

A dialog identifier cannot be carried into another tab or document

A dialog is bound to its current tab and document generation. An old identifier or a changed document is rejected before a response is sent. The task layer also checks profile and execution generation and keeps the tab with a pending original outcome distinct from other tabs. Another document showing the same words is not the same response target.

The external-control lane must still permit the narrowly defined observation and response path while ordinary input is waiting. Blocking the observation needed to understand a pending input would create mutual waiting. The integration test preserves ordinary lane-contention protection while allowing this fixed path. It does not enable unrestricted simultaneous commands.

Keep historical live evidence distinct from this article review

The historical 0.1.215 report records one installed-browser case in which MCP handled the confirmation once and verified the original result. It also records preservation of drafts, attachments, existing tabs, projects and settings. Its regression, extracted-package and SDK results belong to that environment and date. They do not establish support for every site or another computer's dialogs.

For this article I read that report, selected current source and related unit and integration tests. I did not restart the original browser, restore an actual draft, or perform a new publication or reservation. The later repair for reading shared execution records remains a separate question. Recovering one dialog must not imply that older uncertain external publication outcomes have also been resolved.

Reuse the completion criteria rather than automatic confirmation

The new module answers no browser dialog. It binds the operation context and separately records a response result, closure, original-command settlement and a match for the original condition. Sixteen synthetic tests and a repeat after ZIP extraction check that narrow boundary, and bilingual selectors display five execution records. Historical operating-system or product tests are not borrowed as proof for the new package.

For another workflow, I would first split its completion sentence. Sending a response, seeing a dialog disappear, settling the original command and verifying the requested result each need their own evidence. Useful automation is not only about answering a confirmation quickly. It must be able to explain when another input is justified.