diff --git a/CAPABILITIES.md b/CAPABILITIES.md index 19e581dea..4b4595c42 100644 --- a/CAPABILITIES.md +++ b/CAPABILITIES.md @@ -127,6 +127,7 @@ improvising or retrying when something is off. | Capability | Status | Evidence | Where | | --- | --- | --- | --- | | Compile one or more demonstrations into a deterministic program | Released | Real app (OpenEMR referral, 62 timed runs) | `openadapt-flow record`, `compile`; [packages/flow](packages/flow/README.md) | +| Try the three acts on a real app: `openadapt quickstart --app openemr` runs the certified OpenEMR referral program in Docker, five referrals at once checked in OpenEMR's record, then a possible duplicate stopped before saving; without Docker or a clone it says so and exits 2 | On main ([#1431](https://github.com/OpenAdaptAI/OpenAdapt/pull/1431)) | Real app (local OpenEMR 8.0.0.3, synthetic patients) | `openadapt quickstart --app openemr`; [docs/quickstart](docs/quickstart/README.md#on-a-real-app---app-openemr) | | Classify common local edits without a person (select-all, Enter in a field or dropdown, an in-form tab, an informational dialog's dismiss), only when the recording's network capture shows no write and a runtime check confirms only the expected change | On main ([#1366](https://github.com/OpenAdaptAI/OpenAdapt/pull/1366)) | Synthetic; OpenEMR referral recording re-admitted offline (violations 12 to 1 under `permissive`) | [LOCAL_EDIT_CLASSIFICATION.md](packages/flow/docs/design/LOCAL_EDIT_CLASSIFICATION.md), `compiler/local_edit.py` | | Right-record check before any write (structure, then OCR, then pixels) | Released | Real app and synthetic | [RESOLUTION_LADDER.md](packages/flow/docs/RESOLUTION_LADDER.md), `runtime/identity.py` | | Read the saved record back from the system of record (API, database, FHIR, separate session) | Released | Real app (OpenEMR 12 of 12 fields) | [VERIFICATION.md](packages/flow/docs/VERIFICATION.md), `runtime/effects/` | diff --git a/docs/quickstart/README.md b/docs/quickstart/README.md index e7ef7bd20..1df581762 100644 --- a/docs/quickstart/README.md +++ b/docs/quickstart/README.md @@ -10,3 +10,58 @@ - `timing-2026-10-20.json`: the engine tutorial with `--break-it` (what `openadapt quickstart --break-it` ran before) against the new quickstart, three rounds each, interleaved, from `scripts/quickstart_timing.py`. + +## On a real app: `--app openemr` + +```bash +openadapt quickstart --app openemr +``` + +The same three acts on OpenEMR 8.0.0.3, a real open-source EHR, instead of the +bundled MockMed. The default stays MockMed: it needs no Docker and finishes in +about 22 seconds. + +- **Needs** Docker (Docker Desktop, or Podman with `DOCKER_HOST` pointed at + its socket) and a clone of this repository, because the OpenEMR fixture is + repository-only: + + ```bash + git clone https://github.com/OpenAdaptAI/OpenAdapt && cd OpenAdapt + pip install -e . -e packages/flow + ``` + + Without either, the command says which one is missing in one line and exits + with status 2. It never falls back to MockMed. +- **Setup.** The pinned fixture from `packages/flow/benchmark/openemr_local/`: + pinned image digests, verified source files, a hashed SQL baseline, loopback + ports 9741 (HTTP) and 9740 (HTTPS) (set `OPENADAPT_QUICKSTART_OPENEMR_HTTP_PORT` + and `OPENADAPT_QUICKSTART_OPENEMR_HTTPS_PORT` to move them), and its own Compose project + (`openadapt-quickstart-openemr`). Its state stays in + `~/.cache/openadapt/quickstart-openemr`. The first run downloads the images + if they're missing (about 2.6 GB unpacked), installs OpenEMR, and adds + synthetic API clients. Later runs reuse the running copy and restore its + baseline. +- **Act 1, show it once.** The referral as it was demonstrated once in + OpenEMR: the recorded actions of the certified referral program, the same + program behind the site's OpenEMR Seals + (`benchmark/openemr_local/referral_program/`). It was compiled with the + shared duplicate rule (`apply_referral_rules`) and qualified under + `clinical-write`. +- **Act 2, run it.** Five synthetic referrals at once, each on its own clerk + account and browser. Each runs through the certified run path (the Standard + run gate, then the REST record check) and is read back from OpenEMR's + database with SQL: "✓ checked in OpenEMR's record". +- **Act 3, break it.** The quickstart adds an existing chart (Rosa Delgado, + born 1958-03-27), then runs a referral for a Rosa Delgado born 1958-03-22. + OpenEMR's duplicate check lists the match, and the program stops before + saving ("Stopped before saving: possible duplicate"). SQL finds 0 new charts. +- **Finale.** The same receipt card and Seal. Every quickstart, in either app, + ends the receipt with "See real Seals from OpenEMR runs: + https://openadapt.ai/seals". + +To stop the fixture, run +`docker compose -p openadapt-quickstart-openemr stop`. The next quickstart +starts it again. + +The real run is covered by `test_real_openemr_quickstart` (opt in with +`OPENADAPT_REAL_QUICKSTART_OPENEMR=1` on a machine with Docker); CI skips it. diff --git a/docs/quickstart/quickstart-openemr.tape b/docs/quickstart/quickstart-openemr.tape new file mode 100644 index 000000000..29678d859 --- /dev/null +++ b/docs/quickstart/quickstart-openemr.tape @@ -0,0 +1,35 @@ +# Records docs/quickstart/quickstart-openemr.gif with VHS (https://github.com/charmbracelet/vhs, MIT). +# +# PATH="$PWD/.venv/bin:$PATH" vhs docs/quickstart/quickstart-openemr.tape +# +# Run it from a clone with Docker running (with Podman, export DOCKER_HOST +# first; the recording's shell inherits it). The fixture from an earlier run +# is reused, so this records a warm run. The browsers stay hidden (no display +# in the recording). Everything else is the real command, start to finish, at +# real speed. + +Output docs/quickstart/quickstart-openemr.gif + +Set Shell bash +Set FontSize 15 +Set Width 1240 +Set Height 1100 +Set Padding 24 +Set Framerate 12 +Set TypingSpeed 45ms +Set Theme "Builtin Dark" + +Hide +Type "unset DISPLAY WAYLAND_DISPLAY; export SSH_CONNECTION=recording BROWSER=true OPENADAPT_FLOW_SCRUB=off OPENADAPT_SEAL_HOME=$(mktemp -d) PS1='$ '; cd $(mktemp -d) && clear" +Enter +Show + +Sleep 500ms +Type "openadapt quickstart --app openemr" +Sleep 400ms +Enter +Wait+Screen@600s /Press Enter/ +Sleep 2s +Enter +Wait+Screen@300s /Give your agent/ +Sleep 8s diff --git a/llms-full.txt b/llms-full.txt index f6e08aa18..bb2a176b6 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -524,6 +524,7 @@ improvising or retrying when something is off. | Capability | Status | Evidence | Where | | --- | --- | --- | --- | | Compile one or more demonstrations into a deterministic program | Released | Real app (OpenEMR referral, 62 timed runs) | `openadapt-flow record`, `compile`; [packages/flow](https://github.com/OpenAdaptAI/OpenAdapt/blob/main/packages/flow/README.md) | +| Try the three acts on a real app: `openadapt quickstart --app openemr` runs the certified OpenEMR referral program in Docker, five referrals at once checked in OpenEMR's record, then a possible duplicate stopped before saving; without Docker or a clone it says so and exits 2 | On main ([#1431](https://github.com/OpenAdaptAI/OpenAdapt/pull/1431)) | Real app (local OpenEMR 8.0.0.3, synthetic patients) | `openadapt quickstart --app openemr`; [docs/quickstart](https://github.com/OpenAdaptAI/OpenAdapt/blob/main/docs/quickstart/README.md#on-a-real-app---app-openemr) | | Classify common local edits without a person (select-all, Enter in a field or dropdown, an in-form tab, an informational dialog's dismiss), only when the recording's network capture shows no write and a runtime check confirms only the expected change | On main ([#1366](https://github.com/OpenAdaptAI/OpenAdapt/pull/1366)) | Synthetic; OpenEMR referral recording re-admitted offline (violations 12 to 1 under `permissive`) | [LOCAL_EDIT_CLASSIFICATION.md](https://github.com/OpenAdaptAI/OpenAdapt/blob/main/packages/flow/docs/design/LOCAL_EDIT_CLASSIFICATION.md), `compiler/local_edit.py` | | Right-record check before any write (structure, then OCR, then pixels) | Released | Real app and synthetic | [RESOLUTION_LADDER.md](https://github.com/OpenAdaptAI/OpenAdapt/blob/main/packages/flow/docs/RESOLUTION_LADDER.md), `runtime/identity.py` | | Read the saved record back from the system of record (API, database, FHIR, separate session) | Released | Real app (OpenEMR 12 of 12 fields) | [VERIFICATION.md](https://github.com/OpenAdaptAI/OpenAdapt/blob/main/packages/flow/docs/VERIFICATION.md), `runtime/effects/` | diff --git a/openadapt/cli.py b/openadapt/cli.py index dff42a552..272c753ed 100644 --- a/openadapt/cli.py +++ b/openadapt/cli.py @@ -460,6 +460,7 @@ def _is_externally_managed_error(error: BaseException) -> bool: _QUICKSTART_OPTIONS = frozenset( { "--out", + "--app", "--headless", "--no-break", "--verbose", @@ -548,6 +549,17 @@ def _quickstart_root(out: Optional[Path]) -> Path: f"{_DEFAULT_QUICKSTART_DIR}, suffixed -2, -3, ... when taken." ), ) +@click.option( + "--app", + type=click.Choice(["mockmed", "openemr"]), + default="mockmed", + show_default=True, + help=( + "The app to run it in. mockmed is bundled (about 22 seconds, no Docker). " + "openemr runs OpenEMR 8.0.0.3 in Docker from a clone of the repository; " + "the first run downloads and installs it, later runs reuse it." + ), +) @click.option( "--headless", is_flag=True, @@ -570,6 +582,7 @@ def _quickstart_root(out: Optional[Path]) -> Path: def quickstart( command_ctx: click.Context, out: Optional[Path], + app: str, headless: bool, no_break: bool, verbose: bool, @@ -584,14 +597,21 @@ def quickstart( screen says saved, the database has nothing, and OpenAdapt stops. The program makes no AI calls. Nothing in the output directory is overwritten. + With --app openemr, the same three acts run on OpenEMR 8.0.0.3 in Docker, + with the certified referral program: referrals registered at once and + checked in OpenEMR's record, then a referral that matches an existing + chart, where the program stops before saving. It runs from a clone of the + repository and needs Docker; without either it says so and exits 2. + Other flags of the engine tutorial (for example --guided or --interactive-record) run that tutorial instead, unchanged. """ _require_supported_python() _refuse_unknown_tutorial_options(command_ctx.args) + openemr = _openemr_checkout(command_ctx.args) if app == "openemr" else None root = _quickstart_root(out) - if command_ctx.args or not _flow_runs_quickstart(): + if openemr is None and (command_ctx.args or not _flow_runs_quickstart()): # Engine-owned flags (--guided, --interactive-record, and future # engine additions) run the engine's own tutorial, as before. So does # a Flow older than the pieces the three-act quickstart uses. @@ -605,7 +625,7 @@ def quickstart( steps = next_steps( _hint, _shell_quote, - _agent_serves_tutorial(), + openemr is None and _agent_serves_tutorial(), keep=_keep_command(), shadow=_shadowing_openadapt if _under_uvx() else None, ) @@ -617,6 +637,7 @@ def quickstart( break_it=not no_break, verbose=verbose, steps=steps, + openemr=openemr, ) except KeyboardInterrupt: click.echo(f"\nStopped. Anything written so far is in {root}", err=True) @@ -625,7 +646,11 @@ def quickstart( if _is_externally_managed_error(error): _echo_python_remedy() raise click.exceptions.Exit(1) from error - if type(error).__name__ in ("TutorialError", "DurableAuthorityBusy"): + if type(error).__name__ in ( + "TutorialError", + "DurableAuthorityBusy", + "FixtureError", + ): raise click.ClickException( f"The quickstart stopped: {error}\nAnything it wrote is in {root}" ) from error @@ -636,6 +661,31 @@ def quickstart( raise click.exceptions.Exit(1) +def _openemr_checkout(extra: list[str]) -> Path: + """The clone's packages/flow for ``--app openemr``, or exit 2 saying why. + + Each missing piece is one line on stderr. Nothing falls back to MockMed. + """ + from openadapt.quickstart.openemr import ( + checkout_problem, + docker_problem, + find_flow_checkout, + ) + + if extra: + raise click.UsageError( + f"--app openemr runs the three-act quickstart only; {extra[0]} " + "belongs to the engine's MockMed tutorial." + ) + problem = docker_problem() + flow = find_flow_checkout() if problem is None else None + problem = problem or checkout_problem(flow) + if problem is not None or flow is None: + click.echo(problem, err=True) + raise click.exceptions.Exit(2) + return flow + + # The oldest Flow with every piece the three-act quickstart uses (shared # browser, record checks bound to run inputs, the side-by-side page). _QUICKSTART_FLOW_MINIMUM = (2, 2, 0) diff --git a/openadapt/quickstart/__init__.py b/openadapt/quickstart/__init__.py index 712ad4536..4b2c38b89 100644 --- a/openadapt/quickstart/__init__.py +++ b/openadapt/quickstart/__init__.py @@ -11,8 +11,9 @@ import sys from pathlib import Path -from typing import IO, Callable, Optional +from typing import IO, Any, Callable, Optional +from openadapt.quickstart.scene import MOCKMED from openadapt.quickstart.story import ( YOUR_APP_URL, NextSteps, @@ -68,8 +69,13 @@ def run_quickstart( steps: Callable[[Outcome], NextSteps], stream: Optional[IO[str]] = None, interactive: Optional[bool] = None, + openemr: Optional[Path] = None, ) -> Outcome: - """Run the quickstart into ``root`` and print it to ``stream``.""" + """Run the quickstart into ``root`` and print it to ``stream``. + + ``openemr`` is a clone's ``packages/flow`` folder: the three acts then run + on OpenEMR in Docker instead of the bundled MockMed. + """ from openadapt.quickstart.engine import FlowEngine, display_available, open_page from openadapt.quickstart.view import make_view @@ -77,12 +83,18 @@ def run_quickstart( stream = stream or sys.stdout if interactive is None: interactive = bool(sys.stdin.isatty() and getattr(stream, "isatty", bool)()) - # A person watching gets a short pause between demonstrated actions; a - # hidden browser runs at full speed. - engine = FlowEngine(root, visible=visible, pace_s=0.3 if visible else 0.0) + engine: Any + if openemr is not None: + from openadapt.quickstart.openemr import OpenEMREngine + + engine = OpenEMREngine(root, visible=visible, flow=openemr) + else: + # A person watching gets a short pause between demonstrated actions; + # a hidden browser runs at full speed. + engine = FlowEngine(root, visible=visible, pace_s=0.3 if visible else 0.0) return run_story( engine, - make_view(stream), + make_view(stream, scene=getattr(engine, "scene", MOCKMED)), next_steps=steps, break_it=break_it, interactive=interactive, diff --git a/openadapt/quickstart/engine.py b/openadapt/quickstart/engine.py index c2d4e8cd2..95bbd252a 100644 --- a/openadapt/quickstart/engine.py +++ b/openadapt/quickstart/engine.py @@ -25,6 +25,8 @@ from pathlib import Path from typing import Any, Callable, Optional, Sequence +from openadapt.quickstart.scene import MOCKMED + #: Synthetic notes for the five runs. None of them is clinical advice. RUN_NOTES = ( "Follow-up in two weeks", @@ -336,6 +338,10 @@ def _sha256(path: Path) -> Optional[str]: class FlowEngine: """The bundled tutorial, one stage per call, inside one browser process.""" + #: Act 2's inputs: one new note per run. + inputs = RUN_NOTES + scene = MOCKMED + def __init__(self, root: Path, *, visible: bool, pace_s: float = 0.0) -> None: self.root = root self.visible = visible @@ -595,20 +601,7 @@ def seal(self, runs: list[RunFacts]) -> Optional[SealFacts]: no Seal and no command to check one. """ - try: - from openadapt_flow.offline_seal import seal_home, seal_run - except ImportError: - return None - checked = [run for run in runs if run.checked] - if not checked: - return None - key_id = "" - for run in checked: - # The configured Seal key, or one generated under the Seal home - # on first use (the offline-Seal default). - seal = seal_run(run.run_dir, home=seal_home(), enqueue=False) - key_id = str(seal.key_id) - return SealFacts(key_id=key_id, sealed=len(checked)) + return seal_runs(runs) def write_page(self, first: RunFacts, broken: BreakFacts) -> Optional[Path]: """Write the side-by-side page (``openadapt flow demo``'s page).""" @@ -652,6 +645,25 @@ def write_page(self, first: RunFacts, broken: BreakFacts) -> Optional[Path]: return demo_proof.write_demo_page(evidence) +def seal_runs(runs: list[RunFacts]) -> Optional[SealFacts]: + """Sign each checked run's report with this computer's Seal key.""" + + try: + from openadapt_flow.offline_seal import seal_home, seal_run + except ImportError: + return None + checked = [run for run in runs if run.checked] + if not checked: + return None + key_id = "" + for run in checked: + # The configured Seal key, or one generated under the Seal home on + # first use (the offline-Seal default). + seal = seal_run(run.run_dir, home=seal_home(), enqueue=False) + key_id = str(seal.key_id) + return SealFacts(key_id=key_id, sealed=len(checked)) + + def return_focus_to_terminal( *, visible: bool, platform: Optional[str] = None, environ=None, run=None ) -> bool: diff --git a/openadapt/quickstart/openemr.py b/openadapt/quickstart/openemr.py new file mode 100644 index 000000000..f28b48486 --- /dev/null +++ b/openadapt/quickstart/openemr.py @@ -0,0 +1,620 @@ +"""``openadapt quickstart --app openemr``: the three acts on a real OpenEMR. + +The default quickstart uses the bundled MockMed: no Docker, about 22 seconds. +This mode runs the same story on OpenEMR 8.0.0.3 in Docker, with the certified +referral program behind the site's OpenEMR Seals: + +1. Show it once: the referral as it was demonstrated once in OpenEMR, from + the recording the program was compiled from. +2. Run it: synthetic referrals at once, one clerk account and browser each, + every run through the certified run path (the Standard run gate, the REST + record check) and read back from OpenEMR's database. +3. Break it: OpenEMR gets an existing chart, then a referral with the same + name and another birth date. OpenEMR's duplicate check lists the match, and + the program stops before saving. The database has no new chart. + +The OpenEMR fixture lives in the repository (``packages/flow/benchmark``), +not in the published packages, so this mode runs from a clone. The fixture's +state stays in the user's cache folder, and a running copy is reused. +""" + +from __future__ import annotations + +import contextlib +import json +import os +import shutil +import subprocess +import sys +import threading +import time +from concurrent.futures import ThreadPoolExecutor +from dataclasses import asdict +from pathlib import Path +from typing import Any, Callable, Optional, Sequence + +from openadapt.quickstart.engine import ( + BreakFacts, + DemoStep, + RunFacts, + SealFacts, + return_focus_to_terminal, + seal_runs, +) +from openadapt.quickstart.scene import OPENEMR + +DOCKER_INSTALL_URL = "https://docs.docker.com/get-docker/" +CLONE_URL = "https://github.com/OpenAdaptAI/OpenAdapt" + +#: A referral takes 20 to 30 seconds alone and longer five at a time. One +#: that hasn't reported after this long has stalled. +STALL_S = 240.0 +#: Workers sign in before they report ready. +READY_TIMEOUT_S = 240.0 + +#: The duplicate-check dialog in the 1280x800 screenshot. +DIALOG_CROP = (204, 30, 1078, 262) + +#: Field labels for the demonstration's typed values. +FIELD_LABELS = { + "title": "Title", + "fname": "First name", + "lname": "Last name", + "DOB": "Date of birth", + "sex": "Sex", + "street": "Street", + "city": "City", + "state_label": "State", + "postal_code": "Postal code", + "phone_home": "Home phone", + "email": "Email", + "country_code": "Country", +} + + +# --------------------------------------------------------------------------- +# Preconditions +# --------------------------------------------------------------------------- + + +def docker_problem( + *, + which: Callable[[str], Optional[str]] = shutil.which, + run: Callable[..., Any] = subprocess.run, +) -> Optional[str]: + """One line saying why Docker can't run OpenEMR here, or None.""" + + if which("docker") is None: + return ( + "OpenEMR mode needs Docker, which isn't installed. Install Docker " + f"Desktop ({DOCKER_INSTALL_URL}), then run this again." + ) + try: + info = run( + ["docker", "info", "--format", "{{.ServerVersion}}"], + capture_output=True, + timeout=30, + check=False, + ) + except (OSError, subprocess.TimeoutExpired): + info = None + if info is None or info.returncode != 0: + return ( + "OpenEMR mode needs Docker, which is installed but not running. " + "Start Docker Desktop, then run this again." + ) + try: + compose = run( + ["docker", "compose", "version"], + capture_output=True, + timeout=30, + check=False, + ) + except (OSError, subprocess.TimeoutExpired): + compose = None + if compose is None or compose.returncode != 0: + return ( + "OpenEMR mode needs Docker Compose v2 (docker compose), which " + f"isn't available. Install Docker Desktop ({DOCKER_INSTALL_URL}), " + "then run this again." + ) + return None + + +def _has_fixture(flow: Path) -> bool: + return (flow / "benchmark" / "openemr_local" / "quickstart.py").is_file() and ( + flow / "scripts" / "openemr_local_demo.py" + ).is_file() + + +def find_flow_checkout(candidates: Optional[Sequence[Path]] = None) -> Optional[Path]: + """The ``packages/flow`` folder of a clone that has the OpenEMR fixture. + + The installed engine's own folder comes first (an editable install from a + clone), then the launcher's. + """ + + if candidates is None: + found: list[Path] = [] + with contextlib.suppress(ImportError): + import openadapt_flow + + found.append(Path(openadapt_flow.__file__).resolve().parents[1]) + import openadapt + + found.append( + Path(openadapt.__file__).resolve().parents[1] / "packages" / "flow" + ) + candidates = found + return next((path for path in candidates if _has_fixture(path)), None) + + +def checkout_problem(flow: Optional[Path]) -> Optional[str]: + if flow is not None: + return None + return ( + "OpenEMR mode runs from a clone of the repository: git clone " + f"{CLONE_URL} && cd OpenAdapt && pip install -e . -e packages/flow, " + "then run this again." + ) + + +def _driver(flow: Path) -> Any: + """The fixture driver, imported from the clone.""" + + path = str(flow) + if path not in sys.path: + sys.path.insert(0, path) + from benchmark.openemr_local import quickstart + + return quickstart + + +# --------------------------------------------------------------------------- +# Facts +# --------------------------------------------------------------------------- + + +def demo_step_label(event: dict[str, Any]) -> Optional[str]: + """A label for one demonstrated action worth showing, else None. + + Shown: each typed value, with its field, and the clicks that move the + task on. Not shown: the clicks into fields, select-all and Enter keys, + and scrolls (all of them are still steps of the program). + """ + + kind = event.get("kind") + if kind == "type": + field = FIELD_LABELS.get(str(event.get("param") or ""), "") + text = str(event.get("text") or "") + return f'{field}: "{text}"' if field else f'Type "{text}"' + if kind == "click": + selector = event.get("selector") + if selector == "#create": + return "Click Create New Patient" + if selector == "#confirmCreate": + return "Click Confirm Create New Patient" + if event.get("name") == "Contact": + return "Open the Contact section" + return None + + +def run_facts(index: int, facts: dict[str, Any], checked: bool) -> RunFacts: + return RunFacts( + index=index, + note=str(facts["name"]), + run_dir=Path(facts["run_dir"]), + execution_outcome=str(facts["execution_outcome"]), + transaction_outcome=facts["transaction_outcome"], + checked=checked, + records=int(facts["charts"]), + model_calls=int(facts["model_calls"]), + cost_usd=float(facts["cost_usd"]), + effects_required=int(facts["effects_required"]), + effects_confirmed=int(facts["effects_confirmed"]), + seconds=float(facts["seconds"]), + plain_label=str(facts["plain_label"]), + ) + + +def read_dialog(screenshot: Path) -> Optional[str]: + """The matching chart OpenEMR's duplicate check listed, read off the screen.""" + + import re + + from openadapt_flow.vision.ocr import ocr, upscale_png + + from openadapt.quickstart.images import crop_png + + try: + png = upscale_png(crop_png(screenshot, DIALOG_CROP), 2) + lines = [str(line.text).strip() for line in ocr(png)] + except Exception: # noqa: BLE001 - the screenshot itself still shows it + return None + name = next((line for line in lines if "," in line and "Delgado" in line), None) + born = next( + (line for line in lines if re.fullmatch(r"\d{4}-\d{2}-\d{2}", line)), None + ) + if name is None: + return None + # OCR can drop the space after the comma ("Delgado,Rosa"). + name = re.sub(r",(?=\S)", ", ", name) + return f"a matching chart: {name}" + (f", born {born}" if born else "") + + +# --------------------------------------------------------------------------- +# Workers +# --------------------------------------------------------------------------- + + +def _worker_main( + conn: Any, + visible: bool, + browser: str, + flow: str, + state_dir: str, + user: str, +) -> None: + """One clerk: sign in, then run the program for each referral it is sent.""" + + os.environ.setdefault("OPENADAPT_FLOW_OCR_THREADS", "2") + if browser: + os.environ["OPENADAPT_FLOW_BROWSER"] = browser + if hasattr(os, "nice"): + with contextlib.suppress(OSError): + os.nice(10) + session = None + try: + from openadapt_flow import _prewarm + from openadapt_flow.backends._browser_process import shared_browser + from openadapt_flow.ir import Workflow + + _prewarm.start() + driver = _driver(Path(flow)) + fixture = driver.make_fixture(Path(state_dir)) + driver.point_qualify_hooks_here(fixture) + with shared_browser(headless=not visible): + session = driver.Session(fixture, user, headless=not visible) + session.sign_in() + session.open_form() + conn.send(("ready",)) + while True: + message = conn.recv() + if message[0] != "run": + return + _, index, key, bundle_dir, run_dir = message + try: + facts = session.run( + Workflow.load(Path(bundle_dir)), + Path(bundle_dir), + key, + Path(run_dir), + trial=index, + ) + except Exception as exc: # noqa: BLE001 - reported to the parent + conn.send(("failed", f"{type(exc).__name__}: {exc}")) + continue + payload = asdict(run_facts(index, facts, driver.checked(facts))) + payload["run_dir"] = str(payload["run_dir"]) + conn.send(("done", payload)) + except (EOFError, KeyboardInterrupt, BrokenPipeError): + return + except Exception as exc: # noqa: BLE001 - the parent runs the job itself + with contextlib.suppress(BrokenPipeError, OSError): + conn.send(("broken", f"{type(exc).__name__}: {exc}")) + finally: + if session is not None: + with contextlib.suppress(Exception): + session.close() + conn.close() + + +# --------------------------------------------------------------------------- +# The engine +# --------------------------------------------------------------------------- + + +_HOW = { + "reused": "reused the running copy", + "restarted": "started the existing copy", + "created": "set up now; later runs reuse it", +} + + +class OpenEMREngine: + """The story's engine on OpenEMR: the fixture, the clerks, the program.""" + + scene = OPENEMR + + def __init__( + self, + root: Path, + *, + visible: bool, + flow: Path, + state_dir: Optional[Path] = None, + ) -> None: + self.root = root + self.visible = visible + self.flow = flow + #: The demonstration's actions, copied from the clone. + self.recording_dir = root / "demonstration.jsonl" + self.bundle_dir = root / "bundle" + self.workflow: Any = None + self.setup_summary: Optional[str] = None + self._driver = _driver(flow) + self._state_dir = state_dir or self._driver.make_fixture().state_dir + self._fixture: Any = None + self._progress: Callable[[str, bool], None] = lambda text, milestone: None + self._stack = contextlib.ExitStack() + self._pool: Any = None + self._starter: Optional[threading.Thread] = None + self._count = 0 + # Leftover runs and Act 3 run on one thread with its own browser + # (a browser's objects belong to the thread that made it). + self._main = ThreadPoolExecutor(1, thread_name_prefix="quickstart-openemr") + self._session: Any = None + + @property + def inputs(self) -> Sequence[str]: + return tuple(self._driver.REFERRALS) + + program_detail = ( + "(the certified referral program behind the site's OpenEMR Seals: " + "qualified 6 of 6 cases under clinical-write; record check: OpenEMR's " + "REST API)" + ) + + # -- lifetime --------------------------------------------------------- + + def set_progress(self, progress: Callable[[str, bool], None]) -> None: + self._progress = progress + + def __enter__(self) -> "OpenEMREngine": + from openadapt_flow import _prewarm + + _prewarm.start() + self.root.mkdir(parents=True, exist_ok=True) + self._stack.callback(self._shutdown) + driver = self._driver + self._fixture = driver.make_fixture(self._state_dir) + driver.point_qualify_hooks_here(self._fixture) + started = time.monotonic() + phase = {"name": "", "text": "", "since": started} + lock = threading.Lock() + done = threading.Event() + + def show() -> None: + with lock: + elapsed = time.monotonic() - phase["since"] + text = phase["text"] + self._progress(f"{text} {int(elapsed)}s", False) + + def say(name: str, text: str) -> None: + with lock: + milestone = name != phase["name"] or text.endswith("downloaded") + if name != phase["name"]: + phase["since"] = time.monotonic() + phase.update(name=name, text=text) + self._progress(text, milestone) + + def tick() -> None: + while not done.wait(1.0): + show() + + ticker = threading.Thread(target=tick, name="quickstart-setup", daemon=True) + ticker.start() + try: + how = driver.bring_up(self._fixture, say) + say("setup", "adding synthetic clerk accounts") + self._count = self._worker_target() + driver.add_clerks(self._fixture, self._count + 1) + finally: + done.set() + ticker.join() + self.setup_summary = ( + f"OpenEMR 8.0.0.3 at {self._fixture.ui_base_url}: {_HOW[how]} " + f"{time.monotonic() - started:.1f}s" + ) + self.start_workers() + self._main.submit(self._open_session) + return self + + def __exit__(self, *exc: object) -> None: + self._stack.close() + + def _shutdown(self) -> None: + if self._starter is not None: + self._starter.join() + if self._pool is not None: + self._pool.close() + if self._session is not None: + with contextlib.suppress(Exception): + self._main.submit(self._session.close).result(timeout=60) + self._main.shutdown(wait=False) + + def _worker_target(self) -> int: + from openadapt.quickstart.workers import worker_count + + return max(1, min(worker_count(), len(self._driver.REFERRALS))) + + def _clerk(self, number: int) -> str: + return f"oa_clerk{number}" + + def _open_session(self) -> None: + if self._session is None: + self._session = self._driver.Session( + self._fixture, self._clerk(self._count + 1), headless=not self.visible + ) + self._session.sign_in() + + # -- act 1 ------------------------------------------------------------ + + def record(self, on_step: Callable[[DemoStep], None]) -> list[DemoStep]: + """The demonstration the program was compiled from, step by step.""" + + shutil.copyfile(self._driver.DEMONSTRATION, self.recording_dir) + steps = [] + for event in self._driver.demonstration(): + label = demo_step_label(event) + if label is None: + continue + step = DemoStep(label=label, seconds=float(event.get("t") or 0.0)) + steps.append(step) + on_step(step) + return steps + + def compile(self) -> int: + """Copy the certified program into the output folder; its step count.""" + + self.workflow = self._driver.copy_program(self.bundle_dir) + return len(self.workflow.steps) + + @property + def program_name(self) -> str: + return str(getattr(self.workflow, "name", "") or "") + + def note_param(self) -> bool: + return True + + # -- act 2 ------------------------------------------------------------ + + def start_workers(self) -> None: + from openadapt.quickstart.workers import WorkerPool, worker_browser + + if self._count <= 1 or self._starter is not None: + return + + def start() -> None: + browser = worker_browser(self.visible) + if browser is None: + return + self._pool = WorkerPool( + self._count, + visible=self.visible, + browser=browser, + target=_worker_main, + worker_args=[ + (str(self.flow), str(self._state_dir), self._clerk(n)) + for n in range(1, self._count + 1) + ], + stall_s=STALL_S, + ready_timeout_s=READY_TIMEOUT_S, + ) + + self._starter = threading.Thread(target=start, name="quickstart-workers") + self._starter.start() + + def _started_pool(self) -> Any: + if self._starter is not None: + self._starter.join() + return self._pool + + @property + def parallel(self) -> int: + pool = self._started_pool() + return max(1, pool.usable()) if pool is not None else 1 + + def _run_here(self, index: int, key: str, folder: str) -> RunFacts: + def work() -> RunFacts: + self._open_session() + facts = self._session.run( + self.workflow, self.bundle_dir, key, self.root / folder, trial=index + ) + return run_facts(index, facts, self._driver.checked(facts)) + + return self._main.submit(work).result() + + def run_all( + self, keys: Sequence[str], on_finish: Callable[[RunFacts], None] + ) -> None: + """One referral per clerk, all at once; any a clerk can't take runs here.""" + + assert self.workflow is not None + jobs = [(index, key, f"run-{index}") for index, key in enumerate(keys, 1)] + leftover = jobs + pool = self._started_pool() + if pool is not None: + leftover = pool.run( + jobs, bundle_dir=self.bundle_dir, root=self.root, on_finish=on_finish + ) + pool.release() + for index, key, folder in leftover: + run = self._run_here(index, key, folder) + run.repeated = folder != f"run-{index}" + on_finish(run) + + # -- act 3 ------------------------------------------------------------ + + def before_prompt(self) -> None: + return_focus_to_terminal(visible=self.visible) + + def break_it(self) -> BreakFacts: + """Add an existing chart; run the referral that matches it.""" + + assert self.workflow is not None + driver, fixture = self._driver, self._fixture + run_dir = self.root / "run-broken" + + def work() -> tuple[dict[str, Any], int, Optional[Path]]: + self._open_session() + driver.seed_existing_chart(fixture) + before = {row["id"] for row in driver.charts(fixture)} + facts = self._session.run( + self.workflow, self.bundle_dir, driver.DUPLICATE, run_dir, trial=99 + ) + screenshot = self._session.screenshot(run_dir / "screen.png") + after = {row["id"] for row in driver.charts(fixture)} + return facts, len(after - before), screenshot + + facts, new_charts, screenshot = self._main.submit(work).result() + (run_dir / "quickstart-readback.json").write_text( + json.dumps( + { + "existing_chart": "Rosa Delgado, born 1958-03-27", + "referral": f"{facts['name']}, born {facts['dob']}", + "new_charts_in_database": new_charts, + }, + indent=2, + ) + + "\n" + ) + return BreakFacts( + run_dir=run_dir, + fault="possible duplicate", + execution_outcome=str(facts["execution_outcome"]), + transaction_outcome=facts["transaction_outcome"], + screen_showed_success=False, + screen_text=None, + screenshot=screenshot, + new_records=new_charts, + effects_required=sum(len(step.effects) for step in self.workflow.steps), + effects_refuted=0, + halt_reason=str(facts["halt_reason"]), + model_calls=int(facts["model_calls"]), + seconds=float(facts["seconds"]), + ) + + def read_screen(self, broken: BreakFacts) -> Optional[str]: + if broken.screenshot is None: + return None + return read_dialog(broken.screenshot) + + # -- finale ----------------------------------------------------------- + + def seal(self, runs: list[RunFacts]) -> Optional[SealFacts]: + return seal_runs(runs) + + def write_page(self, first: RunFacts, broken: BreakFacts) -> Optional[Path]: + return None + + +__all__ = [ + "DOCKER_INSTALL_URL", + "OpenEMREngine", + "checkout_problem", + "demo_step_label", + "docker_problem", + "find_flow_checkout", + "read_dialog", +] diff --git a/openadapt/quickstart/scene.py b/openadapt/quickstart/scene.py new file mode 100644 index 000000000..25905a196 --- /dev/null +++ b/openadapt/quickstart/scene.py @@ -0,0 +1,198 @@ +"""The words that differ between the quickstart's apps. + +MockMed (the default) breaks a save silently: the screen says saved and the +database has nothing. OpenEMR's Act 3 is a referral that matches an existing +chart: the program stops before saving. Everything else in the story and the +views is shared; a :class:`Scene` holds what is not. +""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import TYPE_CHECKING, Optional + +if TYPE_CHECKING: + from openadapt.quickstart.engine import BreakFacts + +#: Where the site publishes Seals from real OpenEMR runs. Every quickstart's +#: finale links it, whatever the app. +SEALS_URL = "https://openadapt.ai/seals" +SEALS_LINE = f"See real Seals from OpenEMR runs: {SEALS_URL}" + + +@dataclass(frozen=True) +class Scene: + """One app's words for the three acts.""" + + #: The headline under the command. + intro: str + #: What the spinner says while the app starts. + starting: str + #: Act 1's subtitle (before ", in a hidden browser" when Act 1 is live). + act1_where: str + #: Act 2's inputs, plural ("notes": "the program on 5 new notes"). + inputs_noun: str + #: Where each run is checked ("checked in the database"). + checked_in: str + #: Act 3's subtitle. + act3_subtitle: str + #: The line before Act 3 runs. + break_setup: str + #: The prompt before Act 3 runs, on a terminal. + confirm_prompt: str + #: What the spinner says while Act 3 runs. + breaking: str + #: The record's label in Act 3 ("What the database showed"). + record_label: str + #: What one record is called ("record": "0 new records"). + record_noun: str + #: OpenAdapt's verdict when Act 3 stopped. + stopped: str + #: The record check's subject in the receipt ("in the database"). + receipt_where: str + #: What Act 3's screen showed when its text couldn't be read. + screen_default: str = "a saved message" + #: The part of the 1280x800 screenshot Act 3 shows (left, top, right, + #: bottom). + screen_crop: tuple[int, int, int, int] = (0, 0, 640, 320) + #: True when Act 3's screen claims success (MockMed's silent failure), so + #: a screen-trusting bot's "Done" and the one-line summary apply. + screen_claims_success: bool = True + #: True when Act 1 demonstrates in a browser now; False when it shows the + #: recorded demonstration a certified program was compiled from. + act1_live: bool = True + #: How Act 1 ends, given the program's step count. + compiled_template: str = "Compiled into a program: {steps} steps." + + def compiled_line(self, steps: int) -> str: + return self.compiled_template.format(steps=steps) + + def database_line(self, broken: "BreakFacts") -> str: + count = broken.new_records + return f"{count} new {self.record_noun}" + ("" if count == 1 else "s") + + def why_line(self, broken: "BreakFacts") -> str: + if not self.screen_claims_success: + if broken.stopped and broken.new_records == 0: + return ( + "OpenEMR's duplicate check found an existing chart. The " + "program saves only when it finds none, so it stopped " + "before saving." + ) + if broken.stopped: + return "OpenAdapt stopped, but a new chart is in OpenEMR. Check it." + return "OpenAdapt did not stop. Treat this build as broken." + if broken.stopped and broken.new_records == 0: + return ( + "OpenAdapt reads the record back from the database after each save. " + "It found nothing, so it stopped." + ) + if broken.stopped: + return "OpenAdapt read the record back, and it didn't match, so it stopped." + return "OpenAdapt did not stop. Treat this build as broken." + + def aha_line(self, broken: "BreakFacts") -> Optional[str]: + """The one-line summary, only when the run showed all of it.""" + + if not (broken.stopped and broken.new_records == 0): + return None + if not self.screen_claims_success: + return ( + "The demonstration clicked Confirm Create New Patient here. " + "Replaying those clicks would have saved a possible duplicate. " + "OpenAdapt stopped." + ) + if not broken.screen_showed_success: + return None + text = broken.screen_text + end = text.lower().find("saved") if text else -1 + if text and end >= 0: + screen = f'The screen said "{text[: end + len("saved")]}".' + else: + screen = "The screen showed its saved message." + return ( + f"{screen} The database had nothing. A bot that trusts the screen " + "reports Done. OpenAdapt stopped." + ) + + def break_detail(self, broken: "BreakFacts") -> list[str]: + """Act 3's engine detail, for ``--verbose``.""" + + if not self.screen_claims_success: + first = ( + f"case {broken.fault!r}: OpenEMR already has a chart with this " + "name, so its duplicate check lists a match" + ) + checks = ( + f"record checks {broken.effects_required} declared, none run " + "(the save step never ran)" + ) + else: + first = ( + f"fault mode {broken.fault!r}: the server rejects the write after " + "the app shows its saved message" + ) + checks = ( + f"record checks refuted " + f"{broken.effects_refuted}/{broken.effects_required}" + ) + return [ + first, + f"execution {broken.execution_outcome}, transaction " + f"{broken.transaction_outcome}, {checks}", + f"engine: {broken.halt_reason}", + f"report {broken.report_md}", + ] + + +MOCKMED = Scene( + intro=("show a task once, run it, then watch it catch a save that didn't happen."), + starting="Starting the synthetic clinic app", + act1_where="a demonstration in a synthetic clinic app", + inputs_noun="notes", + checked_in="checked in the database", + act3_subtitle="the next save fails silently", + break_setup=( + "The app will show its saved message. The database will reject the save." + ), + confirm_prompt="Press Enter to make the next save fail silently", + breaking="Running the program once more, checking the database", + record_label="What the database showed", + record_noun="record", + stopped="Stopped before reporting success", + receipt_where="in the database", +) + +OPENEMR = Scene( + intro=( + "show a task once in OpenEMR, run it, then watch it stop before saving a " + "duplicate chart." + ), + starting="Starting OpenEMR", + act1_where="a referral as it was demonstrated once in OpenEMR 8.0.0.3", + inputs_noun="referrals", + checked_in="checked in OpenEMR's record", + act3_subtitle="a referral that matches an existing chart", + break_setup=( + "OpenEMR already has a chart for Rosa Delgado. The next referral is a " + "Rosa Delgado with another birth date." + ), + confirm_prompt="Press Enter to run the program on that referral", + breaking="Running the program on the referral, then reading OpenEMR's charts", + record_label="What OpenEMR's record showed", + record_noun="chart", + stopped="Stopped before saving: possible duplicate", + receipt_where="in OpenEMR's record", + screen_claims_success=False, + act1_live=False, + compiled_template=( + "The program compiled from it: {steps} steps, certified under clinical-write." + ), + screen_default="OpenEMR's duplicate check, listing a matching chart", + screen_crop=(204, 30, 1078, 262), +) + +SCENES = {"mockmed": MOCKMED, "openemr": OPENEMR} + + +__all__ = ["MOCKMED", "OPENEMR", "SCENES", "SEALS_LINE", "SEALS_URL", "Scene"] diff --git a/openadapt/quickstart/story.py b/openadapt/quickstart/story.py index 59d2597d3..55de74172 100644 --- a/openadapt/quickstart/story.py +++ b/openadapt/quickstart/story.py @@ -21,6 +21,7 @@ RunFacts, SealFacts, ) +from openadapt.quickstart.scene import MOCKMED, Scene #: The placeholder app address in the "try it on your own app" command. YOUR_APP_URL = "https://your-app.example" @@ -44,6 +45,10 @@ class Engine(Protocol): root: Path visible: bool + #: The app's words (MockMed's when an engine has none). + scene: Scene + #: Act 2's inputs, one run each. + inputs: Sequence[str] def __enter__(self) -> "Engine": ... @@ -130,6 +135,10 @@ def intro(self, root: Path, visible: bool) -> None: ... def starting(self) -> Any: ... + def setup_progress(self, text: str, milestone: bool) -> None: ... + + def setup_done(self, text: str) -> None: ... + def act(self, number: int, title: str, subtitle: str) -> None: ... def demo_step(self, step: DemoStep) -> None: ... @@ -159,7 +168,15 @@ def finale(self, outcome: Outcome, steps: NextSteps) -> None: ... def detail(self, lines: list[str]) -> None: ... -def _engine_detail_run(run: RunFacts) -> list[str]: +def _engine_detail_run(run: RunFacts, scene: Scene) -> list[str]: + if not scene.screen_claims_success: + return [ + f"run {run.index}: execution {run.execution_outcome}, transaction " + f"{run.transaction_outcome}, record checks " + f"{run.effects_confirmed}/{run.effects_required} confirmed through " + f"OpenEMR's REST API, {run.records} chart(s) for this referral in " + f"OpenEMR's database; report {run.report_md}", + ] return [ f"run {run.index}: execution {run.execution_outcome}, transaction " f"{run.transaction_outcome}, profile standard, record checks " @@ -169,18 +186,6 @@ def _engine_detail_run(run: RunFacts) -> list[str]: ] -def _engine_detail_break(broken: BreakFacts) -> list[str]: - return [ - f"fault mode {broken.fault!r}: the server rejects the write after the " - "app shows its saved message", - f"execution {broken.execution_outcome}, transaction " - f"{broken.transaction_outcome}, record checks refuted " - f"{broken.effects_refuted}/{broken.effects_required}", - f"engine: {broken.halt_reason}", - f"report {broken.report_md}", - ] - - def run_story( engine: Engine, view: View, @@ -195,15 +200,22 @@ def run_story( """Run the three acts against ``engine`` and show them through ``view``.""" outcome = Outcome(root=engine.root) + scene = getattr(engine, "scene", MOCKMED) started = clock() paused = 0.0 view.intro(engine.root, engine.visible) + set_progress = getattr(engine, "set_progress", None) + if set_progress is not None: + set_progress(view.setup_progress) with view.starting(): engine.__enter__() try: + ready = getattr(engine, "setup_summary", None) + if ready: + view.setup_done(ready) # Act 1: show it once. Act 2's workers get ready meanwhile. engine.start_workers() - view.act(1, "Show it once", _act1_subtitle(engine.visible)) + view.act(1, "Show it once", _act1_subtitle(engine.visible, scene)) act_start = clock() outcome.demo_steps = engine.record(view.demo_step) with view.compiling(): @@ -214,16 +226,25 @@ def run_story( if verbose: view.detail( [ - f"recording {engine.root / 'recording'}", - f"program {engine.root / 'bundle'} (certified under " - "clinical-write; record checks mined from the demonstration)", + "recording " + f"{getattr(engine, 'recording_dir', engine.root / 'recording')}", + f"program {engine.root / 'bundle'} " + + getattr( + engine, + "program_detail", + "(certified under clinical-write; record checks mined " + "from the demonstration)", + ), ] ) # Act 2: run it. - total = len(RUN_NOTES) + inputs = getattr(engine, "inputs", RUN_NOTES) + total = len(inputs) view.act( - 2, "Run it", _act2_subtitle(total, engine.note_param(), engine.parallel) + 2, + "Run it", + _act2_subtitle(total, engine.note_param(), engine.parallel, scene), ) act_start = clock() @@ -231,11 +252,11 @@ def finished(run: RunFacts) -> None: outcome.runs.append(run) view.run_row(run, total) if verbose: - view.detail(_engine_detail_run(run)) + view.detail(_engine_detail_run(run, scene)) view.progress(len(outcome.runs), total, outcome.checked) with view.running(total, engine.parallel): - engine.run_all(RUN_NOTES, finished) + engine.run_all(inputs, finished) outcome.act2_seconds = clock() - act_start view.runs_total(outcome) # Sign the checked runs' reports while Act 3 runs; the finale waits. @@ -244,12 +265,12 @@ def finished(run: RunFacts) -> None: # Act 3: break it. paging = None if break_it: - view.act(3, "Break it", "the next save fails silently") + view.act(3, "Break it", scene.act3_subtitle) view.break_setup() if interactive: waited = clock() engine.before_prompt() - view.confirm("Press Enter to make the next save fail silently") + view.confirm(scene.confirm_prompt) paused += clock() - waited with view.breaking(): outcome.broken = engine.break_it() @@ -263,7 +284,7 @@ def finished(run: RunFacts) -> None: broken.screen_text = engine.read_screen(broken) view.break_result(outcome.broken) if verbose: - view.detail(_engine_detail_break(outcome.broken)) + view.detail(scene.break_detail(outcome.broken)) outcome.seal = sealing.result() if paging is not None: @@ -288,11 +309,15 @@ def _in_background(work: Callable[[], Any]) -> Any: return future -def _act2_subtitle(total: int, varied: bool, parallel: int) -> str: +def _act2_subtitle( + total: int, varied: bool, parallel: int, scene: Scene = MOCKMED +) -> str: # An engine that can't give a run its own note replays the demonstrated # one, and the header says so. what = ( - f"the program on {total} new notes" if varied else f"the program {total} times" + f"the program on {total} new {scene.inputs_noun}" + if varied + else f"the program {total} times" ) if parallel >= total: return f"{what}, all at once" @@ -301,9 +326,11 @@ def _act2_subtitle(total: int, varied: bool, parallel: int) -> str: return what -def _act1_subtitle(visible: bool) -> str: +def _act1_subtitle(visible: bool, scene: Scene = MOCKMED) -> str: + if not scene.act1_live: + return scene.act1_where where = "watch the browser window" if visible else "in a hidden browser" - return f"a demonstration in a synthetic clinic app, {where}" + return f"{scene.act1_where}, {where}" __all__ = [ diff --git a/openadapt/quickstart/view.py b/openadapt/quickstart/view.py index 4a6e399da..ff569fad6 100644 --- a/openadapt/quickstart/view.py +++ b/openadapt/quickstart/view.py @@ -16,6 +16,7 @@ from typing import IO, Any, Iterator, Mapping, Optional from openadapt.quickstart.engine import BreakFacts, DemoStep, RunFacts +from openadapt.quickstart.scene import MOCKMED, SEALS_LINE, SEALS_URL, Scene from openadapt.quickstart.story import NextSteps, Outcome, display_path #: Width of the step and note column, so times line up. @@ -45,14 +46,14 @@ def seconds(value: float) -> str: return f"{value:.1f}s" -def compiled_line(outcome: Outcome) -> str: - return f"Compiled into a program: {outcome.program_steps} steps." +def compiled_line(outcome: Outcome, scene: Scene = MOCKMED) -> str: + return scene.compiled_line(outcome.program_steps) -def run_status(run: RunFacts, marks: Marks) -> str: +def run_status(run: RunFacts, marks: Marks, scene: Scene = MOCKMED) -> str: if run.checked: again = " (on a second try)" if run.repeated else "" - return f"{marks.ok} checked in the database{again}" + return f"{marks.ok} {scene.checked_in}{again}" return f"{marks.stop} {run.plain_label or run.execution_outcome}" @@ -68,9 +69,8 @@ def runs_total_line(outcome: Outcome, marks: Marks) -> str: ) -def database_line(broken: BreakFacts) -> str: - count = broken.new_records - return f"{count} new record" + ("" if count == 1 else "s") +def database_line(broken: BreakFacts, scene: Scene = MOCKMED) -> str: + return scene.database_line(broken) def bot_verdict(broken: BreakFacts, marks: Marks) -> Optional[str]: @@ -79,50 +79,45 @@ def bot_verdict(broken: BreakFacts, marks: Marks) -> Optional[str]: return f"{marks.ok} Done" if broken.screen_showed_success else None -def openadapt_verdict(broken: BreakFacts, marks: Marks) -> str: +def openadapt_verdict(broken: BreakFacts, marks: Marks, scene: Scene = MOCKMED) -> str: if broken.stopped: - return f"{marks.stop} Stopped before reporting success" + return f"{marks.stop} {scene.stopped}" return f"{broken.execution_outcome.title()} (expected a stop)" -def why_line(broken: BreakFacts) -> str: - if broken.stopped and broken.new_records == 0: - return ( - "OpenAdapt reads the record back from the database after each save. " - "It found nothing, so it stopped." - ) - if broken.stopped: - return "OpenAdapt read the record back, and it didn't match, so it stopped." - return "OpenAdapt did not stop. Treat this build as broken." +def why_line(broken: BreakFacts, scene: Scene = MOCKMED) -> str: + return scene.why_line(broken) -def aha_line(broken: BreakFacts) -> Optional[str]: +def aha_line(broken: BreakFacts, scene: Scene = MOCKMED) -> Optional[str]: """The one-line summary, only when the run showed all of it.""" - if not ( - broken.stopped and broken.screen_showed_success and broken.new_records == 0 - ): - return None - text = broken.screen_text - end = text.lower().find("saved") if text else -1 - if text and end >= 0: - screen = f'The screen said "{text[: end + len("saved")]}".' - else: - screen = "The screen showed its saved message." - return ( - f"{screen} The database had nothing. A bot that trusts the screen " - "reports Done. OpenAdapt stopped." + return scene.aha_line(broken) + + +def break_labels(scene: Scene) -> tuple[str, str, str, str]: + """Act 3's four row labels, padded to one width (plain view).""" + + labels = ( + "What the screen showed:", + f"{scene.record_label}:", + "A screen-trusting bot:", + "OpenAdapt:", ) + width = max(len(label) for label in labels) + 2 + return tuple(f"{label:<{width}}" for label in labels) # type: ignore[return-value] -def receipt_rows(outcome: Outcome, marks: Marks) -> list[tuple[str, str]]: +def receipt_rows( + outcome: Outcome, marks: Marks, scene: Scene = MOCKMED +) -> list[tuple[str, str]]: dot = f" {marks.dot} " rows = [ ("Program", f"{outcome.program_name}{dot}{outcome.program_steps} steps"), ( "Runs", - f"{outcome.checked} of {len(outcome.runs)} saved and checked in the " - "database", + f"{outcome.checked} of {len(outcome.runs)} saved and checked " + f"{scene.receipt_where}", ), ( "Cost", @@ -181,14 +176,16 @@ def wants_plain(stream: IO[str], environ: Optional[Mapping[str, str]] = None) -> return not (callable(isatty) and isatty()) -def make_view(stream: Optional[IO[str]] = None, *, environ=None) -> Any: +def make_view( + stream: Optional[IO[str]] = None, *, environ=None, scene: Scene = MOCKMED +) -> Any: stream = stream or sys.stdout if wants_plain(stream, environ): - return PlainView(stream) + return PlainView(stream, scene=scene) try: - return RichView(stream, environ=environ) + return RichView(stream, environ=environ, scene=scene) except ImportError: # rich is a launcher dependency; plain lines still work - return PlainView(stream) + return PlainView(stream, scene=scene) # --------------------------------------------------------------------------- @@ -199,8 +196,9 @@ def make_view(stream: Optional[IO[str]] = None, *, environ=None) -> Any: class PlainView: """One line per fact, printed as it happens. No color, no cursor moves.""" - def __init__(self, stream: IO[str]) -> None: + def __init__(self, stream: IO[str], *, scene: Scene = MOCKMED) -> None: self.stream = stream + self.scene = scene self.marks = Marks(getattr(stream, "encoding", None)) def _say(self, text: str = "") -> None: @@ -212,15 +210,19 @@ def _quiet(self) -> Iterator[None]: yield def intro(self, root: Path, visible: bool) -> None: - self._say( - "OpenAdapt quickstart: show a task once, run it, then watch it " - "catch a save that didn't happen." - ) + self._say(f"OpenAdapt quickstart: {self.scene.intro}") self._say(f"Synthetic data only. Files go to {display_path(root)}") def starting(self): return self._quiet() + def setup_progress(self, text: str, milestone: bool) -> None: + if milestone: + self._say(f" {text}") + + def setup_done(self, text: str) -> None: + self._say(f" {self.marks.ok} {text}") + def act(self, number: int, title: str, subtitle: str) -> None: self._say() self._say(f"{number} {title} {self.marks.dot} {subtitle}") @@ -234,7 +236,9 @@ def compiling(self): return self._quiet() def compiled(self, outcome: Outcome) -> None: - self._say(f" {compiled_line(outcome)} {seconds(outcome.act1_seconds)}") + self._say( + f" {compiled_line(outcome, self.scene)} {seconds(outcome.act1_seconds)}" + ) def running(self, total: int, parallel: int): return self._quiet() @@ -245,16 +249,14 @@ def progress(self, finished: int, total: int, checked: int) -> None: def run_row(self, run: RunFacts, total: int) -> None: self._say( f" {run.index}/{total} {run.note:<{_LABEL_WIDTH - 6}} " - f"{run_status(run, self.marks)} {seconds(run.seconds)}" + f"{run_status(run, self.marks, self.scene)} {seconds(run.seconds)}" ) def runs_total(self, outcome: Outcome) -> None: self._say(f" {runs_total_line(outcome, self.marks)}") def break_setup(self) -> None: - self._say( - " The app will show its saved message. The database will reject the save." - ) + self._say(f" {self.scene.break_setup}") def confirm(self, prompt: str) -> None: self.stream.write(f" {prompt} ") @@ -268,19 +270,21 @@ def breaking(self): return self._quiet() def break_result(self, broken: BreakFacts) -> None: + scene = self.scene + screen, record, bot_label, openadapt = break_labels(scene) quote = broken.screen_text - shown = f'"{quote}"' if quote else "a saved message" - self._say(f" What the screen showed: {shown}") - self._say(f" What the database showed: {database_line(broken)}") + shown = f'"{quote}"' if quote else scene.screen_default + self._say(f" {screen}{shown}") + self._say(f" {record}{database_line(broken, scene)}") bot = bot_verdict(broken, self.marks) if bot: - self._say(f" A screen-trusting bot: {bot}") + self._say(f" {bot_label}{bot}") self._say( - f" OpenAdapt: {openadapt_verdict(broken, self.marks)}" + f" {openadapt}{openadapt_verdict(broken, self.marks, scene)}" f" {seconds(broken.seconds)}" ) - self._say(f" Why: {why_line(broken)}") - aha = aha_line(broken) + self._say(f" Why: {why_line(broken, scene)}") + aha = aha_line(broken, scene) if aha: self._say() self._say(aha) @@ -288,8 +292,9 @@ def break_result(self, broken: BreakFacts) -> None: def finale(self, outcome: Outcome, steps: NextSteps) -> None: self._say() self._say("Receipt") - for name, value in receipt_rows(outcome, self.marks): + for name, value in receipt_rows(outcome, self.marks, self.scene): self._say(f" {name:<9} {value}") + self._say(SEALS_LINE) if steps.verify: self._say(f"Check it: {steps.verify}") self._say(details_line(outcome)) @@ -312,7 +317,12 @@ class RichView: """Color, spinners, a boxed receipt, and the screenshot where possible.""" def __init__( - self, stream: IO[str], *, environ=None, width: Optional[int] = None + self, + stream: IO[str], + *, + environ=None, + width: Optional[int] = None, + scene: Scene = MOCKMED, ) -> None: from rich.console import Console @@ -321,6 +331,7 @@ def __init__( self.console = Console( file=stream, highlight=False, soft_wrap=False, width=width ) + self.scene = scene self.marks = Marks(getattr(stream, "encoding", None) or "utf-8") self.image_protocol = detect_image_protocol(environ, isatty=True) @@ -329,15 +340,25 @@ def _status(self, text: str): def intro(self, root: Path, visible: bool) -> None: self.console.print( - "[bold]OpenAdapt quickstart[/]: show a task once, run it, then watch " - "it catch a save that didn't happen." + f"[bold]OpenAdapt quickstart[/]: {_escape(self.scene.intro)}" ) self.console.print( f"[dim]Synthetic data only. Files go to {display_path(root)}[/]" ) def starting(self): - return self._status("Starting the synthetic clinic app") + self._setup = self._status(self.scene.starting) + return self._setup + + def setup_progress(self, text: str, milestone: bool) -> None: + live = getattr(self, "_setup", None) + if live is not None: + live.update( + f"[dim]{_escape(self.scene.starting)} {self.marks.dot} {_escape(text)}[/]" + ) + + def setup_done(self, text: str) -> None: + self.console.print(f" [green]{self.marks.ok}[/] {_escape(text)}") def act(self, number: int, title: str, subtitle: str) -> None: self.console.print() @@ -356,7 +377,8 @@ def compiling(self): def compiled(self, outcome: Outcome) -> None: self.console.print( - f" [bold]{compiled_line(outcome)}[/] [dim]{seconds(outcome.act1_seconds)}[/]" + f" [bold]{compiled_line(outcome, self.scene)}[/] " + f"[dim]{seconds(outcome.act1_seconds)}[/]" ) def running(self, total: int, parallel: int): @@ -372,7 +394,7 @@ def _running_text( how = "one after another" return ( f"Running {total} {how} {self.marks.dot} {finished} done " - f"{self.marks.dot} {checked} checked in the database" + f"{self.marks.dot} {checked} {self.scene.checked_in}" ) def progress(self, finished: int, total: int, checked: int) -> None: @@ -386,16 +408,15 @@ def run_row(self, run: RunFacts, total: int) -> None: color = "green" if run.checked else "red" self.console.print( f" [dim]{run.index}/{total}[/] {_escape(run.note):<{_LABEL_WIDTH - 6}} " - f"[{color}]{run_status(run, self.marks)}[/] [dim]{seconds(run.seconds)}[/]" + f"[{color}]{run_status(run, self.marks, self.scene)}[/] " + f"[dim]{seconds(run.seconds)}[/]" ) def runs_total(self, outcome: Outcome) -> None: self.console.print(f" [bold]{runs_total_line(outcome, self.marks)}[/]") def break_setup(self) -> None: - self.console.print( - " The app will show its saved message. The database will reject the save." - ) + self.console.print(f" {_escape(self.scene.break_setup)}") def confirm(self, prompt: str) -> None: try: @@ -404,24 +425,28 @@ def confirm(self, prompt: str) -> None: self.console.print() def breaking(self): - return self._status("Running the program once more, checking the database") + return self._status(self.scene.breaking) def _right_column(self, broken: BreakFacts) -> list[str]: width = 52 + scene = self.scene lines = [ - "[bold]What the database showed[/]", - f"[bold red]{database_line(broken)}[/]", + f"[bold]{_escape(scene.record_label)}[/]", + f"[bold red]{database_line(broken, scene)}[/]", "", ] bot = bot_verdict(broken, self.marks) if bot: lines.append(f"A screen-trusting bot [red]{bot}[/]") lines.append( - f"OpenAdapt [bold green]{openadapt_verdict(broken, self.marks)}[/]" + f"OpenAdapt " + f"[bold green]{openadapt_verdict(broken, self.marks, scene)}[/]" f" [dim]{seconds(broken.seconds)}[/]" ) lines.append("") - lines.extend(f"[dim]{part}[/]" for part in _wrap(why_line(broken), width)) + lines.extend( + f"[dim]{part}[/]" for part in _wrap(why_line(broken, scene), width) + ) return lines def break_result(self, broken: BreakFacts) -> None: @@ -433,7 +458,7 @@ def break_result(self, broken: BreakFacts) -> None: if self.image_protocol and broken.screenshot is not None: drawn = self._draw_beside_screenshot(broken, right) if not drawn: - quote = broken.screen_text or "a saved message" + quote = broken.screen_text or self.scene.screen_default box = Panel( f"[green]{_escape(quote)}[/]", title="What the screen showed", @@ -447,17 +472,16 @@ def break_result(self, broken: BreakFacts) -> None: grid.add_row(box, "\n".join(right)) self.console.print() self.console.print(grid, crop=False) - aha = aha_line(broken) + aha = aha_line(broken, self.scene) if aha: self.console.print() self.console.print(f"[bold]{_escape(aha)}[/]") def _draw_beside_screenshot(self, broken: BreakFacts, right: list[str]) -> bool: - from openadapt.quickstart.engine import SCREEN_CROP from openadapt.quickstart.images import beside_image, crop_png, image_sequence try: - png = crop_png(broken.screenshot, SCREEN_CROP) + png = crop_png(broken.screenshot, self.scene.screen_crop) except Exception: # noqa: BLE001 - fall back to the text box return False cols, rows = 40, 10 @@ -497,12 +521,14 @@ def finale(self, outcome: Outcome, steps: NextSteps) -> None: table = Table.grid(padding=(0, 2)) table.add_column(style="dim") table.add_column() - for name, value in receipt_rows(outcome, self.marks): + for name, value in receipt_rows(outcome, self.marks, self.scene): table.add_row(name, _escape(value)) self.console.print() self.console.print( Panel(table, title="Receipt", title_align="left", expand=False) ) + label = SEALS_LINE[: -len(SEALS_URL)].rstrip() + self.console.print(f"[dim]{label}[/] [bold cyan]{SEALS_URL}[/]") if steps.verify: self.console.print(f"[dim]Check it:[/] [bold]{_escape(steps.verify)}[/]") self.console.print(f"[dim]{_escape(details_line(outcome))}[/]") diff --git a/openadapt/quickstart/workers.py b/openadapt/quickstart/workers.py index 53d2388aa..580414dac 100644 --- a/openadapt/quickstart/workers.py +++ b/openadapt/quickstart/workers.py @@ -187,13 +187,21 @@ def __init__( visible: bool, browser: str = "", target: Callable[..., None] = _worker_main, + worker_args: Optional[Sequence[tuple[Any, ...]]] = None, + stall_s: float = STALL_S, + ready_timeout_s: float = READY_TIMEOUT_S, ) -> None: + """``worker_args[i]`` follows the usual three arguments of worker i.""" + context = multiprocessing.get_context("spawn") self._workers: dict[Connection, Any] = {} - for _ in range(size): + self._stall_s = stall_s + self._ready_timeout_s = ready_timeout_s + for number in range(size): parent, child = context.Pipe() + extra = tuple(worker_args[number]) if worker_args else () process = context.Process( - target=target, args=(child, visible, browser), daemon=True + target=target, args=(child, visible, browser, *extra), daemon=True ) process.start() child.close() @@ -267,10 +275,10 @@ def give(conn: Connection) -> None: give(conn) while (self._starting() and pending) or given: now = clock() - deadlines = [since + STALL_S for _job, since in given.values()] + deadlines = [since + self._stall_s for _job, since in given.values()] starting = self._starting() if pending else set() if starting: - deadlines.append(started + READY_TIMEOUT_S) + deadlines.append(started + self._ready_timeout_s) timeout = max(0.0, min(deadlines) - now) if deadlines else None for conn in wait(list(starting | set(given)), timeout=timeout): if conn not in given: @@ -297,11 +305,11 @@ def give(conn: Connection) -> None: back.append(_again(job)) now = clock() for conn, (job, since) in list(given.items()): - if now - since >= STALL_S: + if now - since >= self._stall_s: given.pop(conn) self._drop(conn) back.append(_again(job)) - if pending and now - started >= READY_TIMEOUT_S: + if pending and now - started >= self._ready_timeout_s: for conn in self._starting(): self._drop(conn) return sorted(back + pending) diff --git a/packages/flow/benchmark/openemr_local/quickstart.py b/packages/flow/benchmark/openemr_local/quickstart.py new file mode 100644 index 000000000..f78e09470 --- /dev/null +++ b/packages/flow/benchmark/openemr_local/quickstart.py @@ -0,0 +1,702 @@ +"""OpenEMR for ``openadapt quickstart --app openemr`` (synthetic data only). + +The quickstart's three acts on a real OpenEMR 8.0.0.3 instead of the bundled +MockMed. Everything here reuses the pinned local fixture and the certified +referral recipe: + +- the fixture is :class:`benchmark.openemr_local.fixture.OpenEMRFixture` + (pinned images, verified source files, hashed SQL baseline), with its own + Compose project and ports so it never touches another copy, and its state + in the user's cache folder so the next quickstart reuses it; +- Act 1 records the referral with the benchmark's own scripted recorder + (network capture on) and compiles it the way the certified bundle was + compiled: ``drop_redundant_keys`` and ``pixel_verify_enabled``, then + ``compile_recording``'s fix-ups, including the shared duplicate rule + (``apply_referral_rules``: confirm a new chart only when OpenEMR's + duplicate check finds no match); +- Act 2 runs referrals on clerk accounts cloned from the fixture's user (the + throughput harness's ``add_clerks``), one signed-in browser per clerk, each + run checked by the engine's REST record check and read back here with SQL; +- Act 3 adds an existing chart and runs a referral that matches it. The + program stops before saving, and SQL finds no new chart. + +Every patient, address, phone number (555-01xx) and email +(``example.invalid``) is made up. OpenAdapt isn't affiliated with OpenEMR. +""" + +from __future__ import annotations + +import contextlib +import dataclasses +import json +import os +import re +import shutil +import subprocess +import threading +import time +from pathlib import Path +from typing import Any, Callable, Mapping, Optional + +from . import fixture as fx + +HERE = Path(__file__).resolve().parent +FLOW = HERE.parents[1] + +#: The quickstart's own Compose project and its default loopback ports; +#: ``OPENADAPT_QUICKSTART_OPENEMR_HTTP_PORT`` and ``..._HTTPS_PORT`` move them +#: (a fixture set up on other ports is set up again on the new ones). +PROJECT = "openadapt-quickstart-openemr" +UI_PORT = "9741" +API_PORT = "9740" + + +def ports() -> tuple[str, str]: + """(HTTP, HTTPS) loopback ports, from the environment or the defaults.""" + + http = os.environ.get("OPENADAPT_QUICKSTART_OPENEMR_HTTP_PORT") or UI_PORT + https = os.environ.get("OPENADAPT_QUICKSTART_OPENEMR_HTTPS_PORT") or API_PORT + for port in (http, https): + if not re.fullmatch(r"[1-9][0-9]{2,4}", port) or int(port) > 65535: + raise fx.FixtureError(f"not a port: {port!r}") + return http, https + + +#: Act 2's referrals and Act 3's possible duplicate: the referral timing +#: benchmark's synthetic patients, the same ones behind the site's Seals. +REFERRALS = ( + "r3-ines-carvalho", + "r4-theo-lindqvist", + "r5-grace-adeyemi", + "r7-arlo-whitcombe", + "r8-priya-raman", +) +DUPLICATE = "r6-rosa-delgado" + +#: OpenEMR's tab shell polls this ten seconds after it loads, then every +#: minute; a session waits for the first poll before its first run. +BACKGROUND_POLL = "execute_background_services.php" +SIGN_IN_POLL_WAIT_S = 45.0 + +#: The fields the read-back compares (the referral's 12). +SQL_FIELDS = ( + "id", + "title", + "fname", + "lname", + "DOB", + "sex", + "street", + "city", + "state", + "postal_code", + "phone_home", + "email", + "country_code", +) + + +def default_state_dir() -> Path: + """Where the quickstart keeps its fixture state between runs.""" + + base = os.environ.get("XDG_CACHE_HOME") or str(Path.home() / ".cache") + return Path(base) / "openadapt" / "quickstart-openemr" + + +class QuickstartFixture(fx.OpenEMRFixture): + """The pinned fixture under its own project, ports and state folder.""" + + def __init__(self, state_dir: Path | str, **kwargs: Any) -> None: + super().__init__(state_dir, **kwargs) + self.lock = {**self.lock, "project": PROJECT} + self.http_port, self.https_port = ports() + + @property + def ui_base_url(self) -> str: + return f"http://127.0.0.1:{self.http_port}" + + @property + def api_base_url(self) -> str: + return f"https://127.0.0.1:{self.https_port}" + + def _expected_runtime(self) -> dict[str, str]: + return { + "OPENEMR_IMAGE": self.lock["services"]["openemr"], + "MARIADB_IMAGE": self.lock["services"]["mariadb"], + "OPENEMR_ACTOR_USER": "openadapt_actor", + "OPENEMR_HTTP_PORT": self.http_port, + "OPENEMR_HTTPS_PORT": self.https_port, + } + + def _validate_runtime_env(self) -> None: + values = self._runtime_values() + for name, value in self._expected_runtime().items(): + if values.get(name) != value: + raise fx.FixtureError(f"runtime.env {name} differs from the lock") + for name in ( + "MARIADB_ROOT_PASSWORD", + "OPENEMR_DB_PASSWORD", + "OPENEMR_ACTOR_PASSWORD", + ): + if not re.fullmatch(r"[A-Za-z0-9_-]{24,}", values.get(name, "")): + raise fx.FixtureError(f"runtime.env {name} is absent or malformed") + self.runtime_env.chmod(0o600) + + def prepare(self) -> None: + """The base preparation, with this fixture's ports in runtime.env.""" + + import secrets + + self._protect_state_dir() + if not self.runtime_env.exists(): + values = { + **self._expected_runtime(), + "MARIADB_ROOT_PASSWORD": secrets.token_urlsafe(32), + "OPENEMR_DB_PASSWORD": secrets.token_urlsafe(32), + "OPENEMR_ACTOR_PASSWORD": secrets.token_urlsafe(32), + } + self._write_private_exclusive( + self.runtime_env, + ( + "# generated local synthetic fixture; never commit\n" + + "".join(f"{key}={value}\n" for key, value in values.items()) + ).encode(), + ) + super().prepare() + + # -- state ------------------------------------------------------------ + + def bootstrapped(self) -> bool: + """True when a previous quickstart set this fixture up, on these ports.""" + + try: + self._validate_runtime_env() + except fx.FixtureError: + return False + return all( + path.is_file() + for path in ( + self.runtime_env, + self.clients_path, + self.snapshot_path, + self.snapshot_hash_path, + ) + ) + + def running(self) -> bool: + """True when both containers of this project are running.""" + + try: + out = self._compose( + "ps", "--status", "running", "--services", timeout_s=30.0 + ).stdout.decode() + except fx.FixtureError: + return False + return {"openemr", "db"} <= set(out.split()) + + def healthy(self) -> bool: + try: + self._compose( + "exec", + "-T", + "openemr", + "/usr/bin/curl", + "--fail", + "--insecure", + "--silent", + "https://localhost/meta/health/readyz", + timeout_s=15.0, + ) + except fx.FixtureError: + return False + return True + + def discard(self) -> None: + """Remove this project's containers and volumes and its state folder. + + For a setup that never finished, and for cold timing runs: it holds + synthetic data only, never anyone's work. Another project or state + folder is never touched. + """ + + if self.runtime_env.exists(): + # Not through _compose: its check of runtime.env refuses a copy + # set up on other ports, which is exactly the one to remove. + with contextlib.suppress(fx.FixtureError): + self._run( + [ + "docker", + "compose", + "--env-file", + str(self.runtime_env), + "-f", + str(self._compose_path()), + "-p", + self.lock["project"], + "down", + "--volumes", + ], + timeout_s=180.0, + ) + if self.state_dir.name == default_state_dir().name or os.environ.get( + "OPENADAPT_QUICKSTART_OPENEMR_STATE" + ): + shutil.rmtree(self.state_dir, ignore_errors=True) + + +def make_fixture(state_dir: Optional[Path] = None) -> QuickstartFixture: + state = state_dir or Path( + os.environ.get("OPENADAPT_QUICKSTART_OPENEMR_STATE") or default_state_dir() + ) + return QuickstartFixture(state) + + +# -- bring-up --------------------------------------------------------------- + + +#: What :func:`bring_up` reports for each phase: (phase, detail). Phases are +#: "pull", "start", "setup", "reset" and "ready". +Say = Callable[[str, str], None] + + +def _image_present(image: str, run: Callable[..., Any] = subprocess.run) -> bool: + return ( + run( + ["docker", "image", "inspect", image], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + check=False, + ).returncode + == 0 + ) + + +def pull( + image: str, label: str, say: Say, popen: Callable[..., Any] = subprocess.Popen +) -> None: + """Pull one pinned image, reporting layers as Docker finishes them.""" + + if _image_present(image): + say("pull", f"{label}: already downloaded") + return + process = popen( + ["docker", "pull", image], + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + ) + layers: set[str] = set() + done: set[str] = set() + assert process.stdout is not None + for line in process.stdout: + layer, _, status = line.strip().partition(": ") + if not re.fullmatch(r"[0-9a-f]{12,64}", layer): + continue + layers.add(layer) + if status.startswith(("Pull complete", "Already exists")): + done.add(layer) + say("pull", f"{label}: {len(done)} of {len(layers)} layers") + if process.wait() != 0: + raise fx.FixtureError(f"docker pull failed for {label}") + + +def bring_up(fixture: QuickstartFixture, say: Say) -> str: + """Make the fixture ready at its verified baseline; return how. + + "reused": it was running; "restarted": it was set up but stopped; + "created": it was set up now (downloads the images when they are absent, + and OpenEMR installs itself on first start). + """ + + if fixture.bootstrapped() and fixture.running() and fixture.healthy(): + say("reset", "restoring the synthetic baseline") + fixture.reset() + return "reused" + if fixture.bootstrapped(): + say("start", "starting the existing copy") + fixture._compose("up", "-d", timeout_s=600.0) + fixture._wait_ready(timeout_s=600.0) + say("reset", "restoring the synthetic baseline") + fixture.reset() + return "restarted" + if fixture.state_dir.exists(): + # A setup that stopped part-way; it holds no one's work. + fixture.discard() + fixture.runtime_preflight() + say("setup", "checking the pinned OpenEMR release") + fixture.prepare() + pull(fixture.lock["services"]["openemr"], "OpenEMR 8.0.0.3", say) + pull(fixture.lock["services"]["mariadb"], "MariaDB 11.8", say) + fixture.image_identity() + say("start", "OpenEMR installs itself on first start") + fixture._compose("up", "-d", timeout_s=600.0) + fixture._wait_ready(timeout_s=900.0) + fixture._verify_running_source() + say("setup", "adding synthetic API clients") + fixture.bootstrap() + fixture.snapshot() + return "created" + + +# -- the referral program --------------------------------------------------- + +#: The certified referral program: the bundle behind the site's OpenEMR +#: Seals (qualification qual10, clinical-write, 6 of 6 cases), and the +#: demonstration it was compiled from, without its URLs (they held that +#: session's sign-in token). See referral_program/README.md. +PROGRAM_DIR = HERE / "referral_program" +BUNDLE = PROGRAM_DIR / "program" +DEMONSTRATION = PROGRAM_DIR / "demonstration.jsonl" +POLICY = "clinical-write" + + +def load_demo() -> Any: + """The OpenEMR reference harness (sign-in, form frame, backend).""" + + from benchmark.openemr_api_tier.common import load_demo as load + + return load() + + +def referral(key: str) -> Any: + """The synthetic patient for one referral key.""" + + from benchmark.openemr_api_tier.common import REFERRALS as ALL + from benchmark.openemr_api_tier.common import spec_for + + return spec_for({r.key: r for r in ALL}[key]) + + +def existing_chart() -> Any: + from benchmark.openemr_api_tier.common import EXISTING_ROSA, Referral, spec_for + + return spec_for(Referral("existing", EXISTING_ROSA)) + + +def demonstration() -> list[dict[str, Any]]: + """The recorded actions the program was compiled from, in order.""" + + return [ + json.loads(line) + for line in DEMONSTRATION.read_text(encoding="utf-8").splitlines() + if line.strip() + ] + + +def point_qualify_hooks_here(fixture: QuickstartFixture) -> None: + """Point verify.yaml's hooks (sign-in, read-back client) at this fixture. + + ``benchmark/openemr_local/verify.yaml`` reads these variables; the lock + copy names this fixture's Compose project. + """ + + lock = fixture.state_dir / "environment.lock.json" + text = json.dumps(fixture.lock, indent=2) + "\n" + if not lock.is_file() or lock.read_text() != text: + lock.write_text(text) + os.environ["OPENEMR_FIXTURE_STATE"] = str(fixture.state_dir) + os.environ["OPENEMR_FIXTURE_LOCK"] = str(lock) + os.environ["OPENEMR_UI_URL"] = fixture.ui_base_url + os.environ["OPENEMR_API_URL"] = fixture.api_base_url + + +def copy_program(bundle: Path) -> Any: + """Copy the certified program to ``bundle``; load it (digest-checked).""" + + from openadapt_flow.ir import Workflow + + shutil.copytree(BUNDLE, bundle) + return Workflow.load(bundle) + + +_ENV: dict[str, Any] = {} + + +def certified_env() -> dict[str, Any]: + """verify.yaml's config, lookup plan and hooks, loaded once per process.""" + + if not _ENV: + from openadapt_flow.qualify.campaign import _default_hooks, lookup_plan + from openadapt_flow.qualify.config import load_verify_config + + config = load_verify_config(HERE / "verify.yaml") + surface, structure = lookup_plan(config) + _ENV.update( + config=config, + hooks=_default_hooks(config, None), + lookup={"use_structural": structure, "deployment_surface": surface}, + ) + return _ENV + + +def add_clerks(fixture: QuickstartFixture, n: int) -> list[str]: + """``n`` synthetic clerk accounts, one per parallel browser.""" + + from benchmark.openemr_throughput.harness import add_clerks as add + + return add(fixture, n) + + +def seed_existing_chart(fixture: QuickstartFixture) -> int: + """Add the existing chart Act 3's referral matches; return the HTTP status.""" + + session = fixture.token_session("actor") + try: + return session.post( + f"{fixture.api_base_url}/apis/default/api/patient", + json=dict(existing_chart().fields), + ).status_code + finally: + session.close() + + +def charts(fixture: QuickstartFixture) -> list[dict[str, str]]: + """Every chart in OpenEMR's database, read with SQL.""" + + out = fixture._db( + "SELECT " + ",".join(SQL_FIELDS) + " FROM openemr.patient_data ORDER BY id" + ).decode() + return [ + {k: ("" if v == "NULL" else v) for k, v in zip(SQL_FIELDS, line.split("\t"))} + for line in out.splitlines() + ] + + +def charts_for(fixture: QuickstartFixture, spec: Any) -> tuple[int, int]: + """(charts with this referral's email, fields matching when exactly one).""" + + mine = [row for row in charts(fixture) if row.get("email") == spec.email] + fields = dict(spec.fields) + if len(mine) != 1: + return len(mine), 0 + return 1, sum(1 for k, v in fields.items() if mine[0].get(k) == v) + + +class _As: + """The fixture, signed in as another of its users (same password).""" + + def __init__(self, fixture: QuickstartFixture, user: str) -> None: + self.ui_base_url = fixture.ui_base_url + self._values = {**fixture._runtime_values(), "OPENEMR_ACTOR_USER": user} + + def _runtime_values(self) -> dict[str, str]: + return dict(self._values) + + +class Session: + """One browser signed in to OpenEMR as one user, at a blank New Patient form.""" + + def __init__( + self, fixture: QuickstartFixture, user: str, *, headless: bool + ) -> None: + self.fixture = fixture + self.user = user + self.demo = load_demo() + self.backend, self._close = self.demo.OpenEMRPlaywrightBackend.launch( + fixture.ui_base_url, headless=headless + ) + self._signed_in = False + self._polled = threading.Event() + self.backend.page.context.on("requestfinished", self._saw_request) + self.backend.page.context.on("requestfailed", self._saw_request) + + def _saw_request(self, request: Any) -> None: + if BACKGROUND_POLL in request.url: + self._polled.set() + + def sign_in(self) -> None: + """Sign in and wait out the tab shell's first background poll. + + OpenEMR's tab shell posts ``execute_background_services.php`` ten + seconds after it loads, then every minute. A run that starts inside + that window meets an in-flight request at its first step, and on a + busy computer the readiness check gives up before it ends. Waiting + for the first poll (bounded), then for a quiet page, is part of + signing in. + """ + + if self._signed_in: + return + self.demo._preauthenticate_browser(self.backend, _As(self.fixture, self.user)) + self._signed_in = True + deadline = time.monotonic() + SIGN_IN_POLL_WAIT_S + page = self.backend.page + while not self._polled.is_set() and time.monotonic() < deadline: + page.wait_for_timeout(250) + while time.monotonic() < deadline: + if self.backend.page_quiescent(0.5) is not False: + return + page.wait_for_timeout(250) + + def open_form(self) -> None: + """Where the recording started: no chart open, a blank form.""" + + demo, page = self.demo, self.backend.page + if page.evaluate( + "() => !!(window.app_view_model && app_view_model.application_data.patient())" + ): + with page.expect_response( + lambda r: "unset_session_ajax.php" in r.url, timeout=30_000 + ): + page.evaluate("() => clearPatient(false)") + page.wait_for_function( + "() => !app_view_model.application_data.patient()", timeout=30_000 + ) + try: + frame = demo._form_frame(page, timeout_s=5.0) + except fx.FixtureError: + frame = None + if frame is not None: + fname = frame.locator("#form_fname") + fname.wait_for(state="visible", timeout=60_000) + if fname.input_value() == "": + return + # A run that stopped part-way left this form filled in: load it + # again, inside the same tab shell. + frame.evaluate("() => window.location.reload()") + page.wait_for_timeout(500) + else: + page.evaluate( + "({path, name}) => { window.navigateTab(path, name); " + "window.activateTabByName(name, true); }", + {"path": demo.FORM_PATH, "name": demo.FORM_FRAME_NAME}, + ) + frame = demo._form_frame(page) + frame.locator("#form_fname").wait_for(state="visible", timeout=60_000) + if frame.locator("#form_fname").input_value() != "": + raise fx.FixtureError("the New Patient form was not blank") + + def run( + self, workflow: Any, bundle: Path, key: str, run_dir: Path, *, trial: int = 1 + ) -> dict[str, Any]: + """Run the program for one referral, as a certified run; return the facts. + + The certified referral runs' own path (``certified_referrals``): the + Standard run gate on the certified bundle under ``clinical-write``, + the governed authorization built from it, durable runs, settled-state + detection, and verify.yaml's REST record check. The one difference is + the session: this clerk's browser, already signed in. The facts come + from the run's report and a SQL read of OpenEMR's database. + """ + + from openadapt_flow.plain_outcome import plain_result + from openadapt_flow.qualify.campaign import TrialContext, _run + from openadapt_flow.report import render_run_report + from openadapt_flow.run_gate import ( + build_runtime_authorization, + evaluate_run_gate, + ) + + spec = referral(key) + params = {k: str(v) for k, v in spec.params().items()} + started = time.monotonic() + self.sign_in() + self.open_form() + env = certified_env() + hooks = dataclasses.replace( + env["hooks"], open_session=lambda: (self.backend, lambda: None) + ) + ctx = TrialContext( + case_id="quickstart", + expected="VERIFIED", + oracle_kind="exact_record", + trial=trial, + trial_dir=run_dir, + run_dir=run_dir, + run_id=f"quickstart-openemr-{key}-{int(time.time())}", + params=params, + certified_run=True, + state={"policy": POLICY}, + ) + gate_seen: dict[str, Any] = {} + + def authorize(_verifier: Any, gate_kwargs: dict[str, Any]) -> Any: + gate = evaluate_run_gate(workflow, **gate_kwargs) + gate_seen["gate"] = gate + if not gate.passed: + raise fx.FixtureError( + "the Standard run gate refused the referral program:\n" + + gate.render() + ) + return build_runtime_authorization(workflow, gate, params=params) + + report, _ = _run( + workflow=workflow, + bundle_dir=bundle, + config=env["config"], + hooks=hooks, + ctx=ctx, + setup=type("Setup", (), {"observer": None})(), # type: ignore[arg-type] + authorize=authorize, + fault_driver=None, + marks={"start": time.time()}, + lookup=env["lookup"], + ) + with contextlib.suppress(Exception): + render_run_report(run_dir) + found, matched = charts_for(self.fixture, spec) + envelope = getattr(report, "outcome_envelope", None) + required = int(envelope.required_contracts.effect) if envelope else 0 + confirmed = int(envelope.passed_contracts.effect) if envelope else 0 + halt = getattr(report, "halt", None) + return { + "key": key, + "name": f"{spec.fname} {spec.lname}", + "dob": spec.dob, + "run_dir": str(run_dir), + "execution_outcome": str(report.execution_outcome), + "transaction_outcome": report.transaction_outcome, + "execution_profile": getattr(report, "execution_profile", None), + "plain_label": plain_result( + report.transaction_outcome, report.execution_outcome + ).label, + "model_calls": int(report.model_calls), + "cost_usd": float(getattr(report, "est_model_cost_usd", 0.0) or 0.0), + "effects_required": required, + "effects_confirmed": confirmed, + "charts": found, + "fields_matched": matched, + "fields_total": len(dict(spec.fields)), + "halt_step": getattr(halt, "state_id", None) if halt else None, + "halt_reason": str(getattr(halt, "reason", "") or "") if halt else "", + "seconds": time.monotonic() - started, + } + + def screenshot(self, path: Path) -> Optional[Path]: + try: + self.backend.page.screenshot(path=str(path)) + except Exception: # noqa: BLE001 - the report still has the frame + return None + return path + + def close(self) -> None: + self._close() + + +def checked(facts: Mapping[str, Any]) -> bool: + """A referral the engine verified and SQL found exactly once, field for field.""" + + return ( + facts["execution_outcome"] == "VERIFIED" + and facts["transaction_outcome"] == "VERIFIED" + and facts["effects_required"] > 0 + and facts["effects_confirmed"] == facts["effects_required"] + and facts["charts"] == 1 + and facts["fields_matched"] == facts["fields_total"] + ) + + +def main() -> int: + """Bring the quickstart's fixture up and print how (for timing it alone).""" + + started = time.monotonic() + fixture = make_fixture() + how = bring_up( + fixture, lambda phase, detail: print(f"{phase}: {detail}", flush=True) + ) + print(json.dumps({"how": how, "seconds": round(time.monotonic() - started, 1)})) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/packages/flow/benchmark/openemr_local/referral_program/README.md b/packages/flow/benchmark/openemr_local/referral_program/README.md new file mode 100644 index 000000000..189df59d5 --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/README.md @@ -0,0 +1,43 @@ +# The certified OpenEMR referral program + +The program `openadapt quickstart --app openemr` runs, and the demonstration +it was compiled from. It's the same program behind the site's OpenEMR Seals +(the r3 to r6 runs in +[`benchmark/scoreboard/raw/openemr_referral/certified/2026-10-20/`](../../scoreboard/raw/openemr_referral/certified/2026-10-20/)). +Every patient, address, phone number (555-01xx) and email +(`example.invalid`) is made up. + +| File | What it is | +| --- | --- | +| `program/` | The compiled bundle, unchanged: 29 steps, content digest `ec096afa2b614326b00ec3155f256041c19d86f3998761ce9d772cfd911460b6` | +| `demonstration.jsonl` | The recorded actions it was compiled from: one line per action, with its time, kind, field and typed value | + +## How it was made + +1. **Recorded** once on the local fixture with the scripted recorder in + `scripts/openemr_local_demo.py` (`record`), with network capture on. The + recording's tree hash is `243fb7853b228a2e0fd93c51c1d43e7b84fff567f1aac917bdcd91a54d044894`, + the bundle's `recording_id`. +2. **Compiled** with `compile_recording` from the same script, with + `drop_redundant_keys` and `pixel_verify_enabled`. That compile applies the + shared duplicate rule (`apply_referral_rules`): Create New Patient must + show OpenEMR's duplicate check with "No matches were found." before the + program confirms a new chart. +3. **Qualified** with `openadapt-flow qualify --verify + benchmark/openemr_local/verify.yaml --certify clinical-write`: 6 of 6 + cases, 3 trials each (representative VERIFIED; ambiguity, wrong identity, + stale identity, weak effect and missing effect each halted with no write), + plus 3 of 3 possible-duplicate trials halted before saving. The + qualification record is inside `program/workflow.json`. + +`demonstration.jsonl` is the recording's `events.jsonl` without its page +URLs and titles: those held the recording session's sign-in token. The +screenshots stay out of the repository. + +## Using it + +`benchmark/openemr_local/quickstart.py` copies `program/` into the +quickstart's output folder and runs it through the certified run path (the +Standard run gate under `clinical-write`, and verify.yaml's REST record +check). Changing any file in `program/` changes its content digest, and +`Workflow.load` refuses a bundle whose files don't match its manifest. diff --git a/packages/flow/benchmark/openemr_local/referral_program/demonstration.jsonl b/packages/flow/benchmark/openemr_local/referral_program/demonstration.jsonl new file mode 100644 index 000000000..d07d8bc3f --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/demonstration.jsonl @@ -0,0 +1,41 @@ +{"i": 0, "t": 1.306, "kind": "click", "selector": "#form_title"} +{"i": 1, "t": 2.104, "kind": "type", "param": "title", "text": "Ms.", "field_label": "form_title"} +{"i": 2, "t": 2.855, "kind": "key", "key": "Enter"} +{"i": 3, "t": 3.638, "kind": "click", "selector": "#form_fname"} +{"i": 4, "t": 4.405, "kind": "key", "key": "Control+a"} +{"i": 5, "t": 5.171, "kind": "type", "param": "fname", "text": "OpenAdapt", "field_label": "First Name"} +{"i": 6, "t": 5.972, "kind": "click", "selector": "#form_lname"} +{"i": 7, "t": 6.723, "kind": "key", "key": "Control+a"} +{"i": 8, "t": 7.547, "kind": "type", "param": "lname", "text": "LoanParity", "field_label": "Last Name"} +{"i": 9, "t": 8.907, "kind": "click", "selector": "#form_DOB"} +{"i": 10, "t": 9.672, "kind": "key", "key": "Control+a"} +{"i": 11, "t": 10.476, "kind": "type", "param": "DOB", "text": "1985-02-03", "field_label": "form_DOB"} +{"i": 12, "t": 11.331, "kind": "click", "selector": "#form_sex"} +{"i": 13, "t": 12.155, "kind": "type", "param": "sex", "text": "Female", "field_label": "form_sex"} +{"i": 14, "t": 12.905, "kind": "key", "key": "Enter"} +{"i": 15, "t": 13.67, "kind": "scroll", "dx": 0, "dy": 300} +{"i": 16, "t": 14.855, "kind": "click", "name": "Contact"} +{"i": 17, "t": 15.619, "kind": "scroll", "dx": 0, "dy": 600} +{"i": 18, "t": 16.403, "kind": "click", "selector": "#form_street"} +{"i": 19, "t": 17.153, "kind": "key", "key": "Control+a"} +{"i": 20, "t": 17.954, "kind": "type", "param": "street", "text": "101 SYNTHETIC WAY", "field_label": "form_street"} +{"i": 21, "t": 18.756, "kind": "click", "selector": "#form_city"} +{"i": 22, "t": 19.504, "kind": "key", "key": "Control+a"} +{"i": 23, "t": 20.344, "kind": "type", "param": "city", "text": "EXAMPLETON", "field_label": "form_city"} +{"i": 24, "t": 21.286, "kind": "click", "selector": "#form_state"} +{"i": 25, "t": 22.07, "kind": "type", "param": "state_label", "text": "Massachusetts", "field_label": "form_state"} +{"i": 26, "t": 22.821, "kind": "key", "key": "Enter"} +{"i": 27, "t": 23.622, "kind": "click", "selector": "#form_postal_code"} +{"i": 28, "t": 24.37, "kind": "key", "key": "Control+a"} +{"i": 29, "t": 25.156, "kind": "type", "param": "postal_code", "text": "02139", "field_label": "form_postal_code"} +{"i": 30, "t": 26.32, "kind": "click", "selector": "#form_phone_home"} +{"i": 31, "t": 27.093, "kind": "key", "key": "Control+a"} +{"i": 32, "t": 27.905, "kind": "type", "param": "phone_home", "text": "555-0107", "field_label": "form_phone_home"} +{"i": 33, "t": 29.136, "kind": "click", "selector": "#form_email"} +{"i": 34, "t": 29.886, "kind": "key", "key": "Control+a"} +{"i": 35, "t": 30.686, "kind": "type", "param": "email", "text": "openadapt.loan-parity@example.invalid", "field_label": "form_email"} +{"i": 36, "t": 31.471, "kind": "click", "selector": "#form_country_code"} +{"i": 37, "t": 32.237, "kind": "type", "param": "country_code", "text": "USA", "field_label": "form_country_code"} +{"i": 38, "t": 32.985, "kind": "key", "key": "Enter"} +{"i": 39, "t": 34.503, "kind": "click", "selector": "#create"} +{"i": 40, "t": 36.805, "kind": "click", "selector": "#confirmCreate", "name": "Create New Patient"} diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/api_proposal.json b/packages/flow/benchmark/openemr_local/referral_program/program/api_proposal.json new file mode 100644 index 000000000..595627afc --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/program/api_proposal.json @@ -0,0 +1,7 @@ +{ + "proposed": false, + "step": null, + "reasons": [ + "the page that serves the form is not in the capture; start recording before opening it" + ] +} diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/benchmark-contract.json b/packages/flow/benchmark/openemr_local/referral_program/program/benchmark-contract.json new file mode 100644 index 000000000..06a1c7e73 --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/program/benchmark-contract.json @@ -0,0 +1,22 @@ +{ + "effects_sha256": "50f848801002c21c5e8ee57459c838a42c1db9c8a6d6063bfe095a6d6ca0a76b", + "marker_sha256": "7180c24064c8c02851229f9cd684a3985ddb800eda491b3c20e81d863b740540", + "required_params": [ + "DOB", + "city", + "country_code", + "email", + "fname", + "lname", + "phone_home", + "postal_code", + "sex", + "state_label", + "street", + "title" + ], + "save_step_id": "step_040", + "schema_version": 1, + "source_recording_sha256": "243fb7853b228a2e0fd93c51c1d43e7b84fff567f1aac917bdcd91a54d044894", + "workflow_name": "openemr-create-synthetic-patient" +} diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/compile_notes.json b/packages/flow/benchmark/openemr_local/referral_program/program/compile_notes.json new file mode 100644 index 000000000..a4b3c1ca5 --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/program/compile_notes.json @@ -0,0 +1,151 @@ +{ + "schema": "openadapt.compile-notes/v1", + "note": "Changes the default compiler passes made to demonstrated gestures. Each replaces a gesture that asserted nothing with an equivalent one that carries its own check.", + "changes": [ + { + "change": "drop_select_commit_enter", + "step": "step_002", + "evidence": "structural role combobox, then TYPE, then Enter", + "selector": "#form_title" + }, + { + "change": "drop_select_commit_enter", + "step": "step_014", + "evidence": "structural role combobox, then TYPE, then Enter", + "selector": "#form_sex" + }, + { + "change": "drop_select_commit_enter", + "step": "step_026", + "evidence": "structural role combobox, then TYPE, then Enter", + "selector": "#form_state" + }, + { + "change": "drop_select_commit_enter", + "step": "step_038", + "evidence": "structural role combobox, then TYPE, then Enter", + "selector": "#form_country_code" + }, + { + "change": "drop_select_all_on_empty_field", + "step": "step_004", + "evidence": "Ctrl+A changed no pixel in the clicked field box", + "region": [ + 364, + 296, + 160, + 50 + ] + }, + { + "change": "drop_select_all_on_empty_field", + "step": "step_007", + "evidence": "Ctrl+A changed no pixel in the clicked field box", + "region": [ + 591, + 285, + 160, + 61 + ] + }, + { + "change": "drop_select_all_on_empty_field", + "step": "step_010", + "evidence": "Ctrl+A changed no pixel in the clicked field box", + "region": [ + 347, + 398, + 160, + 64 + ] + }, + { + "change": "drop_select_all_on_empty_field", + "step": "step_019", + "evidence": "Ctrl+A changed no pixel in the clicked field box", + "region": [ + 399, + 128, + 160, + 64 + ] + }, + { + "change": "drop_select_all_on_empty_field", + "step": "step_022", + "evidence": "Ctrl+A changed no pixel in the clicked field box", + "region": [ + 364, + 172, + 160, + 55 + ] + }, + { + "change": "drop_select_all_on_empty_field", + "step": "step_028", + "evidence": "Ctrl+A changed no pixel in the clicked field box", + "region": [ + 340, + 207, + 160, + 59 + ] + }, + { + "change": "drop_select_all_on_empty_field", + "step": "step_031", + "evidence": "Ctrl+A changed no pixel in the clicked field box", + "region": [ + 382, + 315, + 160, + 64 + ] + }, + { + "change": "drop_select_all_on_empty_field", + "step": "step_034", + "evidence": "Ctrl+A changed no pixel in the clicked field box", + "region": [ + 955, + 350, + 160, + 64 + ] + }, + { + "change": "static_control_identifier_crop", + "step": "step_016", + "evidence": "structural role button with no identity evidence", + "region": [ + 554, + 473, + 160, + 64 + ] + }, + { + "change": "focused_field_region_stable", + "step": "step_027", + "evidence": "structural field role", + "region": [ + 340, + 207, + 160, + 59 + ] + }, + { + "change": "focused_field_region_stable", + "step": "step_036", + "evidence": "structural field role", + "region": [ + 937, + 210, + 160, + 56 + ] + } + ] +} diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/manifest.json b/packages/flow/benchmark/openemr_local/referral_program/program/manifest.json new file mode 100644 index 000000000..35d80cabc --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/program/manifest.json @@ -0,0 +1,262 @@ +{ + "schema_version": 2, + "content_digest": "ec096afa2b614326b00ec3155f256041c19d86f3998761ce9d772cfd911460b6", + "file_hashes": { + "templates/identifiers/step_016.png": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "templates/layout_fingerprint.json": "d7727e415947aa17cb2fa007be88f5cd1e56b9e913a64354f61c62b580459e0a", + "templates/step_000.png": "d7a431d729f4d525993bf1eb95bb66ad63f8a486d858a2e44666301d70b93011", + "templates/step_000_expect.png": "054fe016774a313989c92f999615bbf1f9c0bf6cf105a4ef8e1446fa290015d9", + "templates/step_003.png": "dce5569d4b131c367fe623aa1d6ed9526c12c1dbf7cc221c8efa8f237ea95a9b", + "templates/step_003_expect.png": "087fbc35f6f04062e7f557deea1c840d80623ae56998cd5f58de6c4aedf3b70a", + "templates/step_006.png": "bd23dd90a29b84df5589a7476448966a7710bf47074b727f313491da7158c98d", + "templates/step_006_expect.png": "7cb7eeda6806270a30bfd093255fd401cc3b20935f2435b8543af2b961b747fc", + "templates/step_009.png": "517c77489043a2dd9ac5bb089144dff4b3a112a7e34037aad40d1f9751aee85e", + "templates/step_009_expect.png": "ec0b79d0367c4958939efeb76ca5f20c6493ae71b1cd3fb3ad4d36be07159adc", + "templates/step_012.png": "ac4efcf5feba028428c2b253a582edb0af6471791520169a0de9baa0070c025c", + "templates/step_012_expect.png": "df173d42b500650f81d0871716a9efd38214140c4888122d6c3f64b33f1d5c28", + "templates/step_016.png": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "templates/step_016_expect.png": "ce1cea546632622f1619810362446214fec79590a4ee5553a26f4ec197627107", + "templates/step_018.png": "84a5d61734af83336cac971cca1adb5bd76c56faef578b352528b177eb6557b3", + "templates/step_018_expect.png": "b325a8bc335bded3f3cf7b47830e0a24ebbaf08062de554fb5d5da63a56db05f", + "templates/step_021.png": "e9607624e6649bdb1548772a3e9e4577f5112d99ac962e3f8c77b44b80a356ef", + "templates/step_021_expect.png": "372a6705999c77fb3ceb959c616f5a40536e485b73eacf1756426581ddce67b6", + "templates/step_024.png": "3b8449493928ef24a570e1d7ac65b5b25584c8b3cd68eba071af842bfbae9399", + "templates/step_024_expect.png": "278236d24d497fe78a87483c8d60bd3fe9c926bdfad310630b58cff790a7ae91", + "templates/step_027.png": "014571a3a093215ed0ec9b812b1eb66efc274116d2be529d736a37301b92a95f", + "templates/step_027_expect.png": "5f1ea1d1b03efa9d0812b6d21155117cbfb75b47f6b643815a7041759529b0f6", + "templates/step_030.png": "0e551c8fa8f8e2eb4cfef0ccef68c35862e8a3c1dd6e654ec0185edcab047b28", + "templates/step_030_expect.png": "1b71bfe520e1b6c8a1d41b990bca4f2f6dd5e15a4bf931595917894ad56d1c46", + "templates/step_033.png": "28ee56d03479ba76a938532854fbca55bab26ed8ba738b9a44185f4db04368aa", + "templates/step_033_expect.png": "298a1691c7832c2eeb29e00a15457b005b5222f304d6c41530cfc2dc91cbc36c", + "templates/step_036.png": "3e21d6500e80bd6ce8c56f1dfc23e6de983e48e4835f341d7a59149049771673", + "templates/step_036_expect.png": "221dc30b588ef26b60326197e8ec510a84dc007201d57103c0100d9f06e5d641", + "templates/step_039.png": "01bd72ded2316233b66af4e50b63bdf54c3f2ca12d5aac2a5462a88893f30b43", + "templates/step_039_expect.png": "8782f2d5377eec7fbddbd9b0657f283207254be7eaa415d3204f10cdb13fdcb4", + "templates/step_040.png": "22dd0ae0fba63fbcaf4222de690199ef88fa71a386a186db9c03b813f981aa87", + "templates/step_040_expect.png": "194dcc5ba50edcfb2d4a5fb8a6e9ca1d6669654147c9f990715572992ddf8a6c" + }, + "provenance": { + "compiler_version": "2.2.0", + "source_recording_sha256": "243fb7853b228a2e0fd93c51c1d43e7b84fff567f1aac917bdcd91a54d044894", + "compiler_config_sha256": "a40fa088af6e27af7555bd066b216ac2b73da101e6e228470fb2dd994d754efd", + "created_at": "2026-10-20T02:34:27.692587+00:00", + "policy_name": "clinical-write", + "certified": true, + "certification_status": "certified", + "certified_at": "2026-10-20T02:56:35.080875+00:00", + "expires_at": null, + "certification_invalidated_at": null, + "certification_invalidation_reason": null, + "governed_authorization_template": { + "schema_version": "openadapt.governed-authorization-template/v1", + "bundle_content_digest": "ec096afa2b614326b00ec3155f256041c19d86f3998761ce9d772cfd911460b6", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "qualification_project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "qualification_project_revision": 51, + "qualification_project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "qualification_environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "qualification_report_sha256": "679cb95559a88b86ec4541c2e0b826699da17d4e0774745c1e930562b7b96463", + "qualification_case_evidence_contract_sha256": "8343336b83784d2904667591334a239cb2cc5f9b1d0d6fcb4c8564f698a144db", + "policy_name": "clinical-write", + "policy_contract_sha256": "f35a6a94b3f2787165f071ce8571de07095169b9632d394e9df719b35da52c0f", + "execution_profile": "standard", + "minimum_effect_tier": 1, + "qualified_effect_requirements": [ + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 0, + "effect_contract_hash": "sha256:f64985856097097954250be6523fa260daf9fc5db495671c2548ead9a388577b", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 1, + "effect_contract_hash": "sha256:206d1d6fc27df6f24c02bb6b6f4419e0612e7935ec7e744fc8cc446f54558385", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 2, + "effect_contract_hash": "sha256:8f295459bdd868daf117ca9f77dd948cdc2c8c034a65184cb5418ccfab7f60e7", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 3, + "effect_contract_hash": "sha256:52c6884d06d82c4ccc14600150f2890bcd25d92cb7eb26bc53ef54033075ba3c", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 4, + "effect_contract_hash": "sha256:7732675a6e6123c0c3f51512496f695fa4ce503ab989993c520fb8a469bbdc3d", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 5, + "effect_contract_hash": "sha256:598fb97e12d3c0b537f0453e7fdaad453b969e249e888424e67fcd85a06741f0", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 6, + "effect_contract_hash": "sha256:ba109cf90077d7b20a37c2848fa7bee8ea0039747a5ae47465617b2ea1039a2b", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 7, + "effect_contract_hash": "sha256:f508b7fd1536726db75a0814fc439c65dbd6c0b637a7b619855c73a571bcfca9", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 8, + "effect_contract_hash": "sha256:b311b51ece1670a60f793b29aa3d28d40da196ffbcd26f2fdd620e380dedf97a", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 9, + "effect_contract_hash": "sha256:a33cf54165b96ce6d48014e6e68bac94cdc8f9c9176bae6f5c955123d20683c2", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 10, + "effect_contract_hash": "sha256:d2516eb0f6aa365b812e84fd754127d053d8e0b1a4b349a0b8ce71936bcec199", + "minimum_tier": 1 + } + ], + "required_identity_step_ids": [ + "step_040" + ], + "identity_contract_sha256": "44f51284a45d149f9a7c9a034feab055eded47b89eb3910609c215005205f424", + "parameters": [ + { + "name": "DOB", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "city", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "country_code", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "email", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "fname", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "lname", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "phone_home", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "postal_code", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "sex", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "state_label", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "street", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "title", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + } + ], + "parameter_contract_sha256": "2a19e2c3ea6e0644cfe9a842aea8c53e036d18bed254b100cf23c88ea090d603", + "template_sha256": "074ac60fe06d201b0083c921b6c24b1d1b83b63b2b91cb140d55e319251d86cb" + } + }, + "encrypted": false +} \ No newline at end of file diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/param_hygiene.json b/packages/flow/benchmark/openemr_local/referral_program/program/param_hygiene.json new file mode 100644 index 000000000..6bc3f42af --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/program/param_hygiene.json @@ -0,0 +1,25 @@ +{ + "note": "REGION_STABLE postconditions dropped because the changed region rendered a demonstrated parameter value. These steps carry no pixel-region invariant; add an effect assertion if the step needs one. Matched text is masked.", + "dropped_region_stable": [ + { + "step_id": "step_027", + "region": [ + 885, + 146, + 265, + 99 + ], + "matched_text": "Ma**************************pp" + }, + { + "step_id": "step_036", + "region": [ + 885, + 333, + 302, + 99 + ], + "matched_text": "op****************************in" + } + ] +} \ No newline at end of file diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/identifiers/step_016.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/identifiers/step_016.png new file mode 100644 index 000000000..9ad632eb8 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/identifiers/step_016.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/layout_fingerprint.json b/packages/flow/benchmark/openemr_local/referral_program/program/templates/layout_fingerprint.json new file mode 100644 index 000000000..b10ee1c56 --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/program/templates/layout_fingerprint.json @@ -0,0 +1,2914 @@ +{ + "scale_landmarks": { + "salt": "012f6509e0e82749e36d064a5e96317f", + "steps": { + "step_000": [ + [ + "e6a563a41f7ff7f2", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 186.0, + 125.5, + 300, + 21 + ], + [ + "38b441cc77f9503f", + 424.0, + 319.0, + 76, + 20 + ], + [ + "3c9c2b4574476f73", + 632.5, + 318.0, + 75, + 22 + ], + [ + "f3fa42bb307e7a8e", + 170.5, + 352.0, + 123, + 20 + ], + [ + "c1fd9860d1095746", + 505.0, + 358.0, + 236, + 20 + ], + [ + "86b48fef274929d1", + 153.5, + 387.5, + 91, + 23 + ], + [ + "a0778c38341cc97c", + 440.5, + 393.0, + 107, + 20 + ], + [ + "751ccb168d81049a", + 649.0, + 393.0, + 106, + 20 + ], + [ + "b16014cb33089bdc", + 684.0, + 425.0, + 76, + 22 + ], + [ + "aa125cc68293af51", + 168.0, + 461.5, + 120, + 25 + ], + [ + "f6c33aeef5c9d975", + 179.5, + 496.5, + 143, + 23 + ], + [ + "7133755b1b467edf", + 686.0, + 497.5, + 82, + 27 + ], + [ + "fccf77f0e4ecf7a8", + 153.0, + 531.5, + 90, + 23 + ], + [ + "fc544683fb8a9147", + 150.0, + 566.5, + 88, + 23 + ], + [ + "c30db2fac1d41190", + 700.5, + 566.5, + 109, + 23 + ], + [ + "9e31646f30d3ff8c", + 160.5, + 601.5, + 105, + 23 + ], + [ + "9d0cd43d650b674b", + 153.5, + 641.0, + 93, + 26 + ], + [ + "5d1559267ea9930b", + 172.0, + 675.5, + 128, + 23 + ], + [ + "981158554b6be9da", + 132.5, + 787.0, + 63, + 24 + ] + ], + "step_003": [ + [ + "5d75012daf614d82", + 504.0, + 31.0, + 910, + 22 + ], + [ + "e6a563a41f7ff7f2", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 186.0, + 125.5, + 300, + 21 + ], + [ + "38b441cc77f9503f", + 424.0, + 319.0, + 76, + 20 + ], + [ + "3c9c2b4574476f73", + 632.5, + 318.0, + 75, + 22 + ], + [ + "f3fa42bb307e7a8e", + 170.5, + 352.0, + 123, + 20 + ], + [ + "c1fd9860d1095746", + 505.0, + 358.0, + 236, + 20 + ], + [ + "86b48fef274929d1", + 153.5, + 387.5, + 91, + 23 + ], + [ + "a0778c38341cc97c", + 440.5, + 393.0, + 107, + 20 + ], + [ + "751ccb168d81049a", + 649.0, + 393.0, + 106, + 20 + ], + [ + "b16014cb33089bdc", + 684.0, + 425.0, + 76, + 22 + ], + [ + "aa125cc68293af51", + 168.0, + 461.5, + 120, + 25 + ], + [ + "f6c33aeef5c9d975", + 179.0, + 496.5, + 144, + 25 + ], + [ + "7133755b1b467edf", + 686.0, + 497.5, + 82, + 27 + ], + [ + "fccf77f0e4ecf7a8", + 153.0, + 531.5, + 90, + 23 + ], + [ + "fc544683fb8a9147", + 150.0, + 566.5, + 88, + 23 + ], + [ + "c30db2fac1d41190", + 700.5, + 566.5, + 109, + 23 + ], + [ + "9e31646f30d3ff8c", + 160.5, + 601.5, + 105, + 23 + ], + [ + "9d0cd43d650b674b", + 153.5, + 641.0, + 93, + 26 + ], + [ + "5d1559267ea9930b", + 172.0, + 675.5, + 128, + 23 + ], + [ + "981158554b6be9da", + 132.5, + 787.0, + 63, + 24 + ] + ], + "step_006": [ + [ + "5d75012daf614d82", + 504.0, + 31.0, + 910, + 22 + ], + [ + "e6a563a41f7ff7f2", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 186.0, + 125.5, + 300, + 21 + ], + [ + "3c9c2b4574476f73", + 632.5, + 318.0, + 75, + 22 + ], + [ + "f3fa42bb307e7a8e", + 170.5, + 352.0, + 123, + 20 + ], + [ + "c1fd9860d1095746", + 505.0, + 358.0, + 236, + 20 + ], + [ + "86b48fef274929d1", + 153.5, + 387.5, + 91, + 23 + ], + [ + "a0778c38341cc97c", + 440.5, + 393.0, + 107, + 20 + ], + [ + "751ccb168d81049a", + 649.0, + 393.0, + 106, + 20 + ], + [ + "b16014cb33089bdc", + 684.0, + 425.0, + 76, + 22 + ], + [ + "aa125cc68293af51", + 168.0, + 461.5, + 120, + 25 + ], + [ + "f6c33aeef5c9d975", + 179.0, + 496.5, + 144, + 25 + ], + [ + "7133755b1b467edf", + 686.0, + 497.5, + 82, + 27 + ], + [ + "fccf77f0e4ecf7a8", + 153.0, + 531.5, + 90, + 23 + ], + [ + "fc544683fb8a9147", + 150.0, + 566.5, + 88, + 23 + ], + [ + "c30db2fac1d41190", + 700.5, + 566.5, + 109, + 23 + ], + [ + "9e31646f30d3ff8c", + 160.5, + 601.5, + 105, + 23 + ], + [ + "9d0cd43d650b674b", + 153.5, + 641.0, + 93, + 26 + ], + [ + "5d1559267ea9930b", + 172.0, + 675.5, + 128, + 23 + ], + [ + "981158554b6be9da", + 132.5, + 787.0, + 63, + 24 + ] + ], + "step_009": [ + [ + "5d75012daf614d82", + 504.0, + 31.0, + 910, + 22 + ], + [ + "e6a563a41f7ff7f2", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 186.0, + 125.5, + 300, + 21 + ], + [ + "f3fa42bb307e7a8e", + 170.5, + 352.0, + 123, + 20 + ], + [ + "c1fd9860d1095746", + 505.0, + 358.0, + 236, + 20 + ], + [ + "86b48fef274929d1", + 153.5, + 387.5, + 91, + 23 + ], + [ + "a0778c38341cc97c", + 440.0, + 392.0, + 108, + 22 + ], + [ + "751ccb168d81049a", + 649.0, + 393.0, + 106, + 20 + ], + [ + "b16014cb33089bdc", + 684.0, + 425.0, + 76, + 22 + ], + [ + "aa125cc68293af51", + 168.0, + 461.5, + 120, + 25 + ], + [ + "f6c33aeef5c9d975", + 179.0, + 496.5, + 144, + 25 + ], + [ + "7133755b1b467edf", + 686.0, + 497.5, + 82, + 27 + ], + [ + "fccf77f0e4ecf7a8", + 153.0, + 531.5, + 90, + 23 + ], + [ + "fc544683fb8a9147", + 150.0, + 566.5, + 88, + 23 + ], + [ + "c30db2fac1d41190", + 700.5, + 566.5, + 109, + 23 + ], + [ + "9e31646f30d3ff8c", + 160.5, + 601.5, + 105, + 23 + ], + [ + "9d0cd43d650b674b", + 153.5, + 641.0, + 93, + 26 + ], + [ + "5d1559267ea9930b", + 172.0, + 675.5, + 128, + 23 + ], + [ + "981158554b6be9da", + 132.5, + 787.0, + 63, + 24 + ] + ], + "step_012": [ + [ + "5d75012daf614d82", + 504.0, + 31.0, + 910, + 22 + ], + [ + "168adbfb7d2d48b9", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 186.0, + 125.5, + 300, + 21 + ], + [ + "f3fa42bb307e7a8e", + 170.5, + 353.0, + 123, + 20 + ], + [ + "c1fd9860d1095746", + 505.0, + 357.0, + 236, + 20 + ], + [ + "86b48fef274929d1", + 153.5, + 387.5, + 91, + 23 + ], + [ + "a0778c38341cc97c", + 440.0, + 392.0, + 108, + 22 + ], + [ + "751ccb168d81049a", + 648.5, + 392.0, + 107, + 22 + ], + [ + "b16014cb33089bdc", + 684.0, + 425.0, + 76, + 22 + ], + [ + "aa125cc68293af51", + 168.0, + 461.5, + 120, + 25 + ], + [ + "bc55103af484362f", + 526.0, + 463.5, + 118, + 17 + ], + [ + "f6c33aeef5c9d975", + 179.0, + 496.5, + 144, + 25 + ], + [ + "7133755b1b467edf", + 686.0, + 497.0, + 80, + 24 + ], + [ + "fccf77f0e4ecf7a8", + 153.0, + 531.5, + 90, + 23 + ], + [ + "fc544683fb8a9147", + 150.0, + 566.5, + 88, + 23 + ], + [ + "c30db2fac1d41190", + 700.5, + 566.5, + 109, + 23 + ], + [ + "9e31646f30d3ff8c", + 160.0, + 601.5, + 106, + 23 + ], + [ + "9d0cd43d650b674b", + 153.5, + 641.0, + 93, + 26 + ], + [ + "5d1559267ea9930b", + 172.5, + 675.5, + 129, + 23 + ], + [ + "981158554b6be9da", + 132.5, + 787.0, + 63, + 24 + ] + ], + "step_016": [ + [ + "5d75012daf614d82", + 504.0, + 30.5, + 910, + 21 + ], + [ + "e6a563a41f7ff7f2", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 186.0, + 125.5, + 300, + 21 + ], + [ + "9c8c45530dc94d6a", + 465.5, + 126.5, + 191, + 17 + ], + [ + "d7572869fcd4c0f4", + 426.5, + 152.5, + 79, + 17 + ], + [ + "aa125cc68293af51", + 168.0, + 180.5, + 122, + 25 + ], + [ + "f6c33aeef5c9d975", + 179.0, + 215.5, + 142, + 23 + ], + [ + "7133755b1b467edf", + 686.5, + 216.5, + 79, + 21 + ], + [ + "fccf77f0e4ecf7a8", + 153.5, + 250.5, + 89, + 21 + ], + [ + "fc544683fb8a9147", + 151.0, + 285.5, + 86, + 21 + ], + [ + "c30db2fac1d41190", + 701.0, + 286.0, + 108, + 20 + ], + [ + "9e31646f30d3ff8c", + 160.5, + 320.5, + 105, + 23 + ], + [ + "9d0cd43d650b674b", + 153.5, + 360.0, + 93, + 26 + ], + [ + "5d1559267ea9930b", + 172.5, + 395.0, + 127, + 20 + ], + [ + "981158554b6be9da", + 132.5, + 505.5, + 63, + 23 + ], + [ + "7fd84f520997cf7d", + 133.5, + 547.0, + 65, + 24 + ], + [ + "b6b771df259caa31", + 138.0, + 588.5, + 76, + 27 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.5, + 43, + 23 + ], + [ + "03163deaa1c82552", + 132.5, + 710.0, + 61, + 20 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ], + "step_018": [ + [ + "5d75012daf614d82", + 504.0, + 30.5, + 910, + 21 + ], + [ + "168adbfb7d2d48b9", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 187.0, + 125.5, + 304, + 21 + ], + [ + "9c8c45530dc94d6a", + 465.5, + 126.5, + 191, + 17 + ], + [ + "970f1aa1fffa9af3", + 143.0, + 157.0, + 70, + 20 + ], + [ + "f8f9528a9fe385a5", + 706.0, + 157.0, + 116, + 20 + ], + [ + "07393f1c1ab28853", + 127.5, + 192.5, + 43, + 27 + ], + [ + "f329c8b460accfb9", + 670.5, + 192.0, + 51, + 24 + ], + [ + "f9394c522d837471", + 157.0, + 231.0, + 98, + 20 + ], + [ + "ee3677efe8c70157", + 680.5, + 231.0, + 69, + 26 + ], + [ + "1c67ee3e08858fac", + 138.5, + 270.0, + 63, + 24 + ], + [ + "1966373c53a5e53a", + 706.5, + 269.5, + 121, + 25 + ], + [ + "1d0ef0194a2f7704", + 183.5, + 308.5, + 151, + 25 + ], + [ + "e1f015cc98df0983", + 717.0, + 308.0, + 140, + 20 + ], + [ + "52f7e24847d800b6", + 160.0, + 343.5, + 104, + 23 + ], + [ + "2ab7729aa68f6d83", + 696.0, + 343.0, + 100, + 26 + ], + [ + "db019276a72b1ea5", + 162.5, + 378.5, + 109, + 23 + ], + [ + "718ecc2d878d965c", + 702.0, + 378.5, + 110, + 23 + ], + [ + "531d97c59d0a0007", + 163.0, + 414.0, + 108, + 20 + ], + [ + "4d87b462cbd40ebb", + 181.0, + 462.5, + 136, + 19 + ], + [ + "df35fb9e5e069440", + 1088.0, + 464.0, + 116, + 20 + ], + [ + "2d6ae7a1ff310960", + 133.5, + 488.0, + 43, + 18 + ], + [ + "7fd84f520997cf7d", + 133.5, + 546.5, + 65, + 25 + ], + [ + "b6b771df259caa31", + 138.0, + 588.5, + 76, + 27 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.5, + 43, + 23 + ], + [ + "03163deaa1c82552", + 132.5, + 710.0, + 61, + 20 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ], + "step_021": [ + [ + "5d75012daf614d82", + 504.0, + 30.5, + 910, + 21 + ], + [ + "168adbfb7d2d48b9", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 185.5, + 125.5, + 301, + 21 + ], + [ + "9c8c45530dc94d6a", + 444.5, + 127.0, + 151, + 20 + ], + [ + "970f1aa1fffa9af3", + 143.0, + 157.0, + 70, + 20 + ], + [ + "f8f9528a9fe385a5", + 706.0, + 157.0, + 116, + 20 + ], + [ + "07393f1c1ab28853", + 127.5, + 192.5, + 43, + 27 + ], + [ + "f329c8b460accfb9", + 670.5, + 192.0, + 51, + 24 + ], + [ + "f9394c522d837471", + 157.0, + 231.0, + 98, + 20 + ], + [ + "ee3677efe8c70157", + 680.5, + 231.5, + 69, + 27 + ], + [ + "1c67ee3e08858fac", + 138.5, + 270.0, + 63, + 24 + ], + [ + "1966373c53a5e53a", + 707.0, + 270.0, + 120, + 20 + ], + [ + "1d0ef0194a2f7704", + 183.5, + 308.5, + 151, + 25 + ], + [ + "e1f015cc98df0983", + 717.0, + 308.0, + 140, + 20 + ], + [ + "52f7e24847d800b6", + 160.0, + 343.5, + 104, + 23 + ], + [ + "2ab7729aa68f6d83", + 696.0, + 343.0, + 100, + 26 + ], + [ + "db019276a72b1ea5", + 162.0, + 378.5, + 110, + 25 + ], + [ + "718ecc2d878d965c", + 702.0, + 378.5, + 110, + 23 + ], + [ + "531d97c59d0a0007", + 163.0, + 414.0, + 108, + 20 + ], + [ + "4d87b462cbd40ebb", + 181.0, + 462.5, + 136, + 19 + ], + [ + "df35fb9e5e069440", + 1088.0, + 464.0, + 116, + 20 + ], + [ + "2d6ae7a1ff310960", + 133.5, + 488.0, + 43, + 18 + ], + [ + "7fd84f520997cf7d", + 133.5, + 546.5, + 65, + 25 + ], + [ + "b6b771df259caa31", + 138.0, + 588.5, + 76, + 27 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.5, + 43, + 23 + ], + [ + "03163deaa1c82552", + 132.5, + 710.0, + 61, + 20 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ], + "step_024": [ + [ + "5d75012daf614d82", + 504.0, + 30.5, + 910, + 21 + ], + [ + "e6a563a41f7ff7f2", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 186.0, + 125.5, + 302, + 21 + ], + [ + "9c8c45530dc94d6a", + 444.0, + 127.0, + 150, + 20 + ], + [ + "970f1aa1fffa9af3", + 143.0, + 157.0, + 70, + 20 + ], + [ + "f8f9528a9fe385a5", + 706.0, + 157.0, + 116, + 20 + ], + [ + "07393f1c1ab28853", + 127.5, + 192.5, + 43, + 27 + ], + [ + "f329c8b460accfb9", + 670.5, + 192.0, + 51, + 24 + ], + [ + "f9394c522d837471", + 157.0, + 231.0, + 98, + 20 + ], + [ + "ee3677efe8c70157", + 680.5, + 231.5, + 69, + 27 + ], + [ + "1c67ee3e08858fac", + 138.5, + 270.0, + 63, + 24 + ], + [ + "1966373c53a5e53a", + 706.5, + 269.5, + 121, + 25 + ], + [ + "1d0ef0194a2f7704", + 183.5, + 308.5, + 151, + 25 + ], + [ + "e1f015cc98df0983", + 717.0, + 308.0, + 140, + 20 + ], + [ + "52f7e24847d800b6", + 160.0, + 343.5, + 104, + 23 + ], + [ + "2ab7729aa68f6d83", + 696.0, + 343.0, + 100, + 26 + ], + [ + "db019276a72b1ea5", + 162.0, + 378.5, + 108, + 25 + ], + [ + "718ecc2d878d965c", + 702.0, + 378.5, + 110, + 23 + ], + [ + "531d97c59d0a0007", + 163.0, + 414.0, + 108, + 20 + ], + [ + "4d87b462cbd40ebb", + 181.0, + 462.5, + 136, + 19 + ], + [ + "df35fb9e5e069440", + 1088.0, + 464.0, + 116, + 20 + ], + [ + "2d6ae7a1ff310960", + 133.5, + 488.0, + 43, + 18 + ], + [ + "7fd84f520997cf7d", + 133.5, + 546.5, + 65, + 25 + ], + [ + "b6b771df259caa31", + 138.0, + 588.5, + 76, + 27 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.5, + 43, + 23 + ], + [ + "03163deaa1c82552", + 132.5, + 710.0, + 61, + 20 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ], + "step_027": [ + [ + "5d75012daf614d82", + 504.0, + 30.5, + 910, + 21 + ], + [ + "168adbfb7d2d48b9", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 185.5, + 125.5, + 301, + 21 + ], + [ + "9c8c45530dc94d6a", + 444.0, + 126.5, + 148, + 17 + ], + [ + "970f1aa1fffa9af3", + 143.0, + 157.0, + 70, + 20 + ], + [ + "f8f9528a9fe385a5", + 706.0, + 157.0, + 116, + 20 + ], + [ + "07393f1c1ab28853", + 127.5, + 192.5, + 43, + 27 + ], + [ + "f329c8b460accfb9", + 670.5, + 192.0, + 51, + 24 + ], + [ + "f9394c522d837471", + 157.0, + 231.0, + 98, + 20 + ], + [ + "ee3677efe8c70157", + 680.5, + 231.5, + 69, + 27 + ], + [ + "1c67ee3e08858fac", + 138.5, + 270.0, + 63, + 24 + ], + [ + "1966373c53a5e53a", + 706.5, + 269.5, + 121, + 25 + ], + [ + "1d0ef0194a2f7704", + 183.5, + 308.5, + 151, + 25 + ], + [ + "e1f015cc98df0983", + 717.0, + 308.0, + 140, + 20 + ], + [ + "52f7e24847d800b6", + 160.0, + 343.5, + 104, + 23 + ], + [ + "2ab7729aa68f6d83", + 696.0, + 343.0, + 100, + 26 + ], + [ + "db019276a72b1ea5", + 162.0, + 378.5, + 108, + 25 + ], + [ + "718ecc2d878d965c", + 702.0, + 378.5, + 110, + 23 + ], + [ + "531d97c59d0a0007", + 163.0, + 414.0, + 108, + 20 + ], + [ + "4d87b462cbd40ebb", + 181.0, + 462.5, + 136, + 19 + ], + [ + "df35fb9e5e069440", + 1088.0, + 464.0, + 116, + 20 + ], + [ + "2d6ae7a1ff310960", + 133.5, + 488.0, + 43, + 18 + ], + [ + "7fd84f520997cf7d", + 133.5, + 546.5, + 65, + 25 + ], + [ + "b6b771df259caa31", + 138.0, + 588.5, + 76, + 27 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.5, + 43, + 23 + ], + [ + "03163deaa1c82552", + 132.5, + 710.0, + 61, + 20 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ], + "step_030": [ + [ + "5d75012daf614d82", + 504.0, + 30.5, + 910, + 21 + ], + [ + "168adbfb7d2d48b9", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 185.5, + 125.5, + 301, + 21 + ], + [ + "9c8c45530dc94d6a", + 444.0, + 126.5, + 148, + 17 + ], + [ + "970f1aa1fffa9af3", + 143.0, + 157.0, + 70, + 20 + ], + [ + "f8f9528a9fe385a5", + 706.0, + 157.0, + 116, + 20 + ], + [ + "07393f1c1ab28853", + 127.5, + 192.5, + 43, + 27 + ], + [ + "f329c8b460accfb9", + 670.5, + 192.0, + 51, + 24 + ], + [ + "f9394c522d837471", + 157.0, + 231.0, + 98, + 20 + ], + [ + "ee3677efe8c70157", + 680.5, + 231.5, + 69, + 27 + ], + [ + "1c67ee3e08858fac", + 138.5, + 270.0, + 63, + 24 + ], + [ + "1966373c53a5e53a", + 706.5, + 269.5, + 121, + 25 + ], + [ + "1d0ef0194a2f7704", + 183.5, + 308.5, + 151, + 25 + ], + [ + "e1f015cc98df0983", + 717.0, + 308.0, + 140, + 20 + ], + [ + "52f7e24847d800b6", + 160.0, + 343.5, + 104, + 23 + ], + [ + "2ab7729aa68f6d83", + 696.0, + 343.0, + 100, + 26 + ], + [ + "db019276a72b1ea5", + 162.0, + 378.5, + 108, + 25 + ], + [ + "718ecc2d878d965c", + 702.0, + 378.5, + 110, + 23 + ], + [ + "531d97c59d0a0007", + 163.0, + 414.0, + 108, + 20 + ], + [ + "4d87b462cbd40ebb", + 181.0, + 462.5, + 136, + 19 + ], + [ + "df35fb9e5e069440", + 1088.0, + 464.0, + 116, + 20 + ], + [ + "2d6ae7a1ff310960", + 133.5, + 488.0, + 43, + 18 + ], + [ + "7fd84f520997cf7d", + 133.5, + 546.5, + 65, + 25 + ], + [ + "b6b771df259caa31", + 138.0, + 588.5, + 76, + 27 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.5, + 43, + 23 + ], + [ + "03163deaa1c82552", + 132.5, + 710.0, + 61, + 20 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ], + "step_033": [ + [ + "5d75012daf614d82", + 504.0, + 30.5, + 910, + 21 + ], + [ + "168adbfb7d2d48b9", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 185.5, + 125.5, + 301, + 21 + ], + [ + "9c8c45530dc94d6a", + 444.5, + 126.5, + 149, + 17 + ], + [ + "970f1aa1fffa9af3", + 143.0, + 157.0, + 70, + 20 + ], + [ + "f8f9528a9fe385a5", + 706.0, + 157.0, + 116, + 20 + ], + [ + "07393f1c1ab28853", + 127.5, + 192.5, + 43, + 27 + ], + [ + "f329c8b460accfb9", + 670.5, + 192.0, + 51, + 24 + ], + [ + "f9394c522d837471", + 157.0, + 231.0, + 98, + 20 + ], + [ + "ee3677efe8c70157", + 680.5, + 231.0, + 69, + 26 + ], + [ + "1c67ee3e08858fac", + 138.5, + 270.0, + 63, + 24 + ], + [ + "1966373c53a5e53a", + 707.0, + 270.0, + 120, + 20 + ], + [ + "1d0ef0194a2f7704", + 183.5, + 308.5, + 151, + 25 + ], + [ + "e1f015cc98df0983", + 717.0, + 308.0, + 140, + 20 + ], + [ + "52f7e24847d800b6", + 160.0, + 343.5, + 104, + 23 + ], + [ + "2ab7729aa68f6d83", + 696.0, + 343.0, + 100, + 26 + ], + [ + "db019276a72b1ea5", + 162.0, + 378.5, + 108, + 25 + ], + [ + "718ecc2d878d965c", + 702.0, + 378.5, + 110, + 23 + ], + [ + "531d97c59d0a0007", + 163.0, + 414.0, + 108, + 20 + ], + [ + "4d87b462cbd40ebb", + 181.0, + 462.5, + 136, + 19 + ], + [ + "df35fb9e5e069440", + 1088.0, + 464.0, + 116, + 20 + ], + [ + "2d6ae7a1ff310960", + 133.5, + 488.0, + 43, + 18 + ], + [ + "7fd84f520997cf7d", + 133.5, + 546.5, + 65, + 25 + ], + [ + "b6b771df259caa31", + 138.0, + 588.5, + 76, + 27 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.5, + 43, + 23 + ], + [ + "03163deaa1c82552", + 132.5, + 710.0, + 61, + 20 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ], + "step_036": [ + [ + "5d75012daf614d82", + 504.0, + 30.5, + 910, + 21 + ], + [ + "168adbfb7d2d48b9", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 185.5, + 125.5, + 301, + 21 + ], + [ + "9c8c45530dc94d6a", + 444.5, + 126.5, + 149, + 17 + ], + [ + "970f1aa1fffa9af3", + 143.0, + 157.0, + 70, + 20 + ], + [ + "f8f9528a9fe385a5", + 706.0, + 157.0, + 116, + 20 + ], + [ + "07393f1c1ab28853", + 127.5, + 192.5, + 43, + 27 + ], + [ + "f329c8b460accfb9", + 670.5, + 192.0, + 51, + 24 + ], + [ + "f9394c522d837471", + 157.0, + 231.0, + 98, + 20 + ], + [ + "ee3677efe8c70157", + 680.5, + 231.0, + 69, + 26 + ], + [ + "1c67ee3e08858fac", + 138.5, + 270.0, + 63, + 24 + ], + [ + "1966373c53a5e53a", + 706.5, + 269.5, + 121, + 25 + ], + [ + "1d0ef0194a2f7704", + 183.5, + 308.5, + 151, + 25 + ], + [ + "e1f015cc98df0983", + 717.0, + 308.0, + 140, + 20 + ], + [ + "52f7e24847d800b6", + 160.0, + 343.5, + 104, + 23 + ], + [ + "2ab7729aa68f6d83", + 696.0, + 343.0, + 100, + 26 + ], + [ + "db019276a72b1ea5", + 162.0, + 378.5, + 108, + 23 + ], + [ + "718ecc2d878d965c", + 702.0, + 378.5, + 110, + 23 + ], + [ + "531d97c59d0a0007", + 163.0, + 414.0, + 108, + 20 + ], + [ + "4d87b462cbd40ebb", + 180.5, + 462.5, + 137, + 19 + ], + [ + "df35fb9e5e069440", + 1088.0, + 464.0, + 116, + 20 + ], + [ + "2d6ae7a1ff310960", + 133.5, + 488.0, + 43, + 18 + ], + [ + "7fd84f520997cf7d", + 133.5, + 546.5, + 65, + 25 + ], + [ + "b6b771df259caa31", + 138.0, + 588.5, + 76, + 27 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.5, + 43, + 23 + ], + [ + "03163deaa1c82552", + 132.5, + 711.0, + 61, + 20 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ], + "step_039": [ + [ + "5d75012daf614d82", + 504.0, + 30.5, + 910, + 21 + ], + [ + "168adbfb7d2d48b9", + 1056.5, + 32.0, + 153, + 20 + ], + [ + "9337756da4138906", + 185.5, + 125.5, + 301, + 21 + ], + [ + "9c8c45530dc94d6a", + 444.5, + 126.5, + 149, + 17 + ], + [ + "970f1aa1fffa9af3", + 143.0, + 157.0, + 70, + 20 + ], + [ + "f8f9528a9fe385a5", + 706.0, + 157.0, + 116, + 20 + ], + [ + "07393f1c1ab28853", + 127.5, + 192.5, + 43, + 27 + ], + [ + "f329c8b460accfb9", + 670.5, + 192.0, + 51, + 24 + ], + [ + "f9394c522d837471", + 157.0, + 231.0, + 98, + 20 + ], + [ + "ee3677efe8c70157", + 680.5, + 231.0, + 69, + 26 + ], + [ + "1c67ee3e08858fac", + 138.5, + 270.0, + 63, + 24 + ], + [ + "4ab15f283ae4e3bb", + 431.0, + 275.5, + 78, + 21 + ], + [ + "1966373c53a5e53a", + 706.5, + 269.5, + 121, + 25 + ], + [ + "1d0ef0194a2f7704", + 183.5, + 308.5, + 151, + 25 + ], + [ + "e1f015cc98df0983", + 717.0, + 308.0, + 140, + 20 + ], + [ + "52f7e24847d800b6", + 160.0, + 343.5, + 104, + 23 + ], + [ + "2ab7729aa68f6d83", + 696.0, + 343.0, + 100, + 26 + ], + [ + "db019276a72b1ea5", + 162.0, + 378.5, + 108, + 23 + ], + [ + "718ecc2d878d965c", + 702.0, + 378.5, + 110, + 23 + ], + [ + "531d97c59d0a0007", + 163.0, + 414.0, + 108, + 20 + ], + [ + "4d87b462cbd40ebb", + 180.5, + 462.5, + 137, + 19 + ], + [ + "df35fb9e5e069440", + 1088.0, + 464.0, + 116, + 20 + ], + [ + "2d6ae7a1ff310960", + 133.5, + 488.0, + 43, + 18 + ], + [ + "7fd84f520997cf7d", + 133.5, + 546.5, + 65, + 25 + ], + [ + "b6b771df259caa31", + 138.0, + 588.5, + 76, + 27 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.5, + 43, + 23 + ], + [ + "03163deaa1c82552", + 132.5, + 711.0, + 61, + 20 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ], + "step_040": [ + [ + "2d609c54e30e7f2f", + 127.0, + 30.5, + 150, + 17 + ], + [ + "43279a24ae50b77e", + 1103.5, + 33.0, + 59, + 20 + ], + [ + "f02204ea463723a8", + 1025.5, + 60.0, + 65, + 20 + ], + [ + "7e3b121b4ec18324", + 106.0, + 126.5, + 138, + 17 + ], + [ + "ea58ee73ce79d870", + 559.5, + 121.5, + 57, + 17 + ], + [ + "5fe3d3c923805f9a", + 910.5, + 121.5, + 51, + 17 + ], + [ + "2a34a72e9f8a7865", + 993.5, + 121.5, + 55, + 19 + ], + [ + "649147251c6c65e3", + 238.0, + 138.0, + 30, + 18 + ], + [ + "248bc0403e27ced8", + 988.0, + 138.0, + 46, + 20 + ], + [ + "970f1aa1fffa9af3", + 143.0, + 157.0, + 70, + 20 + ], + [ + "07393f1c1ab28853", + 127.5, + 192.5, + 43, + 27 + ], + [ + "7cd384290d5e961a", + 305.0, + 183.0, + 162, + 26 + ], + [ + "05fe958e3b2c5238", + 254.0, + 208.0, + 62, + 24 + ], + [ + "f9394c522d837471", + 156.0, + 231.0, + 94, + 20 + ], + [ + "1c67ee3e08858fac", + 138.5, + 270.0, + 63, + 24 + ], + [ + "5cecbedb1bc5fe43", + 600.5, + 280.0, + 207, + 24 + ], + [ + "bf9783d9e97c26ce", + 756.0, + 280.0, + 58, + 24 + ], + [ + "16e8d4dc975015e4", + 157.5, + 309.5, + 101, + 27 + ], + [ + "52f7e24847d800b6", + 157.5, + 343.5, + 99, + 23 + ], + [ + "db019276a72b1ea5", + 156.5, + 378.5, + 97, + 23 + ], + [ + "9733a4ae9469d443", + 1113.0, + 385.0, + 74, + 20 + ], + [ + "957380e91fb9316d", + 157.0, + 414.0, + 96, + 20 + ], + [ + "173b55f2af94d353", + 159.0, + 463.5, + 92, + 17 + ], + [ + "4935da62cb10b630", + 1111.5, + 464.0, + 71, + 20 + ], + [ + "2d6ae7a1ff310960", + 133.5, + 488.0, + 45, + 18 + ], + [ + "7fd84f520997cf7d", + 133.5, + 546.5, + 65, + 23 + ], + [ + "b6b771df259caa31", + 138.5, + 588.5, + 73, + 21 + ], + [ + "1d43db84ffaec54e", + 122.5, + 629.0, + 45, + 24 + ], + [ + "59f0aadb9257fd32", + 120.5, + 669.0, + 43, + 24 + ], + [ + "03163deaa1c82552", + 132.0, + 711.0, + 58, + 18 + ], + [ + "19ea440470e738fd", + 152.0, + 772.5, + 58, + 21 + ], + [ + "86e79a41ae1f6379", + 298.0, + 773.0, + 144, + 20 + ] + ] + } + }, + "schema": "openadapt.layout-fingerprints/v1", + "steps": { + "step_000": { + "char_width": 8.472222222222221, + "landmarks": {}, + "lines": 38, + "profile_sha256": null, + "text_height": 22.0, + "viewport": [ + 1280, + 800 + ] + }, + "step_003": { + "char_width": 8.5, + "landmarks": {}, + "lines": 39, + "profile_sha256": null, + "text_height": 22, + "viewport": [ + 1280, + 800 + ] + }, + "step_006": { + "char_width": 8.555555555555555, + "landmarks": {}, + "lines": 39, + "profile_sha256": null, + "text_height": 22, + "viewport": [ + 1280, + 800 + ] + }, + "step_009": { + "char_width": 8.5, + "landmarks": {}, + "lines": 39, + "profile_sha256": null, + "text_height": 22, + "viewport": [ + 1280, + 800 + ] + }, + "step_012": { + "char_width": 8.633333333333333, + "landmarks": {}, + "lines": 46, + "profile_sha256": null, + "text_height": 21.0, + "viewport": [ + 1280, + 800 + ] + }, + "step_016": { + "char_width": 8.75, + "landmarks": {}, + "lines": 31, + "profile_sha256": null, + "text_height": 21, + "viewport": [ + 1280, + 800 + ] + }, + "step_018": { + "char_width": 9.0, + "landmarks": {}, + "lines": 33, + "profile_sha256": null, + "text_height": 21, + "viewport": [ + 1280, + 800 + ] + }, + "step_021": { + "char_width": 9.0, + "landmarks": {}, + "lines": 34, + "profile_sha256": null, + "text_height": 21.0, + "viewport": [ + 1280, + 800 + ] + }, + "step_024": { + "char_width": 9.0, + "landmarks": {}, + "lines": 35, + "profile_sha256": null, + "text_height": 21, + "viewport": [ + 1280, + 800 + ] + }, + "step_027": { + "char_width": 9.0, + "landmarks": {}, + "lines": 36, + "profile_sha256": null, + "text_height": 21.0, + "viewport": [ + 1280, + 800 + ] + }, + "step_030": { + "char_width": 9.0, + "landmarks": {}, + "lines": 36, + "profile_sha256": null, + "text_height": 21.0, + "viewport": [ + 1280, + 800 + ] + }, + "step_033": { + "char_width": 9.0, + "landmarks": {}, + "lines": 37, + "profile_sha256": null, + "text_height": 21, + "viewport": [ + 1280, + 800 + ] + }, + "step_036": { + "char_width": 9.0, + "landmarks": {}, + "lines": 39, + "profile_sha256": null, + "text_height": 21, + "viewport": [ + 1280, + 800 + ] + }, + "step_039": { + "char_width": 9.0, + "landmarks": {}, + "lines": 40, + "profile_sha256": null, + "text_height": 20.5, + "viewport": [ + 1280, + 800 + ] + }, + "step_040": { + "char_width": 9.0, + "landmarks": {}, + "lines": 41, + "profile_sha256": null, + "text_height": 20, + "viewport": [ + 1280, + 800 + ] + } + } +} diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_000.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_000.png new file mode 100644 index 000000000..8435371ec Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_000.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_000_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_000_expect.png new file mode 100644 index 000000000..ceec49af2 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_000_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_003.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_003.png new file mode 100644 index 000000000..82f8d0b86 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_003.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_003_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_003_expect.png new file mode 100644 index 000000000..bd732ea2b Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_003_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_006.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_006.png new file mode 100644 index 000000000..f5b0f3087 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_006.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_006_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_006_expect.png new file mode 100644 index 000000000..9bc16b784 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_006_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_009.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_009.png new file mode 100644 index 000000000..877819030 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_009.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_009_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_009_expect.png new file mode 100644 index 000000000..874b0eb4e Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_009_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_012.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_012.png new file mode 100644 index 000000000..eea382138 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_012.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_012_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_012_expect.png new file mode 100644 index 000000000..bfa2011ff Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_012_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_016.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_016.png new file mode 100644 index 000000000..9ad632eb8 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_016.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_016_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_016_expect.png new file mode 100644 index 000000000..41971b7bb Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_016_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_018.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_018.png new file mode 100644 index 000000000..608442167 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_018.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_018_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_018_expect.png new file mode 100644 index 000000000..2930f7953 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_018_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_021.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_021.png new file mode 100644 index 000000000..ae6f6b77c Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_021.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_021_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_021_expect.png new file mode 100644 index 000000000..cdeb30cee Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_021_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_024.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_024.png new file mode 100644 index 000000000..852f3e6fd Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_024.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_024_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_024_expect.png new file mode 100644 index 000000000..1a503340f Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_024_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_027.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_027.png new file mode 100644 index 000000000..9fae963d2 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_027.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_027_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_027_expect.png new file mode 100644 index 000000000..c6bdd0ff3 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_027_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_030.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_030.png new file mode 100644 index 000000000..1c62f1931 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_030.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_030_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_030_expect.png new file mode 100644 index 000000000..8f321d693 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_030_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_033.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_033.png new file mode 100644 index 000000000..69694ef60 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_033.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_033_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_033_expect.png new file mode 100644 index 000000000..58f9927e6 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_033_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_036.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_036.png new file mode 100644 index 000000000..63eb6df7a Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_036.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_036_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_036_expect.png new file mode 100644 index 000000000..96aab9514 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_036_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_039.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_039.png new file mode 100644 index 000000000..95c811966 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_039.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_039_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_039_expect.png new file mode 100644 index 000000000..382842963 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_039_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_040.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_040.png new file mode 100644 index 000000000..918bb8f54 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_040.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_040_expect.png b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_040_expect.png new file mode 100644 index 000000000..77a6cdaf3 Binary files /dev/null and b/packages/flow/benchmark/openemr_local/referral_program/program/templates/step_040_expect.png differ diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/workflow.json b/packages/flow/benchmark/openemr_local/referral_program/program/workflow.json new file mode 100644 index 000000000..2c7d7f55e --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/program/workflow.json @@ -0,0 +1,14395 @@ +{ + "schema_version": 2, + "name": "openemr-create-synthetic-patient", + "recording_id": "243fb7853b228a2e0fd93c51c1d43e7b84fff567f1aac917bdcd91a54d044894", + "contains_phi": false, + "phi_scrubbed": false, + "encrypted": false, + "created_at": "2026-10-20T02:34:27.691432+00:00", + "viewport": [ + 1280, + 800 + ], + "params": { + "title": "Ms.", + "fname": "OpenAdapt", + "lname": "LoanParity", + "DOB": "1985-02-03", + "sex": "Female", + "street": "101 SYNTHETIC WAY", + "city": "EXAMPLETON", + "state_label": "Massachusetts", + "postal_code": "02139", + "phone_home": "555-0107", + "email": "openadapt.loan-parity@example.invalid", + "country_code": "USA" + }, + "param_specs": { + "title": { + "name": "title", + "type": "string", + "example": "Ms.", + "required": true, + "choices": [] + }, + "fname": { + "name": "fname", + "type": "string", + "example": "OpenAdapt", + "required": true, + "choices": [] + }, + "lname": { + "name": "lname", + "type": "string", + "example": "LoanParity", + "required": true, + "choices": [] + }, + "DOB": { + "name": "DOB", + "type": "string", + "example": "1985-02-03", + "required": true, + "choices": [] + }, + "sex": { + "name": "sex", + "type": "string", + "example": "Female", + "required": true, + "choices": [] + }, + "street": { + "name": "street", + "type": "string", + "example": "101 SYNTHETIC WAY", + "required": true, + "choices": [] + }, + "city": { + "name": "city", + "type": "string", + "example": "EXAMPLETON", + "required": true, + "choices": [] + }, + "state_label": { + "name": "state_label", + "type": "string", + "example": "Massachusetts", + "required": true, + "choices": [] + }, + "postal_code": { + "name": "postal_code", + "type": "string", + "example": "02139", + "required": true, + "choices": [] + }, + "phone_home": { + "name": "phone_home", + "type": "string", + "example": "555-0107", + "required": true, + "choices": [] + }, + "email": { + "name": "email", + "type": "string", + "example": "openadapt.loan-parity@example.invalid", + "required": true, + "choices": [] + }, + "country_code": { + "name": "country_code", + "type": "string", + "example": "USA", + "required": true, + "choices": [] + } + }, + "secret_params": [], + "steps": [ + { + "id": "step_000", + "intent": "click 'Unassigned'", + "action": "click", + "anchor": { + "template": "templates/step_000.png", + "structural": { + "selector": "#form_title", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "combobox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 354, + 250, + 160, + 64 + ], + "click_point": [ + 434, + 282 + ], + "ocr_text": "Unassigned", + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 0, + "tokens": [], + "concats": [], + "structured": "2c80415fb9e6eecb", + "signal_hashes": { + "structured|exact|": "2c80415fb9e6eecbc141875ecbe0296c78ed8e8e17856b98050665d9117228c2", + "structured|normalized|unicode_nfkc": "2c80415fb9e6eecbc141875ecbe0296c78ed8e8e17856b98050665d9117228c2", + "structured|normalized|casefold": "2c80415fb9e6eecbc141875ecbe0296c78ed8e8e17856b98050665d9117228c2", + "structured|normalized|collapse_whitespace": "2c80415fb9e6eecbc141875ecbe0296c78ed8e8e17856b98050665d9117228c2", + "structured|normalized|strip_punctuation": "9546f07f71a006967bd43657c0605985056b7d56a20a33bc7a254e4ae0f7e75c", + "structured|normalized|unicode_nfkc,casefold": "2c80415fb9e6eecbc141875ecbe0296c78ed8e8e17856b98050665d9117228c2", + "structured|normalized|unicode_nfkc,collapse_whitespace": "2c80415fb9e6eecbc141875ecbe0296c78ed8e8e17856b98050665d9117228c2", + "structured|normalized|unicode_nfkc,strip_punctuation": "9546f07f71a006967bd43657c0605985056b7d56a20a33bc7a254e4ae0f7e75c", + "structured|normalized|casefold,collapse_whitespace": "2c80415fb9e6eecbc141875ecbe0296c78ed8e8e17856b98050665d9117228c2", + "structured|normalized|casefold,strip_punctuation": "9546f07f71a006967bd43657c0605985056b7d56a20a33bc7a254e4ae0f7e75c", + "structured|normalized|collapse_whitespace,strip_punctuation": "9546f07f71a006967bd43657c0605985056b7d56a20a33bc7a254e4ae0f7e75c", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "2c80415fb9e6eecbc141875ecbe0296c78ed8e8e17856b98050665d9117228c2", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "9546f07f71a006967bd43657c0605985056b7d56a20a33bc7a254e4ae0f7e75c", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "9546f07f71a006967bd43657c0605985056b7d56a20a33bc7a254e4ae0f7e75c", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "9546f07f71a006967bd43657c0605985056b7d56a20a33bc7a254e4ae0f7e75c", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "9546f07f71a006967bd43657c0605985056b7d56a20a33bc7a254e4ae0f7e75c" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "below", + "ocr_text": "Birth First Name", + "distance_px": 111, + "dx_px": -6, + "dy_px": -111 + }, + { + "relation": "right_of", + "ocr_text": "Middle", + "distance_px": 115, + "dx_px": -109, + "dy_px": -36 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 346, + 233, + 176, + 99 + ], + "phash": "8b746995dc63344b", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_000_expect.png" + }, + { + "kind": "text_present", + "text": "CalendarFinderFlowRecallsMessagesPatientFeesModulesProceduresAdminReportsMiscellaneousPopups", + "region": null, + "phash": null, + "phash_tolerance": 8, + "timeout_s": 5.0, + "template": null + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_001", + "intent": "type ", + "action": "type", + "anchor": null, + "text": "Ms.", + "param": "title", + "secret": false, + "field_label": "form_title", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_003", + "intent": "click 'First Name'", + "action": "click", + "anchor": { + "template": "templates/step_003.png", + "structural": { + "selector": "#form_fname", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "textbox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 364, + 296, + 160, + 50 + ], + "click_point": [ + 444, + 317 + ], + "ocr_text": "First Name", + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 17, + "tokens": [ + { + "c": "eeb9d3a0fa15f93d", + "r": "eeb9d3a0fa15f93d", + "n": 5, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "e515769d08d2c0bb", + "r": "e515769d08d2c0bb", + "n": 4, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "ee7decccd95cff4b", + "r": "ee7decccd95cff4b", + "n": 4, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "ee7decccd95cff4b", + "r": "ee7decccd95cff4b", + "n": 4, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "ebec9ee944632ee8", + "r": "ebec9ee944632ee8", + "digit": false, + "name": true, + "n": 9 + }, + { + "i": 0, + "size": 3, + "c": "d88ac00eae04530d", + "r": "d88ac00eae04530d", + "digit": false, + "name": true, + "n": 13 + }, + { + "i": 0, + "size": 4, + "c": "cb2a55af67be6486", + "r": "cb2a55af67be6486", + "digit": false, + "name": true, + "n": 17 + }, + { + "i": 1, + "size": 2, + "c": "5011f1bd8c17f868", + "r": "5011f1bd8c17f868", + "digit": false, + "name": true, + "n": 8 + }, + { + "i": 1, + "size": 3, + "c": "8d12ada2a9ced771", + "r": "8d12ada2a9ced771", + "digit": false, + "name": true, + "n": 12 + }, + { + "i": 2, + "size": 2, + "c": "7b2340a53ec8ad17", + "r": "7b2340a53ec8ad17", + "digit": false, + "name": true, + "n": 8 + } + ], + "structured": "dc6fd87a801b4b3f", + "signal_hashes": { + "structured|exact|": "dc6fd87a801b4b3f38327edeb01d7716a6a6ac921c54a3abe3ce4d6c831254c1", + "structured|normalized|unicode_nfkc": "dc6fd87a801b4b3f38327edeb01d7716a6a6ac921c54a3abe3ce4d6c831254c1", + "structured|normalized|casefold": "dc6fd87a801b4b3f38327edeb01d7716a6a6ac921c54a3abe3ce4d6c831254c1", + "structured|normalized|collapse_whitespace": "dc6fd87a801b4b3f38327edeb01d7716a6a6ac921c54a3abe3ce4d6c831254c1", + "structured|normalized|strip_punctuation": "076e4d01eec8b7cc78559e1cc5a20577d28ca3317860cb4b9dec07d41b480dec", + "structured|normalized|unicode_nfkc,casefold": "dc6fd87a801b4b3f38327edeb01d7716a6a6ac921c54a3abe3ce4d6c831254c1", + "structured|normalized|unicode_nfkc,collapse_whitespace": "dc6fd87a801b4b3f38327edeb01d7716a6a6ac921c54a3abe3ce4d6c831254c1", + "structured|normalized|unicode_nfkc,strip_punctuation": "076e4d01eec8b7cc78559e1cc5a20577d28ca3317860cb4b9dec07d41b480dec", + "structured|normalized|casefold,collapse_whitespace": "dc6fd87a801b4b3f38327edeb01d7716a6a6ac921c54a3abe3ce4d6c831254c1", + "structured|normalized|casefold,strip_punctuation": "076e4d01eec8b7cc78559e1cc5a20577d28ca3317860cb4b9dec07d41b480dec", + "structured|normalized|collapse_whitespace,strip_punctuation": "076e4d01eec8b7cc78559e1cc5a20577d28ca3317860cb4b9dec07d41b480dec", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "dc6fd87a801b4b3f38327edeb01d7716a6a6ac921c54a3abe3ce4d6c831254c1", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "076e4d01eec8b7cc78559e1cc5a20577d28ca3317860cb4b9dec07d41b480dec", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "076e4d01eec8b7cc78559e1cc5a20577d28ca3317860cb4b9dec07d41b480dec", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "076e4d01eec8b7cc78559e1cc5a20577d28ca3317860cb4b9dec07d41b480dec", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "076e4d01eec8b7cc78559e1cc5a20577d28ca3317860cb4b9dec07d41b480dec", + "captured_context|exact|": "be97ebbcecf11a81e28a3b8099e6190a135549f25a2fe31486b88cd951dffb01", + "captured_context|normalized|unicode_nfkc": "be97ebbcecf11a81e28a3b8099e6190a135549f25a2fe31486b88cd951dffb01", + "captured_context|normalized|casefold": "3cb82c431448856d5eb773402efce2029630a432b9877d1b41d71794cf630df9", + "captured_context|normalized|collapse_whitespace": "be97ebbcecf11a81e28a3b8099e6190a135549f25a2fe31486b88cd951dffb01", + "captured_context|normalized|strip_punctuation": "3febd20812d468248fc58eb5c4f7e928d35efcc35b52af57b9afd98ec5ac411b", + "captured_context|normalized|unicode_nfkc,casefold": "3cb82c431448856d5eb773402efce2029630a432b9877d1b41d71794cf630df9", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "be97ebbcecf11a81e28a3b8099e6190a135549f25a2fe31486b88cd951dffb01", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "3febd20812d468248fc58eb5c4f7e928d35efcc35b52af57b9afd98ec5ac411b", + "captured_context|normalized|casefold,collapse_whitespace": "3cb82c431448856d5eb773402efce2029630a432b9877d1b41d71794cf630df9", + "captured_context|normalized|casefold,strip_punctuation": "b0b95d713e3a141a69a79cc59d73a98a0ee1e96e430f733eb9e306771b1a7be9", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "3febd20812d468248fc58eb5c4f7e928d35efcc35b52af57b9afd98ec5ac411b", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "3cb82c431448856d5eb773402efce2029630a432b9877d1b41d71794cf630df9", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "b0b95d713e3a141a69a79cc59d73a98a0ee1e96e430f733eb9e306771b1a7be9", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "3febd20812d468248fc58eb5c4f7e928d35efcc35b52af57b9afd98ec5ac411b", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "b0b95d713e3a141a69a79cc59d73a98a0ee1e96e430f733eb9e306771b1a7be9", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "b0b95d713e3a141a69a79cc59d73a98a0ee1e96e430f733eb9e306771b1a7be9" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "below", + "ocr_text": "Birth First Name", + "distance_px": 76, + "dx_px": 4, + "dy_px": -76 + }, + { + "relation": "right_of", + "ocr_text": "Middle", + "distance_px": 124, + "dx_px": -99, + "dy_px": -75 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 346, + 300, + 197, + 67 + ], + "phash": "8969b532b2b3e88b", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_003_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_005", + "intent": "type <fname>", + "action": "type", + "anchor": null, + "text": "OpenAdapt", + "param": "fname", + "secret": false, + "field_label": "First Name", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_006", + "intent": "click 'Last Name'", + "action": "click", + "anchor": { + "template": "templates/step_006.png", + "structural": { + "selector": "#form_lname", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "textbox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 591, + 285, + 160, + 61 + ], + "click_point": [ + 671, + 317 + ], + "ocr_text": "Last Name", + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 24, + "tokens": [ + { + "c": "eeb9d3a0fa15f93d", + "r": "eeb9d3a0fa15f93d", + "n": 5, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "e7540eec51e7c97e", + "r": "e7540eec51e7c97e", + "n": 9, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "5c01d1993588c4cf", + "r": "77bf4c145c69a2ce", + "n": 6, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "ee7decccd95cff4b", + "r": "ee7decccd95cff4b", + "n": 4, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "3b24ba72c2b197b4", + "r": "3b24ba72c2b197b4", + "digit": false, + "name": true, + "n": 14 + }, + { + "i": 0, + "size": 3, + "c": "4e8237f169e71794", + "r": "79ddc537687bcdb0", + "digit": false, + "name": true, + "n": 20 + }, + { + "i": 0, + "size": 4, + "c": "a3115ef4d9a8bba8", + "r": "1d13762c70c14b7e", + "digit": false, + "name": true, + "n": 24 + }, + { + "i": 1, + "size": 2, + "c": "b7ba3504ee34661e", + "r": "dac6ce54d23bee4a", + "digit": false, + "name": true, + "n": 15 + }, + { + "i": 1, + "size": 3, + "c": "a1ea24f284b2d142", + "r": "9021446ef8f61b92", + "digit": false, + "name": true, + "n": 19 + }, + { + "i": 2, + "size": 2, + "c": "b9e88ac828a10f35", + "r": "05a14a0fea22092c", + "digit": false, + "name": true, + "n": 10 + } + ], + "structured": "4ba12b4bb5a07d80", + "signal_hashes": { + "structured|exact|": "4ba12b4bb5a07d809678d53984aeddf600d0be71557ed542a2c244b3306dcff2", + "structured|normalized|unicode_nfkc": "4ba12b4bb5a07d809678d53984aeddf600d0be71557ed542a2c244b3306dcff2", + "structured|normalized|casefold": "4ba12b4bb5a07d809678d53984aeddf600d0be71557ed542a2c244b3306dcff2", + "structured|normalized|collapse_whitespace": "4ba12b4bb5a07d809678d53984aeddf600d0be71557ed542a2c244b3306dcff2", + "structured|normalized|strip_punctuation": "85375807f26b850904d3e2cb51ddda31327246b27fc4ece76cfac931a678cc6d", + "structured|normalized|unicode_nfkc,casefold": "4ba12b4bb5a07d809678d53984aeddf600d0be71557ed542a2c244b3306dcff2", + "structured|normalized|unicode_nfkc,collapse_whitespace": "4ba12b4bb5a07d809678d53984aeddf600d0be71557ed542a2c244b3306dcff2", + "structured|normalized|unicode_nfkc,strip_punctuation": "85375807f26b850904d3e2cb51ddda31327246b27fc4ece76cfac931a678cc6d", + "structured|normalized|casefold,collapse_whitespace": "4ba12b4bb5a07d809678d53984aeddf600d0be71557ed542a2c244b3306dcff2", + "structured|normalized|casefold,strip_punctuation": "85375807f26b850904d3e2cb51ddda31327246b27fc4ece76cfac931a678cc6d", + "structured|normalized|collapse_whitespace,strip_punctuation": "85375807f26b850904d3e2cb51ddda31327246b27fc4ece76cfac931a678cc6d", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "4ba12b4bb5a07d809678d53984aeddf600d0be71557ed542a2c244b3306dcff2", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "85375807f26b850904d3e2cb51ddda31327246b27fc4ece76cfac931a678cc6d", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "85375807f26b850904d3e2cb51ddda31327246b27fc4ece76cfac931a678cc6d", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "85375807f26b850904d3e2cb51ddda31327246b27fc4ece76cfac931a678cc6d", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "85375807f26b850904d3e2cb51ddda31327246b27fc4ece76cfac931a678cc6d", + "captured_context|exact|": "3bfb3aab2912fc7df70a2f3fc1a93f24cac4247c5d88ad6d8ae5d2d70fc7a2a5", + "captured_context|normalized|unicode_nfkc": "3bfb3aab2912fc7df70a2f3fc1a93f24cac4247c5d88ad6d8ae5d2d70fc7a2a5", + "captured_context|normalized|casefold": "3f03031e690db07d20ec649737fa35a9ca52784fdfd2e4e1d7f34f4e0ee4a93e", + "captured_context|normalized|collapse_whitespace": "3bfb3aab2912fc7df70a2f3fc1a93f24cac4247c5d88ad6d8ae5d2d70fc7a2a5", + "captured_context|normalized|strip_punctuation": "0d5e67279dbc7892ce3d7c194a7f5df6d1b8ff2563994bf8f27d05a94f03e0ca", + "captured_context|normalized|unicode_nfkc,casefold": "3f03031e690db07d20ec649737fa35a9ca52784fdfd2e4e1d7f34f4e0ee4a93e", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "3bfb3aab2912fc7df70a2f3fc1a93f24cac4247c5d88ad6d8ae5d2d70fc7a2a5", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "0d5e67279dbc7892ce3d7c194a7f5df6d1b8ff2563994bf8f27d05a94f03e0ca", + "captured_context|normalized|casefold,collapse_whitespace": "3f03031e690db07d20ec649737fa35a9ca52784fdfd2e4e1d7f34f4e0ee4a93e", + "captured_context|normalized|casefold,strip_punctuation": "e7f983e1d6726a8762588d4ffe085ac9105b1f63b913c626c2d3f2e903d4d71b", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "0d5e67279dbc7892ce3d7c194a7f5df6d1b8ff2563994bf8f27d05a94f03e0ca", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "3f03031e690db07d20ec649737fa35a9ca52784fdfd2e4e1d7f34f4e0ee4a93e", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "e7f983e1d6726a8762588d4ffe085ac9105b1f63b913c626c2d3f2e903d4d71b", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "0d5e67279dbc7892ce3d7c194a7f5df6d1b8ff2563994bf8f27d05a94f03e0ca", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "e7f983e1d6726a8762588d4ffe085ac9105b1f63b913c626c2d3f2e903d4d71b", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "e7f983e1d6726a8762588d4ffe085ac9105b1f63b913c626c2d3f2e903d4d71b" + }, + "context_params": [ + "fname" + ], + "param_token_indices": { + "fname": [ + 1 + ] + }, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "below", + "ocr_text": "Birth Last Name", + "distance_px": 79, + "dx_px": 22, + "dy_px": -76 + }, + { + "relation": "below", + "ocr_text": "BirthSex:", + "distance_px": 109, + "dx_px": -13, + "dy_px": -108 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 555, + 268, + 232, + 99 + ], + "phash": "eb0c710eee7190c7", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_006_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_008", + "intent": "type <lname>", + "action": "type", + "anchor": null, + "text": "LoanParity", + "param": "lname", + "secret": false, + "field_label": "Last Name", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_009", + "intent": "click recorded visual target", + "action": "click", + "anchor": { + "template": "templates/step_009.png", + "structural": { + "selector": "#form_DOB", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "textbox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 347, + 398, + 160, + 64 + ], + "click_point": [ + 427, + 430 + ], + "ocr_text": null, + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 23, + "tokens": [ + { + "c": "59b0781d700a616a", + "r": "59b0781d700a616a", + "n": 4, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "f47e46f566cd8b97", + "r": "a66563dae5451734", + "n": 9, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "ba40d92b166d9054", + "r": "1d65b97bbb1f20ff", + "n": 10, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "89af95af52c394aa", + "r": "7e4fb6bf4cbe0ba8", + "digit": false, + "name": true, + "n": 13 + }, + { + "i": 0, + "size": 3, + "c": "04e1c6b10676d82a", + "r": "f035f843fa708739", + "digit": false, + "name": true, + "n": 23 + }, + { + "i": 1, + "size": 2, + "c": "b41bafb1568b20ca", + "r": "f991ea26a7716f08", + "digit": false, + "name": true, + "n": 19 + } + ], + "structured": "687ed7ecfa518ef3", + "signal_hashes": { + "structured|exact|": "5ac6b8965be938450e2a92acd10c9b4532266d2ecf70aaf7037eb1eadc304cfd", + "structured|normalized|unicode_nfkc": "5ac6b8965be938450e2a92acd10c9b4532266d2ecf70aaf7037eb1eadc304cfd", + "structured|normalized|casefold": "687ed7ecfa518ef3e18340e0f16a2ca4a3075840346dd39811d62e30c96080e4", + "structured|normalized|collapse_whitespace": "5ac6b8965be938450e2a92acd10c9b4532266d2ecf70aaf7037eb1eadc304cfd", + "structured|normalized|strip_punctuation": "4d7e44668b38646d81137fff64d6b5900bc7a7624d7033732125fc47bc8f4414", + "structured|normalized|unicode_nfkc,casefold": "687ed7ecfa518ef3e18340e0f16a2ca4a3075840346dd39811d62e30c96080e4", + "structured|normalized|unicode_nfkc,collapse_whitespace": "5ac6b8965be938450e2a92acd10c9b4532266d2ecf70aaf7037eb1eadc304cfd", + "structured|normalized|unicode_nfkc,strip_punctuation": "4d7e44668b38646d81137fff64d6b5900bc7a7624d7033732125fc47bc8f4414", + "structured|normalized|casefold,collapse_whitespace": "687ed7ecfa518ef3e18340e0f16a2ca4a3075840346dd39811d62e30c96080e4", + "structured|normalized|casefold,strip_punctuation": "9827fb8d6150b26a6c67048caf723b7a3c1e7d63f9e099a69d01d19adf5f0774", + "structured|normalized|collapse_whitespace,strip_punctuation": "4d7e44668b38646d81137fff64d6b5900bc7a7624d7033732125fc47bc8f4414", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "687ed7ecfa518ef3e18340e0f16a2ca4a3075840346dd39811d62e30c96080e4", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "9827fb8d6150b26a6c67048caf723b7a3c1e7d63f9e099a69d01d19adf5f0774", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "4d7e44668b38646d81137fff64d6b5900bc7a7624d7033732125fc47bc8f4414", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "9827fb8d6150b26a6c67048caf723b7a3c1e7d63f9e099a69d01d19adf5f0774", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "9827fb8d6150b26a6c67048caf723b7a3c1e7d63f9e099a69d01d19adf5f0774", + "captured_context|exact|": "139fedba4467614587a219b5092fd98e6b1da0d9ba2bfe4de20d9aa34c477f79", + "captured_context|normalized|unicode_nfkc": "139fedba4467614587a219b5092fd98e6b1da0d9ba2bfe4de20d9aa34c477f79", + "captured_context|normalized|casefold": "9057614fcbcb873a4b2a9d66c3826936ecde9fa20272bca49bb07c0fe67bad28", + "captured_context|normalized|collapse_whitespace": "139fedba4467614587a219b5092fd98e6b1da0d9ba2bfe4de20d9aa34c477f79", + "captured_context|normalized|strip_punctuation": "92bf8512e6621ed600dcb7347883c4b873559749aac24fcb61d871cd135f2cad", + "captured_context|normalized|unicode_nfkc,casefold": "9057614fcbcb873a4b2a9d66c3826936ecde9fa20272bca49bb07c0fe67bad28", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "139fedba4467614587a219b5092fd98e6b1da0d9ba2bfe4de20d9aa34c477f79", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "92bf8512e6621ed600dcb7347883c4b873559749aac24fcb61d871cd135f2cad", + "captured_context|normalized|casefold,collapse_whitespace": "9057614fcbcb873a4b2a9d66c3826936ecde9fa20272bca49bb07c0fe67bad28", + "captured_context|normalized|casefold,strip_punctuation": "ce4c27bfec4dfaa7a37de3a678c378f73ff6954b934ffe8517c2a8745d5e4d96", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "92bf8512e6621ed600dcb7347883c4b873559749aac24fcb61d871cd135f2cad", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "9057614fcbcb873a4b2a9d66c3826936ecde9fa20272bca49bb07c0fe67bad28", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "ce4c27bfec4dfaa7a37de3a678c378f73ff6954b934ffe8517c2a8745d5e4d96", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "92bf8512e6621ed600dcb7347883c4b873559749aac24fcb61d871cd135f2cad", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "ce4c27bfec4dfaa7a37de3a678c378f73ff6954b934ffe8517c2a8745d5e4d96", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "ce4c27bfec4dfaa7a37de3a678c378f73ff6954b934ffe8517c2a8745d5e4d96" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "below", + "ocr_text": "Unassigned", + "distance_px": 72, + "dx_px": -4, + "dy_px": -72 + }, + { + "relation": "right_of", + "ocr_text": "Middle", + "distance_px": 122, + "dx_px": -116, + "dy_px": 38 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 346, + 381, + 310, + 298 + ], + "phash": "80daeba3a383939b", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_009_expect.png" + }, + { + "kind": "text_present", + "text": "October-2026-", + "region": null, + "phash": null, + "phash_tolerance": 8, + "timeout_s": 5.0, + "template": null + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_011", + "intent": "type <DOB>", + "action": "type", + "anchor": null, + "text": "1985-02-03", + "param": "DOB", + "secret": false, + "field_label": "form_DOB", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_012", + "intent": "click 'Unassigned'", + "action": "click", + "anchor": { + "template": "templates/step_012.png", + "structural": { + "selector": "#form_sex", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "combobox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 892, + 398, + 160, + 64 + ], + "click_point": [ + 972, + 430 + ], + "ocr_text": "Unassigned", + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 23, + "tokens": [ + { + "c": "59b0781d700a616a", + "r": "59b0781d700a616a", + "n": 4, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "461dbf84b117f3bd", + "r": "c58b25207a6c9d90", + "n": 10, + "alpha": false, + "name": false, + "digit": true, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "f47e46f566cd8b97", + "r": "a66563dae5451734", + "n": 9, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "3f93bf596abcd723", + "r": "1c229dbb17325485", + "digit": true, + "name": false, + "n": 14 + }, + { + "i": 0, + "size": 3, + "c": "17b0492af2a9f753", + "r": "8947623da824353c", + "digit": true, + "name": false, + "n": 23 + }, + { + "i": 1, + "size": 2, + "c": "8785d4acf42c1abc", + "r": "7e8d82e9fbc98b91", + "digit": true, + "name": false, + "n": 19 + } + ], + "structured": "b2a45c7bad8c45f1", + "signal_hashes": { + "structured|exact|": "b2a45c7bad8c45f11cbd13f1ab7eec54ce719810d21c86d53db8f18b72da5a50", + "structured|normalized|unicode_nfkc": "b2a45c7bad8c45f11cbd13f1ab7eec54ce719810d21c86d53db8f18b72da5a50", + "structured|normalized|casefold": "b2a45c7bad8c45f11cbd13f1ab7eec54ce719810d21c86d53db8f18b72da5a50", + "structured|normalized|collapse_whitespace": "b2a45c7bad8c45f11cbd13f1ab7eec54ce719810d21c86d53db8f18b72da5a50", + "structured|normalized|strip_punctuation": "56ad42a2f8bf5f78dcf4d4bc3301b1762504bd90b21a28e4fcbace670b12f1bc", + "structured|normalized|unicode_nfkc,casefold": "b2a45c7bad8c45f11cbd13f1ab7eec54ce719810d21c86d53db8f18b72da5a50", + "structured|normalized|unicode_nfkc,collapse_whitespace": "b2a45c7bad8c45f11cbd13f1ab7eec54ce719810d21c86d53db8f18b72da5a50", + "structured|normalized|unicode_nfkc,strip_punctuation": "56ad42a2f8bf5f78dcf4d4bc3301b1762504bd90b21a28e4fcbace670b12f1bc", + "structured|normalized|casefold,collapse_whitespace": "b2a45c7bad8c45f11cbd13f1ab7eec54ce719810d21c86d53db8f18b72da5a50", + "structured|normalized|casefold,strip_punctuation": "56ad42a2f8bf5f78dcf4d4bc3301b1762504bd90b21a28e4fcbace670b12f1bc", + "structured|normalized|collapse_whitespace,strip_punctuation": "56ad42a2f8bf5f78dcf4d4bc3301b1762504bd90b21a28e4fcbace670b12f1bc", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "b2a45c7bad8c45f11cbd13f1ab7eec54ce719810d21c86d53db8f18b72da5a50", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "56ad42a2f8bf5f78dcf4d4bc3301b1762504bd90b21a28e4fcbace670b12f1bc", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "56ad42a2f8bf5f78dcf4d4bc3301b1762504bd90b21a28e4fcbace670b12f1bc", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "56ad42a2f8bf5f78dcf4d4bc3301b1762504bd90b21a28e4fcbace670b12f1bc", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "56ad42a2f8bf5f78dcf4d4bc3301b1762504bd90b21a28e4fcbace670b12f1bc", + "captured_context|exact|": "a7fc66541451c77051f55cca262761ce31ebc40cd600651ad17f3d4905d630a9", + "captured_context|normalized|unicode_nfkc": "a7fc66541451c77051f55cca262761ce31ebc40cd600651ad17f3d4905d630a9", + "captured_context|normalized|casefold": "96b2a4da1f2b2272a8e06b25888a3da1cb0a1954796036004070cd42b3b7cefc", + "captured_context|normalized|collapse_whitespace": "a7fc66541451c77051f55cca262761ce31ebc40cd600651ad17f3d4905d630a9", + "captured_context|normalized|strip_punctuation": "ae14fee7ee91795c2234027a964baabaeeb6c6aa96db50ecd334cc73fef6468e", + "captured_context|normalized|unicode_nfkc,casefold": "96b2a4da1f2b2272a8e06b25888a3da1cb0a1954796036004070cd42b3b7cefc", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "a7fc66541451c77051f55cca262761ce31ebc40cd600651ad17f3d4905d630a9", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "ae14fee7ee91795c2234027a964baabaeeb6c6aa96db50ecd334cc73fef6468e", + "captured_context|normalized|casefold,collapse_whitespace": "96b2a4da1f2b2272a8e06b25888a3da1cb0a1954796036004070cd42b3b7cefc", + "captured_context|normalized|casefold,strip_punctuation": "47f2f3f2fbb8200c3e3446c6cbac6f6844629bfd2a9149f1f1f788965ddb50a5", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "ae14fee7ee91795c2234027a964baabaeeb6c6aa96db50ecd334cc73fef6468e", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "96b2a4da1f2b2272a8e06b25888a3da1cb0a1954796036004070cd42b3b7cefc", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "47f2f3f2fbb8200c3e3446c6cbac6f6844629bfd2a9149f1f1f788965ddb50a5", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "ae14fee7ee91795c2234027a964baabaeeb6c6aa96db50ecd334cc73fef6468e", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "47f2f3f2fbb8200c3e3446c6cbac6f6844629bfd2a9149f1f1f788965ddb50a5", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "47f2f3f2fbb8200c3e3446c6cbac6f6844629bfd2a9149f1f1f788965ddb50a5" + }, + "context_params": [ + "DOB" + ], + "param_token_indices": { + "DOB": [ + 1 + ] + }, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "below", + "ocr_text": "Unassigned", + "distance_px": 72, + "dx_px": 2, + "dy_px": -72 + }, + { + "relation": "below", + "ocr_text": "Unassigned", + "distance_px": 141, + "dx_px": 2, + "dy_px": -141 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 346, + 446, + 310, + 233 + ], + "phash": "c0c391996e3e9ae3", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_012_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_013", + "intent": "type <sex>", + "action": "type", + "anchor": null, + "text": "Female", + "param": "sex", + "secret": false, + "field_label": "form_sex", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_015", + "intent": "scroll by (0, 300)", + "action": "scroll", + "anchor": null, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": 0, + "scroll_dy": 300, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_016", + "intent": "click recorded visual target", + "action": "click", + "anchor": { + "template": "templates/step_016.png", + "structural": { + "selector": null, + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "button", + "name": "Contact", + "automation_id": null, + "window_name": null + }, + "region": [ + 554, + 473, + 160, + 64 + ], + "click_point": [ + 634, + 505 + ], + "ocr_text": null, + "context_text": null, + "structured_identity": null, + "identity_template": null, + "identifier_crop": "templates/identifiers/step_016.png", + "identifier_region": [ + 554, + 473, + 160, + 64 + ], + "landmarks": [ + { + "relation": "above", + "ocr_text": "Marital Status:", + "distance_px": 229, + "dx_px": -67, + "dy_px": 219 + }, + { + "relation": "above", + "ocr_text": "Pronouns:", + "distance_px": 294, + "dx_px": -52, + "dy_px": 289 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 53, + 452, + 1160, + 348 + ], + "phash": "8d025ad2a695cf9d", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_016_expect.png" + }, + { + "kind": "text_present", + "text": "Address Line 2:", + "region": null, + "phash": null, + "phash_tolerance": 8, + "timeout_s": 5.0, + "template": null + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_017", + "intent": "scroll by (0, 600)", + "action": "scroll", + "anchor": null, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": 0, + "scroll_dy": 600, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_018", + "intent": "click recorded visual target", + "action": "click", + "anchor": { + "template": "templates/step_018.png", + "structural": { + "selector": "#form_street", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "textbox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 399, + 128, + 160, + 64 + ], + "click_point": [ + 479, + 160 + ], + "ocr_text": null, + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 21, + "tokens": [ + { + "c": "56337622e1e15996", + "r": "56337622e1e15996", + "n": 8, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "417212ab40bf439d", + "r": "417212ab40bf439d", + "n": 7, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "cc4e82f2d2da1202", + "r": "108d044c527c8890", + "n": 4, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "694835feb3417e55", + "r": "ed123a669f9bbb25", + "n": 2, + "alpha": false, + "name": false, + "digit": true, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "d252693e430e4393", + "r": "d252693e430e4393", + "digit": false, + "name": true, + "n": 15 + }, + { + "i": 0, + "size": 3, + "c": "ba2d7aac50810f64", + "r": "2492a5bd7f04d52a", + "digit": false, + "name": true, + "n": 19 + }, + { + "i": 0, + "size": 4, + "c": "2266742f666ce065", + "r": "f157810db852489a", + "digit": true, + "name": false, + "n": 21 + }, + { + "i": 1, + "size": 2, + "c": "a6f7f775ed1c9cc4", + "r": "f83c1261065f1a14", + "digit": false, + "name": true, + "n": 11 + }, + { + "i": 1, + "size": 3, + "c": "1c7882a0c83caccb", + "r": "9e5d144211a4b821", + "digit": true, + "name": false, + "n": 13 + }, + { + "i": 2, + "size": 2, + "c": "3bfbd81fe8e246c6", + "r": "0b71b00d8f2b9336", + "digit": true, + "name": false, + "n": 6 + } + ], + "structured": "c13c46d9f811020d", + "signal_hashes": { + "structured|exact|": "c13c46d9f811020db385b3cd2fd9d1bcc3dac34e40dfc7b03976a6651a69da57", + "structured|normalized|unicode_nfkc": "c13c46d9f811020db385b3cd2fd9d1bcc3dac34e40dfc7b03976a6651a69da57", + "structured|normalized|casefold": "c13c46d9f811020db385b3cd2fd9d1bcc3dac34e40dfc7b03976a6651a69da57", + "structured|normalized|collapse_whitespace": "c13c46d9f811020db385b3cd2fd9d1bcc3dac34e40dfc7b03976a6651a69da57", + "structured|normalized|strip_punctuation": "0d71c62f63b537c2b1a742823e7c77c422af361b7852e51019d3b09891d07888", + "structured|normalized|unicode_nfkc,casefold": "c13c46d9f811020db385b3cd2fd9d1bcc3dac34e40dfc7b03976a6651a69da57", + "structured|normalized|unicode_nfkc,collapse_whitespace": "c13c46d9f811020db385b3cd2fd9d1bcc3dac34e40dfc7b03976a6651a69da57", + "structured|normalized|unicode_nfkc,strip_punctuation": "0d71c62f63b537c2b1a742823e7c77c422af361b7852e51019d3b09891d07888", + "structured|normalized|casefold,collapse_whitespace": "c13c46d9f811020db385b3cd2fd9d1bcc3dac34e40dfc7b03976a6651a69da57", + "structured|normalized|casefold,strip_punctuation": "0d71c62f63b537c2b1a742823e7c77c422af361b7852e51019d3b09891d07888", + "structured|normalized|collapse_whitespace,strip_punctuation": "0d71c62f63b537c2b1a742823e7c77c422af361b7852e51019d3b09891d07888", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "c13c46d9f811020db385b3cd2fd9d1bcc3dac34e40dfc7b03976a6651a69da57", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "0d71c62f63b537c2b1a742823e7c77c422af361b7852e51019d3b09891d07888", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "0d71c62f63b537c2b1a742823e7c77c422af361b7852e51019d3b09891d07888", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "0d71c62f63b537c2b1a742823e7c77c422af361b7852e51019d3b09891d07888", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "0d71c62f63b537c2b1a742823e7c77c422af361b7852e51019d3b09891d07888", + "captured_context|exact|": "2f6f5a89d04c2bdabe030ffe037fbd6bc6721c5c06abdff642a8ccfebaedbe88", + "captured_context|normalized|unicode_nfkc": "2f6f5a89d04c2bdabe030ffe037fbd6bc6721c5c06abdff642a8ccfebaedbe88", + "captured_context|normalized|casefold": "8f4b3ce91d63d6810fbcf7d8263895240dedf72497519ddc0157e88bb0bc1425", + "captured_context|normalized|collapse_whitespace": "2f6f5a89d04c2bdabe030ffe037fbd6bc6721c5c06abdff642a8ccfebaedbe88", + "captured_context|normalized|strip_punctuation": "dff032d40b23e319be346b41147cb77a26ac0650597ee6a9266c404f63c4ff16", + "captured_context|normalized|unicode_nfkc,casefold": "8f4b3ce91d63d6810fbcf7d8263895240dedf72497519ddc0157e88bb0bc1425", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "2f6f5a89d04c2bdabe030ffe037fbd6bc6721c5c06abdff642a8ccfebaedbe88", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "dff032d40b23e319be346b41147cb77a26ac0650597ee6a9266c404f63c4ff16", + "captured_context|normalized|casefold,collapse_whitespace": "8f4b3ce91d63d6810fbcf7d8263895240dedf72497519ddc0157e88bb0bc1425", + "captured_context|normalized|casefold,strip_punctuation": "92244456b50efdb28bdfcb44fe32af13cc8071e622c17c9abfb6464d176106d1", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "dff032d40b23e319be346b41147cb77a26ac0650597ee6a9266c404f63c4ff16", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "8f4b3ce91d63d6810fbcf7d8263895240dedf72497519ddc0157e88bb0bc1425", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "92244456b50efdb28bdfcb44fe32af13cc8071e622c17c9abfb6464d176106d1", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "dff032d40b23e319be346b41147cb77a26ac0650597ee6a9266c404f63c4ff16", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "92244456b50efdb28bdfcb44fe32af13cc8071e622c17c9abfb6464d176106d1", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "92244456b50efdb28bdfcb44fe32af13cc8071e622c17c9abfb6464d176106d1" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "below", + "ocr_text": "Unassigned", + "distance_px": 125, + "dx_px": 48, + "dy_px": -115 + }, + { + "relation": "above", + "ocr_text": "CalendarFinderFlowRecallsMessagesPatientFeesModulesProceduresAdminReportsMiscellaneousPopups", + "distance_px": 132, + "dx_px": -25, + "dy_px": 130 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 346, + 115, + 267, + 95 + ], + "phash": "c8ccc8c0b43eaf3e", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_018_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_020", + "intent": "type <street>", + "action": "type", + "anchor": null, + "text": "101 SYNTHETIC WAY", + "param": "street", + "secret": false, + "field_label": "form_street", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_021", + "intent": "click recorded visual target", + "action": "click", + "anchor": { + "template": "templates/step_021.png", + "structural": { + "selector": "#form_city", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "textbox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 364, + 172, + 160, + 55 + ], + "click_point": [ + 444, + 195 + ], + "ocr_text": null, + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 23, + "tokens": [ + { + "c": "fb25450d4ebbc4e3", + "r": "00f1d5c45b01e786", + "n": 5, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "7d59221d1202ac69", + "r": "7d59221d1202ac69", + "n": 6, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "ba40d92b166d9054", + "r": "1d65b97bbb1f20ff", + "n": 10, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "5d5987a7b1f7379b", + "r": "5d5987a7b1f7379b", + "n": 2, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "8e81834e05766ba8", + "r": "209e6cdafc538d8b", + "digit": false, + "name": true, + "n": 11 + }, + { + "i": 0, + "size": 3, + "c": "394c2f62cac4ec7f", + "r": "561bc10a9e22b494", + "digit": false, + "name": true, + "n": 21 + }, + { + "i": 0, + "size": 4, + "c": "5959fe325c2c8b1a", + "r": "0f2002378f23ac32", + "digit": false, + "name": true, + "n": 23 + }, + { + "i": 1, + "size": 2, + "c": "2ba281fa3c7f0142", + "r": "b387a1a7172dc384", + "digit": false, + "name": true, + "n": 16 + }, + { + "i": 1, + "size": 3, + "c": "b5eb9e7739293582", + "r": "000ce0f5ae784c4c", + "digit": false, + "name": true, + "n": 18 + }, + { + "i": 2, + "size": 2, + "c": "640585765dc026c1", + "r": "8feeb11754156b91", + "digit": false, + "name": true, + "n": 12 + } + ], + "structured": "3bee8999d9f5b656", + "signal_hashes": { + "structured|exact|": "3bee8999d9f5b6565d91089a38b4fa0bbf5cd0dff9c349b65b3fccada542f79f", + "structured|normalized|unicode_nfkc": "3bee8999d9f5b6565d91089a38b4fa0bbf5cd0dff9c349b65b3fccada542f79f", + "structured|normalized|casefold": "3bee8999d9f5b6565d91089a38b4fa0bbf5cd0dff9c349b65b3fccada542f79f", + "structured|normalized|collapse_whitespace": "3bee8999d9f5b6565d91089a38b4fa0bbf5cd0dff9c349b65b3fccada542f79f", + "structured|normalized|strip_punctuation": "7e6876ce463e4584b9b18cc5454b67ddac24e3335cf775ffc0068948b5f29302", + "structured|normalized|unicode_nfkc,casefold": "3bee8999d9f5b6565d91089a38b4fa0bbf5cd0dff9c349b65b3fccada542f79f", + "structured|normalized|unicode_nfkc,collapse_whitespace": "3bee8999d9f5b6565d91089a38b4fa0bbf5cd0dff9c349b65b3fccada542f79f", + "structured|normalized|unicode_nfkc,strip_punctuation": "7e6876ce463e4584b9b18cc5454b67ddac24e3335cf775ffc0068948b5f29302", + "structured|normalized|casefold,collapse_whitespace": "3bee8999d9f5b6565d91089a38b4fa0bbf5cd0dff9c349b65b3fccada542f79f", + "structured|normalized|casefold,strip_punctuation": "7e6876ce463e4584b9b18cc5454b67ddac24e3335cf775ffc0068948b5f29302", + "structured|normalized|collapse_whitespace,strip_punctuation": "7e6876ce463e4584b9b18cc5454b67ddac24e3335cf775ffc0068948b5f29302", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "3bee8999d9f5b6565d91089a38b4fa0bbf5cd0dff9c349b65b3fccada542f79f", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "7e6876ce463e4584b9b18cc5454b67ddac24e3335cf775ffc0068948b5f29302", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "7e6876ce463e4584b9b18cc5454b67ddac24e3335cf775ffc0068948b5f29302", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "7e6876ce463e4584b9b18cc5454b67ddac24e3335cf775ffc0068948b5f29302", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "7e6876ce463e4584b9b18cc5454b67ddac24e3335cf775ffc0068948b5f29302", + "captured_context|exact|": "2064676b16acb4302d859e0c994c23fe2ea00dc0bfc5ead1adba71e379795f04", + "captured_context|normalized|unicode_nfkc": "2064676b16acb4302d859e0c994c23fe2ea00dc0bfc5ead1adba71e379795f04", + "captured_context|normalized|casefold": "f04cd00f6cf34277d6d1c6ad7ef3c691261ec896e6fc99454160a483735bd38e", + "captured_context|normalized|collapse_whitespace": "2064676b16acb4302d859e0c994c23fe2ea00dc0bfc5ead1adba71e379795f04", + "captured_context|normalized|strip_punctuation": "7e1cf77d9fd1e85257017f6268b1aa097da9b6ccdf3dc25e2b1d0246fc6cd230", + "captured_context|normalized|unicode_nfkc,casefold": "f04cd00f6cf34277d6d1c6ad7ef3c691261ec896e6fc99454160a483735bd38e", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "2064676b16acb4302d859e0c994c23fe2ea00dc0bfc5ead1adba71e379795f04", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "7e1cf77d9fd1e85257017f6268b1aa097da9b6ccdf3dc25e2b1d0246fc6cd230", + "captured_context|normalized|casefold,collapse_whitespace": "f04cd00f6cf34277d6d1c6ad7ef3c691261ec896e6fc99454160a483735bd38e", + "captured_context|normalized|casefold,strip_punctuation": "c2c7987a411470c216d1109b4f18144f7739f78785173e2bd7c6c102552befe5", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "7e1cf77d9fd1e85257017f6268b1aa097da9b6ccdf3dc25e2b1d0246fc6cd230", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "f04cd00f6cf34277d6d1c6ad7ef3c691261ec896e6fc99454160a483735bd38e", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "c2c7987a411470c216d1109b4f18144f7739f78785173e2bd7c6c102552befe5", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "7e1cf77d9fd1e85257017f6268b1aa097da9b6ccdf3dc25e2b1d0246fc6cd230", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "c2c7987a411470c216d1109b4f18144f7739f78785173e2bd7c6c102552befe5", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "c2c7987a411470c216d1109b4f18144f7739f78785173e2bd7c6c102552befe5" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "above", + "ocr_text": "Search or Add Patient", + "distance_px": 68, + "dx_px": 0, + "dy_px": 68 + }, + { + "relation": "below", + "ocr_text": "Unassigned", + "distance_px": 81, + "dx_px": 13, + "dy_px": -80 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 346, + 176, + 267, + 69 + ], + "phash": "c8d9bcc1c11ce7c3", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_021_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_023", + "intent": "type <city>", + "action": "type", + "anchor": null, + "text": "EXAMPLETON", + "param": "city", + "secret": false, + "field_label": "form_city", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_024", + "intent": "click 'Jnassigned'", + "action": "click", + "anchor": { + "template": "templates/step_024.png", + "structural": { + "selector": "#form_state", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "combobox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 937, + 163, + 160, + 64 + ], + "click_point": [ + 1017, + 195 + ], + "ocr_text": "Jnassigned", + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 23, + "tokens": [ + { + "c": "fb25450d4ebbc4e3", + "r": "00f1d5c45b01e786", + "n": 5, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "e4f5b290c241b88d", + "r": "e4f5b290c241b88d", + "n": 10, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "7d59221d1202ac69", + "r": "7d59221d1202ac69", + "n": 6, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "5d5987a7b1f7379b", + "r": "5d5987a7b1f7379b", + "n": 2, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "79f99d4ee9b87e51", + "r": "1749e56512ba88e6", + "digit": false, + "name": true, + "n": 15 + }, + { + "i": 0, + "size": 3, + "c": "3bce3ab5b1cae4a7", + "r": "76622543e55c39ea", + "digit": false, + "name": true, + "n": 21 + }, + { + "i": 0, + "size": 4, + "c": "b7c12a2cec7b03fd", + "r": "4fb1608307d6427c", + "digit": false, + "name": true, + "n": 23 + }, + { + "i": 1, + "size": 2, + "c": "1ff3a1c8d500b6ec", + "r": "1ff3a1c8d500b6ec", + "digit": false, + "name": true, + "n": 16 + }, + { + "i": 1, + "size": 3, + "c": "dbe4529998c844ca", + "r": "dbe4529998c844ca", + "digit": false, + "name": true, + "n": 18 + }, + { + "i": 2, + "size": 2, + "c": "4faf2141658543ff", + "r": "4faf2141658543ff", + "digit": false, + "name": true, + "n": 8 + } + ], + "structured": "73a2d4adb23a491a", + "signal_hashes": { + "structured|exact|": "73a2d4adb23a491a2ff1a73fc376335a12ba318ab1c1861a9d8f12a905977bdd", + "structured|normalized|unicode_nfkc": "73a2d4adb23a491a2ff1a73fc376335a12ba318ab1c1861a9d8f12a905977bdd", + "structured|normalized|casefold": "73a2d4adb23a491a2ff1a73fc376335a12ba318ab1c1861a9d8f12a905977bdd", + "structured|normalized|collapse_whitespace": "73a2d4adb23a491a2ff1a73fc376335a12ba318ab1c1861a9d8f12a905977bdd", + "structured|normalized|strip_punctuation": "c0dfc567509a812829e1d14411223eb402b1ca77e2a68b3009744da2ee7c1245", + "structured|normalized|unicode_nfkc,casefold": "73a2d4adb23a491a2ff1a73fc376335a12ba318ab1c1861a9d8f12a905977bdd", + "structured|normalized|unicode_nfkc,collapse_whitespace": "73a2d4adb23a491a2ff1a73fc376335a12ba318ab1c1861a9d8f12a905977bdd", + "structured|normalized|unicode_nfkc,strip_punctuation": "c0dfc567509a812829e1d14411223eb402b1ca77e2a68b3009744da2ee7c1245", + "structured|normalized|casefold,collapse_whitespace": "73a2d4adb23a491a2ff1a73fc376335a12ba318ab1c1861a9d8f12a905977bdd", + "structured|normalized|casefold,strip_punctuation": "c0dfc567509a812829e1d14411223eb402b1ca77e2a68b3009744da2ee7c1245", + "structured|normalized|collapse_whitespace,strip_punctuation": "c0dfc567509a812829e1d14411223eb402b1ca77e2a68b3009744da2ee7c1245", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "73a2d4adb23a491a2ff1a73fc376335a12ba318ab1c1861a9d8f12a905977bdd", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "c0dfc567509a812829e1d14411223eb402b1ca77e2a68b3009744da2ee7c1245", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "c0dfc567509a812829e1d14411223eb402b1ca77e2a68b3009744da2ee7c1245", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "c0dfc567509a812829e1d14411223eb402b1ca77e2a68b3009744da2ee7c1245", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "c0dfc567509a812829e1d14411223eb402b1ca77e2a68b3009744da2ee7c1245", + "captured_context|exact|": "11fcb7efb588cf06c8cf64231f5fcd26a645678555533b4467633970a43c5d20", + "captured_context|normalized|unicode_nfkc": "11fcb7efb588cf06c8cf64231f5fcd26a645678555533b4467633970a43c5d20", + "captured_context|normalized|casefold": "03e0e3c702c79faf3c876e580d11f78fa49837873a24ee6a16f85b2c2cc8ddec", + "captured_context|normalized|collapse_whitespace": "11fcb7efb588cf06c8cf64231f5fcd26a645678555533b4467633970a43c5d20", + "captured_context|normalized|strip_punctuation": "977d0c17122d7392210180c6297b97aaedf00abc3be3902a4a502f0568d2eee0", + "captured_context|normalized|unicode_nfkc,casefold": "03e0e3c702c79faf3c876e580d11f78fa49837873a24ee6a16f85b2c2cc8ddec", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "11fcb7efb588cf06c8cf64231f5fcd26a645678555533b4467633970a43c5d20", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "977d0c17122d7392210180c6297b97aaedf00abc3be3902a4a502f0568d2eee0", + "captured_context|normalized|casefold,collapse_whitespace": "03e0e3c702c79faf3c876e580d11f78fa49837873a24ee6a16f85b2c2cc8ddec", + "captured_context|normalized|casefold,strip_punctuation": "2b4b62efbbf25cbdc59ec0606572ab15d9b15d8dff7996643f71c4033140c07c", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "977d0c17122d7392210180c6297b97aaedf00abc3be3902a4a502f0568d2eee0", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "03e0e3c702c79faf3c876e580d11f78fa49837873a24ee6a16f85b2c2cc8ddec", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "2b4b62efbbf25cbdc59ec0606572ab15d9b15d8dff7996643f71c4033140c07c", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "977d0c17122d7392210180c6297b97aaedf00abc3be3902a4a502f0568d2eee0", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "2b4b62efbbf25cbdc59ec0606572ab15d9b15d8dff7996643f71c4033140c07c", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "2b4b62efbbf25cbdc59ec0606572ab15d9b15d8dff7996643f71c4033140c07c" + }, + "context_params": [ + "city" + ], + "param_token_indices": { + "city": [ + 1 + ] + }, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "above", + "ocr_text": "Searchbyanydemogra", + "distance_px": 168, + "dx_px": -39, + "dy_px": 163 + }, + { + "relation": "below", + "ocr_text": "Show Inactive", + "distance_px": 278, + "dx_px": -71, + "dy_px": -269 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 885, + 146, + 265, + 99 + ], + "phash": "a21d7d38eeb891c2", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_024_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_025", + "intent": "type <state_label>", + "action": "type", + "anchor": null, + "text": "Massachusetts", + "param": "state_label", + "secret": false, + "field_label": "form_state", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_027", + "intent": "click recorded visual target", + "action": "click", + "anchor": { + "template": "templates/step_027.png", + "structural": { + "selector": "#form_postal_code", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "textbox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 340, + 207, + 160, + 59 + ], + "click_point": [ + 420, + 234 + ], + "ocr_text": null, + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 31, + "tokens": [ + { + "c": "17f8f776ea36c139", + "r": "17f8f776ea36c139", + "n": 6, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "7608674b52e96450", + "r": "7608674b52e96450", + "n": 5, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "58106cbe6c84b2e9", + "r": "58106cbe6c84b2e9", + "n": 8, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "ba40d92b166d9054", + "r": "1d65b97bbb1f20ff", + "n": 10, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "5d5987a7b1f7379b", + "r": "5d5987a7b1f7379b", + "n": 2, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "0b43a0ba8b1ad61f", + "r": "0b43a0ba8b1ad61f", + "digit": false, + "name": true, + "n": 11 + }, + { + "i": 0, + "size": 3, + "c": "a4c63c132d44fa87", + "r": "a4c63c132d44fa87", + "digit": false, + "name": true, + "n": 19 + }, + { + "i": 0, + "size": 4, + "c": "30b9301cfea3dd45", + "r": "2116417ca747fc95", + "digit": false, + "name": true, + "n": 29 + }, + { + "i": 1, + "size": 2, + "c": "f99f5c3c73b47742", + "r": "f99f5c3c73b47742", + "digit": false, + "name": true, + "n": 13 + }, + { + "i": 1, + "size": 3, + "c": "56ff119b8f1b1087", + "r": "277f0d2e78797bff", + "digit": false, + "name": true, + "n": 23 + }, + { + "i": 1, + "size": 4, + "c": "62b840e1d0fe3bae", + "r": "8d631017e757ef23", + "digit": false, + "name": true, + "n": 25 + }, + { + "i": 2, + "size": 2, + "c": "05a92a90ab5e120e", + "r": "b222cc2c598deaab", + "digit": false, + "name": true, + "n": 18 + }, + { + "i": 2, + "size": 3, + "c": "b68329079fe6669c", + "r": "98982c7c283672d3", + "digit": false, + "name": true, + "n": 20 + }, + { + "i": 3, + "size": 2, + "c": "640585765dc026c1", + "r": "8feeb11754156b91", + "digit": false, + "name": true, + "n": 12 + } + ], + "structured": "b344935e2617dfcb", + "signal_hashes": { + "structured|exact|": "b344935e2617dfcba078b5c89afdae5668d1c5c92642a6cf7c7937ba25f80270", + "structured|normalized|unicode_nfkc": "b344935e2617dfcba078b5c89afdae5668d1c5c92642a6cf7c7937ba25f80270", + "structured|normalized|casefold": "b344935e2617dfcba078b5c89afdae5668d1c5c92642a6cf7c7937ba25f80270", + "structured|normalized|collapse_whitespace": "b344935e2617dfcba078b5c89afdae5668d1c5c92642a6cf7c7937ba25f80270", + "structured|normalized|strip_punctuation": "ee78b802292e8771733d81f75f66336297de36dd7f0fb7d936b340b1b0ff76b7", + "structured|normalized|unicode_nfkc,casefold": "b344935e2617dfcba078b5c89afdae5668d1c5c92642a6cf7c7937ba25f80270", + "structured|normalized|unicode_nfkc,collapse_whitespace": "b344935e2617dfcba078b5c89afdae5668d1c5c92642a6cf7c7937ba25f80270", + "structured|normalized|unicode_nfkc,strip_punctuation": "ee78b802292e8771733d81f75f66336297de36dd7f0fb7d936b340b1b0ff76b7", + "structured|normalized|casefold,collapse_whitespace": "b344935e2617dfcba078b5c89afdae5668d1c5c92642a6cf7c7937ba25f80270", + "structured|normalized|casefold,strip_punctuation": "ee78b802292e8771733d81f75f66336297de36dd7f0fb7d936b340b1b0ff76b7", + "structured|normalized|collapse_whitespace,strip_punctuation": "ee78b802292e8771733d81f75f66336297de36dd7f0fb7d936b340b1b0ff76b7", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "b344935e2617dfcba078b5c89afdae5668d1c5c92642a6cf7c7937ba25f80270", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "ee78b802292e8771733d81f75f66336297de36dd7f0fb7d936b340b1b0ff76b7", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "ee78b802292e8771733d81f75f66336297de36dd7f0fb7d936b340b1b0ff76b7", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "ee78b802292e8771733d81f75f66336297de36dd7f0fb7d936b340b1b0ff76b7", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "ee78b802292e8771733d81f75f66336297de36dd7f0fb7d936b340b1b0ff76b7", + "captured_context|exact|": "66dc2bd37b48e3a49ade8162b35ebb25afe4c180ba69b77e2542f7c8e7d03fe1", + "captured_context|normalized|unicode_nfkc": "66dc2bd37b48e3a49ade8162b35ebb25afe4c180ba69b77e2542f7c8e7d03fe1", + "captured_context|normalized|casefold": "1611e5aae145fb297300add1a191f45363cd8f18e4d5bd6d30eb8b17f29b3010", + "captured_context|normalized|collapse_whitespace": "66dc2bd37b48e3a49ade8162b35ebb25afe4c180ba69b77e2542f7c8e7d03fe1", + "captured_context|normalized|strip_punctuation": "f583d146e95918a44d1ae7e2e40b04c157f4d3043dd49f07eb973dc51c099f9e", + "captured_context|normalized|unicode_nfkc,casefold": "1611e5aae145fb297300add1a191f45363cd8f18e4d5bd6d30eb8b17f29b3010", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "66dc2bd37b48e3a49ade8162b35ebb25afe4c180ba69b77e2542f7c8e7d03fe1", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "f583d146e95918a44d1ae7e2e40b04c157f4d3043dd49f07eb973dc51c099f9e", + "captured_context|normalized|casefold,collapse_whitespace": "1611e5aae145fb297300add1a191f45363cd8f18e4d5bd6d30eb8b17f29b3010", + "captured_context|normalized|casefold,strip_punctuation": "94f6e7f11c5ec7ba225b48d4ab7f9c2137ee6051ea8d263fdc576fcf063a7cd2", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "f583d146e95918a44d1ae7e2e40b04c157f4d3043dd49f07eb973dc51c099f9e", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "1611e5aae145fb297300add1a191f45363cd8f18e4d5bd6d30eb8b17f29b3010", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "94f6e7f11c5ec7ba225b48d4ab7f9c2137ee6051ea8d263fdc576fcf063a7cd2", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "f583d146e95918a44d1ae7e2e40b04c157f4d3043dd49f07eb973dc51c099f9e", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "94f6e7f11c5ec7ba225b48d4ab7f9c2137ee6051ea8d263fdc576fcf063a7cd2", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "94f6e7f11c5ec7ba225b48d4ab7f9c2137ee6051ea8d263fdc576fcf063a7cd2" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "above", + "ocr_text": "SearchorAddPatient", + "distance_px": 111, + "dx_px": -24, + "dy_px": 108 + }, + { + "relation": "above", + "ocr_text": "CalendarFinderFlowRecallsMessagesPatientFeesModulesProceduresAdminReportsMiscellaneousPopups", + "distance_px": 221, + "dx_px": -84, + "dy_px": 204 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 340, + 207, + 160, + 59 + ], + "phash": "87968f8ea58de0a5", + "phash_tolerance": 8, + "timeout_s": 5.0, + "template": "templates/step_027_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_029", + "intent": "type <postal_code>", + "action": "type", + "anchor": null, + "text": "02139", + "param": "postal_code", + "secret": false, + "field_label": "form_postal_code", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_030", + "intent": "click recorded visual target", + "action": "click", + "anchor": { + "template": "templates/step_030.png", + "structural": { + "selector": "#form_phone_home", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "textbox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 382, + 315, + 160, + 64 + ], + "click_point": [ + 462, + 347 + ], + "ocr_text": null, + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 20, + "tokens": [ + { + "c": "bc4afbbd0b0d381b", + "r": "bc4afbbd0b0d381b", + "n": 4, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "93c520b039bcba2c", + "r": "93c520b039bcba2c", + "n": 6, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "96ddabdfc5d4b290", + "r": "96ddabdfc5d4b290", + "n": 4, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "93c520b039bcba2c", + "r": "93c520b039bcba2c", + "n": 6, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "fd69eb6fb0ff92d1", + "r": "fd69eb6fb0ff92d1", + "digit": false, + "name": true, + "n": 10 + }, + { + "i": 0, + "size": 3, + "c": "cb80906e855a1626", + "r": "cb80906e855a1626", + "digit": false, + "name": true, + "n": 14 + }, + { + "i": 0, + "size": 4, + "c": "fa3b230bbe7fea1a", + "r": "fa3b230bbe7fea1a", + "digit": false, + "name": true, + "n": 20 + }, + { + "i": 1, + "size": 2, + "c": "01d0c19c3607b65c", + "r": "01d0c19c3607b65c", + "digit": false, + "name": true, + "n": 10 + }, + { + "i": 1, + "size": 3, + "c": "5e45c8ec22f0b469", + "r": "5e45c8ec22f0b469", + "digit": false, + "name": true, + "n": 16 + }, + { + "i": 2, + "size": 2, + "c": "8810f9086d50323a", + "r": "8810f9086d50323a", + "digit": false, + "name": true, + "n": 10 + } + ], + "structured": "cffb593e4c59c004", + "signal_hashes": { + "structured|exact|": "cffb593e4c59c00442f115110ee3ac01ae646a9d8b394fc5b1e28abcf0b27aa3", + "structured|normalized|unicode_nfkc": "cffb593e4c59c00442f115110ee3ac01ae646a9d8b394fc5b1e28abcf0b27aa3", + "structured|normalized|casefold": "cffb593e4c59c00442f115110ee3ac01ae646a9d8b394fc5b1e28abcf0b27aa3", + "structured|normalized|collapse_whitespace": "cffb593e4c59c00442f115110ee3ac01ae646a9d8b394fc5b1e28abcf0b27aa3", + "structured|normalized|strip_punctuation": "05e23074e1b0952fecd0c4380b9a1c7ea165bf4572a3fa916d97f207ed7f1648", + "structured|normalized|unicode_nfkc,casefold": "cffb593e4c59c00442f115110ee3ac01ae646a9d8b394fc5b1e28abcf0b27aa3", + "structured|normalized|unicode_nfkc,collapse_whitespace": "cffb593e4c59c00442f115110ee3ac01ae646a9d8b394fc5b1e28abcf0b27aa3", + "structured|normalized|unicode_nfkc,strip_punctuation": "05e23074e1b0952fecd0c4380b9a1c7ea165bf4572a3fa916d97f207ed7f1648", + "structured|normalized|casefold,collapse_whitespace": "cffb593e4c59c00442f115110ee3ac01ae646a9d8b394fc5b1e28abcf0b27aa3", + "structured|normalized|casefold,strip_punctuation": "05e23074e1b0952fecd0c4380b9a1c7ea165bf4572a3fa916d97f207ed7f1648", + "structured|normalized|collapse_whitespace,strip_punctuation": "05e23074e1b0952fecd0c4380b9a1c7ea165bf4572a3fa916d97f207ed7f1648", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "cffb593e4c59c00442f115110ee3ac01ae646a9d8b394fc5b1e28abcf0b27aa3", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "05e23074e1b0952fecd0c4380b9a1c7ea165bf4572a3fa916d97f207ed7f1648", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "05e23074e1b0952fecd0c4380b9a1c7ea165bf4572a3fa916d97f207ed7f1648", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "05e23074e1b0952fecd0c4380b9a1c7ea165bf4572a3fa916d97f207ed7f1648", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "05e23074e1b0952fecd0c4380b9a1c7ea165bf4572a3fa916d97f207ed7f1648", + "captured_context|exact|": "bc16e04ce0b5c6ce52adf7bedeb4726c3ce0adac1df5b1b72d77793bfea35907", + "captured_context|normalized|unicode_nfkc": "bc16e04ce0b5c6ce52adf7bedeb4726c3ce0adac1df5b1b72d77793bfea35907", + "captured_context|normalized|casefold": "c1d7385e32ed5c4d313717c6db654d67bc040aba6d9a7f08f00aaa394cf3bc8e", + "captured_context|normalized|collapse_whitespace": "bc16e04ce0b5c6ce52adf7bedeb4726c3ce0adac1df5b1b72d77793bfea35907", + "captured_context|normalized|strip_punctuation": "c80b4a511327bec36aadfc4ec7627a02fb3ff41205afb1aed88ee49443c04624", + "captured_context|normalized|unicode_nfkc,casefold": "c1d7385e32ed5c4d313717c6db654d67bc040aba6d9a7f08f00aaa394cf3bc8e", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "bc16e04ce0b5c6ce52adf7bedeb4726c3ce0adac1df5b1b72d77793bfea35907", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "c80b4a511327bec36aadfc4ec7627a02fb3ff41205afb1aed88ee49443c04624", + "captured_context|normalized|casefold,collapse_whitespace": "c1d7385e32ed5c4d313717c6db654d67bc040aba6d9a7f08f00aaa394cf3bc8e", + "captured_context|normalized|casefold,strip_punctuation": "0256066c0eb37f834362fac4fc421ac5467ceaab8967a84cdc8c271192982d31", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "c80b4a511327bec36aadfc4ec7627a02fb3ff41205afb1aed88ee49443c04624", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "c1d7385e32ed5c4d313717c6db654d67bc040aba6d9a7f08f00aaa394cf3bc8e", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "0256066c0eb37f834362fac4fc421ac5467ceaab8967a84cdc8c271192982d31", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "c80b4a511327bec36aadfc4ec7627a02fb3ff41205afb1aed88ee49443c04624", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "0256066c0eb37f834362fac4fc421ac5467ceaab8967a84cdc8c271192982d31", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "0256066c0eb37f834362fac4fc421ac5467ceaab8967a84cdc8c271192982d31" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "above", + "ocr_text": "Unassigned", + "distance_px": 78, + "dx_px": 31, + "dy_px": 72 + }, + { + "relation": "above", + "ocr_text": "SearchorAddPatient", + "distance_px": 222, + "dx_px": 18, + "dy_px": 221 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 346, + 298, + 232, + 99 + ], + "phash": "c04af8933fa5c66c", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_030_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_032", + "intent": "type <phone_home>", + "action": "type", + "anchor": null, + "text": "555-0107", + "param": "phone_home", + "secret": false, + "field_label": "form_phone_home", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_033", + "intent": "click recorded visual target", + "action": "click", + "anchor": { + "template": "templates/step_033.png", + "structural": { + "selector": "#form_email", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "textbox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 955, + 350, + 160, + 64 + ], + "click_point": [ + 1035, + 382 + ], + "ocr_text": null, + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 25, + "tokens": [ + { + "c": "1fde90828da40187", + "r": "5534fe29d3b99b08", + "n": 12, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "1771afe11ff94dc1", + "r": "1771afe11ff94dc1", + "n": 7, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "ff5376b16c33add6", + "r": "e2bd5a9c886402a8", + "n": 6, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "4dce9a1bbc06f990", + "r": "2c0d02e39b19334a", + "digit": false, + "name": true, + "n": 19 + }, + { + "i": 0, + "size": 3, + "c": "892ae816b52e7213", + "r": "80836a1fdba793b4", + "digit": false, + "name": true, + "n": 25 + }, + { + "i": 1, + "size": 2, + "c": "dd3ba1231f325b37", + "r": "c66b2c2086353ea8", + "digit": false, + "name": true, + "n": 13 + } + ], + "structured": "1266dcc1ca721903", + "signal_hashes": { + "structured|exact|": "1266dcc1ca721903411689c56671ecbfa3f6585f566c50e30c83930fd4a38399", + "structured|normalized|unicode_nfkc": "1266dcc1ca721903411689c56671ecbfa3f6585f566c50e30c83930fd4a38399", + "structured|normalized|casefold": "1266dcc1ca721903411689c56671ecbfa3f6585f566c50e30c83930fd4a38399", + "structured|normalized|collapse_whitespace": "1266dcc1ca721903411689c56671ecbfa3f6585f566c50e30c83930fd4a38399", + "structured|normalized|strip_punctuation": "49d6e8f8ba211023908a404178aa14783b590b81fbe84a0407bac9201514297a", + "structured|normalized|unicode_nfkc,casefold": "1266dcc1ca721903411689c56671ecbfa3f6585f566c50e30c83930fd4a38399", + "structured|normalized|unicode_nfkc,collapse_whitespace": "1266dcc1ca721903411689c56671ecbfa3f6585f566c50e30c83930fd4a38399", + "structured|normalized|unicode_nfkc,strip_punctuation": "49d6e8f8ba211023908a404178aa14783b590b81fbe84a0407bac9201514297a", + "structured|normalized|casefold,collapse_whitespace": "1266dcc1ca721903411689c56671ecbfa3f6585f566c50e30c83930fd4a38399", + "structured|normalized|casefold,strip_punctuation": "49d6e8f8ba211023908a404178aa14783b590b81fbe84a0407bac9201514297a", + "structured|normalized|collapse_whitespace,strip_punctuation": "49d6e8f8ba211023908a404178aa14783b590b81fbe84a0407bac9201514297a", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "1266dcc1ca721903411689c56671ecbfa3f6585f566c50e30c83930fd4a38399", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "49d6e8f8ba211023908a404178aa14783b590b81fbe84a0407bac9201514297a", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "49d6e8f8ba211023908a404178aa14783b590b81fbe84a0407bac9201514297a", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "49d6e8f8ba211023908a404178aa14783b590b81fbe84a0407bac9201514297a", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "49d6e8f8ba211023908a404178aa14783b590b81fbe84a0407bac9201514297a", + "captured_context|exact|": "2ea87855d019fcad9a942d1688827d1317b7575de89f95e0c02e2471f45bda27", + "captured_context|normalized|unicode_nfkc": "2ea87855d019fcad9a942d1688827d1317b7575de89f95e0c02e2471f45bda27", + "captured_context|normalized|casefold": "d0a1c856e56bb646ba2f9ae0bc9a5ac25f27f3dcdc247bbff23625d74d618c3c", + "captured_context|normalized|collapse_whitespace": "2ea87855d019fcad9a942d1688827d1317b7575de89f95e0c02e2471f45bda27", + "captured_context|normalized|strip_punctuation": "fea8b36583135fc708e3282c88a312514638e7192e6123de8baaac11cb4ba257", + "captured_context|normalized|unicode_nfkc,casefold": "d0a1c856e56bb646ba2f9ae0bc9a5ac25f27f3dcdc247bbff23625d74d618c3c", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "2ea87855d019fcad9a942d1688827d1317b7575de89f95e0c02e2471f45bda27", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "fea8b36583135fc708e3282c88a312514638e7192e6123de8baaac11cb4ba257", + "captured_context|normalized|casefold,collapse_whitespace": "d0a1c856e56bb646ba2f9ae0bc9a5ac25f27f3dcdc247bbff23625d74d618c3c", + "captured_context|normalized|casefold,strip_punctuation": "8526e96c4e0ec8fbddd2c2ee2e2961e320f8316994cec7ee6a8ab4c4055a794b", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "fea8b36583135fc708e3282c88a312514638e7192e6123de8baaac11cb4ba257", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "d0a1c856e56bb646ba2f9ae0bc9a5ac25f27f3dcdc247bbff23625d74d618c3c", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "8526e96c4e0ec8fbddd2c2ee2e2961e320f8316994cec7ee6a8ab4c4055a794b", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "fea8b36583135fc708e3282c88a312514638e7192e6123de8baaac11cb4ba257", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "8526e96c4e0ec8fbddd2c2ee2e2961e320f8316994cec7ee6a8ab4c4055a794b", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "8526e96c4e0ec8fbddd2c2ee2e2961e320f8316994cec7ee6a8ab4c4055a794b" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "below", + "ocr_text": "Show Inactive", + "distance_px": 98, + "dx_px": -53, + "dy_px": -82 + }, + { + "relation": "above", + "ocr_text": "Unassigned", + "distance_px": 161, + "dx_px": 65, + "dy_px": 147 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 885, + 333, + 302, + 99 + ], + "phash": "cad0ba36be2dc1c1", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_033_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_035", + "intent": "type <email>", + "action": "type", + "anchor": null, + "text": "openadapt.loan-parity@example.invalid", + "param": "email", + "secret": false, + "field_label": "form_email", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_036", + "intent": "click 'Jnassigned'", + "action": "click", + "anchor": { + "template": "templates/step_036.png", + "structural": { + "selector": "#form_country_code", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "combobox", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 937, + 210, + 160, + 56 + ], + "click_point": [ + 1017, + 234 + ], + "ocr_text": "Jnassigned", + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 26, + "tokens": [ + { + "c": "17f8f776ea36c139", + "r": "17f8f776ea36c139", + "n": 6, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "7608674b52e96450", + "r": "7608674b52e96450", + "n": 5, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "b28840e46eb5f647", + "r": "a3ae22fd50cb0be1", + "n": 5, + "alpha": false, + "name": false, + "digit": true, + "idsh": true, + "glyph": true, + "gen": false + }, + { + "c": "58106cbe6c84b2e9", + "r": "58106cbe6c84b2e9", + "n": 8, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "5d5987a7b1f7379b", + "r": "5d5987a7b1f7379b", + "n": 2, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "0b43a0ba8b1ad61f", + "r": "0b43a0ba8b1ad61f", + "digit": false, + "name": true, + "n": 11 + }, + { + "i": 0, + "size": 3, + "c": "0b92c553057da886", + "r": "4b9a0d38d5a1eb21", + "digit": true, + "name": false, + "n": 16 + }, + { + "i": 0, + "size": 4, + "c": "65615d64d17074ce", + "r": "da11a53a95a31a7d", + "digit": true, + "name": false, + "n": 24 + }, + { + "i": 1, + "size": 2, + "c": "fdc51a23183599f1", + "r": "8c299d9f4685171b", + "digit": true, + "name": false, + "n": 10 + }, + { + "i": 1, + "size": 3, + "c": "518a200b4eaae8eb", + "r": "2d4e5300a63e3c73", + "digit": true, + "name": false, + "n": 18 + }, + { + "i": 1, + "size": 4, + "c": "364fbb1a78747d5f", + "r": "25f9c653a1bda159", + "digit": true, + "name": false, + "n": 20 + }, + { + "i": 2, + "size": 2, + "c": "387d9b6e37301237", + "r": "2815e221c53c3187", + "digit": true, + "name": false, + "n": 13 + }, + { + "i": 2, + "size": 3, + "c": "9b733aec2c54acbb", + "r": "d1abe420b6862639", + "digit": true, + "name": false, + "n": 15 + }, + { + "i": 3, + "size": 2, + "c": "b30f38b67b3a9035", + "r": "b30f38b67b3a9035", + "digit": false, + "name": true, + "n": 10 + } + ], + "structured": "679b60998a3366fb", + "signal_hashes": { + "structured|exact|": "679b60998a3366fbf74c7733326ae25bdd817ec73fbed73d36394a0bcd2e7fde", + "structured|normalized|unicode_nfkc": "679b60998a3366fbf74c7733326ae25bdd817ec73fbed73d36394a0bcd2e7fde", + "structured|normalized|casefold": "679b60998a3366fbf74c7733326ae25bdd817ec73fbed73d36394a0bcd2e7fde", + "structured|normalized|collapse_whitespace": "679b60998a3366fbf74c7733326ae25bdd817ec73fbed73d36394a0bcd2e7fde", + "structured|normalized|strip_punctuation": "2587b61898422f880951aadecc869ae0299b2dbeed0ec8993a2574f3525a01d7", + "structured|normalized|unicode_nfkc,casefold": "679b60998a3366fbf74c7733326ae25bdd817ec73fbed73d36394a0bcd2e7fde", + "structured|normalized|unicode_nfkc,collapse_whitespace": "679b60998a3366fbf74c7733326ae25bdd817ec73fbed73d36394a0bcd2e7fde", + "structured|normalized|unicode_nfkc,strip_punctuation": "2587b61898422f880951aadecc869ae0299b2dbeed0ec8993a2574f3525a01d7", + "structured|normalized|casefold,collapse_whitespace": "679b60998a3366fbf74c7733326ae25bdd817ec73fbed73d36394a0bcd2e7fde", + "structured|normalized|casefold,strip_punctuation": "2587b61898422f880951aadecc869ae0299b2dbeed0ec8993a2574f3525a01d7", + "structured|normalized|collapse_whitespace,strip_punctuation": "2587b61898422f880951aadecc869ae0299b2dbeed0ec8993a2574f3525a01d7", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "679b60998a3366fbf74c7733326ae25bdd817ec73fbed73d36394a0bcd2e7fde", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "2587b61898422f880951aadecc869ae0299b2dbeed0ec8993a2574f3525a01d7", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "2587b61898422f880951aadecc869ae0299b2dbeed0ec8993a2574f3525a01d7", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "2587b61898422f880951aadecc869ae0299b2dbeed0ec8993a2574f3525a01d7", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "2587b61898422f880951aadecc869ae0299b2dbeed0ec8993a2574f3525a01d7", + "captured_context|exact|": "61ff25f90870bbb6b72da1bc71137d3b692b8a009da734f2bcf9f924776898a6", + "captured_context|normalized|unicode_nfkc": "61ff25f90870bbb6b72da1bc71137d3b692b8a009da734f2bcf9f924776898a6", + "captured_context|normalized|casefold": "bf22964b8fd303ccc120bab3a56b25e9f182ee75e303ed29ba75924ca97f63d1", + "captured_context|normalized|collapse_whitespace": "61ff25f90870bbb6b72da1bc71137d3b692b8a009da734f2bcf9f924776898a6", + "captured_context|normalized|strip_punctuation": "f4f93b71ad7e7017728eb1da774225666020adbba5a562a81aff2986443e2f31", + "captured_context|normalized|unicode_nfkc,casefold": "bf22964b8fd303ccc120bab3a56b25e9f182ee75e303ed29ba75924ca97f63d1", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "61ff25f90870bbb6b72da1bc71137d3b692b8a009da734f2bcf9f924776898a6", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "f4f93b71ad7e7017728eb1da774225666020adbba5a562a81aff2986443e2f31", + "captured_context|normalized|casefold,collapse_whitespace": "bf22964b8fd303ccc120bab3a56b25e9f182ee75e303ed29ba75924ca97f63d1", + "captured_context|normalized|casefold,strip_punctuation": "faf9c82c2e7fabfe84337b2f7062c93daf4ac50b9b62173be3f0914350708463", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "f4f93b71ad7e7017728eb1da774225666020adbba5a562a81aff2986443e2f31", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "bf22964b8fd303ccc120bab3a56b25e9f182ee75e303ed29ba75924ca97f63d1", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "faf9c82c2e7fabfe84337b2f7062c93daf4ac50b9b62173be3f0914350708463", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "f4f93b71ad7e7017728eb1da774225666020adbba5a562a81aff2986443e2f31", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "faf9c82c2e7fabfe84337b2f7062c93daf4ac50b9b62173be3f0914350708463", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "faf9c82c2e7fabfe84337b2f7062c93daf4ac50b9b62173be3f0914350708463" + }, + "context_params": [ + "postal_code" + ], + "param_token_indices": { + "postal_code": [ + 2 + ] + }, + "rests_on_confusable_identifier": true + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "above", + "ocr_text": "Search by any demogre", + "distance_px": 206, + "dx_px": -39, + "dy_px": 202 + }, + { + "relation": "below", + "ocr_text": "Show Inactive", + "distance_px": 241, + "dx_px": -71, + "dy_px": -230 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 937, + 210, + 160, + 56 + ], + "phash": "e76a9890e7f63811", + "phash_tolerance": 8, + "timeout_s": 5.0, + "template": "templates/step_036_expect.png" + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_037", + "intent": "type <country_code>", + "action": "type", + "anchor": null, + "text": "USA", + "param": "country_code", + "secret": false, + "field_label": "form_country_code", + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": null, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": null, + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_039", + "intent": "click 'Create New Patient'", + "action": "click", + "anchor": { + "template": "templates/step_039.png", + "structural": { + "selector": "#create", + "frame_path": [ + "div:nth-of-type(3) > iframe:nth-of-type(1)" + ], + "role": "button", + "name": null, + "automation_id": null, + "window_name": null + }, + "region": [ + 204, + 736, + 160, + 64 + ], + "click_point": [ + 284, + 772 + ], + "ocr_text": "Create New Patient", + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 0, + "tokens": [], + "concats": [], + "structured": "d761782f47f7aeeb", + "signal_hashes": { + "structured|exact|": "d761782f47f7aeeb3916f23cbe15694c81cee59a8bc47f5c0f8c5870824ad15d", + "structured|normalized|unicode_nfkc": "d761782f47f7aeeb3916f23cbe15694c81cee59a8bc47f5c0f8c5870824ad15d", + "structured|normalized|casefold": "d761782f47f7aeeb3916f23cbe15694c81cee59a8bc47f5c0f8c5870824ad15d", + "structured|normalized|collapse_whitespace": "d761782f47f7aeeb3916f23cbe15694c81cee59a8bc47f5c0f8c5870824ad15d", + "structured|normalized|strip_punctuation": "eac545cd1e5409a76be55f3cc9beb24ef718c446a95d28b453f3ce00c0f4d097", + "structured|normalized|unicode_nfkc,casefold": "d761782f47f7aeeb3916f23cbe15694c81cee59a8bc47f5c0f8c5870824ad15d", + "structured|normalized|unicode_nfkc,collapse_whitespace": "d761782f47f7aeeb3916f23cbe15694c81cee59a8bc47f5c0f8c5870824ad15d", + "structured|normalized|unicode_nfkc,strip_punctuation": "eac545cd1e5409a76be55f3cc9beb24ef718c446a95d28b453f3ce00c0f4d097", + "structured|normalized|casefold,collapse_whitespace": "d761782f47f7aeeb3916f23cbe15694c81cee59a8bc47f5c0f8c5870824ad15d", + "structured|normalized|casefold,strip_punctuation": "eac545cd1e5409a76be55f3cc9beb24ef718c446a95d28b453f3ce00c0f4d097", + "structured|normalized|collapse_whitespace,strip_punctuation": "eac545cd1e5409a76be55f3cc9beb24ef718c446a95d28b453f3ce00c0f4d097", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "d761782f47f7aeeb3916f23cbe15694c81cee59a8bc47f5c0f8c5870824ad15d", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "eac545cd1e5409a76be55f3cc9beb24ef718c446a95d28b453f3ce00c0f4d097", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "eac545cd1e5409a76be55f3cc9beb24ef718c446a95d28b453f3ce00c0f4d097", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "eac545cd1e5409a76be55f3cc9beb24ef718c446a95d28b453f3ce00c0f4d097", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "eac545cd1e5409a76be55f3cc9beb24ef718c446a95d28b453f3ce00c0f4d097" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "left_of", + "ocr_text": "Search", + "distance_px": 132, + "dx_px": 132, + "dy_px": 0 + }, + { + "relation": "left_of", + "ocr_text": "Related", + "distance_px": 164, + "dx_px": 152, + "dy_px": 61 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "text_present", + "text": "Confirm Create New Patient", + "region": null, + "phash": null, + "phash_tolerance": 8, + "timeout_s": 10.0, + "template": null + }, + { + "kind": "text_present", + "text": "No matches were found.", + "region": null, + "phash": null, + "phash_tolerance": 8, + "timeout_s": 10.0, + "template": null + } + ], + "effects": [], + "api_binding": null, + "risk": "reversible", + "risk_explanation": "operator-qualified override: reversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + }, + { + "id": "step_040", + "intent": "click 'Confirm Create New Patient'", + "action": "click", + "anchor": { + "template": "templates/step_040.png", + "structural": { + "selector": "#confirmCreate", + "frame_path": [ + "#modalframe" + ], + "role": "button", + "name": "Create New Patient", + "automation_id": null, + "window_name": null + }, + "region": [ + 520, + 248, + 160, + 64 + ], + "click_point": [ + 600, + 280 + ], + "ocr_text": "Confirm Create New Patient", + "context_text": null, + "structured_identity": null, + "identity_template": { + "schema_version": 1, + "salt": "f490ff17f8d4403544cbbbdaabfd336a", + "band_len": 13, + "tokens": [ + { + "c": "83254a515071bcc3", + "r": "83254a515071bcc3", + "n": 7, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + }, + { + "c": "b793dcf538c95db0", + "r": "b793dcf538c95db0", + "n": 6, + "alpha": true, + "name": true, + "digit": false, + "idsh": false, + "glyph": false, + "gen": false + } + ], + "concats": [ + { + "i": 0, + "size": 2, + "c": "6993f69cba57388d", + "r": "6993f69cba57388d", + "digit": false, + "name": true, + "n": 13 + } + ], + "structured": "1a4723a4867ce902", + "signal_hashes": { + "structured|exact|": "5d171bc76094daf157445b90df0f120741fb4f8638ba4a72d0ac47cea2b9b47b", + "structured|normalized|unicode_nfkc": "5d171bc76094daf157445b90df0f120741fb4f8638ba4a72d0ac47cea2b9b47b", + "structured|normalized|casefold": "1a4723a4867ce902e1c9b51639aaa076d4bdf80f12827b7d43f2ec7e919faca4", + "structured|normalized|collapse_whitespace": "5d171bc76094daf157445b90df0f120741fb4f8638ba4a72d0ac47cea2b9b47b", + "structured|normalized|strip_punctuation": "40c2fbc1d47ce7504082ac794b723d451030d5dd994a6516901aa60369d7650b", + "structured|normalized|unicode_nfkc,casefold": "1a4723a4867ce902e1c9b51639aaa076d4bdf80f12827b7d43f2ec7e919faca4", + "structured|normalized|unicode_nfkc,collapse_whitespace": "5d171bc76094daf157445b90df0f120741fb4f8638ba4a72d0ac47cea2b9b47b", + "structured|normalized|unicode_nfkc,strip_punctuation": "40c2fbc1d47ce7504082ac794b723d451030d5dd994a6516901aa60369d7650b", + "structured|normalized|casefold,collapse_whitespace": "1a4723a4867ce902e1c9b51639aaa076d4bdf80f12827b7d43f2ec7e919faca4", + "structured|normalized|casefold,strip_punctuation": "1c47e61892d78749b44482b6d84a5e6d679aa5f9d97a9cdfa2d9cd3b2c07366d", + "structured|normalized|collapse_whitespace,strip_punctuation": "40c2fbc1d47ce7504082ac794b723d451030d5dd994a6516901aa60369d7650b", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace": "1a4723a4867ce902e1c9b51639aaa076d4bdf80f12827b7d43f2ec7e919faca4", + "structured|normalized|unicode_nfkc,casefold,strip_punctuation": "1c47e61892d78749b44482b6d84a5e6d679aa5f9d97a9cdfa2d9cd3b2c07366d", + "structured|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "40c2fbc1d47ce7504082ac794b723d451030d5dd994a6516901aa60369d7650b", + "structured|normalized|casefold,collapse_whitespace,strip_punctuation": "1c47e61892d78749b44482b6d84a5e6d679aa5f9d97a9cdfa2d9cd3b2c07366d", + "structured|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "1c47e61892d78749b44482b6d84a5e6d679aa5f9d97a9cdfa2d9cd3b2c07366d", + "captured_context|exact|": "8a5332176457dca95aad8911d3a81713940512b469a6a01521e5d71ddb31366a", + "captured_context|normalized|unicode_nfkc": "8a5332176457dca95aad8911d3a81713940512b469a6a01521e5d71ddb31366a", + "captured_context|normalized|casefold": "868d8aad20d09757572c0f83249d16720609d5efbd6d11eb3fec39b1c966ee54", + "captured_context|normalized|collapse_whitespace": "8a5332176457dca95aad8911d3a81713940512b469a6a01521e5d71ddb31366a", + "captured_context|normalized|strip_punctuation": "28efb30fa67de8b327fa027a42f1c5d570fe0506bdb6bce6d30f6e0a6c1efa14", + "captured_context|normalized|unicode_nfkc,casefold": "868d8aad20d09757572c0f83249d16720609d5efbd6d11eb3fec39b1c966ee54", + "captured_context|normalized|unicode_nfkc,collapse_whitespace": "8a5332176457dca95aad8911d3a81713940512b469a6a01521e5d71ddb31366a", + "captured_context|normalized|unicode_nfkc,strip_punctuation": "28efb30fa67de8b327fa027a42f1c5d570fe0506bdb6bce6d30f6e0a6c1efa14", + "captured_context|normalized|casefold,collapse_whitespace": "868d8aad20d09757572c0f83249d16720609d5efbd6d11eb3fec39b1c966ee54", + "captured_context|normalized|casefold,strip_punctuation": "5c74f814e3bf1d20abdbb93e05c40821bee229322112ae0c9403349bb986131b", + "captured_context|normalized|collapse_whitespace,strip_punctuation": "28efb30fa67de8b327fa027a42f1c5d570fe0506bdb6bce6d30f6e0a6c1efa14", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace": "868d8aad20d09757572c0f83249d16720609d5efbd6d11eb3fec39b1c966ee54", + "captured_context|normalized|unicode_nfkc,casefold,strip_punctuation": "5c74f814e3bf1d20abdbb93e05c40821bee229322112ae0c9403349bb986131b", + "captured_context|normalized|unicode_nfkc,collapse_whitespace,strip_punctuation": "28efb30fa67de8b327fa027a42f1c5d570fe0506bdb6bce6d30f6e0a6c1efa14", + "captured_context|normalized|casefold,collapse_whitespace,strip_punctuation": "5c74f814e3bf1d20abdbb93e05c40821bee229322112ae0c9403349bb986131b", + "captured_context|normalized|unicode_nfkc,casefold,collapse_whitespace,strip_punctuation": "5c74f814e3bf1d20abdbb93e05c40821bee229322112ae0c9403349bb986131b" + }, + "param_token_indices": {}, + "rests_on_confusable_identifier": false + }, + "identifier_crop": null, + "identifier_region": null, + "landmarks": [ + { + "relation": "above", + "ocr_text": "Name", + "distance_px": 151, + "dx_px": 50, + "dy_px": 142 + }, + { + "relation": "above", + "ocr_text": "Name", + "distance_px": 152, + "dx_px": -54, + "dy_px": 142 + } + ], + "search_pad": 80 + }, + "text": null, + "param": null, + "secret": false, + "field_label": null, + "selection_commit_key": null, + "selection_region": null, + "key": null, + "modifiers": [], + "drag_end_anchor": null, + "scroll_dx": null, + "scroll_dy": null, + "expect": [ + { + "kind": "region_stable", + "text": null, + "region": [ + 0, + 255, + 1280, + 545 + ], + "phash": "fe4b96c1c9196970", + "phash_tolerance": 16, + "timeout_s": 5.0, + "template": "templates/step_040_expect.png" + }, + { + "kind": "text_present", + "text": "Medical Record Dashboard", + "region": null, + "phash": null, + "phash_tolerance": 8, + "timeout_s": 10.0, + "template": null + } + ], + "effects": [ + { + "kind": "record_written", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": null, + "value": null, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": { + "literal": null, + "param": "email" + }, + "key_field": "email", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "exactly 1 patient record(s) written", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "title", + "value": { + "literal": null, + "param": "title" + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'title' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "fname", + "value": { + "literal": null, + "param": "fname" + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'fname' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "DOB", + "value": { + "literal": null, + "param": "DOB" + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'DOB' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "sex", + "value": { + "literal": null, + "param": "sex" + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'sex' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "street", + "value": { + "literal": null, + "param": "street" + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'street' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "city", + "value": { + "literal": null, + "param": "city" + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'city' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "state", + "value": { + "literal": "MA", + "param": null + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'state' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "postal_code", + "value": { + "literal": null, + "param": "postal_code" + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'postal_code' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "phone_home", + "value": { + "literal": null, + "param": "phone_home" + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'phone_home' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + }, + { + "kind": "field_equals", + "match": { + "email": { + "literal": null, + "param": "email" + }, + "lname": { + "literal": null, + "param": "lname" + } + }, + "field": "country_code", + "value": { + "literal": null, + "param": "country_code" + }, + "expected_count": 1, + "new_records": [], + "identity_field": "id", + "idempotency_key": null, + "key_field": "key", + "count_new_only": false, + "forbid_collateral_loss": true, + "risk": "reversible", + "probe": "patient field 'country_code' read-back", + "timeout_s": 5.0, + "needs_operator_confirmation": false, + "readback": null + } + ], + "api_binding": null, + "risk": "irreversible", + "risk_explanation": "operator-qualified override: irreversible", + "risk_review_required": false, + "wait_until": null, + "guard": null, + "read": null, + "read_gate": null, + "surface": null, + "opens": [], + "surface_origin": null, + "closes_surface": false, + "dialog": null, + "timeout_s": 10.0, + "identity_armed": true, + "identity_unarmed_reason": null, + "identifier_crop_missing_reason": "structured identity (DOM/UIA/AX) owns this step's identity; no identifier pixels persisted at rest — mark the identifier field/region at record time (--identifier) to also arm the pixel tier for remote-display replays", + "hover": null, + "submit_binding": null, + "submit_binding_unbound_reason": null + } + ], + "interstitials": [], + "program": null, + "subflows": {}, + "data_sources": {}, + "qualification": { + "schema_version": "openadapt.qualification-project/v1", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "revision": 51, + "previous_revision_sha256": "5be1c5caf2e597b3716ae48b33847dd7a98919b8f19e76282911eb56fefd781d", + "created_at": "2026-10-20T02:47:34.993889+00:00", + "updated_at": "2026-10-20T02:56:34.858042+00:00", + "environment": { + "target_kind": "web", + "application": "OpenEMR (local fixture, made-up patients)", + "application_identity": "http://127.0.0.1:9311", + "application_version": "openemr@7c96c8eefe46 (benchmark/openemr_local lock)", + "environment_observer_id": "openadapt.qualify.web-environment", + "environment_observer_contract_sha256": "25c2d28794ad31768d428cd7078021ff8c31e6465e5b3c2c815209ed242c88cd", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "required_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ] + }, + "minimum_effect_tier": 1, + "action_classifications": { + "step_000": { + "step_id": "step_000", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_001": { + "step_id": "step_001", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_003": { + "step_id": "step_003", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_005": { + "step_id": "step_005", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_006": { + "step_id": "step_006", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_008": { + "step_id": "step_008", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_009": { + "step_id": "step_009", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_011": { + "step_id": "step_011", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_012": { + "step_id": "step_012", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_013": { + "step_id": "step_013", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_015": { + "step_id": "step_015", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_016": { + "step_id": "step_016", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_017": { + "step_id": "step_017", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_018": { + "step_id": "step_018", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_020": { + "step_id": "step_020", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_021": { + "step_id": "step_021", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_023": { + "step_id": "step_023", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_024": { + "step_id": "step_024", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_025": { + "step_id": "step_025", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_027": { + "step_id": "step_027", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_029": { + "step_id": "step_029", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_030": { + "step_id": "step_030", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_032": { + "step_id": "step_032", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_033": { + "step_id": "step_033", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_035": { + "step_id": "step_035", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_036": { + "step_id": "step_036", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_037": { + "step_id": "step_037", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_039": { + "step_id": "step_039", + "classification": "read_only", + "explanation": "fills or navigates; writes no patient", + "operator_confirmed": true + }, + "step_040": { + "step_id": "step_040", + "classification": "irreversible", + "explanation": "writes the patient in the system of record (verify.yaml save)", + "operator_confirmed": true + } + }, + "identity_policies": { + "step_040": { + "step_id": "step_040", + "enforcement": "canonical_ladder", + "signals": [], + "quorum": 0 + } + }, + "effect_policies": [ + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 0, + "effect_contract_hash": "sha256:f64985856097097954250be6523fa260daf9fc5db495671c2548ead9a388577b", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 1, + "effect_contract_hash": "sha256:206d1d6fc27df6f24c02bb6b6f4419e0612e7935ec7e744fc8cc446f54558385", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 2, + "effect_contract_hash": "sha256:8f295459bdd868daf117ca9f77dd948cdc2c8c034a65184cb5418ccfab7f60e7", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 3, + "effect_contract_hash": "sha256:52c6884d06d82c4ccc14600150f2890bcd25d92cb7eb26bc53ef54033075ba3c", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 4, + "effect_contract_hash": "sha256:7732675a6e6123c0c3f51512496f695fa4ce503ab989993c520fb8a469bbdc3d", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 5, + "effect_contract_hash": "sha256:598fb97e12d3c0b537f0453e7fdaad453b969e249e888424e67fcd85a06741f0", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 6, + "effect_contract_hash": "sha256:ba109cf90077d7b20a37c2848fa7bee8ea0039747a5ae47465617b2ea1039a2b", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 7, + "effect_contract_hash": "sha256:f508b7fd1536726db75a0814fc439c65dbd6c0b637a7b619855c73a571bcfca9", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 8, + "effect_contract_hash": "sha256:b311b51ece1670a60f793b29aa3d28d40da196ffbcd26f2fdd620e380dedf97a", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 9, + "effect_contract_hash": "sha256:a33cf54165b96ce6d48014e6e68bac94cdc8f9c9176bae6f5c955123d20683c2", + "tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 10, + "effect_contract_hash": "sha256:d2516eb0f6aa365b812e84fd754127d053d8e0b1a4b349a0b8ce71936bcec199", + "tier": 1 + } + ], + "entity_labels": {}, + "cases": [ + { + "id": "fault-ambiguity", + "kind": "ambiguity", + "description": "Deterministic ambiguity refusal case", + "input_ref": null, + "runtime_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "action_targets": [ + { + "step_id": "step_040", + "actuation_path": "gui" + } + ], + "expected_outcome": "halted", + "required": true, + "results": [ + { + "case_id": "fault-ambiguity", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "738a56b9f509443a7a5168745c0b474a7aeb8458d051075acc23c64af34c6e1b", + "evidence": [ + { + "kind": "run_report", + "sha256": "99d0d163743c7eb7a08e2c723109e94fc7d3c6559b80180176cca19f5782dfc4", + "relative_path": "cases/fault-ambiguity/trial-01/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-ambiguity/trial-01/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-ambiguity/trial-01/oracle.json" + }, + { + "kind": "other", + "sha256": "0b14432d3eb1c113deb837e3a40eb2e9d23e15ad6b10a5716c87afb11b15f1f3", + "relative_path": "cases/fault-ambiguity/trial-01/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "1b74863767baf27087a0c378032d223136c87cd8eae29ae63f03f920433475fe", + "relative_path": "cases/fault-ambiguity/trial-01/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-ambiguity/trial-01/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "4a26479a8fdfb8e8e07a69b979befe4a4897f5e6bcbbb2cc4c804cb87e260e99", + "relative_path": "cases/fault-ambiguity/trial-01/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "f60561aedaf104e0fc9a2d256637a94189d3ec246ca4b9f265daa7690ad99650", + "relative_path": "cases/fault-ambiguity/trial-01/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "7bb1cfeb62e9046a770a3ad85b42017ca4aa3c7957b6f6c205c1443024ee1a9c", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "1f32b19bdaec4ee6bb9c7c153559d53e08786531a3f42c6104397e1b7500208a", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "fbeb573c21373ea6148ff3bb559ff2a69662513ca164d65787c286e6930fa1e8", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "ec03b2414451c79e052d6a3344e0d56ddc7a1259f19272bee15fcb3be18faca1", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "56dad9c7e5763fcaac0746df366b6bc882e1c053a475e22d9ab1ebb157464c1c", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "bd5c4e13510406c074cf81fd12ffb6aa12efa9fd027bf20087790dfc66722e1b", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "963e8edbcb103acc3b9fd9951accc320f346da6201f2764f8ecdcf6bdf61b0c2", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "88013d168bd24ff7e802d1aaced3f36e239547f164f83693f0736d459bbd9e38", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "a71ba9522ebc4130dd51c3a7d23d57c0384b29f26300633fc911489a21f8943a", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "6160e8e7687d9abd369e9c051ccd2769973cffc29bcbd7732107a2c6bc5dc2d0", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "be5cffe9c5dadf73a92f0f1795661b921ba84999441ecfd1592bb26ce9973e79", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "167b78a1c891ec167edaf04fc6b8ad37c1d7934e63584a1367ecd9f70c3ccea3", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "9c324c8ccb1bf3c89b1c969a0036d2deee180b83c013464fa4bf26e99a7406ee", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "4c4bf37bb8a296181df33d890dc55606e996200863947193ae9c0de0edb34c0c", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "71889b687d82787a9cc72a2026a0b6e66211dd663917dac47da365979be73f56", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "8e27d50daa79a0b7e1b4e1cbe543e96b5c190e3b982ad424196ca510cbf831a7", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "32f7b3721fd9efa31a8187704541614d1ac210bc3f8af4537f19809953a50e15", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "ee101445b7b5758a7461c5d348b192628bb915315e8777379e4a8904e1312c72", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "f486bc2e643f11103467a2749a2e7c80f3d7a4d3489fa1ada90f02c30186700f", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "6ac673b71ca7bf36ea77590cb85f6dbe02d34647c00ef4790c97dc3bab017a8c", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "ab75beb8cee9cb74624a669369c02e97ac849719102ce4c0f75f14a83681a906", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "23d4c8f29139d253e6f8b49fd216f9018245cd68401099d885bad42be52882fc", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "88f55106e6b1da72affd8ece122d721fc8c9c565202aa1c33e7b762413449aa3", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "43aa444178479fdf91b987b0c8b1b34880c4b597aa5e58dbc90b2bcb0651be98", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "659a78b6fb9611d37a84778e95342bb60b0dd31815b5ecf39aaa70e3f6559a97", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "cbde35128293c19eb60eabdd33e9754ed112accb2ca27270647109b9e57ab0b7", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "c3e951f0866553347dcb808ba9c01344419195c0274e4ebb8eb7416b041d6702", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "44018b716914901a1b3bfad071653264aea4fda8b07e8505648a1c62ba2773a0", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "9520b913a4df216d9854d83976e11f4f27d135546380b000fb9653eb9976b131", + "relative_path": "cases/fault-ambiguity/trial-01/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "d6428e8d989835f9606301418b72e8e1aafb889093a8516c60981f2d78af1f28", + "relative_path": "cases/fault-ambiguity/trial-01/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-ambiguity/trial-01/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-ambiguity/trial-01/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "758ca2da6a7bf3eb27b1f6d1272bb1948f14e732dd1d82405dcd2a9cd50804db", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "15789a0180c7522ed324e1bbf0d35bffed968fe4e8acdad59df2d468a8dacc22", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "124ba3897557393e246a9a4128d236021d664e85e1df64cafd6a882dabd81d7a", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "85f5110a4852bd1b37465ea8d7d6181982aab8cba6f2329a83fdcd861e4a2dc1", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "df131f62b283384b5a0266c037c314304308e4407401d901148546b8a2be6abc", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "d340b9a508bff667de8a7239a01995bec2ea2f486173e3f712a8171c8826b2e6", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "d78993e83d30b49ad73b24d885306a4f1d1508d39c9fb2a0d6d21bededc88a82", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "3a549550b51f3ec2df374fe39036437a2dfbce5818c1b7b10ff3b90c2f5ecf24", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "fd1e99af94186d7051a2109ea551f444bd5f9bef1274f2c69fcd96ed8e894ae9", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "87e20b033d1ef137771b2fe7f5ace3ae7aae7a3eacb8bc39b3097948d63d65a6", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "4468b5fa4dff832498eee5b16f5e0b7804b936e62c537e072aa90079a095d2ab", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "87e20b033d1ef137771b2fe7f5ace3ae7aae7a3eacb8bc39b3097948d63d65a6", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "5feabfa31531807d42c9965c3b93375fb6f771fbf4a3d4d8a2cba602aa276e22", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "c3d24dd1fd540365d611071f42e7f6d02c139ec4ef6d34e29aaba460a2ced22d", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "b99b1bfb47d1551452cf9dabc989a6eec0e269c3039382d1ce37300880523c60", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "41a2a5d60cc04650b88e44a88fa5396bfe93fcb60917b76ed1da7971ed286bb1", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "9f5861bae6cbb27dc409490dac254549ba35eafa7ac04376814ffb78ef253442", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "893bf96f40064bed66bf92e921f2abc7b1dfc37a3ee03d5d034d632926e15d32", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "5cbcc7c1151e909b305848f317820422ea0bb1a83b2a15729558b70f984fbab0", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "360d2f27855146cccc3f75f343a18ad1b80b7f0b8d4cce13a60d5324826d444d", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "7ea17c9c44d5f873e2c3cd604ee2578d9578a96fbfbbdb95766d1617471e0cab", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "3bfe972b2a65f739f465ca05d1a1291f8b3ef3d660601efc4ffa1e486bd8a0d1", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "93c63fc7b19f52692ca3c40449c39e26a7d8d921241484c05228863f4f4d7852", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "182796012a4ebaea04c5c27febd50033fdfd8a92d0cf218b0e6b76135d9b794b", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "0ad64524bc70e5a0278a41c5bf26d326b0bc5349a1f11faa1d99a91b46488e53", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "37099c55decc85a1975ecf3435d3724b9a7e1df1af1ad47f06aff44779387aaf", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "a8658da9349d3a66e0003764ecbe7070def4eedf68d69add43a056abb52673f4", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "ff8c7f62ed1b7d602aab20443889dc2395b88f15641fb6c24cc53e6f0c126631", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "b3efdc8df122cb2f2fb1a98a3510e3e0b0633f3ff1221b20bb268b5e4eb2ba33", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "861ba4bd053a9bcb0e80075e9b13e2b9409a22ca84a6a66f55d5fd46e47f918b", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "fd2ca3799736faaab1672c03d0fdeb3aa3627ca0c25700c6486d75b471cd0a3f", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "e243fec2a0727b2f9ba3052b3b99351df4dc2782f32d5a0ceb75abe790c360ce", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "00b5884819bf18c81455cd949ae50ca22a32f64b64c5bb4039189118bab9f7af", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "00b5884819bf18c81455cd949ae50ca22a32f64b64c5bb4039189118bab9f7af", + "relative_path": "cases/fault-ambiguity/trial-01/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "a417f4071a66b9d11aa9bea0295b0d53f12f8109f5f59820beae49520430c208", + "relative_path": "cases/fault-ambiguity/trial-01/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "d2ccdfbe6bfa731c01529d4037934302f66c2ac811123c5d8a7fe2eb6e9b23b2", + "relative_path": "cases/fault-ambiguity/trial-01/fault-mutation.bin" + } + ], + "detail_code": "fault-ambiguity.01", + "completed_at": "2026-10-20T02:49:16.992898+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "ozHiRkAY6JwYQupZ8sQLIOH2FzcwUOGsBNfH7LtBpvN53PT3RaNMHUabsbtgFcQ/2yfJHp9sRy2i6/eEtYQoAw==" + }, + { + "case_id": "fault-ambiguity", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "e949f6eeabf2fac6660f23aee8bcb846ee0aff7cf66ad141d1768defc4a00486", + "evidence": [ + { + "kind": "run_report", + "sha256": "444315d0e816cd5e87390252bcf219b9f39713afa6295df493adf44996998ea9", + "relative_path": "cases/fault-ambiguity/trial-02/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-ambiguity/trial-02/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-ambiguity/trial-02/oracle.json" + }, + { + "kind": "other", + "sha256": "6910f9626c159eefea3a449840e5b5b6c5447c3780352f34be78898eee18fa85", + "relative_path": "cases/fault-ambiguity/trial-02/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "d1f1885f96c1a28e30ca3a53f4c97c0aaa7a0c80fa6aab5702faf97b05482be3", + "relative_path": "cases/fault-ambiguity/trial-02/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-ambiguity/trial-02/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "0172f86b57b98452bfb2c4eea16e49d5040574daf18120179b823b63336b690b", + "relative_path": "cases/fault-ambiguity/trial-02/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "388edd0996b6869c1c9533275e880950d4dee3d4157b417732984aa84fb4e029", + "relative_path": "cases/fault-ambiguity/trial-02/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "567a5b6f8bfcdf5ca571cd14c69076aa0b8b273b4b27b3772e057258387814d6", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "1a4f0e6811db6c530378ff8ce51b8c0ff863e8e1fa0c1956677a5799a6ca53a4", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "6000270d05c223fc17541606972f35ac4debbcd72e6ed660167efec2f884c4ea", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "5b486cfdd17be28fd616e1441c7e5c6f8c5d6e49c9d5e27dfe3460d5d975820a", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "a6bc9d23b8ec59fca0960298ddd7bf4f9c124d87d9d24829d99a38e914fde36c", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "6b23c193b4c6e8e9882b289e98444e036c40f19d3bf33948ad545c853d65e627", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "928bb86a71d662987b372d700ab15350eed6654458c552bd101205ccb7b1a864", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "05f0e3dcd3c6978558c8ef145565fc6cb366afcb3fc5e3c1660c7dff45369b6e", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "528ec6fa155ce47a308ddcf2f12480fa185b1ee86d118d68204ba3ade8cd85d1", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "888221ce76a835cc8056ebc29959be4529bd1418e6dedfa6a3e67803d1ab00cd", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "733ea481d862242dd6f39aad324c8c9ae96c6cdfca2cbb5b97698533a8d3f7ff", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "60b387fa814657ee168fd3335e22b663cc020cf5baa750c7276fe8f6902fd976", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "984ba7017a83866d028501b4b77d797cb2bb42257fd321ded623d3e41cc56f4d", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "f3da7d53aef6d7ea975cf8e021b9228b740730a1983e97fbbfa0ade009058518", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "9aa27b02e20be0024f8096271b2e4b9cc144141e067bae71537b8b3e77d46f2a", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "7e95e93c33e709658b2097af072c215a27c60ef1d3856f8119b7236734e4a095", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "5434c3f1bc458201cc08566fd336c20a47d94a6be29e0ef5f4a248f141ffef29", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "8c6b1de449e33476c054a0f79af49691f69a1286ea8f38fea2eabbcd7a38bf60", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "dc2afc29fd6116e29d108f2fd61dc50b02d2b3e4b6c13b739b9e7930599b02d7", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "34c3e2b963239a8ff0cb23134f7913ce03e8db3f25b04478ef0dd9a2791dbf2f", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "b5183ed4ecd8ff063bb13e3094486e98d80ae549935ce23fe980e2e15e16902b", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "b0d173381e515bae530361782c1ffc9b27611247267763fb06ae9087a8eb0764", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "72cac9766f04ad3c030dc30a01e1ecd9eee278884fe7488e74a9294e1428257d", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "a844abbf6c15aa5321845ddc3b14396a0111411efbd5516ce4f327a74fa09b2a", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "75102e907a995e466358a54b245422abf432cd6c362f61c2ad32fd87f116c585", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "20da733d108537707b6b355cbff58ba52ea101c042c1703129a10eb516373e13", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "4e5e48078064d3d881a7c78b76fa4ef35f6ad48b7b01b044c1412c5210d39c82", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "07679fab1707787e8228b1f018c5c2f4ac9deebc3b61a7bc1bd7289d8222ca1a", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "f28911ca0a77d954eeb182d8456f3c1124053995d8f9843ffedd9447fa3aa6b7", + "relative_path": "cases/fault-ambiguity/trial-02/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "cebded4065e638d0928485d152b302acbad00ac295a8eab3aba0be5e471542fe", + "relative_path": "cases/fault-ambiguity/trial-02/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-ambiguity/trial-02/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-ambiguity/trial-02/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "3e5cb4442f1afb3551d0e67297061cd85be7eb9a67f00529a6d71ae9d0ffbb8e", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "a7ab2c13b4fe99634ca33509531e7617775e111cfdd46fdc20ce6d1616f0a09c", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "c6f46132bd7422d9f189e16f0f1979154ba2d6be4371b69e478e2a14ba0f7fd6", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "c1258059df43e1599e1a91b014a0b353a5bcb1ee85ca0030fbcb60f3325f7ab2", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "7dc095f12231847ab79f0238a73fc7139080a892aebd4b9dbd6ae849d8f7fc52", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "d5581d8ec8b17707e203d92b7739455f025ba70d53f7534ecd6a154e0de40375", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "5152230d112342fb5c77a66aa3cdb428f3f75d3150122dc896793f578010a3fd", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "f74a01c8851896553fb971acf44d10c0cf75c47852e09cc7b8c94561e41773fa", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "c7d09eb44412dfdda5e818888bfee9d7880b9e5eeeb4e3a3dd0be13dbafa65fc", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "6040e433878e5016e4f065f4315af0e0624e6ed52da781857be737b5f60c85cf", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "c54beda44fa60a89f1c32a4160956c9ec32946c590d5618aa0294132a7bf3259", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "ae52ddd312e1347915c89511e2e6fee1624daee96fadbd749383625657370352", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "ca7221a706d84998ef07edfd20277086a7bf48a0c9a3596519269fe5e059bdb8", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "9ca5ca69e0fe01285d93685670422b513915b422f4338ece1872bf256030cfca", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "26afddce8a20c45951863ca4bcc6565529574ef09fe410f303f42773ff2d17de", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "a37b07d0543dc9cceffa6afdad3d75362c18482346783e100513d3e83eb73b0a", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "a05e10a3211ca948e54d3d312412709d522f28e3e615b618d3f1ea68d9bd126c", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "b4a35ceeabe8235a61eb070c58ce66956b1436fbd9b5f7da97b6235cfe3bc3cf", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "3711cf7f656737657ee3e95e23e26deab0bc0205f1bb1415b5e79a0fe25c96dc", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "edd990866c5521c814290ab9c4e6585ffaa6e9723f0d574ae8c2b61dd3171244", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "0ad64524bc70e5a0278a41c5bf26d326b0bc5349a1f11faa1d99a91b46488e53", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "b9800603d8af8394c14c1c58a757679d5c42ae6ec3000a5af845da7071069cfa", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "1f5d6a98a2d30d87e5fbaed5b1b9f1ceffac64c475fe09690d0caaa601d82a10", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "3bfe972b2a65f739f465ca05d1a1291f8b3ef3d660601efc4ffa1e486bd8a0d1", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "7ab6d609985d071e28828dcc4df72681d2d55416d0c63fdf7617f21e8bd6bd87", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "28aec824f9f15859669e6493e72143a57e75addba47e5ebbb44c6f8db58b8988", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "da1539d8ec919b1c076aea9f4ba76bb7529d789048e7e735c50c974e0940ac99", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "c84e9bd78a834b5bc5b507fd5703c99f005fdc5942b55dd2f07237658aab94c5", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "939dd19cc1ac52567d8eca67f938cce8737e07fa4ce7f87b9b41b9b517019a12", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "1af32cacd4e8ac838a84e2d1221462a63c370bc43734134d0e98087de6bfda77", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "b3b2c085a09be2ad4c3b76114f36642118da69abec9a5d8ef1768027a20882aa", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "00b5884819bf18c81455cd949ae50ca22a32f64b64c5bb4039189118bab9f7af", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "00b5884819bf18c81455cd949ae50ca22a32f64b64c5bb4039189118bab9f7af", + "relative_path": "cases/fault-ambiguity/trial-02/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "96b879c78e6e0bb3f23b081d2df443e6f3540297a72c3b6105be540d048ffbfb", + "relative_path": "cases/fault-ambiguity/trial-02/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "d2ccdfbe6bfa731c01529d4037934302f66c2ac811123c5d8a7fe2eb6e9b23b2", + "relative_path": "cases/fault-ambiguity/trial-02/fault-mutation.bin" + } + ], + "detail_code": "fault-ambiguity.02", + "completed_at": "2026-10-20T02:49:38.785092+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "LkGaPLZTxkPQXDhEovWQgZXhGZCwesNpx/ZPRpw85hiOJd8nxDM5d00TGTlp4rGq4SmQaG92DvDHZOK3PmABBA==" + }, + { + "case_id": "fault-ambiguity", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "8ad59be4bde67a6b7dc47aabeb241a44eb4f7f98fc97b74f15db0506d67ad8dc", + "evidence": [ + { + "kind": "run_report", + "sha256": "7cc489ddf93b81e8cea144f75ee230a1a66f2cc7a246768c37d8ae35fe7a0063", + "relative_path": "cases/fault-ambiguity/trial-03/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-ambiguity/trial-03/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-ambiguity/trial-03/oracle.json" + }, + { + "kind": "other", + "sha256": "504e765116fdb473f8cdf0cdc5ed3a7f9a4ace9a9bd22dbf197068ba99f46bbe", + "relative_path": "cases/fault-ambiguity/trial-03/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "280c1b40556ac4e2df45991b9b3170d59e36461f10d505b03391a3f1883deb65", + "relative_path": "cases/fault-ambiguity/trial-03/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-ambiguity/trial-03/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "baa3ed98057881ace186b8049c144f667502bc493b27dcb02d5be2fdcf50de88", + "relative_path": "cases/fault-ambiguity/trial-03/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "2bd0d8c6bf0fcce608b02f59158df3bcb073842d20a53c20c498bc10f23821a1", + "relative_path": "cases/fault-ambiguity/trial-03/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "7e1463623edec834778cf77f00376033300a8d18e9031a00508e5ac1d42bbad2", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "0984439c17155412da8cf7633dc69812ddda07c3018ba0b0d023b11cd3c0e71d", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "22b88eece76adf8bee64838fabd3ac3646201ccf95867841ee86223c1bfea0c9", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "7b82f1cb147afc1d15692f876628763ed5c43707a6c2c7c05e5f1cfd60d6a7cd", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "256827449c814e953f94cc7f5714437e2b8e27a2cf4d795f387e7697b26f9c0e", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "91d741a6199556f9e690c3376134a08b9a9a5ff5f192c5a6b9aa112ac06187a6", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "d54a059ab08c019293cbf5e8da9b287c2389844b38cb3be0064647d7bb7b03f8", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "32f2d58b8bfe855b4d276b9328902e300544e63c696d7d15e65d489a9df13f63", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "a9fa56806d081858271bdbed7a3a0ef025b7c59aa4e1abf7d2b572b1e3b2ef31", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "1ed0bad581d962f2910385f95057c55a4ae177435f57b2c0b245a460396b1162", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "db22aa7d555d4f8c0e0b024b1d29ad5f8cc111b72f22a02a9d971ecfcf43c78a", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "429a4e1cda7be33c42387243f484ecae4f8c56b5fec0a67a222d47c5c0c8c1e7", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "472dec4853dc8b375d401c2f0b4c03d1d02696237daa94373f9bcfc97c2be07a", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "cfb8fda71efb67aded16cfcb162cefc24dad04ee9f857719db84ad447377ecef", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "4fb709c865d863ef4bb530ca80c917cc19d3d9c5087f295b3075c52084a4e80b", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "a644cad4891f23f3116c9ed9cf47650658a2180702531e0d4c02ba8490d35990", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "edd75f38d87683e383a8ed48ebac5e0bc1558414284688550929a285d9cb7f73", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "ea7104afed43762060a07f1d2c072304405ef1a85393834bf11a98b2284ef8e7", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "6377ddda51a950081eb5269f98a8c08e75353d97f34aec4777ed5610efcf4253", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "d8d92cbac793a1b94055179a76852cdbc5dc433e558dd22d5be6ffed0b490b93", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "f8655d96f3c75379b42fdc18b7d6342cef5bc360c93f57fb25cae07e0c0ef6f0", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "ea187c5022b5b55cc5e1d67944b6f0a1da9030b5a71ae916f86774e7e3c0dac5", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "5f44da517efa29328ae16050ac3e479f11022b280536e6e4aa62d8e7e189c510", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "2dcf5753fc4e6e10d7db116e98b7ad01e5128420e007d104161c4a5369273d5b", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "b2299090d6265deb773b5cb5b2b03f9dc1689677848df8b76bc49674c6cd527d", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "e1a29e7e7d0895a778cae050bde13d4e14871b21c6eb81397e62c7193e828e6f", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "06d9fc12c816eeea764147f4c9371fb5895ed2fb3021e311f2c331c523b01574", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "482d2aeb8df463a477b3f385d81b07b803212ebf0467a362e6782a6e1eed28b5", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "b4f710d235f59c67a0638762b77dd9fbb72f568282e43885a50fc792836a70b7", + "relative_path": "cases/fault-ambiguity/trial-03/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "797845a40a4ddb7b47790442a77d8fabb87b43abe3d37f37e23b0b0aaffcbb73", + "relative_path": "cases/fault-ambiguity/trial-03/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-ambiguity/trial-03/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-ambiguity/trial-03/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "5884a590c2a665b233f7867d9963cc095af069fc40cdf9579ba4bdb8ae99c4c9", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "4993c247f1d66302c5669e86e3e3d963bfd349592c2572f54bb56a72bcd244ed", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "cbaae6c95b577aa72b6d4da46f924754f4b0ec0a67b8eadc89a7f155a22843ed", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "91aecd2dcd2693042c51a60ae29f1eb6a55490fc8b837a5985a2f86482066e58", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "3fcb9ae62c8c2277f3d4d27daaa6d935302e6f5f06a6d005f1375792af81a196", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "8db27ccc362af4d56c46ab00d5c9061d6942bec7db9ef73d09a80dd827f8485d", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "db0faeeed0b64c47da251f44da2f527807e09f5208a14be20f605ba2f99b5949", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "95336a7e5a3adfbff13a9cacaec52490c04e38c047527cb716ad7b3233373057", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "ebddda9ecabaaae75e23ad09c4ee91964197ff8902774789d83a4bd75dfc889f", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "41899f4d448f839b35edd066d5c5dae9cc7c84deb46c5dc1c774b01536c49883", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "4fc3e19a0ba34493724ddef65bcf2c28877d5b1381e0baf551e0d731e28e8cf7", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "46f40ecbe96f2a4c238b87d074c7b440ba5968bb0167aa6e9a4627f5156477a9", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "62f15534900084af51932bd6b6418a1d8ed16df71d89f38ec6685bac99c0a34b", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "c3d24dd1fd540365d611071f42e7f6d02c139ec4ef6d34e29aaba460a2ced22d", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "74f2eaab45c27c13b72c402fc0b3b9ff9a01c60a0c0b4a0addf4d84b0c79945f", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "5cbcc7c1151e909b305848f317820422ea0bb1a83b2a15729558b70f984fbab0", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "01a7fda08f8f4e006c0efb69ad043938b1982262453cc8632a8be167dea0f7b3", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "b4a35ceeabe8235a61eb070c58ce66956b1436fbd9b5f7da97b6235cfe3bc3cf", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "41a2a5d60cc04650b88e44a88fa5396bfe93fcb60917b76ed1da7971ed286bb1", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "03e3c8fef205f311f21d2289c9de41f34f85697b8ac81fc0603335e676f8d6b5", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "ad9cd8a35a2ce466383d744225839a7809c8afc05361c9092dfc48bfaa194bcb", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "669bdaa42f5d530bc957f0318e3e9ac2c232b1cb16bdfa5932aa00ff5d7fa3f7", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "5a1731e51f8fd85f30cc12c2fd846941fde7e44bf160f895f1c27e90fb989101", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "e067b0efc157402f56a29cee58fdc76de1a8985e49d4ba5910a9d7aa8bbd6d88", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "02588db579a0c3716189b38957902c6f855a42aec141b3be7f0e3c8c00a08e42", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "a3d3c342b4eeddb0fec83534696a2198fcedda9176deb4acf8d27b4ecc5a12d0", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "8f7952b1a7e32bb3e1e432f6eb7fdbe73e30dfef919d788a6ca864e8cf0ef502", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "f9c80e2a669effe6913170bc3097b60a1663a1c47b5df55a0b0da444374d4556", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "0c26b7f08765699a77d899aa5834f53ae80e5cbc26c3cbb5b796b01df2fa6b60", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "e7a7bcf083d3eba0f3a5f5cba7cfbefec6ae7425dc6ab63a4e8861ea7c55221f", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "72275a9a9c0d7e3f8cb1cd0cfce85f73f56073742932e7aa6dab177788fd0593", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "b3b2c085a09be2ad4c3b76114f36642118da69abec9a5d8ef1768027a20882aa", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "00b5884819bf18c81455cd949ae50ca22a32f64b64c5bb4039189118bab9f7af", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "00b5884819bf18c81455cd949ae50ca22a32f64b64c5bb4039189118bab9f7af", + "relative_path": "cases/fault-ambiguity/trial-03/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "a81aedc2d827e40e3577f9429aad56532c23f8ad2db320b09b323f0d12ee0f16", + "relative_path": "cases/fault-ambiguity/trial-03/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "d2ccdfbe6bfa731c01529d4037934302f66c2ac811123c5d8a7fe2eb6e9b23b2", + "relative_path": "cases/fault-ambiguity/trial-03/fault-mutation.bin" + } + ], + "detail_code": "fault-ambiguity.03", + "completed_at": "2026-10-20T02:50:01.533706+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "L/zJq0fzW2ceUohi5CKJTm5+RiHpF9fWRuJbAvv9UIc2+jW6khuKuCCcXnzN8QWlY/3jHz4UaDBUSIOHHQUSBQ==" + } + ] + }, + { + "id": "fault-wrong-identity", + "kind": "wrong_identity", + "description": "Deterministic wrong identity refusal case", + "input_ref": null, + "runtime_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "action_targets": [ + { + "step_id": "step_040", + "actuation_path": "gui" + } + ], + "expected_outcome": "halted", + "required": true, + "results": [ + { + "case_id": "fault-wrong-identity", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "dec89c94922aa92bac7d337653fee3aebf9c2a8e04a9a451ecdb887cb2d23c1d", + "evidence": [ + { + "kind": "run_report", + "sha256": "ed31e9f113881d8af4113fb54e84dca174cb0075e74f8535c71b111b5c49c0bd", + "relative_path": "cases/fault-wrong-identity/trial-01/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-wrong-identity/trial-01/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-wrong-identity/trial-01/oracle.json" + }, + { + "kind": "other", + "sha256": "3a518d93b7a2dd067ab90d978bdf392356279222d024f29808c893a1b883f1f4", + "relative_path": "cases/fault-wrong-identity/trial-01/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "e32497daa679a745b96397b2f5da571038054057f2882f29e81d8f9e6a0159d6", + "relative_path": "cases/fault-wrong-identity/trial-01/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-wrong-identity/trial-01/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "8e2b3701fe44a10efd4447541399bc6efaa7420df1a6a475f88036ea94a43ccd", + "relative_path": "cases/fault-wrong-identity/trial-01/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "2e98083b410e94986869ca39707ed41009ff365a20d4c7397129fc5964f6b0ae", + "relative_path": "cases/fault-wrong-identity/trial-01/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "23eb6edff27035acb19b051775edd7186aa5228d0d9a6a7d248adb5ecb43111a", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "cca638bb24cdab0d7d3d315826a16e420e8eb638b76a036d05c5e1876d3f661b", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "e194710e9f178bf6e66166c847781ba661a53ab485596442224e952a61b5100b", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "04b2cd39ad35553adfbf728e61beddada9d2505811a09c456f793f30b9308fa2", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "33812b6179d5931faa52642f5095231185e2d14ce3f7c6f10a9da821bf645386", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "c37ad9be0a5537e7886ffe07a6dd67fa298f0e75194f72094b9013fb06539843", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "83e399d3ac6cb1f2629020b66ff6decfae52c7e3e9dfe0a8ec6f42c07136af2e", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "b639ba006140bb757cf1d7dff7c19854c508e9b905ea7f3d82a15d18a413727d", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "e4f678bbc3b2f832dba9e052a5af70b6d2806754d7e300592d64b6035d7851ea", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "48e683df5d6b41665b3e9625200b309c7fb9b31cc5edabb003d380ff2cd8062c", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "b0e372a910b2045883ca5cf8453d6e798af9989035d72b0730dfa3be10b206ba", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "94575f324d630868d65eb2cdff2971d4a8d889b24557f4ce5ae16fe32acd9f98", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "34f4f30462210942eb67c5629a3175b556d40ba7ae8ee83ba52f2b67a5dbc623", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "754dbd8a0b350d5655dfb7d8f63517d7a1f531b3b5177761981cd7cfaf6434b2", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "eaa786612b75766d9deb0a7cdc16578d9b568ff03101a0b0a2457117dead27b7", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "c51842c4e0361f6828bb2ca062600019484a4edaadc9682be21ca14ffba961f3", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "accfd05770ca8b93d98e4b57bacff586f9040bdea4307d841c60ae8d29f1c5e1", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "44f611720e57efc36082c31d8a131a6b22d2f051766b47c36fed0820609a62df", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "5cea2765d869174e9f9e6af5697a727718a18166345c703061a59338b50a6dbd", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "dd96bb4a31bee5581c859df0254cf2ff8d4d3c0fa6aef8313a6fabff02504b33", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "434b9e4bb9811f8263ec93a06a27ceb1eda4d3d20c671d7c4b71eaa85d04be17", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "6d23d40f53c1ec8167bf0454993213e053e614dc2a22d8a32800266cf1e551e7", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "537a5e26fdabf073320e90cb22dfdb484cb4c658331e28f4c32a68203df6070e", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "463d9e4fd49bd9c9d88e9e45b7e5c6d8588c8cfc88c919757b055dc58c3c8cb0", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "af08890f5d0fe59922ac2bde94bd190c194102534526aca0fda1b860f526a3c7", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "4743e836ec80a1a997a461803c8905afb342d09a79e256042d9f612c8e095cbf", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "0aaa6d590b64a9b7b8a9134020a3040e4c28bf6a7bed416f549c6d31ac1286f3", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "e700cb4656ce8caec297f8ffed9d51603b285fab8f6aa38cacf9ee9788518380", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "11bd61b1671b1871b5de8a950f3380dd58364a46f05549110664eecb69abfef2", + "relative_path": "cases/fault-wrong-identity/trial-01/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "71b1132c3165204951978b5b166db43b62506fcc423242afc036843c44f8da15", + "relative_path": "cases/fault-wrong-identity/trial-01/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-wrong-identity/trial-01/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-wrong-identity/trial-01/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "f6eaa9e919e7f78d6f898c02ac228e7908c563e355a8f46bf6986468bf7a8642", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "758ca2da6a7bf3eb27b1f6d1272bb1948f14e732dd1d82405dcd2a9cd50804db", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "15789a0180c7522ed324e1bbf0d35bffed968fe4e8acdad59df2d468a8dacc22", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "81aad85213e12325194281d9df0fbf55a1179126382015ac1067a20e221d49a4", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "cbaae6c95b577aa72b6d4da46f924754f4b0ec0a67b8eadc89a7f155a22843ed", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "df131f62b283384b5a0266c037c314304308e4407401d901148546b8a2be6abc", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "d340b9a508bff667de8a7239a01995bec2ea2f486173e3f712a8171c8826b2e6", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "d78993e83d30b49ad73b24d885306a4f1d1508d39c9fb2a0d6d21bededc88a82", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "cea20c4bb96c971f2d9aa915546ce20e3512f4144117a974bc545d4404dae420", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "fd1e99af94186d7051a2109ea551f444bd5f9bef1274f2c69fcd96ed8e894ae9", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "3332fd9a691b81e013986d4185abff9a512ae0e117fe20c4958a87d2f9fd3e24", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "1648d6ccbbcb00a2dfcce243b5f32d54789fe3cd3123c672e19ed08298e3daaf", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "181682709bdd06f33365a50eccef4a5f39bfe76f58366c4808393dffcbefe79a", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "46f40ecbe96f2a4c238b87d074c7b440ba5968bb0167aa6e9a4627f5156477a9", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "62f15534900084af51932bd6b6418a1d8ed16df71d89f38ec6685bac99c0a34b", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "9ca5ca69e0fe01285d93685670422b513915b422f4338ece1872bf256030cfca", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "2b8b7e9ea72f8c330e3300428e54dacb97011ab72052c0c0a2b5e784498b1c39", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "d647ab51b8a51480fe54ff06c02490bff13ee9ad1e1de27b75f8579711b347d8", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "b4a35ceeabe8235a61eb070c58ce66956b1436fbd9b5f7da97b6235cfe3bc3cf", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "c5ce745806d53d5927d28b616151637f975ce6ccfe57f828be2513396ef0c98a", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "3711cf7f656737657ee3e95e23e26deab0bc0205f1bb1415b5e79a0fe25c96dc", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "88a63247750d7a938552b45a9a2306275350ce9a84d9bfa6892008577ecfddc9", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "4027a6dd435e14e933ce88ca307a1dabc25566fa588dedb0381447bbdfffb2c8", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "02588db579a0c3716189b38957902c6f855a42aec141b3be7f0e3c8c00a08e42", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "25142fcbecb28f07a64cdc4ae6ae1d8e1f2e001f6efa7294dc99fca2c381dd55", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "8e07ffd934c98f30c5db74533468e5f987fa09572c33820db28287416975e7af", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "669bdaa42f5d530bc957f0318e3e9ac2c232b1cb16bdfa5932aa00ff5d7fa3f7", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "0c26b7f08765699a77d899aa5834f53ae80e5cbc26c3cbb5b796b01df2fa6b60", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "4e1477d43c6697f1c44b871abc024a9edc37861e194896b6e576bcddbdb3e417", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "10b471e497c472ce70d46993fc77d3e328a00a504115ad1f9752d8d174c79bd6", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "a3d3c342b4eeddb0fec83534696a2198fcedda9176deb4acf8d27b4ecc5a12d0", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "e291d643e169bb742849b874e467f9a9574e3a6dd20c2b8032de35d1de031009", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "d66405730b336e467d00cf85290038c91fb07564e911a70550e6404dad382b78", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "ca74b9020bf92dfd609a8aef49e884e1d47dc84eb137edcc6dfdcf8020609c1f", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "8d23bacf219dc63956f43b5afcd6937f29851717eec696255c9455b7549f4d7a", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "8d23bacf219dc63956f43b5afcd6937f29851717eec696255c9455b7549f4d7a", + "relative_path": "cases/fault-wrong-identity/trial-01/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "30131a2d0b31821ae2494f46213c34c32a828d943c1b1940936c95c69fb327a0", + "relative_path": "cases/fault-wrong-identity/trial-01/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "06ef3ad155c06b3c05861ba5b834a2b82e888033f3b6c943115df8f06c75ac1a", + "relative_path": "cases/fault-wrong-identity/trial-01/fault-mutation.bin" + } + ], + "detail_code": "fault-wrong-identity.01", + "completed_at": "2026-10-20T02:50:23.798767+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "JBEuPbsEnJiECg5W7MP9eSHnzsWdaEK8NgGrYZim7I940unfcgNCOBOn3H8RFpTX+j6Y5uFHFr/uqtgJw0huAg==" + }, + { + "case_id": "fault-wrong-identity", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "ac6933fb7496449fc93f7874e907a0a9fbd3ad926bd6801134925f3f9dbbcad9", + "evidence": [ + { + "kind": "run_report", + "sha256": "05c93f9fb0126ab9b32d98cbbb859813ce287ff22075117927142b1170731403", + "relative_path": "cases/fault-wrong-identity/trial-02/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-wrong-identity/trial-02/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-wrong-identity/trial-02/oracle.json" + }, + { + "kind": "other", + "sha256": "8cd915f59b7cd35b4f1dd8d0f2b4835f13d578a9addae41f318d2a7805b86cfc", + "relative_path": "cases/fault-wrong-identity/trial-02/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "c6ffe0fcfaf79f0317c411ef9e4a2bbba24ac28c9c77e05cbd3ae6a1771d1350", + "relative_path": "cases/fault-wrong-identity/trial-02/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-wrong-identity/trial-02/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "0bdc0dbdbecc4f00bf158099120366e0ee4e812181d3896ce3fb28e22083f6d3", + "relative_path": "cases/fault-wrong-identity/trial-02/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "bfdb0f81b154ff1353cfb1a09d593fa1f8c042e422d950f180cd39cb05c510a0", + "relative_path": "cases/fault-wrong-identity/trial-02/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "81abef806de12fac3183290fe031bf1cc09de1f8cb6b4ec72c692a6b43946951", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "765be6054584372a52cec2d285b89c5e239905e0d71233857b09087c314c3c02", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "ed6aaec0c6e19eeaf0981c7399dfdc6d1e59bcdab6edbb66c697c52ccf6281dc", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "da4b77edf3832c97047ab9d4ea897b34b8c333c18a243234e91af480af9a5cf0", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "e3174cf76d85c1c5feb51e3e32a29664430b7594b444e988b31cf1f3e48d2d9e", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "7c40962fcc6050a3a47e87ef4a5b0b979dbe1a73b477ed774a43928f16d9710c", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "2be12f430d423bdb83deff7a8de70440161be56ab2703c1d9c1af78104dea154", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "d78c42eb3912233081b96b0cafc730874795cc6c8edc383e794590424c0e240a", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "0ee8cc31411a953c37124204287344acb5ec049b4bc9b32ddda9256edbf6df7d", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "bc29740c4b390bac17c543827dc68289371d22ed51d57a420fed931a2a7e30ed", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "296545c79401e8672772835ad4edf8fe29e8d4c9a04177f3b6beaf4e087b6e8d", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "70629ba1b7767d16bb131ba0ed624f2b618cc6e4f933a371aad1dac9a5bc512b", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "9cf5177907e06b551805120e89b75c2b348ba92b66da52e6b2f6e1fd89b8afd4", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "15312380255a6e08030e353f70e6108d53c09242102c013d49165ee86d2c2e93", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "fc27b1a97c15a42c64159ac941d3cfa4a6d3337f0bd6fac83c6d1400df4ba886", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "4ecd6c5a8e7f07c11d99be59c3e6f6ae26c0770a606fd661d251a33841cef760", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "ac91a1fd04c14da583ab197565eb6e790815be207e52816c45613783fe46f2b6", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "53c15a4a5c9a98b4a256df7a2b2564745a59c16f9bc017b62856181744fd0117", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "9985df474f22538e34a84be85358d177afbadceb84ee71259f665ca9240036e2", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "da7db0ddb8ce1a429ca5dd86b281f979294d42b24d05998021f00382d370a361", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "12f0c815c3d80265cf7535b18936f8ccbc2a50af86b351cc71b2be46a68abcce", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "c2a2783e5f2cdbf75ceb9d3666f4aaf72afb41e5e0ee32c3c44cfb239d74fd00", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "7ad21a5052d54f03a9bb8c868bffb6e7a4b4bbd6040fe9a0f188ad7ca7127054", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "4dc5790fa30171acef6aded774df53b1f3383e316d1026470ad7e45414f44476", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "beb643b2af9cfd7f2b65b4074701e3396f0ddff892c4052930b40ac365cfcd9d", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "2e32b9c0cdbcfa7893fd0ee412aca30c4fdcfcfa2a8ffdf860a164fddbc6bc93", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "dafdc9eacee0ddddf0feb324503e5073d67832e795e892692dbacc8c7ff9fc16", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "a4cc3124984cbede14631180da55acca1ee58b95a74952acf0ef0ef19d7603e7", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "a33bb32c8f8f4ca673f6be511cbbd05cf31a88829bc018cfd018b21101ba47f4", + "relative_path": "cases/fault-wrong-identity/trial-02/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "144b7065b3968b5b228740ad361e5c658c6afc86d69389bcc83bd1d57b4f3b90", + "relative_path": "cases/fault-wrong-identity/trial-02/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-wrong-identity/trial-02/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-wrong-identity/trial-02/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "124ba3897557393e246a9a4128d236021d664e85e1df64cafd6a882dabd81d7a", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "85f5110a4852bd1b37465ea8d7d6181982aab8cba6f2329a83fdcd861e4a2dc1", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "91aecd2dcd2693042c51a60ae29f1eb6a55490fc8b837a5985a2f86482066e58", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "3fcb9ae62c8c2277f3d4d27daaa6d935302e6f5f06a6d005f1375792af81a196", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "8db27ccc362af4d56c46ab00d5c9061d6942bec7db9ef73d09a80dd827f8485d", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "702131647ad774d25423257dbb124c11326babb03ae64a84c41612c36623dea7", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "95336a7e5a3adfbff13a9cacaec52490c04e38c047527cb716ad7b3233373057", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "bdcda1d039982bb9f9f4eb96d0fbbe938ad7da2ca9617d3f1bf723ed533a3b85", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "3cfe3c0faac662b32fecc2684c65e9bfe2958d2e3aefabd9f404afe87a58c766", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "5b26662efc16499e02d816cc3aabe261c2419d820dcdd93cc4cde28aacbd052c", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "5feabfa31531807d42c9965c3b93375fb6f771fbf4a3d4d8a2cba602aa276e22", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "c3d24dd1fd540365d611071f42e7f6d02c139ec4ef6d34e29aaba460a2ced22d", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "b99b1bfb47d1551452cf9dabc989a6eec0e269c3039382d1ce37300880523c60", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "41a2a5d60cc04650b88e44a88fa5396bfe93fcb60917b76ed1da7971ed286bb1", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "9f5861bae6cbb27dc409490dac254549ba35eafa7ac04376814ffb78ef253442", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "abcbf0ceeecc203d3ae212df70f72cee29667cd9c489404508b3ca7bd0ed8f57", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "5cbcc7c1151e909b305848f317820422ea0bb1a83b2a15729558b70f984fbab0", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "03e3c8fef205f311f21d2289c9de41f34f85697b8ac81fc0603335e676f8d6b5", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "7ea17c9c44d5f873e2c3cd604ee2578d9578a96fbfbbdb95766d1617471e0cab", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "39f76fb2c885c0922ba35353c74c9a94a3938c58897a6d7a3d326e7dd10941a9", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "4cf457ea2277d5992be9f39f5443509f71be9978a4fa9e0db066da2eaef96499", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "9251188f1477dd8b6f7a4ba59e5701997be38801494dfb552632709c883be68f", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "14d42a082fe4e613d32466d4ac7dd78a5e7a18a2653d271ebedccb4875473d4d", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "1e5f15943bee4a0e7c270b4f82cd2bb4c18f1334bd67d9e2b8e0e71441439661", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "c5a6a50dcc3908866eba4ca8074cd91e39a17a6c12052ade000895d39550bcf1", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "f81c52db1122535dcde53d54a6ad87e9310e8e28fe9236d28a8701198ec9581a", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "ee705e6b96cf25df74aa1956c725766bf6a827d2a5f8fd9621842e9b1fec7914", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "b1294d0f968e7949330651fd53867e8d1ac0ed8ce6f6a07f4cc8b781c30cfd61", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "1ff4335e7ec44683953f92b3c40a581c500177d2cfd6bffd9d763ed6de8a83fa", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "113878767510b147873867389b607025d32b1bd7a00cfe4df7cde53193470f33", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "8d23bacf219dc63956f43b5afcd6937f29851717eec696255c9455b7549f4d7a", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "8d23bacf219dc63956f43b5afcd6937f29851717eec696255c9455b7549f4d7a", + "relative_path": "cases/fault-wrong-identity/trial-02/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "aabcebdf779a1bd73ad001333c3dffbd0ed89968366792a0636b0eef3cfa4126", + "relative_path": "cases/fault-wrong-identity/trial-02/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "06ef3ad155c06b3c05861ba5b834a2b82e888033f3b6c943115df8f06c75ac1a", + "relative_path": "cases/fault-wrong-identity/trial-02/fault-mutation.bin" + } + ], + "detail_code": "fault-wrong-identity.02", + "completed_at": "2026-10-20T02:50:45.442777+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "pJByflK/FyoJLxnTkAlG7jwjPNQ85Gofn0WzZh0l1GQWa6RnDoDWSHpMD/VamKSaJdOJ3Lts6ghdHq8NUgRVCQ==" + }, + { + "case_id": "fault-wrong-identity", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "47f71a3838b272503b165eab72b1cf4015f4368f5f026c4566f6c5600e8363d8", + "evidence": [ + { + "kind": "run_report", + "sha256": "ce0fc000938d4d74589e425b9127d8afde7b04952fd7ddb923c7551e57fc2be5", + "relative_path": "cases/fault-wrong-identity/trial-03/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-wrong-identity/trial-03/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-wrong-identity/trial-03/oracle.json" + }, + { + "kind": "other", + "sha256": "142cab2ed8fb6b60d1f36c0d69f34640375f4f5d8215fc9509f155c0b1e16bd5", + "relative_path": "cases/fault-wrong-identity/trial-03/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "b7aca224aaa222d8cfedc65d72805166a328d276973f8cef3d7786de94d9cbb7", + "relative_path": "cases/fault-wrong-identity/trial-03/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-wrong-identity/trial-03/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "49a9cc14154ef7cc571be79303c75d143faab47d17fd3b3eb7845329ccb25940", + "relative_path": "cases/fault-wrong-identity/trial-03/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "8637250ffed23704e945a8c0478053fb34d4c7f572385debb200e389b1b8e8d6", + "relative_path": "cases/fault-wrong-identity/trial-03/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "c8d11bb61926050c7065f6a1b93b96f0ba66778c69597852251307076ecc6719", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "61822ebd1edf6b4ce5c38c42189d021b339faeadb39022111f8c45e91b331330", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "48a851066fb455c87956aeddb6a1d2ccd364a753565333f09101c00ad995d007", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "34c03df9542c7620a1ba1c3d5c9576add6d6bcd709c24e7284df1caef776fb24", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "332d61924cfc9d2969776efa82fa92b25fa95c5c439e28cc4507b63a12d25384", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "d35da8e7e87088267017cb91f8615bbf3291b84443d87378d0acd1edf10af516", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "6e7f1d6ce7a4ecd83f90bb0f5a6d6885ef62b284583b9c430af5b98aeeb9aaa8", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "a0e4528db25c1134f15ecd7f4c5cdfc6b51b205b2a69480f9621e0a5e1339b45", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "7582c246cde8f6a3c6715047763ef1a1f3c413a67cbbb6493959c4533b0a342c", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "5dee09c3fb4040d441eaab1d9fef74cc5e77f3164eada552056732e52c4394c0", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "c3b7c47e73ef3208fefbb64232ec45d39f740e01f9207f344a7e71f8a45fe93c", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "0bc04fee6f0f6e93e10bd37be6d94a480cf3915daf90a459a63cfee616cf91c0", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "1200fd8b51700e76a3f0a995e1560957323bf6a9d6b431d301009015828eb867", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "99a06374c4f1fca99fb31ad2ab2b56b28ab5e9fcfa7b453f32e7ecede5fc979e", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "439f412f654a3fb82ead923a21fcc3908fcda9dcac75a7ddfa3488a6ab6dc33a", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "344faf023b98d987ad35b699c29f8226a75e03c6a4963c02f6e88208c477e73b", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "72714de4e35c8bc579f3304d073cff9f6da33460820269752d48ac6ccbed245f", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "9b5a610cce9230a40a9a3a4c3675912c2feb5d7f941465d923d60677dd10c684", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "14d9a4ef9a5329834a8e724f074f5d7920e55163fd40a013fed88754ca4a3688", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "e94be9e024304927ec5bbbdf25d0569b04460c08048f6d3645a363d4b81a928a", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "dfa0ebc8a1a328b3aed9e35a9266124a8e920301348fd88d0e8ed08ca0311988", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "c4c9979699ffaac96aea02d52e3ac4e27d6d4381ea94bc4a369323ae0270900e", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "61e49d5871cbe879731694d2080c4c0ffff4aa29cc21a3b2a436bff1a6d7fcd3", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "965d8ac55efc7542cf987bfcb158b1b636bf4e602178a7d31cfe333ed2ad5502", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "def974513087f35a39cbe1ddd9e6821d7db6ef46382eaadf13ca6cc88df5e4bb", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "f3aca2a9c54a9558209270cf3559a52c192506a9abc628a268118065f8f3035f", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "faf58e89223a94522b47f9c6e1b65974ee6d35f8c9ebbe28f8a2ffa5397a223d", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "f4973899e7e491654687986d55d254ef37729051cb7a18f48094fcfc62a7f15e", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "4fd8b98de73afae133cadfba9ea50138989928c8128a21eb1055e61a0c0f3125", + "relative_path": "cases/fault-wrong-identity/trial-03/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "93fefe80de16a354939844e2464dbefe67a5b1a79d9d277e93f8bd0af2152da8", + "relative_path": "cases/fault-wrong-identity/trial-03/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-wrong-identity/trial-03/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-wrong-identity/trial-03/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "15789a0180c7522ed324e1bbf0d35bffed968fe4e8acdad59df2d468a8dacc22", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "124ba3897557393e246a9a4128d236021d664e85e1df64cafd6a882dabd81d7a", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "85f5110a4852bd1b37465ea8d7d6181982aab8cba6f2329a83fdcd861e4a2dc1", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "91aecd2dcd2693042c51a60ae29f1eb6a55490fc8b837a5985a2f86482066e58", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "3fcb9ae62c8c2277f3d4d27daaa6d935302e6f5f06a6d005f1375792af81a196", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "8db27ccc362af4d56c46ab00d5c9061d6942bec7db9ef73d09a80dd827f8485d", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "759f207277a0195503a184c984d2173d352bcb0320ce3175a2ce35ba7058059e", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "95336a7e5a3adfbff13a9cacaec52490c04e38c047527cb716ad7b3233373057", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "bdcda1d039982bb9f9f4eb96d0fbbe938ad7da2ca9617d3f1bf723ed533a3b85", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "3cfe3c0faac662b32fecc2684c65e9bfe2958d2e3aefabd9f404afe87a58c766", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "5b26662efc16499e02d816cc3aabe261c2419d820dcdd93cc4cde28aacbd052c", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "62f15534900084af51932bd6b6418a1d8ed16df71d89f38ec6685bac99c0a34b", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "c3d24dd1fd540365d611071f42e7f6d02c139ec4ef6d34e29aaba460a2ced22d", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "26afddce8a20c45951863ca4bcc6565529574ef09fe410f303f42773ff2d17de", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "a37b07d0543dc9cceffa6afdad3d75362c18482346783e100513d3e83eb73b0a", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "a05e10a3211ca948e54d3d312412709d522f28e3e615b618d3f1ea68d9bd126c", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "387cb5eaba6671d00549e239cc1be85207caf52ab12d6f6c660c5e35c25a101f", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "3711cf7f656737657ee3e95e23e26deab0bc0205f1bb1415b5e79a0fe25c96dc", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "f1d1d1a999c75d45e0d6e3d6ebe573e21e1fa9a68a7c9f84a342c2f7c4e93aff", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "14d42a082fe4e613d32466d4ac7dd78a5e7a18a2653d271ebedccb4875473d4d", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "ebd133f8fcb242541776c8a7699d8c36e960723d52f67f49b58dc4ae034e62b7", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "61a81409418c832eb49801341e13d27964149237d7998c4b33b56eb4eeadf9ba", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "39f76fb2c885c0922ba35353c74c9a94a3938c58897a6d7a3d326e7dd10941a9", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "ee705e6b96cf25df74aa1956c725766bf6a827d2a5f8fd9621842e9b1fec7914", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "6690b826c35b8ed5487edb911404249742db841565d2d66580ffbc9580bf352f", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "628bdbc486d25998a31915c5cf8e0ddec1e53f0c273456a5860317e249db3050", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "1e5f15943bee4a0e7c270b4f82cd2bb4c18f1334bd67d9e2b8e0e71441439661", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "be60dd247e9aab42312c73038c94658a207d5ab3e8ebcffea567f4a2601ca8e4", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "263d4bce4231b62444922011b745ff8128248d9cb656c6f13ad21cc221e6f284", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "b3b2c085a09be2ad4c3b76114f36642118da69abec9a5d8ef1768027a20882aa", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "8d23bacf219dc63956f43b5afcd6937f29851717eec696255c9455b7549f4d7a", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "8d23bacf219dc63956f43b5afcd6937f29851717eec696255c9455b7549f4d7a", + "relative_path": "cases/fault-wrong-identity/trial-03/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "4e8b7b4b62552965d42c00364ec47d78470431549dfde14eeab9f85df3b41f63", + "relative_path": "cases/fault-wrong-identity/trial-03/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "06ef3ad155c06b3c05861ba5b834a2b82e888033f3b6c943115df8f06c75ac1a", + "relative_path": "cases/fault-wrong-identity/trial-03/fault-mutation.bin" + } + ], + "detail_code": "fault-wrong-identity.03", + "completed_at": "2026-10-20T02:51:07.450993+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "nDLuOWoL79JaFkYNTfxa8gHnb6kx1NV9EeKHuPyjI0gaXVqzJixu/IX9QOf94iQ3NSL6a4UJvFGlYSRCE39YCw==" + } + ] + }, + { + "id": "fault-stale-identity", + "kind": "stale_identity", + "description": "Deterministic stale identity refusal case", + "input_ref": null, + "runtime_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "action_targets": [ + { + "step_id": "step_040", + "actuation_path": "gui" + } + ], + "expected_outcome": "halted", + "required": true, + "results": [ + { + "case_id": "fault-stale-identity", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "5fe1475a6e5d6d852f1764fc9dce595682fda28fe6e0250b3f1b89c443b58fd3", + "evidence": [ + { + "kind": "run_report", + "sha256": "1b3d832ca725d856969dbf129dfc056b2ea0472a2f4ef6410c56abdad03242d8", + "relative_path": "cases/fault-stale-identity/trial-01/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-stale-identity/trial-01/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-stale-identity/trial-01/oracle.json" + }, + { + "kind": "other", + "sha256": "c9cee8a6389fcb3313aac6dd48bea8a05eda0f7d375b173dbc68275f14621544", + "relative_path": "cases/fault-stale-identity/trial-01/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "31a1a889928c72a6a79319eba94ad52a9466a69536277561a2938333a52897e9", + "relative_path": "cases/fault-stale-identity/trial-01/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-stale-identity/trial-01/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "ab5f824fea8fc8d2a379979c316f83f29f623ab6da989aed491cea8613dded6c", + "relative_path": "cases/fault-stale-identity/trial-01/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "bf42039aa5f68291257773a68a2968b655c19fbf1cf09d69187691f56b4cbfb0", + "relative_path": "cases/fault-stale-identity/trial-01/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "033a718aa2047e35eb04bed79c0832ae4dc5bb6c1c69f9564cc7baed4ad3e69a", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "feaae6386138a964a1351391a223f67828234b0cf8517430e7b37defd3d90819", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "ce7e9317b2c73d8ee139e5d4f62ff46bad02498a79274852c74ba1854e05826c", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "93b753bb04db8f00ecd09f9bad7c5827ff99ba7659fe63a22e668bf3e6a2f731", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "3b8d91c4834549d4e362f126c5bfc3ad146c96d49edfa3bdf1b79013dc853124", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "aeaad3681d52ede9bfc28915c058a879774283ac726c23819a7e687696156f02", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "86c93bb8454a2f1cf85e926598af44cf7561a73c5152b3af1da97ec0cfe293fe", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "bd7ed2adaae76244a2ddc6526e2bf11a33f4a06cf780bd037720ae01b4bfe709", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "52fb361b1682046d0b3914ca65984b2f0800531f4a6b0f86c5eacad5fc045b73", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "35e75dd45356d932e957c5c839ad6f910eecccb4ce592b2ffed8e612d80bacbf", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "ca1ad3f9f6dc67e43d25d1905240ed46466f7170762444be711d77627123f4db", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "bd4481562d53cc9b5927e38237db9463edbbb32aa082a7257f9ab467ac7cb1c2", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "75c6d5f1d0727b45d2be6bd1e2e352b27faba854f2113e063bfef0c3ea96bbb5", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "8ede94e9b749ae112a2c18149e4c6134e9c8d2c48844325c65222481b4341994", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "8cc7ca6676654c6a3d4ad50c3a1b67fa6f6f6f139831d1b33b2cd941184c3e4a", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "0e0147aa6f887bf49dd399b2a4e6c99bcdcaf269732fb6411ef7709232f9d43e", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "c87f6e14a4cdb3492cbd46421c2564d983b58fe2cda9918c81acd390155a1d1e", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "96ba034b6b8285ec5ceef21a6a7c6fe3973c14d5ffa63bd9e6da91cd75120715", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "7ebbf9604c9867115c61a2c79da9e4320a2ebd52a51d38523363648e474075db", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "6ce5b3b8f4779c29a9891a511e0c9e4c1b5e11a1aabef68433ddb25509da0fb5", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "7a5c8603f9838293b3fd9bb0e64c5cfb97a92385068d89de3b53d519c7dd65b9", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "c19108508729cd3a3a47e96fdaa6d7e7bd3f31de123207b3d57fc0ea36d46c13", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "523cc4f0bd882f856f262f0b20cc3fe176725b574389809353a6c11ee07cf728", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "bf1d1d8c20ef7822ccba682ae60744f16800833b7200110311bde06b56302027", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "5277b121bf6da5c30ae09f2340ca9f7c8d234d37e469413a845f39e23128fda1", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "1c797e2226c8c4d0546b14d2114e06fcc77ce2ce3d3fc6761361fcfb150897fe", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "feda021aa18ef030c9f994c2b7ab6542c60a1c533b37998c13343de992f28193", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "ace8888716374b4c90d15744d389898d894d71ae3cb469cf348febc234a1a218", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "8b7893eacc12967ec5ca7abc42d5a277adde7a89dc9d3da7c44aba2245cbc0e1", + "relative_path": "cases/fault-stale-identity/trial-01/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "8d18386bfee4e1a874cc7a4214109f8aa5f467d8cca0971e972a358a0056997c", + "relative_path": "cases/fault-stale-identity/trial-01/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-stale-identity/trial-01/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-stale-identity/trial-01/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "758ca2da6a7bf3eb27b1f6d1272bb1948f14e732dd1d82405dcd2a9cd50804db", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "15789a0180c7522ed324e1bbf0d35bffed968fe4e8acdad59df2d468a8dacc22", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "124ba3897557393e246a9a4128d236021d664e85e1df64cafd6a882dabd81d7a", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "85f5110a4852bd1b37465ea8d7d6181982aab8cba6f2329a83fdcd861e4a2dc1", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "91aecd2dcd2693042c51a60ae29f1eb6a55490fc8b837a5985a2f86482066e58", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "3fcb9ae62c8c2277f3d4d27daaa6d935302e6f5f06a6d005f1375792af81a196", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "8db27ccc362af4d56c46ab00d5c9061d6942bec7db9ef73d09a80dd827f8485d", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "db0faeeed0b64c47da251f44da2f527807e09f5208a14be20f605ba2f99b5949", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "95336a7e5a3adfbff13a9cacaec52490c04e38c047527cb716ad7b3233373057", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "ebddda9ecabaaae75e23ad09c4ee91964197ff8902774789d83a4bd75dfc889f", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "41899f4d448f839b35edd066d5c5dae9cc7c84deb46c5dc1c774b01536c49883", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "4fc3e19a0ba34493724ddef65bcf2c28877d5b1381e0baf551e0d731e28e8cf7", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "46f40ecbe96f2a4c238b87d074c7b440ba5968bb0167aa6e9a4627f5156477a9", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "ca7221a706d84998ef07edfd20277086a7bf48a0c9a3596519269fe5e059bdb8", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "9ca5ca69e0fe01285d93685670422b513915b422f4338ece1872bf256030cfca", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "3408e2ccad1d1a5c77418e70dd32761c2023fa6c5f46ae99010e495f4af5044b", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "d647ab51b8a51480fe54ff06c02490bff13ee9ad1e1de27b75f8579711b347d8", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "893bf96f40064bed66bf92e921f2abc7b1dfc37a3ee03d5d034d632926e15d32", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "a37b07d0543dc9cceffa6afdad3d75362c18482346783e100513d3e83eb73b0a", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "360d2f27855146cccc3f75f343a18ad1b80b7f0b8d4cce13a60d5324826d444d", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "7ea17c9c44d5f873e2c3cd604ee2578d9578a96fbfbbdb95766d1617471e0cab", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "39f76fb2c885c0922ba35353c74c9a94a3938c58897a6d7a3d326e7dd10941a9", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "4cf457ea2277d5992be9f39f5443509f71be9978a4fa9e0db066da2eaef96499", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "9251188f1477dd8b6f7a4ba59e5701997be38801494dfb552632709c883be68f", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "14d42a082fe4e613d32466d4ac7dd78a5e7a18a2653d271ebedccb4875473d4d", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "1e5f15943bee4a0e7c270b4f82cd2bb4c18f1334bd67d9e2b8e0e71441439661", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "c5a6a50dcc3908866eba4ca8074cd91e39a17a6c12052ade000895d39550bcf1", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "b200b1f9cf9e9a1918d51a26b01772907d1d9d0890e343d3b51341e229889d06", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "ee705e6b96cf25df74aa1956c725766bf6a827d2a5f8fd9621842e9b1fec7914", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "77c9285378e3cc808460941d70fc7391e412a355723ac211644e069b630dabc8", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "9767b67a006038bfa0bd01806bd2462f2125d9f2e5c70c880911d89f451c3239", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "113878767510b147873867389b607025d32b1bd7a00cfe4df7cde53193470f33", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "d280c399ac0e43322e629d18957d9de738f963d464d0db9f7bd89ea6c309f368", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "d280c399ac0e43322e629d18957d9de738f963d464d0db9f7bd89ea6c309f368", + "relative_path": "cases/fault-stale-identity/trial-01/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "9a6b15d152dca207234ab4504531986c7c3b5258335fc7dbdfa82ad15c9fa162", + "relative_path": "cases/fault-stale-identity/trial-01/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "46e611590b005f7467e0fcf0e636a220050d3997527fc2407cc5d152f4d76552", + "relative_path": "cases/fault-stale-identity/trial-01/fault-mutation.bin" + } + ], + "detail_code": "fault-stale-identity.01", + "completed_at": "2026-10-20T02:51:29.989616+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "6L/HHwdcSX1uEfAXHqHYup2QatWaz3lY5TvD4wuYTCFbNQ3P4oe6bEGcMkPKaBSc8iFuFnpe/VawwyrmfnkLBw==" + }, + { + "case_id": "fault-stale-identity", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "4d73d88e3fa53de7c43049b7d237e4a1569299ef5b3d93180406fde6b0845055", + "evidence": [ + { + "kind": "run_report", + "sha256": "9c72bbcac1bf5b170363aeb3cd3b0b7f4cb06ac75ef7c16daf3011484c64d871", + "relative_path": "cases/fault-stale-identity/trial-02/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-stale-identity/trial-02/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-stale-identity/trial-02/oracle.json" + }, + { + "kind": "other", + "sha256": "fcebbe1027d2abb743c811b49415fd910550b623eb075bc876f245299d044d99", + "relative_path": "cases/fault-stale-identity/trial-02/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "b398285fdeb494164e1f9b302550d0996b0271b56cdaabbb004ee8569d1d8c1c", + "relative_path": "cases/fault-stale-identity/trial-02/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-stale-identity/trial-02/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "91b8604208a5cc6bf3adeb2ba8dbe9ccba1b9ccfe78944a4459c6b499960c72c", + "relative_path": "cases/fault-stale-identity/trial-02/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "6a9f2ccb2171375ca0a96485b11de7df9b380c549b7d38b1be77f95cdc541e53", + "relative_path": "cases/fault-stale-identity/trial-02/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "af3593e328b1b228d4275b07dfd944e3299a835fefc2956d1e317227ef048ca4", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "206609d91b21ba2f1f0280210e7a6cfee171607ca2661f843b76752b809ae0ca", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "ad83e3c915b19496b8c215cfc4bc59a2565be93be69410c54f5a345e4ef41bc4", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "3673eaf7a779dcd5927683a52b5443e55b18e5ee9913bce145c613c8fcbc4d7e", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "1a65750974bcb19661855a222f6426b235ec3c5c8a1c68fa1b4cacc1919aceee", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "61d841d54927066f4f0014e2f7170f7a882e5496f72567a47fee831a9a65239e", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "709dcc1bb6a7607a36545caf99bed0668e0681ccb51901ce87a151b50529d697", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "35f9953e199ac2a7ec1b1a81c5abd820d4d8670cdd5f57812e19ac2962074e1c", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "e317f85dfb5f3c56ffbd272159242f404d3580956f4d2aadd3f2e03e65f0264e", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "ce4cc59d8d3adf55ea7f78ec3a8cfe0454567712a5242a4a9d8b7958c15ccfd9", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "764b31a753d4806e172710f7cbe7a9db6ccafcfb0ae6028612988b7c413843d2", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "d6c9c4809a519a3d5b9e18716818a250b057eccea42de0feecca34abcca7a388", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "2a96ff2c35c817644af6ebd9d0d0e3ebbb6070fdc38ce657855db2992945d02d", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "7dee68d5d2b611fd4f52bf0e7012ead0a67d66becf8f67c63753266be3aeca28", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "504e88b4ec1c9b95da62983695c0599e7d011bc2c640d1e945498587713261a6", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "d9df925e8ffcb50367efe9203fbd13491d77894da738d63f9d6a30b8c629841d", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "62bc40059729dddc1622ec01813328da9516d400aead7aa10dcf115cc840cf09", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "6898d9af9a95fc69d84bd444d700ad8b74c9e6ce63a86425af5ec87a47339cc9", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "13d9ef9341a47741e3b4de315095b0084863a220399e2dc1e37405312b1118c5", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "dc1a30b59d618139a0644778af2cb4cfa3ba4ce603eb441a8a136d2b1c66de2c", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "e2457a2b2aa227a717c12909eafc018c45e102dc5d94c40d739e6700f983c132", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "7239b91ee83e83c15ae8227332a318ed48aae7e046f67dc17c5017ea844edf7a", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "3b4f554ebedf76eaab72fce9e49a58fcab6cd6121084dfdd9114fecb0e36e80b", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "10b6772d5562c053f98bbff862e76e1ef48b69f24536f0c5110e8d59b1977834", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "5b3e10043d269a69bac63b848eb95102989d8898dd833e12d364db5546f815c3", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "4d46c44cd20130672b187c78e1857f8fa27c96e2c5fcee13ffef4db4e4c51a48", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "f349f8763eaeebc497162bca8047e5efccee748c3b6a5b21db6384147a16e745", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "7a22c24c74258a1ccdbfdd3fc36f98091a16726a2d4b4291ee1e2d110e6bd7f2", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "fa5558eb9bbb1be6b8661c75b4bb2cc93f8e4131b706a9a2ef7e6b4d24590c7c", + "relative_path": "cases/fault-stale-identity/trial-02/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "6399b7241d71db851f784a92bf1aa3371deb60ee29d0004ab815f93f46f570ca", + "relative_path": "cases/fault-stale-identity/trial-02/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-stale-identity/trial-02/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-stale-identity/trial-02/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "fad79bfa21dff3229684757c2b447ac400a8ffe95608dafc7f4b66d040e94f1a", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "85f5110a4852bd1b37465ea8d7d6181982aab8cba6f2329a83fdcd861e4a2dc1", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "df131f62b283384b5a0266c037c314304308e4407401d901148546b8a2be6abc", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "d340b9a508bff667de8a7239a01995bec2ea2f486173e3f712a8171c8826b2e6", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "d78993e83d30b49ad73b24d885306a4f1d1508d39c9fb2a0d6d21bededc88a82", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "f9866b9273104202cb3a94f5fa4f2a459bf4454a45adfd005a53db20c8c110b8", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "fd1e99af94186d7051a2109ea551f444bd5f9bef1274f2c69fcd96ed8e894ae9", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "3332fd9a691b81e013986d4185abff9a512ae0e117fe20c4958a87d2f9fd3e24", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "1648d6ccbbcb00a2dfcce243b5f32d54789fe3cd3123c672e19ed08298e3daaf", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "181682709bdd06f33365a50eccef4a5f39bfe76f58366c4808393dffcbefe79a", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "46f40ecbe96f2a4c238b87d074c7b440ba5968bb0167aa6e9a4627f5156477a9", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "ca7221a706d84998ef07edfd20277086a7bf48a0c9a3596519269fe5e059bdb8", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "c3d24dd1fd540365d611071f42e7f6d02c139ec4ef6d34e29aaba460a2ced22d", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "b5c275c29ce7457552d530bed7a469c18e8a71dc7c7d47f27f0b2b7864d4db3b", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "d647ab51b8a51480fe54ff06c02490bff13ee9ad1e1de27b75f8579711b347d8", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "a34f4ae9bb747ae5b6c27fd22f7f29997d8752fed1b92baaecd5351085945608", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "a37b07d0543dc9cceffa6afdad3d75362c18482346783e100513d3e83eb73b0a", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "03e3c8fef205f311f21d2289c9de41f34f85697b8ac81fc0603335e676f8d6b5", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "edd990866c5521c814290ab9c4e6585ffaa6e9723f0d574ae8c2b61dd3171244", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "0ad64524bc70e5a0278a41c5bf26d326b0bc5349a1f11faa1d99a91b46488e53", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "b9800603d8af8394c14c1c58a757679d5c42ae6ec3000a5af845da7071069cfa", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "c783ada6829d100354aad3145a478aebbe39309ee690420b43343121299ff292", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "3bfe972b2a65f739f465ca05d1a1291f8b3ef3d660601efc4ffa1e486bd8a0d1", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "7ab6d609985d071e28828dcc4df72681d2d55416d0c63fdf7617f21e8bd6bd87", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "28aec824f9f15859669e6493e72143a57e75addba47e5ebbb44c6f8db58b8988", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "da1539d8ec919b1c076aea9f4ba76bb7529d789048e7e735c50c974e0940ac99", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "c84e9bd78a834b5bc5b507fd5703c99f005fdc5942b55dd2f07237658aab94c5", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "939dd19cc1ac52567d8eca67f938cce8737e07fa4ce7f87b9b41b9b517019a12", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "1af32cacd4e8ac838a84e2d1221462a63c370bc43734134d0e98087de6bfda77", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "d280c399ac0e43322e629d18957d9de738f963d464d0db9f7bd89ea6c309f368", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "d280c399ac0e43322e629d18957d9de738f963d464d0db9f7bd89ea6c309f368", + "relative_path": "cases/fault-stale-identity/trial-02/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "21356fd30e51e80606f8182f4ee1dca871cc14129f059bea6538ea4b0fa11f30", + "relative_path": "cases/fault-stale-identity/trial-02/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "46e611590b005f7467e0fcf0e636a220050d3997527fc2407cc5d152f4d76552", + "relative_path": "cases/fault-stale-identity/trial-02/fault-mutation.bin" + } + ], + "detail_code": "fault-stale-identity.02", + "completed_at": "2026-10-20T02:51:52.841037+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "NsKS2TszLz5vsqPnsaJZ/VN1oReSeHeXTSzZpRfE9ZizLPR+p7OkSC8of5os5F1IiyYKpaxA5xpDj9cXVE/UBQ==" + }, + { + "case_id": "fault-stale-identity", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "5c8d4e2faa3b477db51729d4f482a1edcc7fcb789e3e7f3e443747f3a980e480", + "evidence": [ + { + "kind": "run_report", + "sha256": "5caa90b55c8e2fe33da2df04fbf04549b0428e13c435a8c7889220537fad9a9c", + "relative_path": "cases/fault-stale-identity/trial-03/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-stale-identity/trial-03/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-stale-identity/trial-03/oracle.json" + }, + { + "kind": "other", + "sha256": "7a57c21c27a930f50d180cf11d8c0a816125dfb59b074728161552db351519a9", + "relative_path": "cases/fault-stale-identity/trial-03/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "1c7cf5a49c4eddcf54e2e296852c2c8ff888c888eaca11c4c3e9cd7b09a91ff5", + "relative_path": "cases/fault-stale-identity/trial-03/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-stale-identity/trial-03/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "0dffd5492186c62292e345a9013c93cae033fdac13bb0394f6ca51aa65a7a011", + "relative_path": "cases/fault-stale-identity/trial-03/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "506b1a170ef075edb074f04765e03ae0e846bc140d7286a262011055d9bb8ae1", + "relative_path": "cases/fault-stale-identity/trial-03/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "3c940f7b2415d16712025bb36064d05e493de3259fa89f102ba95bfef1b6fcc4", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "b69115da0a4296d001885a4337135e4a6e6f8e475bc0583c1923574a3763358f", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "1140f5a021b6e237db4c709143e768f9a4d7fb60076835505fa8ad64ab25f76f", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "84979e8349ffc747a6eef1665178f82e3117a81938de6e38179a18d47d3098fa", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "eb7759aeadf59a8905b56e9b0dd780ab62a6fe5e75e9ed73fdc29a0664ed4d07", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "51088a029d3c859f764586a22c2cf3eca00917f9eb89472ca9fd71f29007f194", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "53d894b65f42a5c04bc53857b9d1d2587b127e8d4e20d68781c35ff00cbc444a", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "5c53a3bc272d368483d31fe7eb4785db5704507594e673275ec4e2ebcd2da04c", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "3deafd68db7b60c59b1adf80be57edd778cb5eb2c84dc1389efb30fe5925c2ed", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "6d26bca887bb88687da8dd3f2d653662827396caf91cc7dcc3521be25318abdc", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "3be613e8e31e88294e4ebb1e5633400ee40316947a440f3cde17b53a6a13ae46", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "727922abf6c32d5d85b2286a523eda2a46b496c11d4ceeef1d2a7c479960eb9e", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "f5cd123314aeca7c58b59add53827454648ad61d08f2aeddadaab8ee5b0cd32e", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "fa87f0e5cac2152312ad6cf4f9638fd4455a187095a61520e0609b838eef58a9", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "1d1a6975c52ac80603d3f991d3852a3510b6826089f45af1a5dbd48b7475a036", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "df2350b850477c6e95343ab18c3138ce8044b58daf2dc1f5fa4e5f2f852967d5", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "24cd73d92a3bccc6c0fcd13d8ef9075e0863d3d35ff26ec540839d6d65d3c444", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "7e373f61296d6d94e9d3ffa5f5a0eb701b3d284807f0cf172d86fb15cb546e84", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "041ccf1da837eb45e06b63263e824a8bc6582c5a37b0f90e2d1ea597397d0f72", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "f3bea5ad9736007c1bb8dd1502580b9fda7dfa8240c63752ad4044dc1a9fc8b9", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "72b92f0ea2bfa9af9526906731b33ea543a016fcb87ab8482b4ec019f60c851a", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "94b85844e0d7c0dce256539d5c1321d5b5a7d8f62564ed96c451a7e95466152f", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "33ab03f7f81afcbd59762a575bfe55303cb978026b5fbfc2d9dd103e906e7507", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "8c10f7f2dd79e765229fc1d0c3642a25ddabd1e444642f0e212052db0b668ef1", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "14c5531fe6ff817ea6405730f46ef59512988448c17b6a354c2ad3793e922158", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "a5719eebf3c2d4e3aa4cbfdcf3c429b6b2e878d685357a93a13d8badbdc1d19c", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "ad12549ff61684bc4db4bed8ea093e2635b14fd68170ab8815f0c229d1bada1a", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "3f817ab7f8d5ff10d8f80bb60afbb5407bd46bf41b4cb9034c3f9d7fc3f01e28", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "719f731d241e57e6a95f24de8a1d928d54d32f2224e11265fb0d795aa0e69e83", + "relative_path": "cases/fault-stale-identity/trial-03/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "8b01aafad34e747413e20c670b92e4c07ec17576fe6b2916407e9ab644046181", + "relative_path": "cases/fault-stale-identity/trial-03/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-stale-identity/trial-03/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-stale-identity/trial-03/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "f6eaa9e919e7f78d6f898c02ac228e7908c563e355a8f46bf6986468bf7a8642", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "758ca2da6a7bf3eb27b1f6d1272bb1948f14e732dd1d82405dcd2a9cd50804db", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "15789a0180c7522ed324e1bbf0d35bffed968fe4e8acdad59df2d468a8dacc22", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "124ba3897557393e246a9a4128d236021d664e85e1df64cafd6a882dabd81d7a", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "85f5110a4852bd1b37465ea8d7d6181982aab8cba6f2329a83fdcd861e4a2dc1", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "91aecd2dcd2693042c51a60ae29f1eb6a55490fc8b837a5985a2f86482066e58", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "3fcb9ae62c8c2277f3d4d27daaa6d935302e6f5f06a6d005f1375792af81a196", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "8db27ccc362af4d56c46ab00d5c9061d6942bec7db9ef73d09a80dd827f8485d", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "db0faeeed0b64c47da251f44da2f527807e09f5208a14be20f605ba2f99b5949", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "95336a7e5a3adfbff13a9cacaec52490c04e38c047527cb716ad7b3233373057", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "ebddda9ecabaaae75e23ad09c4ee91964197ff8902774789d83a4bd75dfc889f", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "41899f4d448f839b35edd066d5c5dae9cc7c84deb46c5dc1c774b01536c49883", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "4fc3e19a0ba34493724ddef65bcf2c28877d5b1381e0baf551e0d731e28e8cf7", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "ca7221a706d84998ef07edfd20277086a7bf48a0c9a3596519269fe5e059bdb8", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "9ca5ca69e0fe01285d93685670422b513915b422f4338ece1872bf256030cfca", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "3408e2ccad1d1a5c77418e70dd32761c2023fa6c5f46ae99010e495f4af5044b", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "d647ab51b8a51480fe54ff06c02490bff13ee9ad1e1de27b75f8579711b347d8", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "a34f4ae9bb747ae5b6c27fd22f7f29997d8752fed1b92baaecd5351085945608", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "a37b07d0543dc9cceffa6afdad3d75362c18482346783e100513d3e83eb73b0a", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "03e3c8fef205f311f21d2289c9de41f34f85697b8ac81fc0603335e676f8d6b5", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "edd990866c5521c814290ab9c4e6585ffaa6e9723f0d574ae8c2b61dd3171244", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "14d42a082fe4e613d32466d4ac7dd78a5e7a18a2653d271ebedccb4875473d4d", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "ebd133f8fcb242541776c8a7699d8c36e960723d52f67f49b58dc4ae034e62b7", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "61a81409418c832eb49801341e13d27964149237d7998c4b33b56eb4eeadf9ba", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "39f76fb2c885c0922ba35353c74c9a94a3938c58897a6d7a3d326e7dd10941a9", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "ee705e6b96cf25df74aa1956c725766bf6a827d2a5f8fd9621842e9b1fec7914", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "6690b826c35b8ed5487edb911404249742db841565d2d66580ffbc9580bf352f", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "247c9df110d185db50d49d31760ffde94b643d1f69906437f85f3aa22fa5957c", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "1e5f15943bee4a0e7c270b4f82cd2bb4c18f1334bd67d9e2b8e0e71441439661", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "ce242bb242ce7135f6399fb398fba03ba6d218b4f935b1e43ebc8e8c01cc8342", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "78cdd655be27d0e600a3dafd9f8ce9b2ac8c5a8bf08e7308f4889dbbe21fd4b7", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "ca74b9020bf92dfd609a8aef49e884e1d47dc84eb137edcc6dfdcf8020609c1f", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "d280c399ac0e43322e629d18957d9de738f963d464d0db9f7bd89ea6c309f368", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "d280c399ac0e43322e629d18957d9de738f963d464d0db9f7bd89ea6c309f368", + "relative_path": "cases/fault-stale-identity/trial-03/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "9b4ad4aa4c60a35bdc2e0d3d7e09820fc2e990a1d187ed0721c705f683b5ab78", + "relative_path": "cases/fault-stale-identity/trial-03/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "46e611590b005f7467e0fcf0e636a220050d3997527fc2407cc5d152f4d76552", + "relative_path": "cases/fault-stale-identity/trial-03/fault-mutation.bin" + } + ], + "detail_code": "fault-stale-identity.03", + "completed_at": "2026-10-20T02:52:14.845296+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "FX2r0fmn5Ya2sXis+w3o/lnYLpTsww02BMW20TyZdmuXAH3Jg3AEEUhWjzuS6c2w1fuzyResjUZxmNwBRsTyAA==" + } + ] + }, + { + "id": "fault-weak-effect", + "kind": "weak_effect", + "description": "Deterministic weak effect refusal case", + "input_ref": null, + "runtime_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "action_targets": [ + { + "step_id": "step_040", + "actuation_path": "gui" + } + ], + "expected_outcome": "halted", + "required": true, + "results": [ + { + "case_id": "fault-weak-effect", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "88a538d0bff2dfefdd37a3d040c33e3e07483bc5feea228cd6f3f264a085c4fe", + "evidence": [ + { + "kind": "run_report", + "sha256": "1398061e268877cfec8a9d217861868e32c9e40de79e4598fac30e68b8de36f7", + "relative_path": "cases/fault-weak-effect/trial-01/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-weak-effect/trial-01/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-weak-effect/trial-01/oracle.json" + }, + { + "kind": "other", + "sha256": "87bd40239695f618bfe9dffc46df14b471ecd5efd6beb9cfc412e844115ffde4", + "relative_path": "cases/fault-weak-effect/trial-01/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "7978e476e0725e76c750adc52db577c4c7f6ac0e0c7c4aa743dab3a2ab162183", + "relative_path": "cases/fault-weak-effect/trial-01/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-weak-effect/trial-01/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "74816218fce7ccc753eee223f060bbd45ce7867c288007f097c172c9e797322d", + "relative_path": "cases/fault-weak-effect/trial-01/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "dd4e5440259c77c888c79e1e6ecbb076fd155b256fed063ca08bb5995a6205d9", + "relative_path": "cases/fault-weak-effect/trial-01/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "eade9a568875b12cfaba521453936eca32932e5a2f46af45ae4d713a3d4e72da", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "b67e76c8c8fb3cb49ed4897537b1ff31a40cb2e1d78431910a22f9038a2e0900", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "943f645b9818e2b3efaa19978d309868b7f3b2ee424266ebd8d92ca6da3f17a5", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "2de9261d18467c44f97748ece29933f5c59fe1cad303e0af46a210e8a888f798", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "78fd361c923f83ba9a307d5cc55f9fc87809696b0fad0eae74b408884b6246b2", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "a58c6d202e1d8abdfd9f65479efdda45340e15ffa46cb93eedcebee2342b11f3", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "52e8d3462afacacf6f819cc120e3bee039d033d0e7e8fdef93219cef54992440", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "2329df11e43ffffc7045bf213167535b5e4843512515ae0d9aec93f5206246b0", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "1dba9a92240eab0ce33359c7cc917eef301dbaaa42ff2b7dc1bb388e0cbebe51", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "5483b10a2dfa3cae5fd2368dbc5220d46d85da7090b565821036b1d30660945b", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "ef365f9a092fddf401fb0d8c1afa5be9d2b156369311644359893a41566e4e46", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "db6eac4d68ce340466be62e4778d1580c9840e37f161a425585ad097f655d4aa", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "1f649fb097a360817a4df5606c623c47231b803830c5329998df5a3fe43aa535", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "119df8d79f3b66e281bcca6c21e3d2c4d4efcb81e774f8a0e033957c9ae33d05", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "3566e5f935cf0d31b82d8a22e301eb67f54a5fc4f3d4163330e20e6e9689839e", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "d371fbe802354b8691ef8aa0f79bb7346c87ceacdf30d877110413ba4fb2b64f", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "65e4fe0d2e2fb92db6afb6e75d99ef751520282079050c380046417a437120ff", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "403dd70c1d9c762295cef8330a820b2d9709f2b2c8949700e53477d8f3edfcae", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "611afb4735f79370d60abe3f3278e8bde54617d4a8c03db73ba7815eab6201b5", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "b9a0d97cc77a81c05ef93c4ecb5d5201d75656a4bd812bd9da31d7c5815acc4a", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "2c3a580a935f454230468c2d7fba5cbb77f20fce1a6dcf3528625b00d8b8467c", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "47f4b92773b9133ca13ae215b05a1248510b7215eeeb6dcf5a17df570bfb16ac", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "80eea1e9d4889e3dadc94c9c92bf8f27076581751022b337bd2ad9f9a9a41ce7", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "0a8e715366ae0eef93455df47a26752a07c3d574bce3e17c38048e0423712f80", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "9c720cae350e014a6f709bc44405bee288dd907c8b644848b7f7985b402974d9", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "7ad42c1df620d918efaaea8ed34de3441bd06c16c73cf81be8a30aa0bb7e2a13", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "ece7a79b411924f605844beebd1accdc8e3760ed669376dd67a90d550d1afb60", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "d8317af17b1bf1455fd9f0cfbffc56ee857ba4f0d9d0b001045ba3f144ac7ec0", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "1716b3b95bd806ec956272c637ba74a651d2386de943cd4e4e12f988199b9a3c", + "relative_path": "cases/fault-weak-effect/trial-01/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "a88af2a1f1901931e04a6555676ef159348ce768657ce69673beba4da088f6a5", + "relative_path": "cases/fault-weak-effect/trial-01/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-weak-effect/trial-01/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-weak-effect/trial-01/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "f6eaa9e919e7f78d6f898c02ac228e7908c563e355a8f46bf6986468bf7a8642", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "4993c247f1d66302c5669e86e3e3d963bfd349592c2572f54bb56a72bcd244ed", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "cbaae6c95b577aa72b6d4da46f924754f4b0ec0a67b8eadc89a7f155a22843ed", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "df131f62b283384b5a0266c037c314304308e4407401d901148546b8a2be6abc", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "d340b9a508bff667de8a7239a01995bec2ea2f486173e3f712a8171c8826b2e6", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "d78993e83d30b49ad73b24d885306a4f1d1508d39c9fb2a0d6d21bededc88a82", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "8671623e2762930f3d73d2f2795fc66d9ac46e4e727c6a23df3db9f7e85961e3", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "fd1e99af94186d7051a2109ea551f444bd5f9bef1274f2c69fcd96ed8e894ae9", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "87e20b033d1ef137771b2fe7f5ace3ae7aae7a3eacb8bc39b3097948d63d65a6", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "4468b5fa4dff832498eee5b16f5e0b7804b936e62c537e072aa90079a095d2ab", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "ec5e5ff4cba0d1fe8e783c677816f3d09730a0663928ed74aaceff7c40b01e91", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "c261fb3d04e15f77e04f2aba1689d9f86ddd0447e91f51410987d67a69970f02", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "ca7221a706d84998ef07edfd20277086a7bf48a0c9a3596519269fe5e059bdb8", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "c3d24dd1fd540365d611071f42e7f6d02c139ec4ef6d34e29aaba460a2ced22d", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "74f2eaab45c27c13b72c402fc0b3b9ff9a01c60a0c0b4a0addf4d84b0c79945f", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "5cbcc7c1151e909b305848f317820422ea0bb1a83b2a15729558b70f984fbab0", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "01a7fda08f8f4e006c0efb69ad043938b1982262453cc8632a8be167dea0f7b3", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "65c50dd0a22ca0b341f47356d18567bd15c18b9cc926809651c75e03a367cd26", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "5cbcc7c1151e909b305848f317820422ea0bb1a83b2a15729558b70f984fbab0", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "03e3c8fef205f311f21d2289c9de41f34f85697b8ac81fc0603335e676f8d6b5", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "ad9cd8a35a2ce466383d744225839a7809c8afc05361c9092dfc48bfaa194bcb", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "669bdaa42f5d530bc957f0318e3e9ac2c232b1cb16bdfa5932aa00ff5d7fa3f7", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "5a1731e51f8fd85f30cc12c2fd846941fde7e44bf160f895f1c27e90fb989101", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "b19deb7b436f9bf87b63153a37581edd8ccfb128d905aefa1a644dc5369e31eb", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "02588db579a0c3716189b38957902c6f855a42aec141b3be7f0e3c8c00a08e42", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "8cf8776863c67a51f6f7b52ef6a9de05af8f5e9d4131871b9595a40fab1c7afb", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "555dce212c5578987d7a5d58271032b84952dd50a8e70ca82a532434d30fc23f", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "27a6214d5d564fd0b28ad23b4588035b3f30d3cb3a52b3959a7a58a5550acd08", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "35b3890d1f9cb854087d4c157891d2e6bc171bab7f55d17c919402e9407ec3bd", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "9ea4258a94231b381d77c3c64ae6aee6602ff0abb9f6c1c9089663f0ac86fda5", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "dba858dd9c3e0732b054c310475b2712435971a57aec042732155b3bcdfcea59", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "ca74b9020bf92dfd609a8aef49e884e1d47dc84eb137edcc6dfdcf8020609c1f", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-weak-effect/trial-01/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "ccb0588a4c291b81db8ade2372700f301e74f6585e76b1f43d2d250748c4c9f1", + "relative_path": "cases/fault-weak-effect/trial-01/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "f50a7bc7522c7900758311ce5d710be0cfd436db480706a2f8401039f4cf8ef3", + "relative_path": "cases/fault-weak-effect/trial-01/fault-mutation.bin" + } + ], + "detail_code": "fault-weak-effect.01", + "completed_at": "2026-10-20T02:52:36.451227+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "LRoxdzDVM/YbOmWyjLT2rPRYOlRSwiZfrAJ4mGcW/eSQLOJY1CsM2mupNHU7+A/ajqL3XNbhjuaCfrIx3y49Dg==" + }, + { + "case_id": "fault-weak-effect", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "63c2243e1bd1f8ed922be61d23dd2b6b793dc4e1c339ec0aedf38c40494c2e24", + "evidence": [ + { + "kind": "run_report", + "sha256": "1b9b3dee828aa41e50fad33e60b19d3a49ef07adccc595d05bc6601108d7169a", + "relative_path": "cases/fault-weak-effect/trial-02/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-weak-effect/trial-02/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-weak-effect/trial-02/oracle.json" + }, + { + "kind": "other", + "sha256": "7bddd7fede162d5e758724dddc4b1bd05852e8d662c8b9a2fe1549bd16ec0d5e", + "relative_path": "cases/fault-weak-effect/trial-02/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "a7df3f184e0a7f62d8f72b64c092af9ab4f49325ada5e9e1cf37fe23c6f48795", + "relative_path": "cases/fault-weak-effect/trial-02/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-weak-effect/trial-02/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "e53892c38439b437fe69416ab4f78ae71e75dfb555064d70fc06b86e2fc48220", + "relative_path": "cases/fault-weak-effect/trial-02/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "329d698e41121375b91bdd9bf1d69483fac673e01794b626efbae2c7f2626301", + "relative_path": "cases/fault-weak-effect/trial-02/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "1fdd9177c6cc2c39d82df8ddc519a457c3ae0fcf46a5e0311d210ab26793b124", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "709c9dd7e2ea6985062615b268fd7340051fe9a5df386cc1c087f56fe31b6c38", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "b2a0e842af9a959b8e30e2b6b5d46c2817a8f8293dc2bfc90e2931d64b3e73ec", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "d13b4350cd0a03c22b08e616c8efcac404d6327854b756b93c39d109e093b0e6", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "93e64eca49278c9a51ba8cc425871a2a0b4c465f0d6104c64ad9cec15494b8db", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "3e9b48ade8d0ac42037c4c4709ca3d656b1ca1793c1fe0aaf96427e4d55b2c36", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "bbf7e1e9f55c167433d8e09aa03f567d071297beda52159a6719f3baedf09751", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "816c30079dacdeff7554106150568351285ba24409117aa06267b4db813b21c9", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "5dd028a8bd706959799d815790436c9774662b96c5d4a9636e0cc7485bbc3832", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "8560309b023fe47c0075fc9d3a95927371baddbdbe45970d2f6f94380eacaf3f", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "0f52225a9458400df820521724a4c39e07c82cc15eaacf73fbc7673930b5315d", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "80d5f411ecbbc1c0ae432ce85ad3985ebbd2db6edfc7885b98a6d41de16e7b63", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "dfe1d34caabbfa81bee14a2b7c8692b7f113288198e740e746f4fb3f161cd142", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "fa9a873d07a3289ae4b19b77bc598ebbd970c8214f7982e50cc35d141c217b51", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "857100badd097d9b47a03825cb4742464f684820414e74801b7a168e2f4358d2", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "e1e464faf6d277af7da697bc6fe3ee9f42d8e348369756c1db3adc57288b77fb", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "e5fc7549559695bae80818dfda4d524c93a8cd259252b76c64170570fc76925c", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "4cc1ed0c1d3ccc8d277ceb9609b82bbcccbca5894a9f3303700f23db9a7c79a3", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "aba962027f7fe20e7e2a75f5ba6584bd12b3b322763093b40f3889360634eb2b", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "ef1d876b3434be5ddfe6175efa8444a534f82bfa8813b32c963bae518046dae8", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "724a10b8f21cf573e944cdc6f8d0d77484aaf2d434ce66fced8289cb45764609", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "0c5c83f2b9546bbc756bf221304cfb6eb38ff46f13a2efa06bfb28ad17d79fd2", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "dbb8a48ac87f4fc8c3cbcd936c87c4a6bbb960796105c24e1aa49ca5f95c0303", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "251613a54701424a03b5d1241a51232c7b97a90b37297843b64ff7c18664cdc6", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "a2f21945cd6615788de5507d02f0a30f637948b3d2da01858b55b2a076d17ecc", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "4a9f2161ac1620d49e1d0b18ce1d297b4533f8cf98ca9d5b4ce93adc74805fe9", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "1b382c32fa255f6156b614239443c7fe0cdd5d071574efb4bec551e613a892f3", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "f41e4c2f9062f3355040eb894de8a47245d73c7ef5cd6a5c29a4cccac2a049a1", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "896b7495048ac56bcebbbd71377cbfa3f2601b68b82bd4dbe48e502b722816c8", + "relative_path": "cases/fault-weak-effect/trial-02/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "65b3f7dcd07149e01389a2e3b04742c5e5288f5fabd8982c565012e8eae48beb", + "relative_path": "cases/fault-weak-effect/trial-02/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-weak-effect/trial-02/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-weak-effect/trial-02/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "758ca2da6a7bf3eb27b1f6d1272bb1948f14e732dd1d82405dcd2a9cd50804db", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "15789a0180c7522ed324e1bbf0d35bffed968fe4e8acdad59df2d468a8dacc22", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "81aad85213e12325194281d9df0fbf55a1179126382015ac1067a20e221d49a4", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "cbaae6c95b577aa72b6d4da46f924754f4b0ec0a67b8eadc89a7f155a22843ed", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "91aecd2dcd2693042c51a60ae29f1eb6a55490fc8b837a5985a2f86482066e58", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "3fcb9ae62c8c2277f3d4d27daaa6d935302e6f5f06a6d005f1375792af81a196", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "8db27ccc362af4d56c46ab00d5c9061d6942bec7db9ef73d09a80dd827f8485d", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "702131647ad774d25423257dbb124c11326babb03ae64a84c41612c36623dea7", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "95336a7e5a3adfbff13a9cacaec52490c04e38c047527cb716ad7b3233373057", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "bdcda1d039982bb9f9f4eb96d0fbbe938ad7da2ca9617d3f1bf723ed533a3b85", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "3cfe3c0faac662b32fecc2684c65e9bfe2958d2e3aefabd9f404afe87a58c766", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "5b26662efc16499e02d816cc3aabe261c2419d820dcdd93cc4cde28aacbd052c", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "ca7221a706d84998ef07edfd20277086a7bf48a0c9a3596519269fe5e059bdb8", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "b54da12cb02114f9e08f94475afc22477b83f43835b2d9c1fcad7c63a36f8627", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "9ca5ca69e0fe01285d93685670422b513915b422f4338ece1872bf256030cfca", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "576845c19519b6bd040fd8518fa8f5b27015d9eeb588c7e22d577f8159e2d61f", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "22c7da483aaac482d725fbd348d490e80f3bb0e4b0539e57098bc23cae360335", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "57247e089f1dd8b09d1c8b2cde19fa9a6a05513e62f439e59825cd8a5cada520", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "40603bcfd337da0c13aaa3ac1ead13d0104cce7532573d9af440fe79d81b5e71", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "8ccd4cfbb01ee129480855fdd50ed171766430956f53c44aaab1b0ec1fc2594e", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "f70c8380fcf82ee0f4cdd947bf3872c999c0ba7e8d8a3fe891d68b3ca339b11f", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "4027a6dd435e14e933ce88ca307a1dabc25566fa588dedb0381447bbdfffb2c8", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "360d2f27855146cccc3f75f343a18ad1b80b7f0b8d4cce13a60d5324826d444d", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "a8e7c350f02175783ac203929a6212eb517939ffa732f5c36f449ee47ee41f7c", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "c5ce745806d53d5927d28b616151637f975ce6ccfe57f828be2513396ef0c98a", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "3bfe972b2a65f739f465ca05d1a1291f8b3ef3d660601efc4ffa1e486bd8a0d1", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "93c63fc7b19f52692ca3c40449c39e26a7d8d921241484c05228863f4f4d7852", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "56ae0f9b53cbbe600f687611bb69120a94e90607fa695bfa6a040152f2161278", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "0ad64524bc70e5a0278a41c5bf26d326b0bc5349a1f11faa1d99a91b46488e53", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "c84e9bd78a834b5bc5b507fd5703c99f005fdc5942b55dd2f07237658aab94c5", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "966d5f32cf033af9a7be165465b2f77bd1bc9b9bb179506c80fa1d875ef2c427", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "900684a4080bd0aff2efe62ca186a2f6bbc4a525aef108077579023350d7123c", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "7ab6d609985d071e28828dcc4df72681d2d55416d0c63fdf7617f21e8bd6bd87", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "099ef7c96f3cce13dc1f11897e72e269c182fc59acf7365dc490c9b6be479738", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "0d0248ea004eff7cde6bb375eb113812156360d7ed9ea87eebfc1b87b9a1400f", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "b3b2c085a09be2ad4c3b76114f36642118da69abec9a5d8ef1768027a20882aa", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-weak-effect/trial-02/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "dae8bb1bbe38ec1af8841f438efe39dd4a7ec64b2f91a9fc55afad6b2382b126", + "relative_path": "cases/fault-weak-effect/trial-02/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "f50a7bc7522c7900758311ce5d710be0cfd436db480706a2f8401039f4cf8ef3", + "relative_path": "cases/fault-weak-effect/trial-02/fault-mutation.bin" + } + ], + "detail_code": "fault-weak-effect.02", + "completed_at": "2026-10-20T02:52:58.772484+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "B+ImMkNLBpJEZ5LwlAKtu1I/tDRWlQr4xMurfwem/Om4QjcBKpHiom+L3RnAs5v+dZX+KBMUBib8rKMD/nCmAg==" + }, + { + "case_id": "fault-weak-effect", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "8da9ed97f3df7c64d6ebaf34bcc3113124b9c3d8e65d7be9190bbfb27f80650f", + "evidence": [ + { + "kind": "run_report", + "sha256": "32e888bf99a87b39821d2aa02bfb2dbf4f10bee165aca606aa591923dbf5dc1c", + "relative_path": "cases/fault-weak-effect/trial-03/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-weak-effect/trial-03/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-weak-effect/trial-03/oracle.json" + }, + { + "kind": "other", + "sha256": "2acfb646ee4f0c2fe773fbc5514b4f7a449c1d9bb5a612581b4563c0f14e908a", + "relative_path": "cases/fault-weak-effect/trial-03/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "94a7513885926a78c263750493f7b91eb105f5b06c4a677beff3761f7a8cd9d2", + "relative_path": "cases/fault-weak-effect/trial-03/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-weak-effect/trial-03/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "5e986b1a3e8c8f793274ebd094cfb007d7da8160e9dfd03dd582ad817d6a9e58", + "relative_path": "cases/fault-weak-effect/trial-03/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "5c33f83803077e08495b07b04c3b60933c0b0a88e0c3f4165fd206caa3884e21", + "relative_path": "cases/fault-weak-effect/trial-03/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "2e0d250b03586129b9a9d2f8434f6ab0a36db63bfd6dbdc4cd50fb70d7ea79b0", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "6c23aa4d629fb558630ed2f04db922c65b9c72d612a439823569732b39c5daf8", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "0bb7d7500d57620d06f727194c54480c556ca2cf72a04f6dfb0b73434f67cf61", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "e006979b38748262e7be2b62364afc8dd29fcdc5603fdaba72324be9cf0976b9", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "05bb38920932f0bbe520823094aae99bbe9a8596b13a9cae714f86af8a5ff92c", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "657165cf21b8e6fd8c5e07b8879b33b3ea694ca8cb42797629d1f25c848adf1e", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "257cae1fff29fc97af3d9615686868fe2bfaf663f551f0339849f3bd7552fdab", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "d19d73474a528bff0b667b467030f5b4b2b82c0cd277a51039d6cbab546f98da", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "b2180ef3711f86c78ecfce7fedbd6b65acc8bbbf4ab7690976a473c8bfc211c6", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "3cebfdbd067ae9d691c5befc6e3548888fd1cefbc811e783934a4e2b0d76417a", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "1197c703e7afad65db4ab300a2c0afc82a6c2a879154f7af6bf924aa6938c782", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "8619a51d8f6ce91d6beb09fa7c325c028fe0aa913cfff81293a3fbbec47ae91b", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "712bc2f6e77688066174b4fe0257c8ad6895cdab7f34ed616316a9da22990b60", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "959ade678d729f40a8d8c24c42a30038248a6729d2aae776caea96a8750f3f00", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "e4dc38928d13b11d5da02b3efa74546aeb025f73f528c8c239c97b49443a73b5", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "0c76e0f563e001ee7742c7cdded4675fe2720b3dd9e4b9231e0eb4b530204ba4", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "87f58e9332b671be1ea4f77718e6214f715de8996dda57a35e0c6e29024c108d", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "5e423ed9c58dcff707df37bfd1c41b86c8df92b88f9f38080ea740bc14632873", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "a6136eb83519ce3d866672f299325ddc54c46a8a85ff3f6136f3317bb742a9b7", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "29aa6b216ca8db18c78242853204c45a7261c17e0981227a323539097db5fbe9", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "705c7e132285b0d3ebe78a2ad442d0ffecc09bb9e42b2486a8a3ff342e8776b3", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "0490d4ba2ff9fc75f4a644d25abddbed5c025c99e2b42761c5e3e19549a47c35", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "dd256a776926f22a566dc9bccf91684149a5d2632f5129aa35d7c2b5327a4b0e", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "3db5f4cb2570925e4c83f5b9081cbd2f964d8c3ddf0790b77fed775d1c282a26", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "444923ddbfc04397531a8194725fbdf4ca85bcc6c56a0273eca6fea424d7cb57", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "e6fcf576f775ffb880465843472c4051ffad8609d11daf54777c435153cf587f", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "c45d713acd2445822290f8df44ac956014fa813a4987693b500f753b7a245853", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "df29b27eb6335025ca79d1bce70a4ca54652101e1f1f782de4fddc1867f8fb87", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "0b1bed931ab9d32039f404cec4c9004065fdd94949e68cf0c2ceb77097e624bd", + "relative_path": "cases/fault-weak-effect/trial-03/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "c3ae0beb8674a48ae2221d235ccb59dbdf7c5975904b4551eaf55bf580da2221", + "relative_path": "cases/fault-weak-effect/trial-03/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-weak-effect/trial-03/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-weak-effect/trial-03/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "4993c247f1d66302c5669e86e3e3d963bfd349592c2572f54bb56a72bcd244ed", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "a7ab2c13b4fe99634ca33509531e7617775e111cfdd46fdc20ce6d1616f0a09c", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "c6f46132bd7422d9f189e16f0f1979154ba2d6be4371b69e478e2a14ba0f7fd6", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "c1258059df43e1599e1a91b014a0b353a5bcb1ee85ca0030fbcb60f3325f7ab2", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "7dc095f12231847ab79f0238a73fc7139080a892aebd4b9dbd6ae849d8f7fc52", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "d5581d8ec8b17707e203d92b7739455f025ba70d53f7534ecd6a154e0de40375", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "5152230d112342fb5c77a66aa3cdb428f3f75d3150122dc896793f578010a3fd", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "529f58aa86b15e7dc11f9627de3ffdbff56f12f58267566a87dc3a587e594349", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "c7d09eb44412dfdda5e818888bfee9d7880b9e5eeeb4e3a3dd0be13dbafa65fc", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "6040e433878e5016e4f065f4315af0e0624e6ed52da781857be737b5f60c85cf", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "c54beda44fa60a89f1c32a4160956c9ec32946c590d5618aa0294132a7bf3259", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "ae52ddd312e1347915c89511e2e6fee1624daee96fadbd749383625657370352", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "62f15534900084af51932bd6b6418a1d8ed16df71d89f38ec6685bac99c0a34b", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "c3d24dd1fd540365d611071f42e7f6d02c139ec4ef6d34e29aaba460a2ced22d", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "b5c275c29ce7457552d530bed7a469c18e8a71dc7c7d47f27f0b2b7864d4db3b", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "5cbcc7c1151e909b305848f317820422ea0bb1a83b2a15729558b70f984fbab0", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "01a7fda08f8f4e006c0efb69ad043938b1982262453cc8632a8be167dea0f7b3", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "19e55f32514dc1d970f6bb3d2700ae92bc25fd00fac2b399f384d869b8ebd76a", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "41a2a5d60cc04650b88e44a88fa5396bfe93fcb60917b76ed1da7971ed286bb1", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "4027a6dd435e14e933ce88ca307a1dabc25566fa588dedb0381447bbdfffb2c8", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "360d2f27855146cccc3f75f343a18ad1b80b7f0b8d4cce13a60d5324826d444d", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "fedacc70e63bfc6de07f4b557882ab58fb6991c939ad3d438f7b595cac16408a", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "c5ce745806d53d5927d28b616151637f975ce6ccfe57f828be2513396ef0c98a", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "0a84087b07fec6c8fd47da09a1a383dc6f0a14d165e7d3f956acd77158de8c6c", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "0d6605ecb4ba2bf0e97fcedc0e1c49c07001a784123fb1f989e848099aff5f74", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "11fd7e106464d485527a85497f4a09205af53fd5fe239c44905b4171d7de09aa", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "376b753dc6c70aff88040f4f09cd16528685513a886e95ff0d51e422785bda60", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "4ddc5538ec39cb4837dc1f48f2a53d2c51a06124b98e1dad11320aee33819b86", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "ef4e824a3be47dc4a29643dd4b2b6231dfc9bfbd4def9a64e41b0cdcdeb91e76", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "66bca8eaf77839ebd59c88c423f2633940f504fc737d9cc8a712631ad2332540", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "5f7b3584cb47b4e28dc377caff9edac3937c25b99cd41aafab8fee1ab0d23f60", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "e355de59f04224ed940b938135ff96888cde996c45d8bf54d0013493fb0d4a07", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "05ac3cb82f163b6484ec96cc40660fbcec68c3dfd8d453dee6480acfc82512f6", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "b3b2c085a09be2ad4c3b76114f36642118da69abec9a5d8ef1768027a20882aa", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-weak-effect/trial-03/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "93bccf3b70891cb0e4cdfb3fba528f519c0cf729753a503f4d2f0e3f628357d3", + "relative_path": "cases/fault-weak-effect/trial-03/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "f50a7bc7522c7900758311ce5d710be0cfd436db480706a2f8401039f4cf8ef3", + "relative_path": "cases/fault-weak-effect/trial-03/fault-mutation.bin" + } + ], + "detail_code": "fault-weak-effect.03", + "completed_at": "2026-10-20T02:53:20.377616+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "g/bPPeeDPHZB71VKQ2iaU6HkGp1MWiPgkPGSAmlMj8lDdhNx+AjvPzpcv05XYIty6rk0uCyDGBv3D2n7jpsXBg==" + } + ] + }, + { + "id": "fault-missing-effect", + "kind": "missing_effect", + "description": "Deterministic missing effect refusal case", + "input_ref": null, + "runtime_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "action_targets": [ + { + "step_id": "step_040", + "actuation_path": "gui" + } + ], + "expected_outcome": "halted", + "required": true, + "results": [ + { + "case_id": "fault-missing-effect", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "df964674bd47ec848d279686c9d4377749ccf3fdb11376e2822973daf652b3e9", + "evidence": [ + { + "kind": "run_report", + "sha256": "cb781148d2770f799266885d38b8863c3e3bb2e618cd6f23571428ada5f480fe", + "relative_path": "cases/fault-missing-effect/trial-01/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-missing-effect/trial-01/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-missing-effect/trial-01/oracle.json" + }, + { + "kind": "other", + "sha256": "e23be3d71948c06c1c53ca36e57e58a7fb5c1a0b8462f3906a38190028da334c", + "relative_path": "cases/fault-missing-effect/trial-01/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "e8965f69200af913d52368586a74ec5c2268d2fd9abfd0002286938dd70ced15", + "relative_path": "cases/fault-missing-effect/trial-01/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-missing-effect/trial-01/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "2d9b4feb2caa16130917bbeaceb4314ffdbabb5bb72e2040be45d061bcd0b0d9", + "relative_path": "cases/fault-missing-effect/trial-01/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "4d4d929dcb3241edd123c12b338bc55a93df5f99affef6a65314838b678cee38", + "relative_path": "cases/fault-missing-effect/trial-01/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "66cac94703fba9717a24a5d5911eb7d8d79f71a8eb67cd93a91633d1eed855bd", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "3e0e513d24b392149cfcceebc3b10f4fbcac0469d61153adf09be424887abc50", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "b6999a33d9ba9c7f7f7ae6e59478d67f21afc820dc526dd898ea7c98426e51f4", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "9b9df9ca17252f7568ffd46c9af2771522291d9e0d6fa4922f51ab4343d66bfa", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "17424b371db60cc1136051e381dcadacf9d8574b0ce89ea72d107b4cc3ac1c51", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "747c23180affe91d47b5861f097cbb483c97c518b1bc214d53bf0c4f7c665f6a", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "ab89ad51445fede252e278674f4cdd0c9ee2004cd2c28232bf45e9310e59b2a1", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "a88de3ebc4aa15db2ddd72ae8f082f91e53fd30431ce20fec909902c897900f0", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "48dac96f14d52dc0c8f226c81adac032c08b0ec62436ecd2373a577b4b89a162", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "8470c72d54b477a3d9450b7a9f93c50cfd148edb3fe3bf998c417d9ad3f667ee", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "41b7f6ad98aa427e8da782c3fcb864243d91a3d8513ddccae8e322d7423a451a", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "4449466f17afa67a7faf2fa2d459ec4488d93a644a21fcc1c3a21dec8c55ee54", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "2ac1def9dd9e0baac946f373b4543934aef3786bf025cca7f8a88079ca1b9a32", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "18757b6fe49aa2c669fe2fc71dc397215a2835fea1b4156b6c53de62124749c4", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "3ee92f856574dfec9ba2d742cb94dd94b3e939b32f007d14f38ae1ebf8298321", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "7a046913260d6cf56885ae8bc6d11c5558110e82a046cdbfdbe401ed427d0784", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "4ae9fe9af7aa96f6c53391e65c148f867a48c08f2d1639dc1d6809d87869aebb", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "9b93b6f6450baf451b8aae8c81847d567dd4ea62811968e375788433e649f25e", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "274bde7f7216e2b064f2760abad29480eac29542f4c67e75164816213ef96824", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "e0c9642b094977e1c8c2a876171d29932a5eb76c789d0cc4c2b2ed72c0a8c1bf", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "d8ea0c065027b53c7f99281d706ca65d55744ab5326c5c6a8084f4dc6966d074", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "0e5bf4cbda929bddc83ba3272b5ede440d630efcc9b985a1e7c8985e1e684f3d", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "4d0f442a0b2f685850bc8105ae3bb7c15d3199c90c7686716fbdc0164682f981", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "b19449904ebf78179b3a96aa52c5b2108526ad4b7fa52f896ebc28abea0e0b00", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "dad4b19f2d8ba6ae02417d4e717e6f33b6641ba28d71aa59008057bfe2eaa6c2", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "62f2cb2510f2da82c862df02ee48edfff158b024d939767f8258c0aa1e97d55b", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "141212ef822faa3bdb53a681dcc2496a6c131753e01e2ffa1ac02405b7b1f4d7", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "5626ab85f9ff4cc8ea468213df06de90609a59fa200a3050a5c064bcd6d130fb", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "6f9469d0317b075ca6f2b2fa25e779c163922f419b7a56a0c53217f8a7120b35", + "relative_path": "cases/fault-missing-effect/trial-01/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "2a857512d80b89fa33354554ca849f81d99493df8757b56e38de68f034e433e1", + "relative_path": "cases/fault-missing-effect/trial-01/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-missing-effect/trial-01/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-missing-effect/trial-01/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "f6eaa9e919e7f78d6f898c02ac228e7908c563e355a8f46bf6986468bf7a8642", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "5884a590c2a665b233f7867d9963cc095af069fc40cdf9579ba4bdb8ae99c4c9", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "81aad85213e12325194281d9df0fbf55a1179126382015ac1067a20e221d49a4", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "cbaae6c95b577aa72b6d4da46f924754f4b0ec0a67b8eadc89a7f155a22843ed", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "df131f62b283384b5a0266c037c314304308e4407401d901148546b8a2be6abc", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "d340b9a508bff667de8a7239a01995bec2ea2f486173e3f712a8171c8826b2e6", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "d78993e83d30b49ad73b24d885306a4f1d1508d39c9fb2a0d6d21bededc88a82", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "f9866b9273104202cb3a94f5fa4f2a459bf4454a45adfd005a53db20c8c110b8", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "fd1e99af94186d7051a2109ea551f444bd5f9bef1274f2c69fcd96ed8e894ae9", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "3332fd9a691b81e013986d4185abff9a512ae0e117fe20c4958a87d2f9fd3e24", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "1648d6ccbbcb00a2dfcce243b5f32d54789fe3cd3123c672e19ed08298e3daaf", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "181682709bdd06f33365a50eccef4a5f39bfe76f58366c4808393dffcbefe79a", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "5feabfa31531807d42c9965c3b93375fb6f771fbf4a3d4d8a2cba602aa276e22", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "c3d24dd1fd540365d611071f42e7f6d02c139ec4ef6d34e29aaba460a2ced22d", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "b99b1bfb47d1551452cf9dabc989a6eec0e269c3039382d1ce37300880523c60", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "41a2a5d60cc04650b88e44a88fa5396bfe93fcb60917b76ed1da7971ed286bb1", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "9f5861bae6cbb27dc409490dac254549ba35eafa7ac04376814ffb78ef253442", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "a34f4ae9bb747ae5b6c27fd22f7f29997d8752fed1b92baaecd5351085945608", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "5cbcc7c1151e909b305848f317820422ea0bb1a83b2a15729558b70f984fbab0", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "4027a6dd435e14e933ce88ca307a1dabc25566fa588dedb0381447bbdfffb2c8", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "03e3c8fef205f311f21d2289c9de41f34f85697b8ac81fc0603335e676f8d6b5", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "a8e7c350f02175783ac203929a6212eb517939ffa732f5c36f449ee47ee41f7c", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "c5ce745806d53d5927d28b616151637f975ce6ccfe57f828be2513396ef0c98a", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "3bfe972b2a65f739f465ca05d1a1291f8b3ef3d660601efc4ffa1e486bd8a0d1", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "93c63fc7b19f52692ca3c40449c39e26a7d8d921241484c05228863f4f4d7852", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "56ae0f9b53cbbe600f687611bb69120a94e90607fa695bfa6a040152f2161278", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "0ad64524bc70e5a0278a41c5bf26d326b0bc5349a1f11faa1d99a91b46488e53", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "c84e9bd78a834b5bc5b507fd5703c99f005fdc5942b55dd2f07237658aab94c5", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "966d5f32cf033af9a7be165465b2f77bd1bc9b9bb179506c80fa1d875ef2c427", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "431316c93c6dfc320da43e147c3ba04bf2eb75f4573ba61abbfd66474e8ed75c", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "7ab6d609985d071e28828dcc4df72681d2d55416d0c63fdf7617f21e8bd6bd87", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "99e9f23eaea7e7a49bdb4c395897700b3ef855e8dafa5075f16323018c1190e9", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "9e11cdf8e5f7cf99281cd2e0bbb89720da4e84788d7921775b0919cc9ca54f38", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "b3b2c085a09be2ad4c3b76114f36642118da69abec9a5d8ef1768027a20882aa", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-missing-effect/trial-01/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "6d6dfd06a5ccb2b488340527e841d98d33c2ecae8ee610e425e91d0beb273a3f", + "relative_path": "cases/fault-missing-effect/trial-01/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "da531a70cf546d36b9f63926e6f1f8d3a50018cae9762ba7a1a66954644ac3e5", + "relative_path": "cases/fault-missing-effect/trial-01/fault-mutation.bin" + } + ], + "detail_code": "fault-missing-effect.01", + "completed_at": "2026-10-20T02:53:41.635098+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "s97e7wTHQ629M7IsjUzXeaYpyx4ANpRN5MqTy7djwttuuM/DXbIndAT2c+12ys91YFAw309HaEqFAdG6Nj3LCA==" + }, + { + "case_id": "fault-missing-effect", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "ba9c786b58049c021dbb508648ab9ae2148c49dd1a2d2a93812b61cc8a6d5530", + "evidence": [ + { + "kind": "run_report", + "sha256": "692394d8d288cbb1dfcf865ae7ed4b764495d109246d8f1ab14b0f2db52993e8", + "relative_path": "cases/fault-missing-effect/trial-02/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-missing-effect/trial-02/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-missing-effect/trial-02/oracle.json" + }, + { + "kind": "other", + "sha256": "03aeec623ef4c1e14508df5d8e203c8a1f1f9524f1231b44ef1ae7fd52f493ea", + "relative_path": "cases/fault-missing-effect/trial-02/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "6fe3b04cd55d3fba2bdff5a20b61c9f250e2aefadfbc842064b0b9c0ed163c81", + "relative_path": "cases/fault-missing-effect/trial-02/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-missing-effect/trial-02/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "e8c798e460a8c21b7464ab664309a947a8839c17ccce80aa71b61f620ca3c02d", + "relative_path": "cases/fault-missing-effect/trial-02/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "5986de897875b17cb2260615657425952994baa807698ab377028019edc46e49", + "relative_path": "cases/fault-missing-effect/trial-02/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "3f95a9fe98299115546abbc86b4768b46367ce422f924b58af7e0233594470ec", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "386dc23a3f45748bc656b445e3c8b60a94caf85f496654d3db8a2bdf8c0985d7", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "5c953099e2842439564dfa9bc5f665e2eafd0dac031852a0e8430f26d1b258a6", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "0ffdf170a37ec9eaea636e678d8602c870e053931b482312ec829994fe9d1b71", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "494f7cf46c319cb7c7f27a306244a9689820302493bf58fe493d350b2f5a536c", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "e09da70ea825c4d50b597852f25d6821e1559e66862c53b08070c5764eb8c69b", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "b91d19dbd138befbbe0067e531b69ad9a6aecc13bc71399b88df7f07c4823121", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "fc60cc5734339fe191fd3218a5dcb6d685c9c95b526126b6c0bce2b42dcf59e3", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "d03e51535d468e8656e5426847093d20a76d6c8d82812c893ed461c81450a8a0", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "5dfee92414c19a0940e0d8c497c9fc63c299a07315d89e9f506005d1f86e55b5", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "f58f8febddc068c82f6c8f75cfa56646708a03906030387145582d1f67c560c2", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "e1485580df3cbe9ead817f6226b86416e90fd63d2f69162a4cd23a67474c7ce8", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "d5e133b0ce890ef27bddce6ef37743093c83b6dbd33ca4a0396bb3e8d7349f4d", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "1d3f118d4f2f5562f498e9e6d9e25ae7555f6a68e02b80c6bf11e3568da317d7", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "0dfd828cdbe44b8df63827c54605a7885b8350184b6017fc0c8a18bddd02f57d", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "243345e6a4f02fe1b306a00ce951aea41d29f367d4bfd370f1d67a97baedc47a", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "c8c2c3d4e9c33538b163219eed9f0adc4b2add75c5e636cee104664098be6352", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "e87b34ecc8eff60d953eb11d4e867f50f154fc36f8cf76612745c83618adbad4", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "0a47deb0cc2fdb7ba368eaaa06a32c0fbd023cae81629e3745c1e501fb3432e5", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "fb6e598e78e3db28fc2a1db5d58836b94df0485943585722d63c8a7c899fc5aa", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "7f87cc22542ef16c77d604d85f71269636edad83ee38f12e7307e4154350167c", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "2207608dbb67a327aefc11164f2b51a3650703e1ce4b2581e0b2457f5a44a458", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "2a7f4ad0491ab62975f2d7371925c777185e2fa872848bffa2d6ffd214bf9f34", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "14322b44a1200e7f0df355dee8e86926d733067b0a8a11a741b3d33f0ef09178", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "43a416ea5730435a6fd364a82c8367dda42280a104bf720d1d422aa43041720f", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "7744d2978d2ec1aebfd5bdf5ac4378bf52dec9d391f2d3ad65fb80d23945bcde", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "27818c5f7b670d1120b85ad3d5632b83882648b9bf39545c0d0fedc643d4143c", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "4dd31e52617928d108b4d043b3a6b15651d2949682dd0a6bd854c7b155344c15", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "7f6601535f3875f443461d2f6b66ccc647cbd0623d3608a93e5e4ff7d6416b45", + "relative_path": "cases/fault-missing-effect/trial-02/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "f379b439ed1615bfd582bf81b4960694095b1617996885f8a3350af590b1045c", + "relative_path": "cases/fault-missing-effect/trial-02/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-missing-effect/trial-02/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-missing-effect/trial-02/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "d8a69623e8cfaffe5b0a19852153833e68feb5be50b26836f357639b040d28c4", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "15789a0180c7522ed324e1bbf0d35bffed968fe4e8acdad59df2d468a8dacc22", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "124ba3897557393e246a9a4128d236021d664e85e1df64cafd6a882dabd81d7a", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "20a54dfbc2702433d0a2d0075db6ced5fae7d631633eec4b61f98ebf7a2598a8", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "85f5110a4852bd1b37465ea8d7d6181982aab8cba6f2329a83fdcd861e4a2dc1", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "91aecd2dcd2693042c51a60ae29f1eb6a55490fc8b837a5985a2f86482066e58", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "d9531d0f08d4b5b73b99ff79897ff61e9b8f59816adffb916e5d838dfe5ff77e", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "3fcb9ae62c8c2277f3d4d27daaa6d935302e6f5f06a6d005f1375792af81a196", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "8db27ccc362af4d56c46ab00d5c9061d6942bec7db9ef73d09a80dd827f8485d", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "702131647ad774d25423257dbb124c11326babb03ae64a84c41612c36623dea7", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "95336a7e5a3adfbff13a9cacaec52490c04e38c047527cb716ad7b3233373057", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "bdcda1d039982bb9f9f4eb96d0fbbe938ad7da2ca9617d3f1bf723ed533a3b85", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "3cfe3c0faac662b32fecc2684c65e9bfe2958d2e3aefabd9f404afe87a58c766", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "5b26662efc16499e02d816cc3aabe261c2419d820dcdd93cc4cde28aacbd052c", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "46f40ecbe96f2a4c238b87d074c7b440ba5968bb0167aa6e9a4627f5156477a9", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "ca7221a706d84998ef07edfd20277086a7bf48a0c9a3596519269fe5e059bdb8", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "9ca5ca69e0fe01285d93685670422b513915b422f4338ece1872bf256030cfca", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "2b8b7e9ea72f8c330e3300428e54dacb97011ab72052c0c0a2b5e784498b1c39", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "d647ab51b8a51480fe54ff06c02490bff13ee9ad1e1de27b75f8579711b347d8", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "abcbf0ceeecc203d3ae212df70f72cee29667cd9c489404508b3ca7bd0ed8f57", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "a37b07d0543dc9cceffa6afdad3d75362c18482346783e100513d3e83eb73b0a", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "03e3c8fef205f311f21d2289c9de41f34f85697b8ac81fc0603335e676f8d6b5", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "25142fcbecb28f07a64cdc4ae6ae1d8e1f2e001f6efa7294dc99fca2c381dd55", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "669bdaa42f5d530bc957f0318e3e9ac2c232b1cb16bdfa5932aa00ff5d7fa3f7", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "5a1731e51f8fd85f30cc12c2fd846941fde7e44bf160f895f1c27e90fb989101", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "199e24315945c8f04fc439d1d5fa5cc25955bf7c8d956cd3b172c777b2885239", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "02588db579a0c3716189b38957902c6f855a42aec141b3be7f0e3c8c00a08e42", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "8cf8776863c67a51f6f7b52ef6a9de05af8f5e9d4131871b9595a40fab1c7afb", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "555dce212c5578987d7a5d58271032b84952dd50a8e70ca82a532434d30fc23f", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "b59a02f1fe71ef0cffbd9152126c1fd257c59c662ce7d4eae755b1cbe2a8df21", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "35b3890d1f9cb854087d4c157891d2e6bc171bab7f55d17c919402e9407ec3bd", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "6844b8fac8c0cd469f554af6d7922d57cc11fd5bdf231707e4197eefc9bf2b79", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "d63510f43cc634f04eea34bbf1208a2dd98e24fa2c9b4acce56064a6e4f4f30a", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "b3b2c085a09be2ad4c3b76114f36642118da69abec9a5d8ef1768027a20882aa", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-missing-effect/trial-02/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "2ee61b2ff948039f1f60289b0f0baa8a3c36dc6eb4e9222953c27fbb2378ac83", + "relative_path": "cases/fault-missing-effect/trial-02/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "da531a70cf546d36b9f63926e6f1f8d3a50018cae9762ba7a1a66954644ac3e5", + "relative_path": "cases/fault-missing-effect/trial-02/fault-mutation.bin" + } + ], + "detail_code": "fault-missing-effect.02", + "completed_at": "2026-10-20T02:54:02.196237+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "337BUOgoqHRNqe5mHT0AD9KknLsJntxb+yTvB0CJARGHrjNSUTw0UjMjUKYYlmkTewGMY4QgZGmWUfUCjVXxBw==" + }, + { + "case_id": "fault-missing-effect", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "halted", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "f1d2ceeab7a3003494ba58a3886465c6c874c8dfdbb2c274dfe51045dfe3fa9a", + "evidence": [ + { + "kind": "run_report", + "sha256": "8e2754de07d0b5470a159282a002e4ddd46a78a49bccf51c72e8343f57db4fb9", + "relative_path": "cases/fault-missing-effect/trial-03/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/fault-missing-effect/trial-03/case-input.json" + }, + { + "kind": "effect", + "sha256": "81569beebd7ca378d4cbb4f80bb94e8ad7fafac503e4e8d2bb15ac8c79b47f08", + "relative_path": "cases/fault-missing-effect/trial-03/oracle.json" + }, + { + "kind": "other", + "sha256": "14c1f7cdffbb2c0d7ff2d462a2cfa882e2069dfad621de543ade242feb2e4332", + "relative_path": "cases/fault-missing-effect/trial-03/run/.attended_capability.key" + }, + { + "kind": "other", + "sha256": "eb51646e456c9a4f946fb947458b11ceb9ee8b0d4fd40e2905cc433781cd7606", + "relative_path": "cases/fault-missing-effect/trial-03/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/fault-missing-effect/trial-03/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "112fc79273118c0571155a605bd9121269e22eb42f772f985d394abd9d1d2491", + "relative_path": "cases/fault-missing-effect/trial-03/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "91eacbd368bdc0f691f801296e0e82c61b46f19841eb34aa8c05400f100c136f", + "relative_path": "cases/fault-missing-effect/trial-03/run/attended_capability.json" + }, + { + "kind": "other", + "sha256": "49655229f01f9418dbb7050f57e59dc6740c22b7f307cc3ac0f7bc05d73a0f9f", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "a1dea3114c0fe5ecec7a76d5bd8b08a1238b7950cdbb5456cc21afafff8ea44d", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "091746d9429af587eaa039d094a48f2651432e15a86e2dfacba49f1b3f059911", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "bc0a5aa1cf8e2de935bebe07d8ef294f71635d7d30731163aac626b6bfe7df6c", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "743f43bb2f8c650b015424b0f36778fbed6a55aa97b732ca04425d2321220f93", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "c8d2d69beff0a6b3a34c0fc8dfc631e9ec2b9ac5e87ee412c8195436d79eed8d", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "036b335862ac8a6474aaf4308d0bacb46b21cdee3bf13bd7e792fea8e74d1cde", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "9bbd79b8455cc2bd874c1a1852fd0b7c119e8e2b21d90f9ecaee3c33b3967862", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "c66c4dcb72ea251eff903e85cccd18a4cecadc4767c7427880d2e4a3b10a5e34", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "7d385d8ee67a99d4b7a5dc414dca6c81f8f703fa41cb8ddda88290664e6edfb9", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "8bb52fe0d0b71ea658f0abdab857d23798e86fec3eed36b767e9f5f477fb9815", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "8a94619c1fbdecc672b0bed67e7821d29f83da81b0fc5bd408921b31990a1e0e", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "0114ecd055dd07bb4bf9ef9c99ef447f58403b6eedad44d11e3e3aefd2a16d67", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "0c596e96133b6897185ae2c94e81aabe8613149553e3c0e555c9b4e2f904ec89", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "16c3e91682602b5aaa7673d1bdb819fffccbb3566a38900fac82f8e921dd62d1", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "2c4abbb34cbe5d5e3c6be5e02e9ce7c08bb4f2e3efa6fe8491b2bf4800afef2c", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "af3063251538c392cc3a0b7e9b1c79192b8afc67bf00d162c022212dac4a0e5f", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "9ec3687e7b894f65967ae1ffcfaab7c873fe7fa7ce565c84c5d4a6c84bc72cf9", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "6c6e46eeca6b797e7f5bcdd398d8b36727b231f71773ce4318759c2f53592970", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "e3cd0eee8dc886fda306b58810e8a0810964ebb99e3e2a05c309ac5d2d37a9a2", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "5d3d014285f98dbeeb54b752d365d89295b8a0e78b6a02e3222c6a9149f34ae4", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "7084391b3a2cffb4bf7d62d96d83a500a8d32492a2f149a9de58cfcb793a48c3", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "c69b1f3d5d5ed7f168c2c98094808ae7d74f3b655cfdfda9748bf86ca34ae9c9", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "70a5307eff7765d36f8f416e31bffd6a15b676d7be02ca90da56f951a8610f3c", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "d172969455a240fa492fe2fd2c999cabc096880d388cb4c172a6f9c974338fda", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "21f5e1294bf2f49636746a415f5ac71bcb205fe5cb724b5fd2175a989b94e153", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "a9b22106583a30f16ac23036fbcddf9d93354a3a5507c5b4d204c2dd6f1f18ff", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "d2b7bc58997b09d7bb068391b4df643525ca697630e4ca87d1149cb41b295e7b", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "76774b9b30a47a3628fe3467c3e7108ce32d3f0fe81ea935b156fbec9401a496", + "relative_path": "cases/fault-missing-effect/trial-03/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "6d0ccba4f0e3dc516b506e299aada7926d6e877deb761fcb8f77461b53b404bd", + "relative_path": "cases/fault-missing-effect/trial-03/run/pending_escalation.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/fault-missing-effect/trial-03/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/fault-missing-effect/trial-03/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "d8a69623e8cfaffe5b0a19852153833e68feb5be50b26836f357639b040d28c4", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "fad79bfa21dff3229684757c2b447ac400a8ffe95608dafc7f4b66d040e94f1a", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "7dc095f12231847ab79f0238a73fc7139080a892aebd4b9dbd6ae849d8f7fc52", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "eb3fa56cd07d10986c78110fb0d5a2fcb6924988b4b2be36230c7dcebe2e7533", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "4e4483818578d14a267a7a029c6de9c00f34deffae91d146087b2a0c1c7ffc8f", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "a7ab2c13b4fe99634ca33509531e7617775e111cfdd46fdc20ce6d1616f0a09c", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "77d2104c9d6a774c259a4a209d959b55b5291e44860e2d16e883f43eaee803c3", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "54478040f999d47868259882cf1a9462fd595969c84455cf54d2d9a44beb551d", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "01421aeb90d82d9643226a50ca8c8dc93ec1df7c5869898f3be221502cc239a6", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "50da6bf7f987f1965c1c9ec94f00e401350d4fa46f2e04fe1cc63cbb1b109abb", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "6ab309d96feba8b28e08e93f99623ee1cf3ec71ab23c9d2ffe8072982cab3f46", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "5d7df9ba0d80a372587bb5bbd25ec95ba2e7dc7cf7acc4837ed3f6f5c782943d", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "1ac76ec5b9d242890203a323e19bbfbbc7849f5fe55eed83bd87da7ab11469d1", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "c261fb3d04e15f77e04f2aba1689d9f86ddd0447e91f51410987d67a69970f02", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "5feabfa31531807d42c9965c3b93375fb6f771fbf4a3d4d8a2cba602aa276e22", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "9ca5ca69e0fe01285d93685670422b513915b422f4338ece1872bf256030cfca", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "2b8b7e9ea72f8c330e3300428e54dacb97011ab72052c0c0a2b5e784498b1c39", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "d647ab51b8a51480fe54ff06c02490bff13ee9ad1e1de27b75f8579711b347d8", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "a34f4ae9bb747ae5b6c27fd22f7f29997d8752fed1b92baaecd5351085945608", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "a37b07d0543dc9cceffa6afdad3d75362c18482346783e100513d3e83eb73b0a", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "03e3c8fef205f311f21d2289c9de41f34f85697b8ac81fc0603335e676f8d6b5", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "454e3aaaed14ce51d3a594db063fb9e67c8ea111816debbe991b9900019588f3", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "376b753dc6c70aff88040f4f09cd16528685513a886e95ff0d51e422785bda60", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "c61acda85253031d3a406078724c2b8f212a6acac73208a0fa263b9d91490df7", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "fc7339429f82785d779635b19aea24e4c59b7bbd22b1660e6a2b3a189fddbbe1", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "0a84087b07fec6c8fd47da09a1a383dc6f0a14d165e7d3f956acd77158de8c6c", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "94e67af240fc73278558eabf92656804e358c0e52e4f7938e83ad943ee28b131", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "7701f99f7b8b41dee9aa4be1f4dab18dbb8d173a9a2704025e4056be165dc750", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "d4518e1d433aa4340fd158942921e83f90221436d306bfdea0ea0a959c09ea78", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "742fea75272e1130677ba70d5dd0640e022519beb2b37f96aa112b201e61993a", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "638c00f7ad9a109d7deabfb6d88702c112f57fe93f3cbcb0d61e2c967a0e7a63", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "90f99936e10bd0e946ed519bfa80c727864764e9555f4d4a56acea43a6dbba57", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "e243fec2a0727b2f9ba3052b3b99351df4dc2782f32d5a0ceb75abe790c360ce", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "0f463ac968a47254d54e9200c49317b4f0222e6be21efbd1c8d862cd09eae181", + "relative_path": "cases/fault-missing-effect/trial-03/run/steps/step_040_before.png" + }, + { + "kind": "fault_receipt", + "sha256": "946ba6106eca880c2a07611cd4d31141fd4faae95c7e4c708b8a18aaf72a8e10", + "relative_path": "cases/fault-missing-effect/trial-03/fault-receipt.json" + }, + { + "kind": "fault_mutation", + "sha256": "da531a70cf546d36b9f63926e6f1f8d3a50018cae9762ba7a1a66954644ac3e5", + "relative_path": "cases/fault-missing-effect/trial-03/fault-mutation.bin" + } + ], + "detail_code": "fault-missing-effect.03", + "completed_at": "2026-10-20T02:54:23.045551+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "HTWM8w1HW5bW7hSTwfwkyksVO0CNaRfrA0+ltAD3etVJfP65Cyvss9LZktbRi8NmQXZJDIdwZaiHZKrjg8YdDg==" + } + ] + }, + { + "id": "representative", + "kind": "representative", + "description": "Recorded workflow on OpenEMR (local fixture, made-up patients) under its qualified boundary", + "input_ref": null, + "runtime_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "action_targets": [ + { + "step_id": "step_040", + "actuation_path": "gui" + } + ], + "expected_outcome": "verified", + "required": true, + "results": [ + { + "case_id": "representative", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "verified", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "8384828df9ce373829c3da48ddd3886bf7d889c21dee348d6576d1b46e8c001d", + "evidence": [ + { + "kind": "run_report", + "sha256": "6544473f4e4eeb02b208a9889f3ffb049f1c2fd55608093ce81d3f0967f75925", + "relative_path": "cases/representative/trial-01/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/representative/trial-01/case-input.json" + }, + { + "kind": "effect", + "sha256": "f08c7ef8e745fe6eab7d2b02ca50af9c553d00a4e01230e08bbecfcd7062e8b8", + "relative_path": "cases/representative/trial-01/oracle.json" + }, + { + "kind": "other", + "sha256": "14745729f4f89c41d997bee525cf9058e9b22350a7db4f1fe8edf909b2173ca2", + "relative_path": "cases/representative/trial-01/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/representative/trial-01/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "c827bde55fd38182a3e94c8da4b242ab6120f20d3b8b0959d64996de789e5e73", + "relative_path": "cases/representative/trial-01/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "9f27062b08dccf2170cf53927f1354329a2f3c20e7fa4fda4e94da1eac23572c", + "relative_path": "cases/representative/trial-01/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "62f3eae45a92a51323db290e746d8a028ce2d1a61dcb8afa19840c67e4a01dd6", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "774e369a96e33420fba38eb04d1228d01bb1392c6f0b25587e7834b1a0dda5a7", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "0f9c4d2b1da166cf9d443e8eb98b60f68b730bf129b6482b9f12628020e02deb", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "5229d13a4d3330e7f43d4d35fedd51e8494b3227457baf4c0caec1a362fa1907", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "2fba8ece58c81029b8984fd4f9930239adad1af17cfece5144ce857864bb7659", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "6a3f1c02208d9d30a05083bd10254c85db42fc826be5f40f967ee795e7a33b8c", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "106afe63e7e8b57745f09e8e3f9803263b9cd2d24a5a6d356f2539acc14d70ba", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "420f22a51cf5315b9ff30201386e85adc50951ce99bdc370631d0ee91b4b7300", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "dfcbe5c46f0dacc59a91db9d9483b8830227f04a4402d895e86e983f5d1c95eb", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "f82f2b9ebd529380aae5fefbf8b9d5f09e2a90aab451599725c765e86b18dbfd", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "f23b8ebc31a7f21d5336d69fb04473fd7c165f2e40dd087d8653d39fd63456a3", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "850c224aac9c29fdd08ea16746186e49910401e72b19c6016b168536c74ffb3a", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "617c4f58dfa2437cd90eb5e3c6c172058d9970270073f8d1137f58605424573a", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "cc57523184034ae8395f42ad7f25becf91eb4c472eb2ca10abc5f9275077e1f3", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "bfcc464f64a2cd5a75b49bfd100d5ab3c69c6fd0e7645040d32561364fcf9ddf", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "85b57dff055ade8b9981fca506ab52d17d7d58a2739bbb27d88ca6be19cfdea1", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "b435fcd752c9f901a2da80926ee7bca352b0ad101168474c303781379322671b", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "4ddd24485860254b2e2b1e7cf4ca86c0869a9b2ab1f4ce9727eaf1c72c2e1d2a", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "bf5d1075654c03255ad452df4e215b1eb9ee79e0519c303fd2b3b83af22ce815", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "d6bfb1b703948cfdfea8ecd859c4b8d130eb7b3bdb78298ac74b2ff95d42042e", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "ea8c212e02310e8353cf6cb0a834d59d56f4bc467006e99cb75b3a9ddcb4fd23", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "c45f9905e50adb48d5fdee15af0ee74b9bfcc66d1c19dbb1aae5786b95fe4f5d", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "df27a83ddfb0249e35b8c0b5d33afaa05084ebba6385a23774fe07009f5340f8", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "239c6ac897e5b48bfc88286a22cfa4e82a6ecf8a0db8aa3c8a5f3c7cd840ba8b", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "eb224f72a847eee843ab1dfce1eafa3488448fe0ecd0023179c76032ec42dad2", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "54fd7346d2a1ef3414e0d2195c4692c731cbee53d90d6ea10918566d16fc2d19", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "b74fffb81631feabb49be668f0eb23144e2149884ae5ed3f7e2c22e385b3ea0b", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "19bb53960d4f7bf595170a3996a1edfeac07ca81d2e4cc6b244baa85f1db4371", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "6c74a8cb9658208d99b664bfdfa3c75000211f25f72a51f739d8a68699393419", + "relative_path": "cases/representative/trial-01/run/checkpoints/step_0028_step_040.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/representative/trial-01/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/representative/trial-01/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/representative/trial-01/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/representative/trial-01/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/representative/trial-01/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/representative/trial-01/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/representative/trial-01/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/representative/trial-01/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/representative/trial-01/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/representative/trial-01/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "3e5cb4442f1afb3551d0e67297061cd85be7eb9a67f00529a6d71ae9d0ffbb8e", + "relative_path": "cases/representative/trial-01/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/representative/trial-01/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "a7ab2c13b4fe99634ca33509531e7617775e111cfdd46fdc20ce6d1616f0a09c", + "relative_path": "cases/representative/trial-01/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "c6f46132bd7422d9f189e16f0f1979154ba2d6be4371b69e478e2a14ba0f7fd6", + "relative_path": "cases/representative/trial-01/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "c1258059df43e1599e1a91b014a0b353a5bcb1ee85ca0030fbcb60f3325f7ab2", + "relative_path": "cases/representative/trial-01/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "7dc095f12231847ab79f0238a73fc7139080a892aebd4b9dbd6ae849d8f7fc52", + "relative_path": "cases/representative/trial-01/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "d5581d8ec8b17707e203d92b7739455f025ba70d53f7534ecd6a154e0de40375", + "relative_path": "cases/representative/trial-01/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "5152230d112342fb5c77a66aa3cdb428f3f75d3150122dc896793f578010a3fd", + "relative_path": "cases/representative/trial-01/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "f74a01c8851896553fb971acf44d10c0cf75c47852e09cc7b8c94561e41773fa", + "relative_path": "cases/representative/trial-01/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "c7d09eb44412dfdda5e818888bfee9d7880b9e5eeeb4e3a3dd0be13dbafa65fc", + "relative_path": "cases/representative/trial-01/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "7af4903dc2869ff399b45223d20e8d0f9805ff28b91837e072eddcf1c5d2560d", + "relative_path": "cases/representative/trial-01/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "95856ef070a6da98249e31fba0ba0b77160b206c5bde0c855755ee3d27501a84", + "relative_path": "cases/representative/trial-01/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/representative/trial-01/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "bb59b20a47410951f4bdd33715a26b6e8f8eaded759f6b5aba4e17d00f8268d0", + "relative_path": "cases/representative/trial-01/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/representative/trial-01/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/representative/trial-01/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/representative/trial-01/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/representative/trial-01/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "46f40ecbe96f2a4c238b87d074c7b440ba5968bb0167aa6e9a4627f5156477a9", + "relative_path": "cases/representative/trial-01/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/representative/trial-01/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/representative/trial-01/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/representative/trial-01/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "ca7221a706d84998ef07edfd20277086a7bf48a0c9a3596519269fe5e059bdb8", + "relative_path": "cases/representative/trial-01/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/representative/trial-01/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/representative/trial-01/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "9ca5ca69e0fe01285d93685670422b513915b422f4338ece1872bf256030cfca", + "relative_path": "cases/representative/trial-01/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "26afddce8a20c45951863ca4bcc6565529574ef09fe410f303f42773ff2d17de", + "relative_path": "cases/representative/trial-01/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/representative/trial-01/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "5cbcc7c1151e909b305848f317820422ea0bb1a83b2a15729558b70f984fbab0", + "relative_path": "cases/representative/trial-01/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "01a7fda08f8f4e006c0efb69ad043938b1982262453cc8632a8be167dea0f7b3", + "relative_path": "cases/representative/trial-01/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "19e55f32514dc1d970f6bb3d2700ae92bc25fd00fac2b399f384d869b8ebd76a", + "relative_path": "cases/representative/trial-01/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "41a2a5d60cc04650b88e44a88fa5396bfe93fcb60917b76ed1da7971ed286bb1", + "relative_path": "cases/representative/trial-01/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "c5ce745806d53d5927d28b616151637f975ce6ccfe57f828be2513396ef0c98a", + "relative_path": "cases/representative/trial-01/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "8ccd4cfbb01ee129480855fdd50ed171766430956f53c44aaab1b0ec1fc2594e", + "relative_path": "cases/representative/trial-01/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "edd990866c5521c814290ab9c4e6585ffaa6e9723f0d574ae8c2b61dd3171244", + "relative_path": "cases/representative/trial-01/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "4027a6dd435e14e933ce88ca307a1dabc25566fa588dedb0381447bbdfffb2c8", + "relative_path": "cases/representative/trial-01/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "0ad64524bc70e5a0278a41c5bf26d326b0bc5349a1f11faa1d99a91b46488e53", + "relative_path": "cases/representative/trial-01/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "b9800603d8af8394c14c1c58a757679d5c42ae6ec3000a5af845da7071069cfa", + "relative_path": "cases/representative/trial-01/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "c783ada6829d100354aad3145a478aebbe39309ee690420b43343121299ff292", + "relative_path": "cases/representative/trial-01/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "3bfe972b2a65f739f465ca05d1a1291f8b3ef3d660601efc4ffa1e486bd8a0d1", + "relative_path": "cases/representative/trial-01/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "7ab6d609985d071e28828dcc4df72681d2d55416d0c63fdf7617f21e8bd6bd87", + "relative_path": "cases/representative/trial-01/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "28aec824f9f15859669e6493e72143a57e75addba47e5ebbb44c6f8db58b8988", + "relative_path": "cases/representative/trial-01/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "9cb7cd86fa45d143937708bb7a6cedbb729896e1a2d019f37eba00eb3a8ad1ac", + "relative_path": "cases/representative/trial-01/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "c84e9bd78a834b5bc5b507fd5703c99f005fdc5942b55dd2f07237658aab94c5", + "relative_path": "cases/representative/trial-01/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "73496323fdb12640ad7440995e4c7c3e50eae3e23377508ec81cd97840c5f95d", + "relative_path": "cases/representative/trial-01/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "2f8c42fdc0d4eaeb37bce6f0e600857be06996dae64e891037d3270ea93211fe", + "relative_path": "cases/representative/trial-01/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "b3b2c085a09be2ad4c3b76114f36642118da69abec9a5d8ef1768027a20882aa", + "relative_path": "cases/representative/trial-01/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/representative/trial-01/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "66e074f916bf2dc6d3f87035c30ae13eaff9354c91c797e5889f7af131bf108e", + "relative_path": "cases/representative/trial-01/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "e243fec2a0727b2f9ba3052b3b99351df4dc2782f32d5a0ceb75abe790c360ce", + "relative_path": "cases/representative/trial-01/run/steps/step_040_before.png" + } + ], + "detail_code": "representative.01", + "completed_at": "2026-10-20T02:48:00.991131+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "GtzKLZ9wLMkBgGs29v4KxvxWH/wcdtVkmERvRbbO4zxXuiDml4fRppYuumqWWTCArHGDp3vNBbeEfDVPR3RICg==" + }, + { + "case_id": "representative", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "verified", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "6a109585d93cc6fcd034e349d0eb9c29d96c08a4c67b9eb73ad7f96375b7bddc", + "evidence": [ + { + "kind": "run_report", + "sha256": "ce7f4a54a3674a356f9206217240db48b5ea166947dfb904096e9874a26d0671", + "relative_path": "cases/representative/trial-02/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/representative/trial-02/case-input.json" + }, + { + "kind": "effect", + "sha256": "f08c7ef8e745fe6eab7d2b02ca50af9c553d00a4e01230e08bbecfcd7062e8b8", + "relative_path": "cases/representative/trial-02/oracle.json" + }, + { + "kind": "other", + "sha256": "7fa18b686d0aa9eef95d40bff4738b12a242ea6db36f44e472bc161fd9181902", + "relative_path": "cases/representative/trial-02/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/representative/trial-02/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "e6891524e4d949b5091653963f229716d9677c2e8845f2e8b4340d499a34d2e7", + "relative_path": "cases/representative/trial-02/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "e7c614adf41392afe4720a084e011c283595ac2a89559d3656419341f2586b1b", + "relative_path": "cases/representative/trial-02/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "bc8686df8322c7b98699f6b9cbc5316dd43e39afdff4ee00c109ce20c9ab1fa4", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "854f28dbf8e1fd55161727b697f8c3485eae5d073371664607a154dd519a99c5", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "66a9b724dfbcf3cdd58115bbecc7bc0ddd782c63b597476c977496239a1fc876", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "a2b30b97149720f059e987e3b38a35388e8430c90f1aea981b6ddf0af6d43662", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "c0734a7d9e76a45db3c3a38be148db634426b60ac219d6e7db315f3a4302dc33", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "d8fd937800586253420c2a2389aa5fc491fba95216b5f3017336c44c7741947e", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "34e77e71de25cede37f6e4c209b938791c148a6f6bcab5fe4a2b9839f1db129e", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "f69f5ba33d286cc508b47347c024daa8ccc0c7a6fb22c9e9bae1dac4f748133b", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "e1005570ba179ef9be03d85a761eb01f54f73855aa53b77c06d2b3f83f111227", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "be815ec251676ea003a23bd8594eace68e5ed9ad06db83bf4fd81cfeed8a33cc", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "60f961521e3b5362cefd0dda80d20756328803e347387a8a3ea39f1524534018", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "bc2fb795209a6bc54290ca42e61c1e49f89dfbd0e2ed6a7a19dab68dea0c89fe", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "469ad977329078f4e8b83f8ce957545d80de4c16be5e1aee067170c14d5416f9", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "180c3caf30510dbb21a6cc62a7a08008d40f1a0e5107a1d149c5261cf950d0ae", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "637fa8e1f8ef5dba069dadd9e1a3588b7d07ee519d32b49dd6863d114353e791", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "8e51fefe3738901a36d6a569bf277746c3c3abbc13e9f746342087ff46e87357", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "025819caeee1011a8305ab9a5757680312e1c8cc4d44dd721c9f0a1793d0cb85", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "303ba10adc2aba4965d370235a29ed1e7316fe01bb5e9ae72a78b97a1aaa90f9", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "5a04fb3dcbd002974077e1ccf1058e42b29f28a784888589ed0d046cb7d4d43f", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "b20e995f633fa1cdd99d4380dd607a5e292367b7cedd6144bc25da215a93246a", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "de0fce51a140a429602143f48898385d19d7e2c63a4a78d533091c7af3b44326", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "d4288a2e992439d3ef4b9f6d17cd520567b059882f5812212c5a96e0fa3d7306", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "0105dc466572bf46e40605af0455b68734112f04b220f9ebbc345ce292b27a0d", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "a72604f0df23b98a2a970df57b568ec7bcb73d37b88b3c932d9a698370fd595e", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "90f95d24807a3b41f7f3816c8614a6f72558e0250872b2299b58116847a32603", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "9b30938c9ac2b7edd72fd3aaa73bb04a1e818dce1d61d86e66f24e1ea5c8beee", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "5beef493f3236caa1dff23233fc2ea29b994702b86a60cb24703a6d9f07775eb", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "23babfdea042968bafdeb17febc3f77a3745427b5441e0d13468857ea9f7ee70", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "d1072419cc12a2c35c5a604f8ccefb9a54d750eabb05eda41706bec096a011f9", + "relative_path": "cases/representative/trial-02/run/checkpoints/step_0028_step_040.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/representative/trial-02/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/representative/trial-02/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "1611ea353698b6d6ed55862caa771378787ec0869ae52c7abed506f760383f3c", + "relative_path": "cases/representative/trial-02/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/representative/trial-02/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/representative/trial-02/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/representative/trial-02/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "5884a590c2a665b233f7867d9963cc095af069fc40cdf9579ba4bdb8ae99c4c9", + "relative_path": "cases/representative/trial-02/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/representative/trial-02/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/representative/trial-02/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "15789a0180c7522ed324e1bbf0d35bffed968fe4e8acdad59df2d468a8dacc22", + "relative_path": "cases/representative/trial-02/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "3e5cb4442f1afb3551d0e67297061cd85be7eb9a67f00529a6d71ae9d0ffbb8e", + "relative_path": "cases/representative/trial-02/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/representative/trial-02/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "a7ab2c13b4fe99634ca33509531e7617775e111cfdd46fdc20ce6d1616f0a09c", + "relative_path": "cases/representative/trial-02/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "c6f46132bd7422d9f189e16f0f1979154ba2d6be4371b69e478e2a14ba0f7fd6", + "relative_path": "cases/representative/trial-02/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "c1258059df43e1599e1a91b014a0b353a5bcb1ee85ca0030fbcb60f3325f7ab2", + "relative_path": "cases/representative/trial-02/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "7dc095f12231847ab79f0238a73fc7139080a892aebd4b9dbd6ae849d8f7fc52", + "relative_path": "cases/representative/trial-02/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "d5581d8ec8b17707e203d92b7739455f025ba70d53f7534ecd6a154e0de40375", + "relative_path": "cases/representative/trial-02/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "5152230d112342fb5c77a66aa3cdb428f3f75d3150122dc896793f578010a3fd", + "relative_path": "cases/representative/trial-02/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "f74a01c8851896553fb971acf44d10c0cf75c47852e09cc7b8c94561e41773fa", + "relative_path": "cases/representative/trial-02/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "c7d09eb44412dfdda5e818888bfee9d7880b9e5eeeb4e3a3dd0be13dbafa65fc", + "relative_path": "cases/representative/trial-02/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "6040e433878e5016e4f065f4315af0e0624e6ed52da781857be737b5f60c85cf", + "relative_path": "cases/representative/trial-02/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "c54beda44fa60a89f1c32a4160956c9ec32946c590d5618aa0294132a7bf3259", + "relative_path": "cases/representative/trial-02/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/representative/trial-02/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "ae52ddd312e1347915c89511e2e6fee1624daee96fadbd749383625657370352", + "relative_path": "cases/representative/trial-02/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/representative/trial-02/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/representative/trial-02/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/representative/trial-02/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/representative/trial-02/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/representative/trial-02/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/representative/trial-02/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/representative/trial-02/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/representative/trial-02/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "62f15534900084af51932bd6b6418a1d8ed16df71d89f38ec6685bac99c0a34b", + "relative_path": "cases/representative/trial-02/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/representative/trial-02/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/representative/trial-02/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "c3d24dd1fd540365d611071f42e7f6d02c139ec4ef6d34e29aaba460a2ced22d", + "relative_path": "cases/representative/trial-02/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "b99b1bfb47d1551452cf9dabc989a6eec0e269c3039382d1ce37300880523c60", + "relative_path": "cases/representative/trial-02/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/representative/trial-02/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "41a2a5d60cc04650b88e44a88fa5396bfe93fcb60917b76ed1da7971ed286bb1", + "relative_path": "cases/representative/trial-02/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "9f5861bae6cbb27dc409490dac254549ba35eafa7ac04376814ffb78ef253442", + "relative_path": "cases/representative/trial-02/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "abcbf0ceeecc203d3ae212df70f72cee29667cd9c489404508b3ca7bd0ed8f57", + "relative_path": "cases/representative/trial-02/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "5cbcc7c1151e909b305848f317820422ea0bb1a83b2a15729558b70f984fbab0", + "relative_path": "cases/representative/trial-02/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/representative/trial-02/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "3711cf7f656737657ee3e95e23e26deab0bc0205f1bb1415b5e79a0fe25c96dc", + "relative_path": "cases/representative/trial-02/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "edd990866c5521c814290ab9c4e6585ffaa6e9723f0d574ae8c2b61dd3171244", + "relative_path": "cases/representative/trial-02/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/representative/trial-02/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "0ad64524bc70e5a0278a41c5bf26d326b0bc5349a1f11faa1d99a91b46488e53", + "relative_path": "cases/representative/trial-02/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "b9800603d8af8394c14c1c58a757679d5c42ae6ec3000a5af845da7071069cfa", + "relative_path": "cases/representative/trial-02/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "db574a4aa61e7ac2ec532dd830eac3ef610ffdb5ff94711ac6adddc1c0de6d68", + "relative_path": "cases/representative/trial-02/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "3bfe972b2a65f739f465ca05d1a1291f8b3ef3d660601efc4ffa1e486bd8a0d1", + "relative_path": "cases/representative/trial-02/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "b3efdc8df122cb2f2fb1a98a3510e3e0b0633f3ff1221b20bb268b5e4eb2ba33", + "relative_path": "cases/representative/trial-02/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "3b260a55479a181b37a92acbbeafb628fc14fb802b40823c0cbbacbbec2ea3a1", + "relative_path": "cases/representative/trial-02/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "3cbc11fd03296cdd06efc8c1b8ac16b2eda4de82ae8a0d76ba3679a300d3fa27", + "relative_path": "cases/representative/trial-02/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "37099c55decc85a1975ecf3435d3724b9a7e1df1af1ad47f06aff44779387aaf", + "relative_path": "cases/representative/trial-02/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "06404ee26158ecf3716f837fbb71ab8e461e64b7a789ff7d08bd0ee6c517fd3d", + "relative_path": "cases/representative/trial-02/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "9cb5c20d1451d15086a0bf84810cd2bb57d6ec2c64bf3764feb7b0e965061f4f", + "relative_path": "cases/representative/trial-02/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "113878767510b147873867389b607025d32b1bd7a00cfe4df7cde53193470f33", + "relative_path": "cases/representative/trial-02/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/representative/trial-02/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "9f5fb2c5d6e5c98281c5bb92da3d4f6b3111250baa9109623a57a97d756b8fbc", + "relative_path": "cases/representative/trial-02/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "e243fec2a0727b2f9ba3052b3b99351df4dc2782f32d5a0ceb75abe790c360ce", + "relative_path": "cases/representative/trial-02/run/steps/step_040_before.png" + } + ], + "detail_code": "representative.02", + "completed_at": "2026-10-20T02:48:24.762406+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "jzJ9KYTUrmnOsbUhyLmkQztFyQgoEmKOvDPB/Rjz2db6R4TmP8VO6pIx8k2/Ijosf+Q5BVNcGFV7KN0UTH0bBA==" + }, + { + "case_id": "representative", + "project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "environment_digest": "bc58b00659514f612afe715d218299138d344a7b95492af936e92c100006fda2", + "runtime_version": "2.2.0", + "runner_id": "openadapt-flow/qualify-web-headless", + "runner_capabilities": [ + "headless_chromium", + "independent_system_of_record", + "playwright_dom" + ], + "status": "passed", + "observed_outcome": "verified", + "campaign_id_sha256": "606567e4df384a928929c6f3750dc927a69b2c67c53bf1b2d83dadcb1ac3c1a4", + "case_input_sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "run_id_sha256": "e7e9be1cf595c6a70314df1a605b9b4884671e8e271bb3b714680ca74fe81609", + "evidence": [ + { + "kind": "run_report", + "sha256": "7642c8e5d8ecc6c0d7f8b15ab708fffb552fab7704282fe4dfb49123922ccc46", + "relative_path": "cases/representative/trial-03/run/report.json" + }, + { + "kind": "case_input", + "sha256": "9091c896f230176667046cb0bdf4294243938f6e997353fce0e1ea8cbed87cd9", + "relative_path": "cases/representative/trial-03/case-input.json" + }, + { + "kind": "effect", + "sha256": "f08c7ef8e745fe6eab7d2b02ca50af9c553d00a4e01230e08bbecfcd7062e8b8", + "relative_path": "cases/representative/trial-03/oracle.json" + }, + { + "kind": "other", + "sha256": "ec11ee4cc97e39c1b5a1426f9107a7fda56999eca2ab381534a3d2ebc3764676", + "relative_path": "cases/representative/trial-03/run/.durable_run.claim" + }, + { + "kind": "other", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "relative_path": "cases/representative/trial-03/run/.durable_state.lock" + }, + { + "kind": "other", + "sha256": "a8dbb5406fdb445440e814c4f00a6c8fe0ba7fa26449114e583eb43fa107cf8d", + "relative_path": "cases/representative/trial-03/run/REPORT.md" + }, + { + "kind": "other", + "sha256": "67e1c3b6e696605fb6146604f983bef7449faea3fc0932549910b1d968f51b70", + "relative_path": "cases/representative/trial-03/run/checkpoints/_manifest.json" + }, + { + "kind": "other", + "sha256": "959f59b5b1cf754e9ffab8032d93843aa0e05e454d9415d3cd989d938dc8b5eb", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0000_step_000.json" + }, + { + "kind": "other", + "sha256": "36eee53ca8e82c004b352fdd20ec80e13e71a6056e5be5ed8919e90d6f34499e", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0001_step_001.json" + }, + { + "kind": "other", + "sha256": "0c3ca9eac66531e54ec6e12b180e6cfa34da405a75136f6749a8472bb424cc7d", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0002_step_003.json" + }, + { + "kind": "other", + "sha256": "0bdd2ee94ba6dcc8b48f1d7b20680a37ae5656162204de16f798228cd29a5248", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0003_step_005.json" + }, + { + "kind": "other", + "sha256": "3ab99bcd07d0d03bfee606112ac87ae6269b6fdb1f598d3ed0ffeb3dc94a2b51", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0004_step_006.json" + }, + { + "kind": "other", + "sha256": "d789a895a1235ffd1b73993e631b9e96899cfc85611ae32b37df07ff096b26df", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0005_step_008.json" + }, + { + "kind": "other", + "sha256": "679bbf1db7ba85c4a0469ac2c56149dbb33d335347863aa7cd6c7bdf8ca783a4", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0006_step_009.json" + }, + { + "kind": "other", + "sha256": "a81aab1d4e5a4c24dc6e096aa82fd8c9e4cff1023b242f8f4f463661bdc5e61a", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0007_step_011.json" + }, + { + "kind": "other", + "sha256": "cd18129cda3fef785117349c03bce359a2fc655ca1409a30ca73eda08a4fa723", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0008_step_012.json" + }, + { + "kind": "other", + "sha256": "2bf582f5ebc595a7c892d0629088f7dc6c701371ba97bc20e5bca9729cf3068e", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0009_step_013.json" + }, + { + "kind": "other", + "sha256": "fd849c84d0f34ba91699e23a5ee42868541b38fd362e4e0f805c290144b6b4d8", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0010_step_015.json" + }, + { + "kind": "other", + "sha256": "435d4d187fffcf2bc7486f16a483b8b10be040eeeeea0ae3a73be7945971a3d0", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0011_step_016.json" + }, + { + "kind": "other", + "sha256": "be7616e177566b587f3083bdac44c1a0f5a613bcbdfdb58e674a208079b39dda", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0012_step_017.json" + }, + { + "kind": "other", + "sha256": "f04ff82b08af5c19a247fc2e7a411b9934467f9a170ac0d5858e0ba1f2d17b39", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0013_step_018.json" + }, + { + "kind": "other", + "sha256": "a16823b33ceb3bf4cd44ea436e9bd536f2e0cf2d307a1c7963929bab3775d4cb", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0014_step_020.json" + }, + { + "kind": "other", + "sha256": "9f6a5fa20fb59244fc5eb9a556c189b7622fb25aa68dfe901bbc50330a3ec728", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0015_step_021.json" + }, + { + "kind": "other", + "sha256": "0095002b594d77a23cfa06e09569f3e1d411c68a085480345fad26fa63ad1c58", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0016_step_023.json" + }, + { + "kind": "other", + "sha256": "7306dd2a5eba389d92b0f048b5125d36f0c992a8fe3fd8cefd7156ce90f21a84", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0017_step_024.json" + }, + { + "kind": "other", + "sha256": "08064ead18e5e260063fe50172c77d615ad83462e46dafc7ff8cddc768813182", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0018_step_025.json" + }, + { + "kind": "other", + "sha256": "b6e590433a6193e55a98505b6520dbd362c6b4d8b5ffd36eeb8e6db4e9c9b1f9", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0019_step_027.json" + }, + { + "kind": "other", + "sha256": "25512c889ec61e72a1c41905b9e1091e95d8b224414e5c1a4cd4ebc3f419c69e", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0020_step_029.json" + }, + { + "kind": "other", + "sha256": "b625e9bbd14d1f4ab6176c59848e7d0596ce32f50edc08540d47756a6e1f26ed", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0021_step_030.json" + }, + { + "kind": "other", + "sha256": "115e353df214c895aa9c631683a9b03c8eaed971725953a614d5f2a147e5186a", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0022_step_032.json" + }, + { + "kind": "other", + "sha256": "6a3cc42da2a70c19d16b49dc72dc4ed93dd5aa5ef16b565a94ea0020ec1717b9", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0023_step_033.json" + }, + { + "kind": "other", + "sha256": "b0b6a60d39bc93cab2afff4d0374aa47496e0a18068464cb8ba0966f54c87bf7", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0024_step_035.json" + }, + { + "kind": "other", + "sha256": "13555edb4c32be3a1435fd89da2c01da459e774d5949e0a393abfddd586b44dd", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0025_step_036.json" + }, + { + "kind": "other", + "sha256": "aa214f3da660d0aa281f897379fffa0a975c647f54e42a59249d6ca45972ce36", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0026_step_037.json" + }, + { + "kind": "other", + "sha256": "cbd35c403a3a1d9201c0dba239a642c51dee8a5d45a4fbea4065770442c38e84", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0027_step_039.json" + }, + { + "kind": "other", + "sha256": "c0026068374750076dfa490da81104ab1027b1c87f810207e21558cf656acaff", + "relative_path": "cases/representative/trial-03/run/checkpoints/step_0028_step_040.json" + }, + { + "kind": "other", + "sha256": "14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5", + "relative_path": "cases/representative/trial-03/run/private/identity-crops/14a873e4bbcb5868c0ad4ca733fbbaf8beee79ab5958cf519c11a2a85115d2a5.png" + }, + { + "kind": "other", + "sha256": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "relative_path": "cases/representative/trial-03/run/private/identity-crops/457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15.png" + }, + { + "kind": "other", + "sha256": "d8a69623e8cfaffe5b0a19852153833e68feb5be50b26836f357639b040d28c4", + "relative_path": "cases/representative/trial-03/run/steps/step_000_after.png" + }, + { + "kind": "other", + "sha256": "8a156fd7b9c7388e9def662ffbcb1c8a634f4ebdca2c80c01b89394642e1fc57", + "relative_path": "cases/representative/trial-03/run/steps/step_000_before.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/representative/trial-03/run/steps/step_001_after.png" + }, + { + "kind": "other", + "sha256": "924714d9a109090cf3c6bd452a019ae3804d86180d64e2fe27e556770dbee68f", + "relative_path": "cases/representative/trial-03/run/steps/step_001_before.png" + }, + { + "kind": "other", + "sha256": "b90e6ea5d19d9e06108aebef97bcedd6cc00714bf243e8f864a8bf8c9b9800be", + "relative_path": "cases/representative/trial-03/run/steps/step_003_after.png" + }, + { + "kind": "other", + "sha256": "0014b71fb993fa1745357828c0160bd50350bacf06701544eb8e445f328c50fa", + "relative_path": "cases/representative/trial-03/run/steps/step_003_before.png" + }, + { + "kind": "other", + "sha256": "3a5b3c3f2093dce9be3e2e14ff56439dbdf04c3eda43b73d4b923020e21df2aa", + "relative_path": "cases/representative/trial-03/run/steps/step_005_after.png" + }, + { + "kind": "other", + "sha256": "e1f53f3d751158c9647ed1af1f62b9c843f5af49ac6eadefe9852cad924303c7", + "relative_path": "cases/representative/trial-03/run/steps/step_005_before.png" + }, + { + "kind": "other", + "sha256": "fad79bfa21dff3229684757c2b447ac400a8ffe95608dafc7f4b66d040e94f1a", + "relative_path": "cases/representative/trial-03/run/steps/step_006_after.png" + }, + { + "kind": "other", + "sha256": "05b8aae9eb196f39cb6abe52ff0ae4305f4c9e66f1c723fffd25dcb0489f425d", + "relative_path": "cases/representative/trial-03/run/steps/step_006_before.png" + }, + { + "kind": "other", + "sha256": "7dc095f12231847ab79f0238a73fc7139080a892aebd4b9dbd6ae849d8f7fc52", + "relative_path": "cases/representative/trial-03/run/steps/step_008_after.png" + }, + { + "kind": "other", + "sha256": "eb3fa56cd07d10986c78110fb0d5a2fcb6924988b4b2be36230c7dcebe2e7533", + "relative_path": "cases/representative/trial-03/run/steps/step_008_before.png" + }, + { + "kind": "other", + "sha256": "4e4483818578d14a267a7a029c6de9c00f34deffae91d146087b2a0c1c7ffc8f", + "relative_path": "cases/representative/trial-03/run/steps/step_009_after.png" + }, + { + "kind": "other", + "sha256": "a7ab2c13b4fe99634ca33509531e7617775e111cfdd46fdc20ce6d1616f0a09c", + "relative_path": "cases/representative/trial-03/run/steps/step_009_before.png" + }, + { + "kind": "other", + "sha256": "77d2104c9d6a774c259a4a209d959b55b5291e44860e2d16e883f43eaee803c3", + "relative_path": "cases/representative/trial-03/run/steps/step_011_after.png" + }, + { + "kind": "other", + "sha256": "54478040f999d47868259882cf1a9462fd595969c84455cf54d2d9a44beb551d", + "relative_path": "cases/representative/trial-03/run/steps/step_011_before.png" + }, + { + "kind": "other", + "sha256": "01421aeb90d82d9643226a50ca8c8dc93ec1df7c5869898f3be221502cc239a6", + "relative_path": "cases/representative/trial-03/run/steps/step_012_after.png" + }, + { + "kind": "other", + "sha256": "50da6bf7f987f1965c1c9ec94f00e401350d4fa46f2e04fe1cc63cbb1b109abb", + "relative_path": "cases/representative/trial-03/run/steps/step_012_before.png" + }, + { + "kind": "other", + "sha256": "6ab309d96feba8b28e08e93f99623ee1cf3ec71ab23c9d2ffe8072982cab3f46", + "relative_path": "cases/representative/trial-03/run/steps/step_013_after.png" + }, + { + "kind": "other", + "sha256": "5d7df9ba0d80a372587bb5bbd25ec95ba2e7dc7cf7acc4837ed3f6f5c782943d", + "relative_path": "cases/representative/trial-03/run/steps/step_013_before.png" + }, + { + "kind": "other", + "sha256": "0a9dd17fc8792ec1f34468ce6b1f378441f46c3c44b4918d68e1052ee4a14f05", + "relative_path": "cases/representative/trial-03/run/steps/step_015_after.png" + }, + { + "kind": "other", + "sha256": "1ac76ec5b9d242890203a323e19bbfbbc7849f5fe55eed83bd87da7ab11469d1", + "relative_path": "cases/representative/trial-03/run/steps/step_015_before.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/representative/trial-03/run/steps/step_016_after.png" + }, + { + "kind": "other", + "sha256": "afec126c126594e8d319a8d437eb21e1fc196f2645ae33900052d3ec1852716b", + "relative_path": "cases/representative/trial-03/run/steps/step_016_before.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/representative/trial-03/run/steps/step_017_after.png" + }, + { + "kind": "other", + "sha256": "285d61c1629c51bb592e9ed4ee2c8b02905d518b2671ad989a00feafdb4710c3", + "relative_path": "cases/representative/trial-03/run/steps/step_017_before.png" + }, + { + "kind": "other", + "sha256": "4b10383228a181433e2f3065ccf0b302acce4c78a7f906594aed9072763000eb", + "relative_path": "cases/representative/trial-03/run/steps/step_018_after.png" + }, + { + "kind": "other", + "sha256": "2daba928a164e6b63b67d6353274bc51fd6a406362c0df0cc367ebdb2f173331", + "relative_path": "cases/representative/trial-03/run/steps/step_018_before.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/representative/trial-03/run/steps/step_020_after.png" + }, + { + "kind": "other", + "sha256": "7ee0178cacb17010c13607b1b86c278468f87ac309ffbca5a84d6d2ee3c816cc", + "relative_path": "cases/representative/trial-03/run/steps/step_020_before.png" + }, + { + "kind": "other", + "sha256": "ca7221a706d84998ef07edfd20277086a7bf48a0c9a3596519269fe5e059bdb8", + "relative_path": "cases/representative/trial-03/run/steps/step_021_after.png" + }, + { + "kind": "other", + "sha256": "93beb9b4ea8ca4074404d40482717e7114878882adfd9b69a52cfc34c4c1ad99", + "relative_path": "cases/representative/trial-03/run/steps/step_021_before.png" + }, + { + "kind": "other", + "sha256": "9a37da33026d0fde654cd312ba521bcc4153d7e7827309da00c8918723965a2f", + "relative_path": "cases/representative/trial-03/run/steps/step_023_after.png" + }, + { + "kind": "other", + "sha256": "9ca5ca69e0fe01285d93685670422b513915b422f4338ece1872bf256030cfca", + "relative_path": "cases/representative/trial-03/run/steps/step_023_before.png" + }, + { + "kind": "other", + "sha256": "26afddce8a20c45951863ca4bcc6565529574ef09fe410f303f42773ff2d17de", + "relative_path": "cases/representative/trial-03/run/steps/step_024_after.png" + }, + { + "kind": "other", + "sha256": "50bb53d291ca82f402dec3264039bc3b3813b3a7cdc6ae9f71772a5de55e05b1", + "relative_path": "cases/representative/trial-03/run/steps/step_024_before.png" + }, + { + "kind": "other", + "sha256": "a37b07d0543dc9cceffa6afdad3d75362c18482346783e100513d3e83eb73b0a", + "relative_path": "cases/representative/trial-03/run/steps/step_025_after.png" + }, + { + "kind": "other", + "sha256": "a05e10a3211ca948e54d3d312412709d522f28e3e615b618d3f1ea68d9bd126c", + "relative_path": "cases/representative/trial-03/run/steps/step_025_before.png" + }, + { + "kind": "other", + "sha256": "387cb5eaba6671d00549e239cc1be85207caf52ab12d6f6c660c5e35c25a101f", + "relative_path": "cases/representative/trial-03/run/steps/step_027_after.png" + }, + { + "kind": "other", + "sha256": "6efcf20bbecad392b31ee4e5573fb3706b50eb5b87abff7ce598599fa779a032", + "relative_path": "cases/representative/trial-03/run/steps/step_027_before.png" + }, + { + "kind": "other", + "sha256": "6df5c38b412add1793c9b98dd1166c2298258a08176f95ed228d79992be7e352", + "relative_path": "cases/representative/trial-03/run/steps/step_029_after.png" + }, + { + "kind": "other", + "sha256": "3711cf7f656737657ee3e95e23e26deab0bc0205f1bb1415b5e79a0fe25c96dc", + "relative_path": "cases/representative/trial-03/run/steps/step_029_before.png" + }, + { + "kind": "other", + "sha256": "f1d1d1a999c75d45e0d6e3d6ebe573e21e1fa9a68a7c9f84a342c2f7c4e93aff", + "relative_path": "cases/representative/trial-03/run/steps/step_030_after.png" + }, + { + "kind": "other", + "sha256": "2237ae45174bd6cedfacbd23ff28f633bc9067bbb31541123f38254acd2574ca", + "relative_path": "cases/representative/trial-03/run/steps/step_030_before.png" + }, + { + "kind": "other", + "sha256": "14d42a082fe4e613d32466d4ac7dd78a5e7a18a2653d271ebedccb4875473d4d", + "relative_path": "cases/representative/trial-03/run/steps/step_032_after.png" + }, + { + "kind": "other", + "sha256": "ebd133f8fcb242541776c8a7699d8c36e960723d52f67f49b58dc4ae034e62b7", + "relative_path": "cases/representative/trial-03/run/steps/step_032_before.png" + }, + { + "kind": "other", + "sha256": "79837bf7a86fa6bb54f642d7adcc8b87d7dae1b382345a7c1836b1c4dc9d98f0", + "relative_path": "cases/representative/trial-03/run/steps/step_033_after.png" + }, + { + "kind": "other", + "sha256": "39f76fb2c885c0922ba35353c74c9a94a3938c58897a6d7a3d326e7dd10941a9", + "relative_path": "cases/representative/trial-03/run/steps/step_033_before.png" + }, + { + "kind": "other", + "sha256": "8bf28bf858412777627ebe740d1f91a853bbd56b7edd5412bc415047fb9b508f", + "relative_path": "cases/representative/trial-03/run/steps/step_035_after.png" + }, + { + "kind": "other", + "sha256": "1a1456df6dcdfd7b9ee0d60d5bf5ad8fb8b8fe2cad3ea518f81bc1002c0ab39c", + "relative_path": "cases/representative/trial-03/run/steps/step_035_before.png" + }, + { + "kind": "other", + "sha256": "8a59b141bede60c3b8485d32a12d935c28c4e5c725ccbf66692a4120e7ecc933", + "relative_path": "cases/representative/trial-03/run/steps/step_036_after.png" + }, + { + "kind": "other", + "sha256": "b8cd6b447da4d736a07edb66ca95f94fb9e05b8c06f228e3bfce184c0ff90974", + "relative_path": "cases/representative/trial-03/run/steps/step_036_before.png" + }, + { + "kind": "other", + "sha256": "00b14d48bbd43288f7fd2812da7054750371a9f84aaa1059d2f795df262b13c6", + "relative_path": "cases/representative/trial-03/run/steps/step_037_after.png" + }, + { + "kind": "other", + "sha256": "b1a6667113de963dd3fc63db7868b6bd873ae54b81165b291fb8a83c26725b7e", + "relative_path": "cases/representative/trial-03/run/steps/step_037_before.png" + }, + { + "kind": "other", + "sha256": "113878767510b147873867389b607025d32b1bd7a00cfe4df7cde53193470f33", + "relative_path": "cases/representative/trial-03/run/steps/step_039_after.png" + }, + { + "kind": "other", + "sha256": "3e180f908f159019de5d8ddbb9462420021cf9316ed239fdf859cdc7deef029e", + "relative_path": "cases/representative/trial-03/run/steps/step_039_before.png" + }, + { + "kind": "other", + "sha256": "9f5fb2c5d6e5c98281c5bb92da3d4f6b3111250baa9109623a57a97d756b8fbc", + "relative_path": "cases/representative/trial-03/run/steps/step_040_after.png" + }, + { + "kind": "other", + "sha256": "e243fec2a0727b2f9ba3052b3b99351df4dc2782f32d5a0ceb75abe790c360ce", + "relative_path": "cases/representative/trial-03/run/steps/step_040_before.png" + } + ], + "detail_code": "representative.03", + "completed_at": "2026-10-20T02:48:49.918846+00:00", + "attestation_key_id": "openemr-local-patient-registration-v2-runner", + "attestation_signature": "VsCCHVWkFoDeLlHUSfB/0DyElpMGJwiF5nf/IUb3EczSsbkyDjrg2x3nxQf/rGg98oMdEw60dgGWM9p9Bc18CA==" + } + ] + } + ], + "exclusions": [], + "requalification_conditions": [], + "trusted_runner_keys": { + "openemr-local-patient-registration-v2-runner": "mcGnnCoDYhC/CTuvlEj3lDlMZ+4J8CtS6PQKvzLjPmE=" + }, + "trusted_fault_driver_keys": { + "openemr-local-patient-registration-v2-fault-driver": "fjjXEvMFoujEGc3TLmy9/YEBKTmBplTrKQvn3toqCzQ=" + }, + "lookup": { + "schema_version": "openadapt.qualified-lookup/v1", + "surface": "local", + "target_kind": "web", + "structure_offered": true, + "capabilities_used": [ + "structure" + ], + "pixels_only": { + "role": "informational", + "cases": [ + "representative", + "fault-ambiguity", + "fault-wrong-identity", + "fault-stale-identity", + "fault-weak-effect", + "fault-missing-effect" + ], + "trials_run": 18, + "trials_passed": 0, + "failures": [ + "representative trial 1: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "representative trial 2: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "representative trial 3: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-ambiguity trial 1: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-ambiguity trial 2: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-ambiguity trial 3: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-wrong-identity trial 1: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-wrong-identity trial 2: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-wrong-identity trial 3: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-stale-identity trial 1: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-stale-identity trial 2: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-stale-identity trial 3: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-weak-effect trial 1: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-weak-effect trial 2: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-weak-effect trial 3: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-missing-effect trial 1: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-missing-effect trial 2: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path", + "fault-missing-effect trial 3: StateDiverged: refusing a durable checkpoint with invalid action evidence: production action lacks a closed runtime actuation path" + ] + } + }, + "last_certification": { + "project_revision": 51, + "project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "policy_name": "clinical-write", + "policy_contract_sha256": "f35a6a94b3f2787165f071ce8571de07095169b9632d394e9df719b35da52c0f", + "policy_contract": { + "name": "clinical-write", + "description": "Strict gate for irreversible writes against a system of record: no unarmed clicks, no vacuous steps, identity required on every entity-navigation and write step, a real SYSTEM-OF-RECORD effect (not just a screen assertion) plus an idempotency key required on every write, no unconfirmed effect bindings, and human sign-off for any thinly-evidenced step.", + "prohibit_unarmed_clicks": true, + "prohibit_vacuous_postconditions": true, + "require_identity_for": [ + "entity_navigation", + "write" + ], + "require_screen_postconditions_for": [ + "write", + "save", + "submit", + "create", + "update", + "delete", + "confirm", + "send" + ], + "require_system_effects_for": [ + "write" + ], + "require_effects_for_irreversible": false, + "require_idempotency_key_for": [ + "write" + ], + "prohibit_unconfirmed_effect_bindings": true, + "require_effect_verification_for": [], + "max_unverified_steps": 0, + "require_human_approval_below_confidence": 0.8 + }, + "passed": true, + "report_sha256": "679cb95559a88b86ec4541c2e0b826699da17d4e0774745c1e930562b7b96463", + "case_evidence_contract_sha256": "8343336b83784d2904667591334a239cb2cc5f9b1d0d6fcb4c8564f698a144db", + "execution_profile": "standard", + "certified_at": "2026-10-20T02:56:35.080844+00:00", + "lookup_sha256": "18f744bb1731fa937cfcdb50f34434464fa2a84bdec04ceaf3aac8f3b94ce606" + } + }, + "manifest": { + "schema_version": 2, + "content_digest": "ec096afa2b614326b00ec3155f256041c19d86f3998761ce9d772cfd911460b6", + "file_hashes": { + "templates/identifiers/step_016.png": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "templates/layout_fingerprint.json": "d7727e415947aa17cb2fa007be88f5cd1e56b9e913a64354f61c62b580459e0a", + "templates/step_000.png": "d7a431d729f4d525993bf1eb95bb66ad63f8a486d858a2e44666301d70b93011", + "templates/step_000_expect.png": "054fe016774a313989c92f999615bbf1f9c0bf6cf105a4ef8e1446fa290015d9", + "templates/step_003.png": "dce5569d4b131c367fe623aa1d6ed9526c12c1dbf7cc221c8efa8f237ea95a9b", + "templates/step_003_expect.png": "087fbc35f6f04062e7f557deea1c840d80623ae56998cd5f58de6c4aedf3b70a", + "templates/step_006.png": "bd23dd90a29b84df5589a7476448966a7710bf47074b727f313491da7158c98d", + "templates/step_006_expect.png": "7cb7eeda6806270a30bfd093255fd401cc3b20935f2435b8543af2b961b747fc", + "templates/step_009.png": "517c77489043a2dd9ac5bb089144dff4b3a112a7e34037aad40d1f9751aee85e", + "templates/step_009_expect.png": "ec0b79d0367c4958939efeb76ca5f20c6493ae71b1cd3fb3ad4d36be07159adc", + "templates/step_012.png": "ac4efcf5feba028428c2b253a582edb0af6471791520169a0de9baa0070c025c", + "templates/step_012_expect.png": "df173d42b500650f81d0871716a9efd38214140c4888122d6c3f64b33f1d5c28", + "templates/step_016.png": "457eccee597076f6e0d2b6fdd6b1fdd148dfc0eb72501442413c2020efc4ce15", + "templates/step_016_expect.png": "ce1cea546632622f1619810362446214fec79590a4ee5553a26f4ec197627107", + "templates/step_018.png": "84a5d61734af83336cac971cca1adb5bd76c56faef578b352528b177eb6557b3", + "templates/step_018_expect.png": "b325a8bc335bded3f3cf7b47830e0a24ebbaf08062de554fb5d5da63a56db05f", + "templates/step_021.png": "e9607624e6649bdb1548772a3e9e4577f5112d99ac962e3f8c77b44b80a356ef", + "templates/step_021_expect.png": "372a6705999c77fb3ceb959c616f5a40536e485b73eacf1756426581ddce67b6", + "templates/step_024.png": "3b8449493928ef24a570e1d7ac65b5b25584c8b3cd68eba071af842bfbae9399", + "templates/step_024_expect.png": "278236d24d497fe78a87483c8d60bd3fe9c926bdfad310630b58cff790a7ae91", + "templates/step_027.png": "014571a3a093215ed0ec9b812b1eb66efc274116d2be529d736a37301b92a95f", + "templates/step_027_expect.png": "5f1ea1d1b03efa9d0812b6d21155117cbfb75b47f6b643815a7041759529b0f6", + "templates/step_030.png": "0e551c8fa8f8e2eb4cfef0ccef68c35862e8a3c1dd6e654ec0185edcab047b28", + "templates/step_030_expect.png": "1b71bfe520e1b6c8a1d41b990bca4f2f6dd5e15a4bf931595917894ad56d1c46", + "templates/step_033.png": "28ee56d03479ba76a938532854fbca55bab26ed8ba738b9a44185f4db04368aa", + "templates/step_033_expect.png": "298a1691c7832c2eeb29e00a15457b005b5222f304d6c41530cfc2dc91cbc36c", + "templates/step_036.png": "3e21d6500e80bd6ce8c56f1dfc23e6de983e48e4835f341d7a59149049771673", + "templates/step_036_expect.png": "221dc30b588ef26b60326197e8ec510a84dc007201d57103c0100d9f06e5d641", + "templates/step_039.png": "01bd72ded2316233b66af4e50b63bdf54c3f2ca12d5aac2a5462a88893f30b43", + "templates/step_039_expect.png": "8782f2d5377eec7fbddbd9b0657f283207254be7eaa415d3204f10cdb13fdcb4", + "templates/step_040.png": "22dd0ae0fba63fbcaf4222de690199ef88fa71a386a186db9c03b813f981aa87", + "templates/step_040_expect.png": "194dcc5ba50edcfb2d4a5fb8a6e9ca1d6669654147c9f990715572992ddf8a6c" + }, + "provenance": { + "compiler_version": "2.2.0", + "source_recording_sha256": "243fb7853b228a2e0fd93c51c1d43e7b84fff567f1aac917bdcd91a54d044894", + "compiler_config_sha256": "a40fa088af6e27af7555bd066b216ac2b73da101e6e228470fb2dd994d754efd", + "created_at": "2026-10-20T02:34:27.692587+00:00", + "policy_name": "clinical-write", + "certified": true, + "certification_status": "certified", + "certified_at": "2026-10-20T02:56:35.080875+00:00", + "expires_at": null, + "certification_invalidated_at": null, + "certification_invalidation_reason": null, + "governed_authorization_template": { + "schema_version": "openadapt.governed-authorization-template/v1", + "bundle_content_digest": "ec096afa2b614326b00ec3155f256041c19d86f3998761ce9d772cfd911460b6", + "workflow_contract_sha256": "6e121e781ace28b143a50e20381f120e2e3da269b92ecc78fddf0679b9427f9f", + "qualification_project_id": "42abe878-ae09-4db1-84f1-0b487676098a", + "qualification_project_revision": 51, + "qualification_project_contract_sha256": "444b35017d26a85a86a35f05794756999b21f30cf44385c6d307edf778b3afa4", + "qualification_environment_contract_sha256": "66260fc857f5570d123ac120f0c03e9e7d7746d1d3348c780fde67193995d6d8", + "qualification_report_sha256": "679cb95559a88b86ec4541c2e0b826699da17d4e0774745c1e930562b7b96463", + "qualification_case_evidence_contract_sha256": "8343336b83784d2904667591334a239cb2cc5f9b1d0d6fcb4c8564f698a144db", + "policy_name": "clinical-write", + "policy_contract_sha256": "f35a6a94b3f2787165f071ce8571de07095169b9632d394e9df719b35da52c0f", + "execution_profile": "standard", + "minimum_effect_tier": 1, + "qualified_effect_requirements": [ + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 0, + "effect_contract_hash": "sha256:f64985856097097954250be6523fa260daf9fc5db495671c2548ead9a388577b", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 1, + "effect_contract_hash": "sha256:206d1d6fc27df6f24c02bb6b6f4419e0612e7935ec7e744fc8cc446f54558385", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 2, + "effect_contract_hash": "sha256:8f295459bdd868daf117ca9f77dd948cdc2c8c034a65184cb5418ccfab7f60e7", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 3, + "effect_contract_hash": "sha256:52c6884d06d82c4ccc14600150f2890bcd25d92cb7eb26bc53ef54033075ba3c", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 4, + "effect_contract_hash": "sha256:7732675a6e6123c0c3f51512496f695fa4ce503ab989993c520fb8a469bbdc3d", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 5, + "effect_contract_hash": "sha256:598fb97e12d3c0b537f0453e7fdaad453b969e249e888424e67fcd85a06741f0", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 6, + "effect_contract_hash": "sha256:ba109cf90077d7b20a37c2848fa7bee8ea0039747a5ae47465617b2ea1039a2b", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 7, + "effect_contract_hash": "sha256:f508b7fd1536726db75a0814fc439c65dbd6c0b637a7b619855c73a571bcfca9", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 8, + "effect_contract_hash": "sha256:b311b51ece1670a60f793b29aa3d28d40da196ffbcd26f2fdd620e380dedf97a", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 9, + "effect_contract_hash": "sha256:a33cf54165b96ce6d48014e6e68bac94cdc8f9c9176bae6f5c955123d20683c2", + "minimum_tier": 1 + }, + { + "step_id": "step_040", + "actuation_path": "gui", + "effect_index": 10, + "effect_contract_hash": "sha256:d2516eb0f6aa365b812e84fd754127d053d8e0b1a4b349a0b8ce71936bcec199", + "minimum_tier": 1 + } + ], + "required_identity_step_ids": [ + "step_040" + ], + "identity_contract_sha256": "44f51284a45d149f9a7c9a034feab055eded47b89eb3910609c215005205f424", + "parameters": [ + { + "name": "DOB", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "city", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "country_code", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "email", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "fname", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "lname", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "phone_home", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "postal_code", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "sex", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "state_label", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "street", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + }, + { + "name": "title", + "type": "string", + "required": true, + "secret": false, + "has_default": true, + "choices_count": 0, + "choices_sha256": "4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" + } + ], + "parameter_contract_sha256": "2a19e2c3ea6e0644cfe9a842aea8c53e036d18bed254b100cf23c88ea090d603", + "template_sha256": "074ac60fe06d201b0083c921b6c24b1d1b83b63b2b91cb140d55e319251d86cb" + } + }, + "encrypted": false + } +} \ No newline at end of file diff --git a/packages/flow/benchmark/openemr_local/referral_program/program/workflow.py b/packages/flow/benchmark/openemr_local/referral_program/program/workflow.py new file mode 100644 index 000000000..245e563de --- /dev/null +++ b/packages/flow/benchmark/openemr_local/referral_program/program/workflow.py @@ -0,0 +1,171 @@ +"""Generated by openadapt-flow. Human-readable rendering of +workflow 'openemr-create-synthetic-patient' — for code review only; the replayer +executes workflow.json, not this file.""" + +WORKFLOW_NAME = 'openemr-create-synthetic-patient' +RECORDING_ID = '243fb7853b228a2e0fd93c51c1d43e7b84fff567f1aac917bdcd91a54d044894' +PARAMS = {'title': 'Ms.', 'fname': 'OpenAdapt', 'lname': 'LoanParity', 'DOB': '1985-02-03', 'sex': 'Female', 'street': '101 SYNTHETIC WAY', 'city': 'EXAMPLETON', 'state_label': 'Massachusetts', 'postal_code': '02139', 'phone_home': '555-0107', 'email': 'openadapt.loan-parity@example.invalid', 'country_code': 'USA'} # param -> example/default value + + +def run(flow, params=PARAMS): + # step_000: click 'Unassigned' [reversible] + # landmark: 'Birth First Name' (below, 111px) + # landmark: 'Middle' (right_of, 115px) + # identity: armed via PHI-free salted-hash template (0 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_000.png', click_point=(434, 282), region=(354, 250, 160, 64), ocr_text='Unassigned') + # expect region_stable region=(346, 233, 176, 99) phash='8b746995dc63344b' (tol 16) + # expect text_present text='CalendarFinderFlowRecallsMessagesPatientFeesModulesProceduresAdminReportsMiscellaneousPopups' + + # step_001: type <title> [reversible] + flow.type_text(params['title']) + + # step_003: click 'First Name' [reversible] + # landmark: 'Birth First Name' (below, 76px) + # landmark: 'Middle' (right_of, 124px) + # identity: armed via PHI-free salted-hash template (4 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_003.png', click_point=(444, 317), region=(364, 296, 160, 50), ocr_text='First Name') + # expect region_stable region=(346, 300, 197, 67) phash='8969b532b2b3e88b' (tol 16) + + # step_005: type <fname> [reversible] + flow.type_text(params['fname']) + + # step_006: click 'Last Name' [reversible] + # landmark: 'Birth Last Name' (below, 79px) + # landmark: 'BirthSex:' (below, 109px) + # identity: armed via PHI-free salted-hash template (4 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_006.png', click_point=(671, 317), region=(591, 285, 160, 61), ocr_text='Last Name') + # expect region_stable region=(555, 268, 232, 99) phash='eb0c710eee7190c7' (tol 16) + + # step_008: type <lname> [reversible] + flow.type_text(params['lname']) + + # step_009: click recorded visual target [reversible] + # landmark: 'Unassigned' (below, 72px) + # landmark: 'Middle' (right_of, 122px) + # identity: armed via PHI-free salted-hash template (3 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_009.png', click_point=(427, 430), region=(347, 398, 160, 64)) + # expect region_stable region=(346, 381, 310, 298) phash='80daeba3a383939b' (tol 16) + # expect text_present text='October-2026-' + + # step_011: type <DOB> [reversible] + flow.type_text(params['DOB']) + + # step_012: click 'Unassigned' [reversible] + # landmark: 'Unassigned' (below, 72px) + # landmark: 'Unassigned' (below, 141px) + # identity: armed via PHI-free salted-hash template (3 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_012.png', click_point=(972, 430), region=(892, 398, 160, 64), ocr_text='Unassigned') + # expect region_stable region=(346, 446, 310, 233) phash='c0c391996e3e9ae3' (tol 16) + + # step_013: type <sex> [reversible] + flow.type_text(params['sex']) + + # step_015: scroll by (0, 300) [reversible] + flow.scroll(0, 300) + + # step_016: click recorded visual target [reversible] + # landmark: 'Marital Status:' (above, 229px) + # landmark: 'Pronouns:' (above, 294px) + flow.click(template='templates/step_016.png', click_point=(634, 505), region=(554, 473, 160, 64)) + # expect region_stable region=(53, 452, 1160, 348) phash='8d025ad2a695cf9d' (tol 16) + # expect text_present text='Address Line 2:' + + # step_017: scroll by (0, 600) [reversible] + flow.scroll(0, 600) + + # step_018: click recorded visual target [reversible] + # landmark: 'Unassigned' (below, 125px) + # landmark: 'CalendarFinderFlowRecallsMessagesPatientFeesModulesProceduresAdminReportsMiscellaneousPopups' (above, 132px) + # identity: armed via PHI-free salted-hash template (4 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_018.png', click_point=(479, 160), region=(399, 128, 160, 64)) + # expect region_stable region=(346, 115, 267, 95) phash='c8ccc8c0b43eaf3e' (tol 16) + + # step_020: type <street> [reversible] + flow.type_text(params['street']) + + # step_021: click recorded visual target [reversible] + # landmark: 'Search or Add Patient' (above, 68px) + # landmark: 'Unassigned' (below, 81px) + # identity: armed via PHI-free salted-hash template (4 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_021.png', click_point=(444, 195), region=(364, 172, 160, 55)) + # expect region_stable region=(346, 176, 267, 69) phash='c8d9bcc1c11ce7c3' (tol 16) + + # step_023: type <city> [reversible] + flow.type_text(params['city']) + + # step_024: click 'Jnassigned' [reversible] + # landmark: 'Searchbyanydemogra' (above, 168px) + # landmark: 'Show Inactive' (below, 278px) + # identity: armed via PHI-free salted-hash template (4 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_024.png', click_point=(1017, 195), region=(937, 163, 160, 64), ocr_text='Jnassigned') + # expect region_stable region=(885, 146, 265, 99) phash='a21d7d38eeb891c2' (tol 16) + + # step_025: type <state_label> [reversible] + flow.type_text(params['state_label']) + + # step_027: click recorded visual target [reversible] + # landmark: 'SearchorAddPatient' (above, 111px) + # landmark: 'CalendarFinderFlowRecallsMessagesPatientFeesModulesProceduresAdminReportsMiscellaneousPopups' (above, 221px) + # identity: armed via PHI-free salted-hash template (5 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_027.png', click_point=(420, 234), region=(340, 207, 160, 59)) + # expect region_stable region=(340, 207, 160, 59) phash='87968f8ea58de0a5' (tol 8) + + # step_029: type <postal_code> [reversible] + flow.type_text(params['postal_code']) + + # step_030: click recorded visual target [reversible] + # landmark: 'Unassigned' (above, 78px) + # landmark: 'SearchorAddPatient' (above, 222px) + # identity: armed via PHI-free salted-hash template (4 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_030.png', click_point=(462, 347), region=(382, 315, 160, 64)) + # expect region_stable region=(346, 298, 232, 99) phash='c04af8933fa5c66c' (tol 16) + + # step_032: type <phone_home> [reversible] + flow.type_text(params['phone_home']) + + # step_033: click recorded visual target [reversible] + # landmark: 'Show Inactive' (below, 98px) + # landmark: 'Unassigned' (above, 161px) + # identity: armed via PHI-free salted-hash template (3 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_033.png', click_point=(1035, 382), region=(955, 350, 160, 64)) + # expect region_stable region=(885, 333, 302, 99) phash='cad0ba36be2dc1c1' (tol 16) + + # step_035: type <email> [reversible] + flow.type_text(params['email']) + + # step_036: click 'Jnassigned' [reversible] + # landmark: 'Search by any demogre' (above, 206px) + # landmark: 'Show Inactive' (below, 241px) + # identity: armed via PHI-free salted-hash template (5 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_036.png', click_point=(1017, 234), region=(937, 210, 160, 56), ocr_text='Jnassigned') + # expect region_stable region=(937, 210, 160, 56) phash='e76a9890e7f63811' (tol 8) + + # step_037: type <country_code> [reversible] + flow.type_text(params['country_code']) + + # step_039: click 'Create New Patient' [reversible] + # landmark: 'Search' (left_of, 132px) + # landmark: 'Related' (left_of, 164px) + # identity: armed via PHI-free salted-hash template (0 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_039.png', click_point=(284, 772), region=(204, 736, 160, 64), ocr_text='Create New Patient') + # expect text_present text='Confirm Create New Patient' + # expect text_present text='No matches were found.' + + # step_040: click 'Confirm Create New Patient' [irreversible] + # landmark: 'Name' (above, 151px) + # landmark: 'Name' (above, 152px) + # identity: armed via PHI-free salted-hash template (2 band tokens, structured); no patient identifier stored + flow.click(template='templates/step_040.png', click_point=(600, 280), region=(520, 248, 160, 64), ocr_text='Confirm Create New Patient') + # expect region_stable region=(0, 255, 1280, 545) phash='fe4b96c1c9196970' (tol 16) + # expect text_present text='Medical Record Dashboard' + # effect record_written match={'email': '{email}', 'lname': '{lname}'} count=1 idempotency_key='{email}' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='title' value='{title}' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='fname' value='{fname}' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='DOB' value='{DOB}' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='sex' value='{sex}' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='street' value='{street}' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='city' value='{city}' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='state' value='MA' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='postal_code' value='{postal_code}' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='phone_home' value='{phone_home}' [reversible] + # effect field_equals match={'email': '{email}', 'lname': '{lname}'} field='country_code' value='{country_code}' [reversible] diff --git a/packages/flow/public-artifacts.json b/packages/flow/public-artifacts.json index 2c6262d4c..f0b4d6c11 100644 --- a/packages/flow/public-artifacts.json +++ b/packages/flow/public-artifacts.json @@ -298,6 +298,45 @@ "benchmark/openemr_api_tier/spike/results/runs/block-05-browser.json", "benchmark/openemr_live/docker-compose.yml", "benchmark/openemr_local/environment.lock.json", + "benchmark/openemr_local/referral_program/demonstration.jsonl", + "benchmark/openemr_local/referral_program/program/api_proposal.json", + "benchmark/openemr_local/referral_program/program/benchmark-contract.json", + "benchmark/openemr_local/referral_program/program/compile_notes.json", + "benchmark/openemr_local/referral_program/program/manifest.json", + "benchmark/openemr_local/referral_program/program/param_hygiene.json", + "benchmark/openemr_local/referral_program/program/templates/identifiers/step_016.png", + "benchmark/openemr_local/referral_program/program/templates/layout_fingerprint.json", + "benchmark/openemr_local/referral_program/program/templates/step_000.png", + "benchmark/openemr_local/referral_program/program/templates/step_000_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_003.png", + "benchmark/openemr_local/referral_program/program/templates/step_003_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_006.png", + "benchmark/openemr_local/referral_program/program/templates/step_006_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_009.png", + "benchmark/openemr_local/referral_program/program/templates/step_009_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_012.png", + "benchmark/openemr_local/referral_program/program/templates/step_012_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_016.png", + "benchmark/openemr_local/referral_program/program/templates/step_016_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_018.png", + "benchmark/openemr_local/referral_program/program/templates/step_018_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_021.png", + "benchmark/openemr_local/referral_program/program/templates/step_021_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_024.png", + "benchmark/openemr_local/referral_program/program/templates/step_024_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_027.png", + "benchmark/openemr_local/referral_program/program/templates/step_027_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_030.png", + "benchmark/openemr_local/referral_program/program/templates/step_030_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_033.png", + "benchmark/openemr_local/referral_program/program/templates/step_033_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_036.png", + "benchmark/openemr_local/referral_program/program/templates/step_036_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_039.png", + "benchmark/openemr_local/referral_program/program/templates/step_039_expect.png", + "benchmark/openemr_local/referral_program/program/templates/step_040.png", + "benchmark/openemr_local/referral_program/program/templates/step_040_expect.png", + "benchmark/openemr_local/referral_program/program/workflow.json", "benchmark/openemr_local/verify.yaml", "benchmark/openemr_referral_timing/figures.json", "benchmark/openemr_referral_timing/runs.csv", diff --git a/packages/flow/tests/test_openemr_quickstart_driver.py b/packages/flow/tests/test_openemr_quickstart_driver.py new file mode 100644 index 000000000..b9e62a72d --- /dev/null +++ b/packages/flow/tests/test_openemr_quickstart_driver.py @@ -0,0 +1,294 @@ +"""The OpenEMR driver behind ``openadapt quickstart --app openemr`` (no Docker). + +The fixture's commands run through a fake runner here; the real run is the +launcher's opt-in ``test_real_openemr_quickstart``. +""" + +from __future__ import annotations + +import json +import subprocess +from pathlib import Path + +import pytest + +from benchmark.openemr_local import fixture as fx +from benchmark.openemr_local import quickstart as q +from openadapt_flow.ir import PostconditionKind, Workflow + +#: The certified bundle's content digest (README, site Seals, #1409). +DIGEST = "ec096afa2b614326b00ec3155f256041c19d86f3998761ce9d772cfd911460b6" +RECORDING = "243fb7853b228a2e0fd93c51c1d43e7b84fff567f1aac917bdcd91a54d044894" + + +def test_the_committed_program_is_the_certified_bundle(tmp_path): + workflow = q.copy_program(tmp_path / "bundle") + assert workflow.manifest is not None + assert workflow.manifest.content_digest == DIGEST + assert workflow.recording_id == RECORDING + assert workflow.name == "openemr-create-synthetic-patient" + assert len(workflow.steps) == 29 + assert workflow.qualification is not None + + +def test_the_program_carries_the_shared_duplicate_rule(tmp_path): + workflow = q.copy_program(tmp_path / "bundle") + create = next( + step + for step in workflow.steps + if step.anchor is not None + and step.anchor.structural is not None + and step.anchor.structural.selector == "#create" + ) + texts = {p.text for p in create.expect if p.kind is PostconditionKind.TEXT_PRESENT} + assert texts == {"Confirm Create New Patient", "No matches were found."} + save = workflow.steps[workflow.steps.index(create) + 1] + assert save.risk == "irreversible" and save.effects + + +def test_a_changed_program_file_is_refused(tmp_path): + q.copy_program(tmp_path / "bundle") + template = next((tmp_path / "bundle" / "templates").glob("step_*.png")) + template.write_bytes(template.read_bytes() + b"x") + with pytest.raises(Exception): + Workflow.load(tmp_path / "bundle") + + +def test_committed_files_hold_no_urls_or_session_tokens(): + for path in q.PROGRAM_DIR.rglob("*"): + if path.suffix in (".json", ".jsonl", ".py", ".md"): + text = path.read_text(encoding="utf-8") + assert "token_main" not in text, path + assert "csrf" not in text.lower(), path + assert "http" not in q.DEMONSTRATION.read_text() + + +def test_the_demonstration_is_the_recordings_action_log(): + events = q.demonstration() + assert [event["i"] for event in events] == list(range(41)) + assert events[-1]["selector"] == "#confirmCreate" + typed = { + event["param"]: event["text"] for event in events if event["kind"] == "type" + } + assert typed["fname"] == "OpenAdapt" and typed["email"].endswith("@example.invalid") + + +def test_act_two_and_three_use_the_referral_benchmarks_patients(): + names = [q.referral(key) for key in q.REFERRALS] + assert len({spec.email for spec in names}) == 5 + assert all(spec.email.endswith("@example.invalid") for spec in names) + duplicate, existing = q.referral(q.DUPLICATE), q.existing_chart() + assert (duplicate.fname, duplicate.lname) == (existing.fname, existing.lname) + assert duplicate.dob != existing.dob + + +# -- the fixture ------------------------------------------------------------ + + +class _Runner: + """Records fixture commands; answers ``ps`` and ``exec`` as told.""" + + def __init__(self, running: bool = True, healthy: bool = True) -> None: + self.running = running + self.healthy = healthy + self.calls: list[list[str]] = [] + + def __call__(self, argv, **_kwargs): + self.calls.append(list(argv)) + out = b"" + code = 0 + if "ps" in argv: + out = b"openemr\ndb\n" if self.running else b"" + if "readyz" in " ".join(argv) and not self.healthy: + code = 1 + return subprocess.CompletedProcess(argv, code, stdout=out, stderr=b"") + + +def _bootstrapped(state: Path) -> None: + state.mkdir(parents=True, mode=0o700) + (state / "runtime.env").write_text( + "".join( + f"{k}={v}\n" + for k, v in { + "OPENEMR_IMAGE": json.loads(fx.LOCK_PATH.read_text())["services"][ + "openemr" + ], + "MARIADB_IMAGE": json.loads(fx.LOCK_PATH.read_text())["services"][ + "mariadb" + ], + "OPENEMR_ACTOR_USER": "openadapt_actor", + "OPENEMR_HTTP_PORT": q.UI_PORT, + "OPENEMR_HTTPS_PORT": q.API_PORT, + "MARIADB_ROOT_PASSWORD": "a" * 32, + "OPENEMR_DB_PASSWORD": "b" * 32, + "OPENEMR_ACTOR_PASSWORD": "c" * 32, + }.items() + ) + ) + for name in ("oauth-clients.json", "baseline.sql", "baseline.sql.sha256"): + (state / name).write_text("{}") + + +def _fixture(tmp_path: Path, runner: _Runner, monkeypatch) -> q.QuickstartFixture: + fixture = q.QuickstartFixture(tmp_path / "state", runner=runner) + monkeypatch.setattr(fixture, "_compose_path", lambda: tmp_path / "compose.yml") + return fixture + + +def test_ports_come_from_the_environment(tmp_path, monkeypatch): + monkeypatch.setenv("OPENADAPT_QUICKSTART_OPENEMR_HTTP_PORT", "9541") + monkeypatch.setenv("OPENADAPT_QUICKSTART_OPENEMR_HTTPS_PORT", "9540") + fixture = q.QuickstartFixture(tmp_path / "state") + assert fixture.ui_base_url == "http://127.0.0.1:9541" + assert fixture.api_base_url == "https://127.0.0.1:9540" + monkeypatch.setenv("OPENADAPT_QUICKSTART_OPENEMR_HTTP_PORT", "80; rm") + with pytest.raises(fx.FixtureError): + q.ports() + + +def test_a_fixture_on_other_ports_is_removed_and_set_up_again(tmp_path, monkeypatch): + runner = _Runner() + fixture = _fixture(tmp_path, runner, monkeypatch) + _bootstrapped(fixture.state_dir) + monkeypatch.setenv("OPENADAPT_QUICKSTART_OPENEMR_HTTP_PORT", "9541") + moved = _fixture(tmp_path, runner, monkeypatch) + assert not moved.bootstrapped() + monkeypatch.setattr(q, "default_state_dir", lambda: moved.state_dir) + moved.discard() + assert any(call[-2:] == ["down", "--volumes"] for call in runner.calls) + assert not moved.state_dir.exists() + + +def test_own_project_and_loopback_ports(tmp_path): + fixture = q.QuickstartFixture(tmp_path / "state") + assert ( + fixture.lock["project"] + == q.PROJECT + != json.loads(fx.LOCK_PATH.read_text())["project"] + ) + assert fixture.ui_base_url == f"http://127.0.0.1:{q.UI_PORT}" + assert fixture.api_base_url == f"https://127.0.0.1:{q.API_PORT}" + + +def test_a_running_fixture_is_reused_and_reset(tmp_path, monkeypatch): + runner = _Runner() + fixture = _fixture(tmp_path, runner, monkeypatch) + _bootstrapped(fixture.state_dir) + resets = [] + monkeypatch.setattr(fixture, "reset", lambda: resets.append(1)) + said = [] + assert q.bring_up(fixture, lambda phase, text: said.append(phase)) == "reused" + assert resets == [1] + assert not any("up" in call for call in runner.calls), ( + "a running copy isn't restarted" + ) + assert all( + "-p" in call and q.PROJECT in call for call in runner.calls if "compose" in call + ) + + +def test_a_stopped_fixture_is_started_not_rebuilt(tmp_path, monkeypatch): + runner = _Runner(running=False) + fixture = _fixture(tmp_path, runner, monkeypatch) + _bootstrapped(fixture.state_dir) + monkeypatch.setattr(fixture, "reset", lambda: None) + monkeypatch.setattr(fixture, "_wait_ready", lambda timeout_s=0: None) + monkeypatch.setattr(fixture, "bootstrap", lambda: pytest.fail("rebuilt")) + assert q.bring_up(fixture, lambda *a: None) == "restarted" + assert any(call[-2:] == ["up", "-d"] for call in runner.calls) + + +def test_a_new_fixture_is_set_up_once(tmp_path, monkeypatch): + runner = _Runner() + fixture = _fixture(tmp_path, runner, monkeypatch) + order = [] + for name in ( + "runtime_preflight", + "prepare", + "image_identity", + "bootstrap", + "snapshot", + ): + monkeypatch.setattr(fixture, name, lambda name=name: order.append(name)) + monkeypatch.setattr( + fixture, "_wait_ready", lambda timeout_s=0: order.append("ready") + ) + monkeypatch.setattr( + fixture, "_verify_running_source", lambda: order.append("source") + ) + monkeypatch.setattr(fixture, "_validate_runtime_env", lambda: None) + monkeypatch.setattr( + q, "pull", lambda image, label, say: order.append(f"pull {label}") + ) + assert q.bring_up(fixture, lambda *a: None) == "created" + assert order == [ + "runtime_preflight", + "prepare", + "pull OpenEMR 8.0.0.3", + "pull MariaDB 11.8", + "image_identity", + "ready", + "source", + "bootstrap", + "snapshot", + ] + + +def test_pull_reports_layers_as_docker_finishes_them(monkeypatch): + monkeypatch.setattr(q, "_image_present", lambda image: False) + + class _Proc: + stdout = iter( + [ + "8.0.0.3: Pulling from openemr/openemr\n", + "aaaaaaaaaaaa: Pulling fs layer\n", + "bbbbbbbbbbbb: Already exists\n", + "aaaaaaaaaaaa: Pull complete\n", + ] + ) + + def wait(self): + return 0 + + said = [] + q.pull( + "img", + "OpenEMR", + lambda phase, text: said.append(text), + popen=lambda *a, **k: _Proc(), + ) + assert said[-1] == "OpenEMR: 2 of 2 layers" + assert "OpenEMR: 1 of 2 layers" in said + + +def test_a_present_image_is_not_pulled(monkeypatch): + monkeypatch.setattr(q, "_image_present", lambda image: True) + said = [] + q.pull( + "img", + "OpenEMR", + lambda phase, text: said.append(text), + popen=lambda *a, **k: pytest.fail("pulled"), + ) + assert said == ["OpenEMR: already downloaded"] + + +def test_checked_needs_the_engine_and_the_database_to_agree(): + facts = { + "execution_outcome": "VERIFIED", + "transaction_outcome": "VERIFIED", + "effects_required": 11, + "effects_confirmed": 11, + "charts": 1, + "fields_matched": 12, + "fields_total": 12, + } + assert q.checked(facts) + for change in ( + {"execution_outcome": "COMPLETED_UNVERIFIED"}, + {"effects_confirmed": 10}, + {"charts": 2}, + {"fields_matched": 11}, + {"effects_required": 0, "effects_confirmed": 0}, + ): + assert not q.checked({**facts, **change}), change diff --git a/scripts/quickstart_openemr_timing.py b/scripts/quickstart_openemr_timing.py new file mode 100644 index 000000000..801107161 --- /dev/null +++ b/scripts/quickstart_openemr_timing.py @@ -0,0 +1,183 @@ +"""Time ``openadapt quickstart --app openemr``, cold and warm. + +Cold: the quickstart's OpenEMR fixture is removed first (its Compose project +with its volumes, and its state folder), so the run sets OpenEMR up again. +The pinned images stay: the script never deletes images, which other copies of +the fixture on the computer may use. Whether they were present is recorded. +Warm: the fixture from the previous run is still running and is reused. + +Each run is headless and not on a terminal (plain output). The script records +the wall time, the exit code, the machine's load average before and after, +and the times the output itself reports (setup, Act 2, Act 3, total). + + python scripts/quickstart_openemr_timing.py --cold 1 --warm 3 --out timing.json +""" + +from __future__ import annotations + +import argparse +import json +import os +import platform +import re +import shutil +import subprocess +import sys +import tempfile +import time +from pathlib import Path + +RUN_TIMEOUT_S = 1800 + + +def _launcher() -> str: + found = Path(sys.executable).parent / "openadapt" + return str(found) if found.exists() else (shutil.which("openadapt") or "openadapt") + + +def _images_present() -> dict[str, bool]: + lock = json.loads( + ( + Path(__file__).resolve().parents[1] + / "packages/flow/benchmark/openemr_local/environment.lock.json" + ).read_text() + ) + return { + name: subprocess.run( + ["docker", "image", "inspect", image], + capture_output=True, + check=False, + ).returncode + == 0 + for name, image in lock["services"].items() + } + + +def _discard_fixture() -> None: + """The driver's own discard: this project's containers, volumes and state.""" + + flow = Path(__file__).resolve().parents[1] / "packages" / "flow" + subprocess.run( + [ + sys.executable, + "-c", + "from benchmark.openemr_local import quickstart as q; " + "q.make_fixture().discard()", + ], + cwd=flow, + env={**os.environ, "PYTHONPATH": str(flow)}, + check=True, + timeout=300, + ) + + +def _reported(output: str) -> dict[str, float | str | None]: + def number(pattern: str) -> float | None: + match = re.search(pattern, output, re.MULTILINE) + return float(match.group(1)) if match else None + + how = re.search(r"OpenEMR 8\.0\.0\.3 at \S+: (.+?) [\d.]+s$", output, re.MULTILINE) + return { + "setup_s": number(r"OpenEMR 8\.0\.0\.3 at \S+: .+? ([\d.]+)s$"), + "setup": how.group(1) if how else None, + "act2_s": number(r"saved and checked · .* · ([\d.]+)s$"), + "act3_s": number(r"OpenAdapt: +■ .* ([\d.]+)s$"), + "total_reported_s": number(r"Cost .* · ([\d.]+)s in all$"), + "checked": ( + re.search(r"(\d+ of \d+) saved and checked ·", output) or [None, None] + )[1], + "act3": ( + re.search(r"OpenAdapt: +(.+?) [\d.]+s$", output, re.MULTILINE) + or [None, None] + )[1], + } + + +def main() -> int: + parser = argparse.ArgumentParser(description=__doc__.splitlines()[0]) + parser.add_argument( + "--cold", type=int, default=1, help="cold runs (fixture removed first)" + ) + parser.add_argument( + "--warm", type=int, default=3, help="warm runs after the cold ones" + ) + parser.add_argument("--out", type=Path, required=True) + args = parser.parse_args() + + launcher = _launcher() + rows = [] + plan = ["cold"] * args.cold + ["warm"] * args.warm + with tempfile.TemporaryDirectory() as work: + env = { + **os.environ, + "OPENADAPT_SEAL_HOME": str(Path(work) / "seal"), + "OPENADAPT_FLOW_SCRUB": "off", + "BROWSER": "true", + } + for index, kind in enumerate(plan): + if kind == "cold": + _discard_fixture() + images = _images_present() + out = Path(work) / f"{kind}-{index}" + load_before = os.getloadavg() + started = time.monotonic() + try: + result = subprocess.run( + [ + launcher, + "quickstart", + "--app", + "openemr", + "--headless", + "--out", + str(out), + ], + capture_output=True, + text=True, + env=env, + stdin=subprocess.DEVNULL, + timeout=RUN_TIMEOUT_S, + check=False, + ) + code, output = result.returncode, result.stdout + result.stderr + except subprocess.TimeoutExpired as exc: + code = "timeout" + output = ( + (exc.stdout or b"").decode() + if isinstance(exc.stdout, bytes) + else (exc.stdout or "") + ) + wall = time.monotonic() - started + row = { + "kind": kind, + "wall_s": round(wall, 1), + "exit": code, + "images_present_before": images, + "load_before": [round(v, 1) for v in load_before], + "load_after": [round(v, 1) for v in os.getloadavg()], + **_reported(output), + } + rows.append(row) + print(json.dumps(row), flush=True) + (args.out.parent / f"{args.out.stem}-{kind}-{index}.log").write_text(output) + args.out.write_text( + json.dumps( + { + "command": "openadapt quickstart --app openemr --headless --out DIR", + "machine": { + "platform": platform.platform(), + "cpus": os.cpu_count(), + "python": platform.python_version(), + }, + "date": time.strftime("%Y-%m-%d"), + "runs": rows, + }, + indent=2, + ) + + "\n" + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/tests/conftest.py b/tests/conftest.py index 9187e88f3..6f25187ab 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -49,6 +49,9 @@ def refuse(self): ) monkeypatch.setattr(engine.FlowEngine, "__enter__", refuse) + from openadapt.quickstart import openemr + + monkeypatch.setattr(openemr.OpenEMREngine, "__enter__", refuse) yield diff --git a/tests/snapshots/quickstart_openemr_plain.snapshot b/tests/snapshots/quickstart_openemr_plain.snapshot new file mode 100644 index 000000000..12e57d473 --- /dev/null +++ b/tests/snapshots/quickstart_openemr_plain.snapshot @@ -0,0 +1,39 @@ +OpenAdapt quickstart: show a task once in OpenEMR, run it, then watch it stop before saving a duplicate chart. +Synthetic data only. Files go to openadapt-quickstart + restoring the synthetic baseline + ✓ OpenEMR 8.0.0.3 at http://127.0.0.1:9741: reused the running copy 5.7s + +1 Show it once · a referral as it was demonstrated once in OpenEMR 8.0.0.3 + ✓ Title: "Ms." 2.1s + ✓ First name: "OpenAdapt" 5.2s + ✓ Click Create New Patient 34.5s + ✓ Click Confirm Create New Patient 36.8s + The program compiled from it: 29 steps, certified under clinical-write. 0.5s + +2 Run it · the program on 5 new referrals, all at once + 1/5 Ines Carvalho ✓ checked in OpenEMR's record 30.1s + 2/5 Theo Lindqvist ✓ checked in OpenEMR's record 30.2s + 3/5 Grace Adeyemi ✓ checked in OpenEMR's record 30.3s + 4/5 Arlo Whitcombe ✓ checked in OpenEMR's record 30.4s + 5/5 Priya Raman ✓ checked in OpenEMR's record 30.5s + 5 of 5 saved and checked · 0 AI calls · $0.00 · 0.5s + +3 Break it · a referral that matches an existing chart + OpenEMR already has a chart for Rosa Delgado. The next referral is a Rosa Delgado with another birth date. + What the screen showed: "a matching chart: Delgado, Rosa, born 1958-03-27" + What OpenEMR's record showed: 0 new charts + OpenAdapt: ■ Stopped before saving: possible duplicate 24.5s + Why: OpenEMR's duplicate check found an existing chart. The program saves only when it finds none, so it stopped before saving. + +The demonstration clicked Confirm Create New Patient here. Replaying those clicks would have saved a possible duplicate. OpenAdapt stopped. + +Receipt + Program openemr-create-synthetic-patient · 29 steps + Runs 5 of 5 saved and checked in OpenEMR's record + Cost 0 AI calls · $0.00 · 2.5s in all + Seal seal-ed25519-0123456789abcdef · 5 reports signed +See real Seals from OpenEMR runs: https://openadapt.ai/seals +Check it: openadapt seal verify openadapt-quickstart +Details: openadapt-quickstart, one REPORT.md per run +Try it on your own app: openadapt flow record --backend web --url https://your-app.example --out my-task +Give your agent this as a tool: openadapt agent serve --bundles openadapt-quickstart/bundle diff --git a/tests/snapshots/quickstart_plain.snapshot b/tests/snapshots/quickstart_plain.snapshot index f3a2c1633..09ef67b2c 100644 --- a/tests/snapshots/quickstart_plain.snapshot +++ b/tests/snapshots/quickstart_plain.snapshot @@ -33,6 +33,7 @@ Receipt Runs 5 of 5 saved and checked in the database Cost 0 AI calls · $0.00 · 2.5s in all Seal seal-ed25519-0123456789abcdef · 5 reports signed +See real Seals from OpenEMR runs: https://openadapt.ai/seals Check it: openadapt seal verify openadapt-quickstart Details: openadapt-quickstart, one REPORT.md per run; side-by-side page openadapt-quickstart/index.html Try it on your own app: openadapt flow record --backend web --url https://your-app.example --out my-task diff --git a/tests/test_quickstart.py b/tests/test_quickstart.py index 7e91560fb..aa9b6753a 100644 --- a/tests/test_quickstart.py +++ b/tests/test_quickstart.py @@ -396,10 +396,58 @@ def test_act_two_says_how_many_run_at_once(root, parallel, subtitle): def test_no_seal_means_no_seal_line_and_no_verify_command(root): output, _ = _plain(FakeEngine(root, seal=None)) - assert "Seal" not in output + assert not [line for line in output.splitlines() if line.startswith(" Seal ")] + assert "reports signed" not in output assert "seal verify" not in output +# The link to the published Seals: every mode's finale, one line after the +# receipt card, always the canonical page. +CANONICAL_SEALS = "https://openadapt.ai/seals" + + +def test_the_seals_link_is_the_canonical_page(): + from openadapt.quickstart.scene import SEALS_LINE, SEALS_URL + + assert SEALS_URL == CANONICAL_SEALS + assert SEALS_LINE == f"See real Seals from OpenEMR runs: {CANONICAL_SEALS}" + + +@pytest.mark.parametrize("verbose", [False, True]) +@pytest.mark.parametrize("break_it", [True, False]) +def test_every_finale_links_the_seals_after_the_receipt(root, verbose, break_it): + output, _ = _plain(FakeEngine(root), verbose=verbose, break_it=break_it) + lines = output.splitlines() + receipt = lines.index("Receipt") + after = next(i for i in range(receipt + 1, len(lines)) if not lines[i].startswith(" ")) + assert lines[after] == f"See real Seals from OpenEMR runs: {CANONICAL_SEALS}" + assert output.count("openadapt.ai/seals") == 1 + + +def test_the_terminal_finale_links_the_seals_after_the_receipt(root): + stream = _Terminal() + outcome = Outcome(root=root, seal=SealFacts("seal-ed25519-0", 5)) + outcome.runs = [_run(root, index) for index in range(1, 6)] + RichView(stream, environ={}, width=110).finale(outcome, _steps(outcome)) + lines = [line for line in stream.getvalue().splitlines() if line.strip()] + bottom = next(i for i, line in enumerate(lines) if line.startswith("╰")) + assert "See real Seals from OpenEMR runs:" in lines[bottom + 1] + assert CANONICAL_SEALS in lines[bottom + 1] + + +@pytest.mark.skipif( + os.environ.get("OPENADAPT_CHECK_LINKS") != "1", + reason="set OPENADAPT_CHECK_LINKS=1 to fetch the Seals page", +) +def test_the_seals_page_resolves(): + import urllib.request + + request = urllib.request.Request(CANONICAL_SEALS, method="HEAD") + with urllib.request.urlopen(request, timeout=20) as response: # noqa: S310 + assert response.status == 200 + assert response.geturl().rstrip("/") == CANONICAL_SEALS + + def test_quickstart_exit_code_follows_the_runs(monkeypatch, tmp_path): def fake(root, **kwargs): outcome = Outcome(root=root) @@ -578,7 +626,8 @@ def test_terminal_finale_fits_twelve_lines_with_every_optional_line(root, monkey ) RichView(stream, environ={}, width=110).finale(outcome, steps) lines = [line for line in stream.getvalue().splitlines() if line.strip()] - assert len(lines) <= 12, lines + # Twelve, plus the link to the published Seals that every finale carries. + assert len(lines) <= 13, lines def test_terminal_view_renders_color_boxes_and_the_comparison(root): diff --git a/tests/test_quickstart_openemr.py b/tests/test_quickstart_openemr.py new file mode 100644 index 000000000..fa4360348 --- /dev/null +++ b/tests/test_quickstart_openemr.py @@ -0,0 +1,474 @@ +"""`openadapt quickstart --app openemr`: preconditions, plain output, the real run. + +The story runs against a fake engine with OpenEMR's words, so the output tests +take milliseconds. The real run needs Docker and a clone of the repository; it +is opt-in (``OPENADAPT_REAL_QUICKSTART_OPENEMR=1``) and skipped in CI. +""" + +from __future__ import annotations + +import io +import json +import os +import subprocess +from dataclasses import replace +from pathlib import Path +from typing import Optional + +import pytest +from click.testing import CliRunner + +from openadapt import cli +from openadapt.quickstart import next_steps, run_quickstart +from openadapt.quickstart.engine import BreakFacts, DemoStep, RunFacts, SealFacts +from openadapt.quickstart.openemr import ( + DOCKER_INSTALL_URL, + checkout_problem, + demo_step_label, + docker_problem, + find_flow_checkout, +) +from openadapt.quickstart.scene import OPENEMR, SEALS_URL +from openadapt.quickstart.story import NextSteps, Outcome, run_story +from openadapt.quickstart.view import PlainView + +SNAPSHOT = Path(__file__).parent / "snapshots" / "quickstart_openemr_plain.snapshot" +REPO = Path(__file__).resolve().parents[1] +FLOW = REPO / "packages" / "flow" +DEMONSTRATION = ( + FLOW / "benchmark" / "openemr_local" / "referral_program" / "demonstration.jsonl" +) + +NAMES = ( + "Ines Carvalho", + "Theo Lindqvist", + "Grace Adeyemi", + "Arlo Whitcombe", + "Priya Raman", +) +DEMO = ( + ('Title: "Ms."', 2.1), + ('First name: "OpenAdapt"', 5.2), + ("Click Create New Patient", 34.5), + ("Click Confirm Create New Patient", 36.8), +) + + +# --------------------------------------------------------------------------- +# Preconditions: Docker and the clone +# --------------------------------------------------------------------------- + + +class _Done: + def __init__(self, returncode: int) -> None: + self.returncode = returncode + + +def _runner(codes: dict): + def run(argv, **_kwargs): + code = codes.get(argv[1], 0) + if code == "hang": + raise subprocess.TimeoutExpired(argv, 30) + return _Done(code) + + return run + + +def test_no_docker_says_how_to_install_it(): + problem = docker_problem(which=lambda name: None, run=_runner({})) + assert problem is not None + assert "needs Docker, which isn't installed" in problem + assert DOCKER_INSTALL_URL in problem + assert "\n" not in problem + + +def test_docker_not_running_says_to_start_it(): + problem = docker_problem( + which=lambda name: "/usr/bin/docker", run=_runner({"info": 1}) + ) + assert problem is not None and "installed but not running" in problem + assert "\n" not in problem + + +def test_docker_that_hangs_counts_as_not_running(): + problem = docker_problem( + which=lambda name: "/usr/bin/docker", + run=_runner({"info": "hang"}), + ) + assert problem is not None and "not running" in problem + + +def test_docker_without_compose_says_so(): + problem = docker_problem( + which=lambda name: "/usr/bin/docker", run=_runner({"compose": 1}) + ) + assert problem is not None and "docker compose" in problem + + +def test_a_working_docker_is_no_problem(): + assert docker_problem(which=lambda name: "/usr/bin/docker", run=_runner({})) is None + + +def test_the_fixture_is_found_only_in_a_clone(tmp_path): + assert find_flow_checkout([tmp_path]) is None + assert find_flow_checkout([tmp_path, FLOW]) == FLOW + assert checkout_problem(None) is not None and "git clone" in checkout_problem(None) + assert checkout_problem(FLOW) is None + + +def _no_mockmed(monkeypatch): + """Fail the test if anything reaches MockMed (no silent fallback).""" + + def refuse(*args, **kwargs): + raise AssertionError("fell back to MockMed") + + monkeypatch.setattr("openadapt.quickstart.engine.FlowEngine", refuse) + monkeypatch.setattr("openadapt.quickstart.run_quickstart", refuse) + monkeypatch.setattr(cli, "_engine_tutorial", refuse) + + +def test_cli_without_docker_prints_one_line_and_exits_2(monkeypatch, tmp_path): + _no_mockmed(monkeypatch) + line = "OpenEMR mode needs Docker, which isn't installed. Install it." + monkeypatch.setattr("openadapt.quickstart.openemr.docker_problem", lambda: line) + monkeypatch.chdir(tmp_path) + result = CliRunner().invoke(cli.main, ["quickstart", "--app", "openemr"]) + assert result.exit_code == 2 + assert result.stderr.strip() == line + assert result.stdout == "" + assert not any(tmp_path.iterdir()), "nothing is written when Docker is missing" + + +def test_cli_outside_a_clone_prints_one_line_and_exits_2(monkeypatch, tmp_path): + _no_mockmed(monkeypatch) + monkeypatch.setattr("openadapt.quickstart.openemr.docker_problem", lambda: None) + monkeypatch.setattr("openadapt.quickstart.openemr.find_flow_checkout", lambda: None) + monkeypatch.chdir(tmp_path) + result = CliRunner().invoke(cli.main, ["quickstart", "--app", "openemr"]) + assert result.exit_code == 2 + assert result.stderr.count("\n") == 1 and "git clone" in result.stderr + assert not any(tmp_path.iterdir()) + + +def test_cli_refuses_engine_tutorial_flags_with_openemr(monkeypatch, tmp_path): + _no_mockmed(monkeypatch) + monkeypatch.chdir(tmp_path) + result = CliRunner().invoke( + cli.main, ["quickstart", "--app", "openemr", "--guided"] + ) + assert result.exit_code == 2 + assert "--guided" in result.stderr + + +def test_cli_passes_the_clone_to_the_quickstart(monkeypatch, tmp_path): + seen = {} + + def fake(root, **kwargs): + seen.update(kwargs, root=root) + return Outcome(root=root) + + monkeypatch.setattr("openadapt.quickstart.openemr.docker_problem", lambda: None) + monkeypatch.setattr("openadapt.quickstart.openemr.find_flow_checkout", lambda: FLOW) + monkeypatch.setattr("openadapt.quickstart.run_quickstart", fake) + monkeypatch.chdir(tmp_path) + result = CliRunner().invoke(cli.main, ["quickstart", "--app", "openemr"]) + assert result.exit_code == 0, result.output + assert seen["openemr"] == FLOW + + +def test_the_default_app_is_still_mockmed(monkeypatch, tmp_path): + seen = {} + + def fake(root, **kwargs): + seen.update(kwargs) + return Outcome(root=root) + + monkeypatch.setattr( + "openadapt.quickstart.openemr.docker_problem", + lambda: pytest.fail("MockMed must not check for Docker"), + ) + monkeypatch.setattr(cli, "_flow_runs_quickstart", lambda: True) + monkeypatch.setattr("openadapt.quickstart.run_quickstart", fake) + monkeypatch.chdir(tmp_path) + result = CliRunner().invoke(cli.main, ["quickstart"]) + assert result.exit_code == 0, result.output + assert seen["openemr"] is None + + +# --------------------------------------------------------------------------- +# Act 1's labels, from the committed demonstration +# --------------------------------------------------------------------------- + + +def test_demonstration_labels_show_each_field_and_the_two_saves(): + events = [json.loads(line) for line in DEMONSTRATION.read_text().splitlines()] + labels = [label for label in map(demo_step_label, events) if label] + assert len(events) == 41 + assert labels[0] == 'Title: "Ms."' + assert labels[-2:] == [ + "Click Create New Patient", + "Click Confirm Create New Patient", + ] + assert "Open the Contact section" in labels + assert sum(1 for label in labels if label.endswith('"')) == 12 + + +def test_demonstration_holds_no_urls_or_tokens(): + text = DEMONSTRATION.read_text() + assert "http" not in text and "token" not in text + + +# --------------------------------------------------------------------------- +# Plain output +# --------------------------------------------------------------------------- + + +def _run(root: Path, index: int, **overrides) -> RunFacts: + facts = RunFacts( + index=index, + note=NAMES[index - 1], + run_dir=root / f"run-{index}", + execution_outcome="VERIFIED", + transaction_outcome="VERIFIED", + checked=True, + records=1, + model_calls=0, + cost_usd=0.0, + effects_required=11, + effects_confirmed=11, + seconds=30.0 + index / 10, + plain_label="Done and checked", + ) + return replace(facts, **overrides) + + +def _broken(root: Path, **overrides) -> BreakFacts: + facts = BreakFacts( + run_dir=root / "run-broken", + fault="possible duplicate", + execution_outcome="HALTED", + transaction_outcome="HALTED_BEFORE_EFFECT", + screen_showed_success=False, + screen_text="a matching chart: Delgado, Rosa, born 1958-03-27", + screenshot=None, + new_records=0, + effects_required=11, + effects_refuted=0, + halt_reason="Postconditions failed for step 'step_039'", + model_calls=0, + seconds=24.5, + ) + return replace(facts, **overrides) + + +class FakeOpenEMR: + """OpenEMR's words and shape, with the facts a test gives it.""" + + scene = OPENEMR + inputs = ("r3", "r4", "r5", "r7", "r8") + setup_summary = ( + "OpenEMR 8.0.0.3 at http://127.0.0.1:9741: reused the running copy 5.7s" + ) + program_detail = "(certified)" + + def __init__(self, root: Path, *, runs=None, broken=None, parallel: int = 5): + self.root = root + self.visible = False + self.recording_dir = root / "demonstration.jsonl" + self._runs = runs or {} + self._broken = broken or {} + self._parallel = parallel + self.progress: list[tuple[str, bool]] = [] + + def set_progress(self, progress): + self._report = progress + + def __enter__(self): + self._report("restoring the synthetic baseline", True) + self._report("restoring the synthetic baseline 3s", False) + return self + + def __exit__(self, *exc): + pass + + def record(self, on_step): + steps = [DemoStep(label, at) for label, at in DEMO] + for step in steps: + on_step(step) + return steps + + def compile(self): + return 29 + + @property + def program_name(self): + return "openemr-create-synthetic-patient" + + def note_param(self): + return True + + def start_workers(self): + pass + + @property + def parallel(self): + return self._parallel + + def run_all(self, keys, on_finish): + for index, _key in enumerate(keys, start=1): + on_finish(_run(self.root, index, **self._runs.get(index, {}))) + + def before_prompt(self): + pass + + def break_it(self): + broken = dict(self._broken) + self._screen = broken.pop( + "screen_text", "a matching chart: Delgado, Rosa, born 1958-03-27" + ) + return _broken(self.root, **broken) + + def read_screen(self, broken): + return self._screen + + def seal(self, runs): + return SealFacts( + "seal-ed25519-0123456789abcdef", sum(1 for run in runs if run.checked) + ) + + def write_page(self, first, broken): + return None + + +def _clock(step: float = 0.5): + now = [0.0] + + def tick() -> float: + now[0] += step + return now[0] + + return tick + + +def _steps(outcome: Outcome) -> NextSteps: + return next_steps(cli._hint, cli._shell_quote, False)(outcome) + + +def _plain(engine, **kwargs) -> tuple[str, Outcome]: + stream = io.StringIO() + outcome = run_story( + engine, + PlainView(stream, scene=OPENEMR), + next_steps=_steps, + clock=_clock(), + **kwargs, + ) + return stream.getvalue(), outcome + + +@pytest.fixture() +def root(tmp_path, monkeypatch): + monkeypatch.chdir(tmp_path) + monkeypatch.setattr(cli, "_under_uvx", lambda: False) + return tmp_path / "openadapt-quickstart" + + +def test_plain_output_matches_the_snapshot(root): + output, _ = _plain(FakeOpenEMR(root)) + if os.environ.get("UPDATE_SNAPSHOTS") == "1": + SNAPSHOT.write_text(output) + assert output == SNAPSHOT.read_text() + + +def test_act_three_reads_as_a_stop_before_a_duplicate(root): + output, outcome = _plain(FakeOpenEMR(root)) + assert "■ Stopped before saving: possible duplicate" in output + assert "What OpenEMR's record showed: 0 new charts" in output + assert "A screen-trusting bot" not in output, "nothing on screen claimed success" + assert outcome.broken is not None and outcome.broken.stopped + + +def test_runs_are_checked_in_openemrs_record(root): + output, outcome = _plain( + FakeOpenEMR( + root, runs={2: {"checked": False, "plain_label": "Stopped before saving"}} + ) + ) + assert output.count("✓ checked in OpenEMR's record") == 4 + assert "■ Stopped before saving" in output + assert "4 of 5 saved and checked in OpenEMR's record" in output + assert outcome.checked == 4 + + +def test_a_new_chart_in_act_three_is_never_called_a_clean_stop(root): + output, _ = _plain(FakeOpenEMR(root, broken={"new_records": 1})) + assert "1 new chart" in output and "1 new charts" not in output + assert "Replaying those clicks" not in output + assert "a new chart is in OpenEMR. Check it." in output + + +def test_the_finale_links_the_published_seals(root): + output, _ = _plain(FakeOpenEMR(root)) + assert f"See real Seals from OpenEMR runs: {SEALS_URL}" in output + assert "agent serve --bundles openadapt-quickstart/bundle" in output + + +def test_setup_progress_prints_milestones_only(root): + output, _ = _plain(FakeOpenEMR(root)) + assert output.count("restoring the synthetic baseline") == 1 + assert "reused the running copy 5.7s" in output + + +# --------------------------------------------------------------------------- +# The real thing +# --------------------------------------------------------------------------- + + +def _docker_ready() -> Optional[str]: + return docker_problem() + + +@pytest.mark.real_quickstart +@pytest.mark.skipif( + os.environ.get("OPENADAPT_REAL_QUICKSTART_OPENEMR") != "1", + reason=( + "set OPENADAPT_REAL_QUICKSTART_OPENEMR=1 on a machine with Docker to run " + "OpenEMR (first run: image download and install, minutes)" + ), +) +def test_real_openemr_quickstart(tmp_path, monkeypatch): + problem = _docker_ready() + if problem is not None: + pytest.skip(problem) + flow = find_flow_checkout() + assert flow is not None, "run from a clone with packages/flow installed" + monkeypatch.chdir(tmp_path) + monkeypatch.setenv("OPENADAPT_SEAL_HOME", str(tmp_path / "seal")) + monkeypatch.setenv("OPENADAPT_FLOW_SCRUB", "off") + root = tmp_path / "openadapt-quickstart" + stream = io.StringIO() + outcome = run_quickstart( + root, + visible=False, + break_it=True, + verbose=False, + steps=_steps, + stream=stream, + interactive=False, + openemr=flow, + ) + output = stream.getvalue() + assert outcome.checked == len(outcome.runs) == 5, output + assert outcome.model_calls == 0 + assert outcome.broken is not None and outcome.broken.stopped, output + assert outcome.broken.transaction_outcome == "HALTED_BEFORE_EFFECT" + assert outcome.broken.new_records == 0 + assert "5 of 5 saved and checked in OpenEMR's record" in output + for index in range(1, 6): + report = json.loads((root / f"run-{index}" / "report.json").read_text()) + assert report["execution_outcome"] == "VERIFIED" + assert report["execution_profile"] == "standard" + readback = json.loads( + (root / "run-broken" / "quickstart-readback.json").read_text() + ) + assert readback["new_charts_in_database"] == 0