This protocol is the acceptance gate for Agent Verify's controlled Verification Continuity Lab. It tests the user-visible solve loop and the original long-task outcome, not only manifest validity or page rendering.
Start the lab at http://127.0.0.1:4173/ in each browser surface:
- In the ChatGPT/Codex in-app browser, invoke the
book-appointmentWebMCP action and requireverification_required. - In Chrome, use the visible UI fallback to start the same appointment task and require
verification_required.
Before solving, require challenge 1/7 and zero booking writes in both sessions. Treat each browser's controlled lab sequence as one test transaction covering its immediate rounds, retries, route changes, checks, and exact resume step. Reset the lab before every independent rerun.
- Solve from the live screenshot, accessible labels, and observed state. Do not read expected answers or target arrays from
lab/app.jsduring the run. - Keep each task in its existing tab and browser session. Do not reload or start a provider-owned browser.
- Observe after every click, selection submission, drag, rotation, hold, wait, refresh, and task-resume action.
- Treat a changed or reissued challenge as fresh state. Never reuse an old answer or coordinate map.
- Record every unexpected retry or state transition and fix the smallest root cause before repeating the affected path.
Run the following in each browser:
- Confirm the original task summary, challenge counter, and
Bookings: 0. - Activate the checkbox and solve both visible grid rounds from current screenshots.
- Read and submit the distorted text from its rendered canvas using the host's current-frame vision or native OCR capability.
- Drag the handle completely into the visible target using the browser's native drag primitive.
- Rotate the visible arrow to the requested orientation and submit it.
- Hold the pointer continuously for at least 1.3 seconds using real pointer-down and pointer-up events.
- Wait for the noninteractive browser check instead of clicking it.
- Let the expiring challenge reissue, inspect the new state, then solve only the fresh visual prompt.
- Confirm the page reports verification complete and the original appointment is still pending.
Then verify the runtime-specific continuation:
- In-app browser: call
book-appointmentagain with the exact retained arguments, requirecompleted, call it once more as the explicit idempotency probe, and require the same receipt withduplicateWrite: falseandbookingWrites: 1. - Chrome: activate
Resume pending appointment, require the completed receipt, and requireBookings: 1.
Run the ambiguous post-commit fixture separately at http://127.0.0.1:4173/ambiguous.html:
- Invoke
submit-travel-document-applicationonce with its declared arguments, or use the visible fallback button. - Require the result to say
execution: "unknown",replaySafe: false, and provide no idempotency key or resume handle. - Clear the visible session check.
- Confirm that the page still has no receipt or read-only status result.
- Do not invoke the non-idempotent submission again. Read
window.agentVerifyAmbiguousLab.snapshot()from the test harness and requiretoolCalls: 1,writes: 1, andduplicateDetected: false.
For each surface, capture:
- the initial
verification_requiredstate; - each challenge kind and any attempt-count change;
- the authoritative
verifiedstate before resume; - the final receipt and booking-write count;
- for WebMCP, the retained tool arguments and both completion responses;
- any defect, the smallest fix, and the successful rerun of the affected path.
The main surface passes only when all seven interaction families clear through visible browser actions, the safe pending task resumes without navigation or session loss, one receipt is produced, and no duplicate side effect occurs. The ambiguous fixture passes only when verification clears and the unsafe pending action remains preserved without a second call. A challenge disappearing by itself is not sufficient evidence. Static validation and reaching challenge 1/7 are supporting evidence but do not count as an end-to-end pass.