16 scenarios testing both popup subtypes. Scenarios 1–4, 16 test the DISMISSIBLE path (cascade xpaths, vision fallback, self-healing, double-click retry). Scenarios 5–15 test the DECISION_REQUIRED path (webhook enrichment, human-in-the-loop decisions). 13–15 are 1:1 reproductions of real prod modals (ECW code-exists, Noridian consent, ECW duplicate patient).
How to test: Create a workflow that navigates to localhost:3001/popup-recovery-test?s=N, waits, then clicks [data-testid="primary-submit"]. For DISMISSIBLE: configure popup_xpaths per scenario. For DECISION_REQUIRED: verify webhook fires with popup_context and run pauses.
Bottom-bar cookie consent with Accept button. Most common dismissible popup on the web. Curated xpath should handle instantly.
workflow.popup_xpaths
[ "//button[normalize-space()='Accept All']" ]
Expected
Cascade dismisses via curated xpath. popup_dismiss_healing records success. Submit becomes clickable.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
We use cookies to enhance your experience.
Email signup popup with X close button. Has an input field but is clearly closeable — agent should click X, not fill the form.
workflow.popup_xpaths
[ "//*[@data-testid='newsletter-close']" ]
Expected
Cascade dismisses via curated xpath (X button). Input field is a red herring. Vision fallback also works.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Get weekly updates on new features.
Marketing discount popup with 'No thanks' link and X button. Two dismiss targets available.
workflow.popup_xpaths
[ "//*[@data-testid='promo-close']", "//a[normalize-space()=\"No thanks, I'll pay full price\"]" ]
Expected
Either curated xpath works. Tests multiple viable dismiss targets.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Optional NPS/satisfaction prompt with 'Maybe later' button. Not mandatory — can be dismissed without consequence.
workflow.popup_xpaths
[ "//button[normalize-space()='Maybe Later']" ]
Expected
Dismissed via 'Maybe Later' button. Survey is optional, no data loss.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Help us improve by rating your visit.
System-initiated interruption: while processing the request, the system found an existing record with matching data. This is not a response to bad input — the input was valid, but the system is raising a business concern requiring human judgment.
Expected
Webhook fires with reason=non_dismissible_popup. popup_context describes the duplicate. Human decides: link to existing, create new, or cancel.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
While processing your request, the system found an existing record with matching information:
Existing record:
John R. Smith — DOB: 03/15/1985
MRN: 4420918 — Last visit: 04/28/2026
This requires a decision before the workflow can continue. How would you like to proceed?
System gate before an irreversible operation. The action was accepted but requires explicit human confirmation before execution. Not a validation error — the input is correct, the system is asking 'are you sure?'
Expected
Webhook fires. Human reviews the consequences and decides to proceed or abort.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
System confirmation required before execution
This action will:
This action cannot be undone.
Stale data warning: someone else edited this record since it was loaded. Agent doesn't know whose changes should win.
Expected
Webhook fires. Human decides: reload (lose my changes), overwrite (lose theirs), or cancel.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
This record was modified by another user
Modified by: Jane D. (jane@company.com)
Modified: 3 minutes ago
Changes: Updated phone number, address
Your unsaved changes may overwrite their updates.
Time slot conflicts with existing appointment. Agent can't judge priority between the two appointments.
Expected
Webhook fires with both appointment details in context. Human decides: double-book, reschedule, or cancel.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Detected while processing your request
The requested time slot conflicts with an existing appointment:
Existing: Dr. Patel — Follow-up, May 15 2:00–2:30 PM (M. Johnson)
Requested: Dr. Patel — Consultation, May 15 2:00–3:00 PM (R. Williams)
This requires a decision before the workflow can continue.
System-enforced business rule: an unpaid balance was detected during processing. This is not an access denial or account lockout — the user is authenticated and authorized, but a policy rule requires a decision before the workflow can continue.
Expected
Webhook fires. Human decides: collect payment, override policy with manager approval, or reschedule.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
System-enforced business rule
This account has an unpaid balance of $1,240.00
Last payment: 02/15/2026 — 84 days overdue
Office policy requires a decision before scheduling new services. You may proceed after resolving this balance or requesting a manager override.
System alert raised during processing: insurance verification detected a risk. This is not a form validation error — the input data was accepted, but the system is warning about financial risk requiring human judgment.
Expected
Webhook fires with coverage details. Human decides: proceed as self-pay, retry verification, or hold.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Raised during processing — not an input error
Anthem Blue Cross — Policy #BC-4419283
Status: INACTIVE — termed 04/30/2026
Last verified: 05/01/2026
Proceeding without active coverage may result in claim denial. This requires a decision before the workflow can continue.
System detected a prior submission with matching criteria during processing. This is not 'your input was wrong' — the input is valid, but the system found a collision requiring human judgment on whether to proceed, view existing, or cancel.
Expected
Webhook fires showing existing submission. Human decides: submit as correction, view existing, or cancel.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Found during processing — input was accepted
Matching submission found in system:
Claim #CLM-20260428-7712
Submitted: 04/28/2026 by user admin@clinic.com
Status: Approved
Amount: $850.00
A submission with the same patient, date, and procedure code already exists. This requires a decision before the workflow can continue.
System-enforced limit: the transaction amount exceeds the user's authorization level. This is not access denied — the user is authenticated, but this specific action requires higher authority. A decision gate, not a lockout.
Expected
Webhook fires with limit details. Human decides: route to manager, split transaction, or cancel.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Transaction exceeds approval limit — not an access denial
Transaction amount: $12,450.00
Your approval limit: $10,000.00
Exceeded by: $2,450.00
This specific transaction requires additional authorization. Choose how to proceed:
Reproduces prod session 26a85463: eClinicalWorks claim entry surfaces a Yes/No confirmation when a procedure code is already on the claim. Binary in-modal decision; no upstream input to correct.
Expected
Webhook fires with popup_context. Customer responds with Yes or No; backend dispatches a synthetic click on the chosen button.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Reproduces prod session a9e4ff96: Noridian Medicare Portal surfaces an enhanced-monitoring consent modal blocking interaction with the login form. Binary accept/reject decision with legal text.
Expected
Webhook fires with popup_context including consent body. Customer responds Accept or Reject; backend dispatches a synthetic click.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Enhanced Monitoring Controls Notification:
CMS identified a concerning trend of malicious actors stealing MBIs and using them to commit Medicare fraud. Some are misusing Medicare Administrative Contractor (MAC) MBI lookup tools. We're implementing enhanced monitoring controls to prevent this abuse.
What You Need to Know
Only use the MAC MBI lookup tool for people you intend to provide a service or product to that you'll bill to Medicare. Our enhanced monitoring compares the MBIs you look up against actual claims submitted with NPIs. If we notice an unusually high rate of MBI lookups without associated claims, your access to the lookup tool may be removed.
Make sure your MAC portal users are associated with NPIs in your organization on whose behalf they may perform MBI lookups. This helps us verify legitimate use and protects your access to the lookup tool.
Warning:
You are accessing a U.S. Government information system. Information system usage may be monitored, recorded, and audited by company personnel.
Reproduces prod session d17e7841: eClinicalWorks Patient Lookup shows two near-duplicate patients and asks the user to confirm the selection. MVP starts with row 1 pre-selected — only Proceed/Cancel is in scope here. Row-picking is a follow-up.
Expected
Webhook fires with popup_context. Customer responds Proceed or Cancel; backend dispatches a synthetic click on the chosen button.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Patient Lookup - Duplicate Patient Warning
There are 2 patients with similar information. Are you sure you want to proceed with your patient selection?
| Patient Name | DOB | Sex | Home Phone | Cell Phone | Address |
|---|---|---|---|---|---|
| ENGELKING, JAMES R | 01/07/1997 | Male | 812-000-0000 | 812-530-9866 | 1765 RAE MONT WAY, NORTH VERN... |
| ENGEL, JANICE E | 12/03/1962 | Unknown | 1001 WILDWOOD CT, SEYMOUR, IN |
Popup with a close button that only responds to double-click (onDoubleClick). Single-click recovery will fail; the double-click retry in finalizePopupDismissHealing should handle it.
Expected
First LLM_VISION single-click fails to dismiss. finalizePopupDismissHealing detects popup still visible, injects double-click retry node. Second attempt dismisses the popup.
The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.
Your session has expired. Double-click the button below to dismiss this notice and continue.