CLOUDCRUISE UNITED

Unexpected UI State — Test Harness

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.

Filter:All
DISMISSIBLE:123416
DECISION_REQUIRED:56789101112131415

Scenario 1: DISMISSIBLE: Cookie consent banner

DISMISSIBLEpermalink

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.

Workflow Target

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.

Scenario 2: DISMISSIBLE: Newsletter signup modal

DISMISSIBLEpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 3: DISMISSIBLE: Promotional offer overlay

DISMISSIBLEpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 4: DISMISSIBLE: Feedback survey prompt

DISMISSIBLEpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 5: DECISION_REQUIRED: Duplicate record detected

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 6: DECISION_REQUIRED: Destructive action confirmation

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 7: DECISION_REQUIRED: Record modified by another user

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 8: DECISION_REQUIRED: Scheduling conflict

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 9: DECISION_REQUIRED: Policy gate — outstanding balance

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 10: DECISION_REQUIRED: Coverage eligibility alert

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 11: DECISION_REQUIRED: Existing submission detected

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 12: DECISION_REQUIRED: Approval threshold exceeded

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 13: DECISION_REQUIRED: ECW — Code already exists (Yes/No)

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 14: DECISION_REQUIRED: Noridian — Consent to Monitoring (Accept/Reject)

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 15: DECISION_REQUIRED: ECW — Duplicate Patient Warning (Proceed/Cancel)

DECISION_REQUIREDpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.

Scenario 16: DISMISSIBLE: Double-click-only close button

DISMISSIBLEpermalink

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.

Workflow Target

The workflow tries to click this Submit button. The popup obstructs it. Recovery must handle the popup so the click lands.