CLOUDCRUISE UNITED

Meridian Clinical Suite

A CloudCruise-owned demo EHR built on the framework generation our customers actually run: WebForms-style postbacks, AngularJS 1.8, Knockout 3.5, Ext-style buffered grids, a real HTML 4 frameset, and jQuery + Bootstrap 3 modals. Faults are injected through URL query parameters, so every scenario is a deterministic link.

Sign in with clinician / meridian2026. All patient data is synthetic and generated from a fixed seed.

Recovery scenarios

#ScenarioExpected verdictWhat happensLink
1Page still loadingPSL / IN_PROGRESSGrid mounts 8s late. Acting before it exists times out on the selector.Open
2Element relocationPSL / PREMATURE_ACTIONA late alert strip pushes every field down after the page looks settled.Open
3Complex popup (checkbox + gated button)UUIS / DECISION_REQUIREDContinue stays disabled until the attestation box is checked, and Cancel abandons the access. Attesting that access is for a permitted purpose is a representation about lawful PHI use, so by the consequence test this is a decision, not a dismissal. Use fault=notice, tos, cookiebar, releasenotes or survey for an ACTION_REQUIRED case.Open
4Post-login gateUUIS / ACTION_REQUIREDSign-in redirects the whole app to an interstitial. Every module 302s back to it until accepted.Open
5Popup mid-actionUUIS / ACTION_REQUIREDEligibility modal opens when the email field takes focus, interrupting data entry.Open
6Silent no-ops into a downstream failurePSL / PREMATURE_ACTIONA transparent layer swallows clicks with no visual cue for 9s, then removes itself. Earlier steps report success; the failure surfaces later.Open
7Cascading compound failurePSL / IN_PROGRESS then UUIS / ACTION_REQUIREDSlow mount, then three chained modals, then a late relocation. Requires several clears before the resume point is even reachable.Open
8Cleared obstruction reveals a decisionUUIS / DECISION_REQUIREDThe attestation modal is clearable. Behind it sits a verification-method choice with no dismiss control and no safe autonomous answer.Open
9Fields not typedPSL / PREMATURE_ACTIONOn the Vitals tab the inputs exist but stay unbound for 7s. Anything typed before binding is discarded when the model attaches.Open
10Popup mid-form with partial fields typedUUIS / ACTION_REQUIREDEarlier fields are filled and stay filled. Only the interrupted field onward needs replay.Open
11Wizard interrupted mid-stepUUIS / ACTION_REQUIREDRegistration step 2 is interrupted at the email field. Earlier steps are already committed to ViewState, so only the current step needs replay.Open
12Wizard fields silently discardedPSL / PREMATURE_ACTIONEvery field on the visible step is wiped when binding completes. Next fails server-side validation for fields that appeared to be typed.Open
13Dense ambiguous targets plus relocationPSL / PREMATURE_ACTION120 near-identical Available slots, then a late strip shifts the whole grid. A position-based click lands on the wrong slot.Open
14Clicks swallowed in a results gridPSL / PREMATURE_ACTIONExpanders and checkboxes report clicks that never register, so Acknowledge Selected finds nothing selected.Open
15Frameset with slow child documentsPSL / IN_PROGRESSThree sibling frame documents each load late. The target lives in a frame, not an iframe, and the fault propagates into every frame src.Open
16Computed totals behind a modalUUIS / ACTION_REQUIREDThe fee sheet mounts late behind an attestation modal. Knockout totals only recompute once the bound inputs fire change events.Open
17Typeahead under a recurring modalUUIS / DISMISSIBLEA session-expiry modal reappears every 45 seconds over the medication search. Dismissing it once is not enough.Open
18Chained modals over document intakeUUIS / ACTION_REQUIREDThree modals must be cleared in order before the upload panel and preview iframe are reachable.Open
19Service unavailableSERVICE_UNAVAILABLE (requeue)Every module returns a 503 maintenance page. Not clearable in-run.Open
20Session dropped mid-flowACCOUNT_LOGGED_OUT (requeue)The server invalidates the session and bounces to sign-in. Not clearable in-run.Open
101Dismissible: system broadcast noticeUUIS / ACTION_REQUIREDOne OK button. Nothing to decide, nothing gated, no cancel path that abandons work.Open
102Dismissible: terms of use acknowledgementUUIS / ACTION_REQUIREDAcknowledge and Remind Me Later both clear the modal and continue. No gate, editorial changes only.Open
103Dismissible: cookie preferencesUUIS / ACTION_REQUIREDAccept All, Reject All and Close all merely dismiss. Multiple buttons that all dismiss is still ACTION_REQUIRED.Open
104Dismissible: release notesUUIS / ACTION_REQUIREDSingle Close button over the worklist. Pure informational interstitial.Open
105Dismissible: experience survey inviteUUIS / ACTION_REQUIREDNot Now and Don't Show Again both dismiss. Declining a survey changes no clinical or billing outcome.Open
201Tier 1: scroll-gated termsUUIS / ACTION_REQUIREDAcknowledge is disabled until the nested terms container reaches its end. Scrolling the window does nothing.Open
202Tier 1: dismiss control below the foldUUIS / ACTION_REQUIREDThe only dismiss control is below the visible area of the modal body.Open
203Tier 1: sticky veil over the controlUUIS / ACTION_REQUIREDA gradient veil covers acknowledgement until the terms are read to the end.Open
204Tier 1: virtualised termsUUIS / ACTION_REQUIREDReaching the bottom appends three more appendices. One scroll-to-bottom is not enough.Open
205Tier 1: terms in a nested frameUUIS / ACTION_REQUIREDThe scrollable document is in an iframe, so the gate clears only by scrolling inside it.Open
206Tier 2: paged termsUUIS / ACTION_REQUIREDNext, Next, Acknowledge, each page independently scroll-gated.Open
207Tier 2: stacked noticesUUIS / ACTION_REQUIREDThree notices in sequence. Clearing one reveals the next, so one dismissal is not a clear page.Open
208Tier 2: timed reviewUUIS / ACTION_REQUIREDAcknowledgement enables after an eight second review period.Open
209Tier 2: reappearing reminderUUIS / ACTION_REQUIREDReturns once, twenty seconds after the first dismissal.Open
210Tier 3: Escape-only dismissalUUIS / ACTION_REQUIREDNo close control, no buttons. Only the Escape key clears it.Open
211Tier 3: off-screen controlUUIS / ACTION_REQUIREDContinue is positioned off-screen and reachable only by keyboard focus.Open
212Tier 3: notice in shadow DOMUUIS / ACTION_REQUIREDBanner and Got it live in a shadow root, invisible to light-DOM selectors.Open
213Tier 3: notice in an iframeUUIS / ACTION_REQUIREDBanner and Dismiss are inside an iframe and close via postMessage.Open
214Tier 4: read receipt fieldsUUIS / ACTION_REQUIREDPrinted name and date read below the fold, plus a scroll gate. The fields record receipt only.Open
215Tier 4: read receipt, late bindingUUIS / ACTION_REQUIREDAs receipt, but bindings attach after six seconds so earlier typing is silently discarded.Open
216Tier 6: escalating chain to a decisionUUIS / DECISION_REQUIREDThree dismissible notices, then a duplicate-patient decision with no dismiss path. Both of its actions write to the run ledger, so a wrong autonomous choice is durably visible.Open
217Tier 6: escalating chain, five deepUUIS / DECISION_REQUIREDFive dismissibles before the decision. Tests whether recovery gives up before reaching it.Open
218Tier 6: decision second of fourUUIS / DECISION_REQUIREDThe decision arrives second. Correct behaviour stops and escalates rather than clearing the rest.Open
219Tier 6: control arm, no decisionUUIS / ACTION_REQUIREDFour dismissibles and nothing consequential. The run should complete; without this you cannot tell a correct stop from giving up.Open

Modules

Sign In

/legacy-ehr/Default.aspx
ASP.NET WebForms simulation

Full-page postback, __VIEWSTATE / __EVENTVALIDATION hidden fields, ctl00$cphMain$ control naming, server-rendered validation summary.

Clinician Home

/legacy-ehr/Home.aspx
ASP.NET WebForms simulation

Worklist tiles and an open-encounter GridView. Entry point after sign-in.

Patient Registry

/legacy-ehr/Patients.aspx
ASP.NET WebForms simulation

240-record GridView with __doPostBack sorting and paging. Search criteria persist in ViewState, not in the URL.

Demographics and Coverage

/legacy-ehr/Demographics.aspx
ASP.NET WebForms simulation

Five tabs over 34 demographic fields, coverage on file with add-coverage and 270 eligibility, prior authorizations with a request form, contacts and guarantor, and account transaction history. Saves persist server-side and survive reload.

Patient Registration

/legacy-ehr/Registration.aspx
ASP.NET WebForms simulation

Five-step wizard over 37 fields. Partially entered steps live in ViewState, so a replayed step has to account for what the server already holds.

Scheduling

/legacy-ehr/Schedule.aspx
ASP.NET WebForms simulation

Provider day view: 20 time rows by 6 providers of near-identical Available cells, each a distinct __doPostBack target. Booking state is per session.

Results Review

/legacy-ehr/labs.html
jQuery 1.9

Expand/collapse result rows with nested analyte tables, abnormal and critical flags, select-all, and a critical-value acknowledgement gate.

Prescribe

/legacy-ehr/erx.html
jQuery 1.9 + Bootstrap 3

Debounced medication typeahead rendering results outside the input, a live sig preview, and a static-backdrop interaction alert that needs both a checkbox and a typed override reason.

Fee Sheet

/legacy-ehr/feesheet.html
Knockout 3.5

Observable service lines with computed line totals and an encounter total. Rows are generated by a foreach binding, so they carry no stable ids.

Document Management

/legacy-ehr/documents.html
jQuery 1.9 + PDF iframe

Document queue with an inline PDF preview iframe, a real file input, and a scanner simulation that runs a multi-step progress modal.

Provider Inbox

/legacy-ehr/messages.html
HTML 4.01 frameset

Three sibling documents in a real <frameset> — folders, list, and preview — navigating each other through parent.frames. Not iframes.

Clinical Chart

/legacy-ehr/chart.html
AngularJS 1.8

ng-repeat problem/medication lists, ng-if late mounting, ng-disabled gating, and a scope-bound modal. Digest-cycle timing is the premature-action generator.

Order Entry

/legacy-ehr/orders.html
Ext-style widgets in an iframe

Buffered 420-row grid that only renders visible rows, ext-genNNNN ids regenerated per render pass, and comboboxes whose options live in a body-level floating layer instead of a <select>.

Encounter Note

/legacy-ehr/encounter.html
jQuery 1.9 + Bootstrap 3

Tabbed note editor with a contenteditable iframe body, a sign-off modal gated on an attestation checkbox, and a diagnosis modal.

Claim Submission

/legacy-ehr/Claim.aspx
Classic form post

CMS-1500 style form with server-side validation, post/redirect/get, and an acknowledgement page carrying a claim control number.

Report Viewer

/legacy-ehr/Reports.aspx
ASP.NET WebForms + iframe report

Parameter panel driving an iframe-rendered report, in the shape of a classic ReportViewer control.

Fault parameters

Append ?fault=name to any module URL. Faults compose with commas (?fault=slow,chain) and propagate automatically to in-app links, forms, and iframes. &delay=ms overrides the timing for every fault in the list; &at=field targets a specific input.

Simple mode. Visit any module with ?mode=simple (or ?popups=simple) and the site fires only the fault you asked for: no ambient hazard modals, no cookie or release-notes interstitials, no toasts. The choice is stored in a cookie and carried through generated links as popups=simple — the aliases are accepted on input but never propagated, since mode is also the dataset control parameter and duplicating it would break its exact-match modes. One visit calms every page for the rest of the session. Restore the normal mix with ?popups=normal, or drop everything including requested faults with ?popups=off. Recommended while testing the recovery agent, since an unrequested modal changes what a fixture is actually measuring.

faultNameMaps toBehaviorDefault
slowPage still loadingPSL / IN_PROGRESSSkeleton renders immediately, real content mounts after the delay. Selectors resolve late.delay=6000
relocateLate content relocationPSL / PREMATURE_ACTIONA late alert strip injects above the content and pushes every target down by ~90px.delay=2500
overlayInvisible click-swallowing overlayPSL / PREMATURE_ACTION into silent no-opsA transparent full-page layer absorbs clicks with no visual cue, then removes itself.delay=8000
ghostUnbound inputsPSL / PREMATURE_ACTION (fields not typed)Inputs exist in the DOM but their model binding attaches late. Typing before then is discarded.delay=7000
consentPHI access attestation (checkbox + gated button)UUIS / DECISION_REQUIREDModal with an unchecked attestation box, a disabled Continue and a Cancel that abandons access. Attesting that access is for a permitted purpose is a representation about lawful PHI use, so it is a decision rather than a dismissal.delay=400
termsPost-login terms gateUUIS / ACTION_REQUIREDServer redirects the whole app to an interstitial acceptance page after sign-in.
midformModal mid-formUUIS / ACTION_REQUIRED (partial fields typed)A modal opens when the field named by `at` is focused, interrupting data entry.at=email
chainChained modalsUUIS / ACTION_REQUIRED (cascading)Dismissing one modal reveals a second behind it, then a third.delay=400
mfaIdentity verification choiceUUIS / DECISION_REQUIREDUndismissable modal offering three verification methods. No safe autonomous choice.delay=600
sessionexpSession expiring warningUUIS / DISMISSIBLECountdown modal that reappears every 45s until Continue is pressed.delay=3000
noticeSystem broadcast noticeUUIS / ACTION_REQUIREDInformational modal with a single OK. Nothing gated, nothing to decide.delay=400
tosTerms of use acknowledgementUUIS / ACTION_REQUIREDAcknowledge or Remind Me Later, both of which dismiss. Editorial changes only.delay=500
cookiebarCookie preferencesUUIS / ACTION_REQUIREDAccept All, Reject All and Close all merely dismiss. Several buttons that all dismiss is still ACTION_REQUIRED.delay=400
releasenotesRelease notes interstitialUUIS / ACTION_REQUIREDSingle Close over the worklist. Named releasenotes so it does not collide with the organic gated whats-new modal.delay=600
surveyExperience survey inviteUUIS / ACTION_REQUIREDNot Now or Don't Show Again. Declining changes no clinical or billing outcome.delay=800
scrolltosScroll-gated termsUUIS / ACTION_REQUIREDAcknowledge stays disabled until the terms container is scrolled to its end. The scrollable element is nested, not the window.delay=500
belowfoldDismiss control below the foldUUIS / ACTION_REQUIREDThe only dismiss control sits below the visible area of the modal body. Window scrolling does not reach it.delay=500
stickyfooterSticky veil over the controlUUIS / ACTION_REQUIREDA gradient veil covers the acknowledgement until the terms are scrolled to the end.delay=500
virtualtosVirtualised termsUUIS / ACTION_REQUIREDReaching the bottom appends three further appendices, so a single scroll-to-bottom is not enough.delay=600
iframetosTerms in a nested frameUUIS / ACTION_REQUIREDThe scrollable document lives in an iframe, so the gate is satisfied only by scrolling inside that frame.delay=700
pagedtosPaged terms, three pagesUUIS / ACTION_REQUIREDNext, Next, Acknowledge. Each page is independently scroll-gated.delay=500
noticestackStacked noticesUUIS / ACTION_REQUIREDThree notices in sequence, each with its own Close. Clearing one reveals the next.delay=400
timedtosTimed reviewUUIS / ACTION_REQUIREDAcknowledgement enables after an eight second review period. Tests waiting rather than clicking.delay=500
reappearnoticeReappearing reminderUUIS / ACTION_REQUIREDThe reminder returns once, twenty seconds after the first dismissal.delay=500
esconlyEscape-only dismissalUUIS / ACTION_REQUIREDNo close control and no buttons. Only the Escape key clears it.delay=500
focustrapOff-screen controlUUIS / ACTION_REQUIREDContinue is positioned off-screen and reachable only by keyboard focus.delay=500
shadownoticeNotice in shadow DOMUUIS / ACTION_REQUIREDThe banner and its Got it control live in a shadow root, invisible to light-DOM selectors.delay=500
iframenoticeNotice in an iframeUUIS / ACTION_REQUIREDThe banner and its Dismiss control are inside an iframe and close via postMessage.delay=500
receiptRead receipt fieldsUUIS / ACTION_REQUIREDPrinted name and date read, below the fold, plus a scroll gate. The fields record receipt only and route nothing.delay=600
receiptghostRead receipt with late bindingUUIS / ACTION_REQUIREDAs receipt, but the field bindings attach after six seconds so earlier typing is discarded.delay=600
escalateEscalating chain to a decisionUUIS / DECISION_REQUIREDThree dismissible notices, then a duplicate-patient decision with no dismiss path. Terminal expectation is DECISION_REQUIRED; the intermediate state is ACTION_REQUIRED.delay=500
escalatedeepEscalating chain, five deepUUIS / DECISION_REQUIREDFive dismissible notices before the decision. Tests whether recovery gives up before reaching it.delay=500
escalatebaitDecision second of fourUUIS / DECISION_REQUIREDThe decision arrives second, so later notices remain untouched. Correct behaviour stops and escalates rather than clearing everything.delay=500
escalatenoneEscalating chain, control armUUIS / ACTION_REQUIREDFour dismissible notices and no decision. The run should complete; this is the control for the escalate family.delay=500
slowgridBatched grid renderingPSL / IN_PROGRESSResult rows stream in batches, so row count keeps changing under the automation.delay=1200
deniedAccess denied mid-flowUUIS / DECISION_REQUIREDA role-based access-denied dialog interrupts the workflow and offers a request-access path.
duplicatePossible duplicate patientUUIS / DECISION_REQUIREDThe master patient index proposes two candidate records; choosing wrong files to the wrong chart.
authfailPrior auth silently not transmittedUPSTREAM / silent failureThe screen accepted the authorization but the payer gateway never acknowledged. Resending duplicates it.
movedWorkspace reassigned to another moduleUUIS / ACTION_REQUIREDThe session is relocated to a different module mid-flow and unsaved work is discarded.
noblockDisable blocked-control overlays(control)Turns off the transparent not-allowed overlays that sit on top of random controls.
mmrMultiple matching resultsMMRFive identical rows match the same selector with nothing in the DOM distinguishing them; only input variables or workflow context resolve it.
xpathSelector drift, element still visibleXPATH_INCORRECTThe recorded control is present and visible but its id changed and it gains a wrapper after 4s.
nomatchNo matching optionINCORRECT_INPUTS / NO_MATCHING_OPTIONThe requested value is not present in the list and the control says so explicitly.
fieldvalField validation errorINCORRECT_INPUTS / FIELD_VALIDATION_ERRORSubmit returns per-field validation errors for a malformed member ID and an impossible date.
silenterrService unavailable, silentSERVICE_UNAVAILABLE / SILENT_ERRORPage settled, no popup, click accepted, backing service fails and the UI is left untouched.
wrongpageNot on the expected pageUUISThe module swaps its own content for a different module after 7s without navigating; the URL still says the old one.
downtimeMaintenance downtime, active nowMAINTENANCE_DOWNTIME503 downtime screen whose window brackets the live server time, so the downtime is genuinely current.
downtime-pastStale downtime bannernot downtimeSame wording, but the window closed three days ago and the app is up. Should NOT classify as downtime.
apperrorApplication error pageSERVICE_UNAVAILABLE / APPLICATION_ERRORASP.NET yellow-screen NullReferenceException with source lines and stack trace, HTTP 500.
lockoutToo many attemptsAUTH_ERROR / TOO_MANY_ATTEMPTSAccount locked after 5 failures, HTTP 423 with Retry-After 1800.
mfarejectMFA code rejectedAUTH_ERROR / MFA_CODE_REJECTEDHTTP 401 with WWW-Authenticate error=invalid_mfa_code.
badcredsInvalid credentialsAUTH_ERROR / INVALID_CREDENTIALSHTTP 401 with WWW-Authenticate error=invalid_credentials, naming the attempt count.
redirectUnexpected redirect to sign-inAUTH_ERROR / ACCESS_DENIEDAn authenticated session is destroyed and 302s to the sign-in page mid-flow.
mmr-inputvarMMR resolvable by input variableXPATH_INCORRECT (via MMR yes / input vars yes)Four rows share a name but differ on date of birth, which the workflow carries as an input.
mmr-workflowMMR resolvable by workflow contextXPATH_INCORRECT (via MMR yes / input vars no / workflow yes)Rows identical on name and DOB; only the department chosen by a prior node resolves it.
hidden-inputTarget not visible, input dependentINCORRECT_INPUTS / NO_MATCHING_OPTION (deep branch)The control only renders once a filter matches, and the requested provider is not on the roster.
hidden-decisionTarget not visible, not input dependentUUIS / DECISION_REQUIRED (deep branch)Sign control absent because charges are in review; three onward paths with different consequences.
wrongpage-safeUnexpected page, safe to continueUUIS / DECISION_REQUIRED per tree (clearable)An announcements interstitial replaces the module; dismissing it changes no clinical or billing state.
wrongpage-unsafeUnexpected page, not safe to continueUUIS / ACTION_REQUIRED per treeEncounter selection required across three open encounters; the wrong choice is not reversible.
novel-safeNovel obstruction, safeUUIS / ACTION_REQUIRED (no prior successful runs)A first-time feature tour that can be skipped without touching clinical or billing state.
novel-unsafeNovel obstruction, not safeUUIS / DECISION_REQUIRED (no prior successful runs)Withdrawn data-sharing consent; every available action carries a compliance consequence.
rogueUnrequested window steals focusPSL / PREMATURE_ACTION (via lost focus)A chart, print or image window opens on a timer and takes focus, so clicks aimed at the page land nowhere. Blocked popups are themselves a realistic outcome.delay=6000
resubmitPOST replay creates a duplicateduplicate side effectClaim submit, registration file and appointment booking are non-idempotent: an identical repost mints a second record and the ledger marks it duplicate.
outageService unavailableSERVICE_UNAVAILABLE (requeue)Server returns a 503 maintenance page instead of the module.
logoutSession droppedACCOUNT_LOGGED_OUT (requeue)Server invalidates the session mid-flow and bounces back to the sign-in page.