-
- Governed drift handling
-
-
- When the interface drifts, OpenAdapt re-resolves from
- retained evidence. It doesn’t guess.
-
-
-
- ⚠
-
- UI drift → re-resolved via the geometry rung ·{' '}
- governed repair saved · 0 model calls
-
-
- Real capture · reviewable diff · nothing is applied without
- sign-off
-
+
+
+ Three real applications
+ OpenEMR · Frappe Lending · openIMIS
+
+
+ One execution contract
+ Demonstrate → replay → verify or halt
+
+
+ Healthy compiled runs
+ 0 model calls
-
-
-
- Real capture
-
-
-
- {/* Shipping product: the same run, inspectable in OpenAdapt Cloud. */}
-
-
-
-
-
- Every run is inspectable in OpenAdapt Cloud.
-
- Run history, per-step evidence, and verified effects in the
- shipping hosted product: app.openadapt.ai
-
-
-
- →
-
-
+
)
}
diff --git a/components/ReplayHero.module.css b/components/ReplayHero.module.css
index 649ee6bb..1c341c95 100644
--- a/components/ReplayHero.module.css
+++ b/components/ReplayHero.module.css
@@ -1,765 +1,62 @@
.figure {
- margin: 0 auto;
width: 100%;
- max-width: 1000px;
- min-width: 0;
+ max-width: 1040px;
+ margin: 0 auto 48px;
text-align: left;
}
-/* Two-up stage: real replay footage beside the measured numbers.
- Collapses to a single column on narrow viewports. */
-.stage {
+.proofStrip {
display: grid;
- grid-template-columns: 1.5fr 1fr;
- gap: 18px;
- align-items: stretch;
- min-width: 0;
-}
-
-@media (max-width: 860px) {
- .stage {
- grid-template-columns: 1fr;
- gap: 14px;
- }
-}
-
-/* ── Real-footage browser frame ────────────────────────────────────────── */
-.frame {
- display: flex;
- flex-direction: column;
- min-width: 0;
- border: 1px solid var(--hairline);
- border-radius: 14px;
- background: var(--panel);
- box-shadow: 0 24px 60px -20px rgba(35, 40, 31, 0.35),
- 0 2px 6px rgba(35, 40, 31, 0.06);
- overflow: hidden;
-}
-
-.titlebar {
- display: flex;
- align-items: center;
- gap: 7px;
- padding: 10px 14px;
- border-bottom: 1px solid var(--hairline);
- background: var(--ground);
- min-width: 0;
-}
-
-.dot {
- width: 11px;
- height: 11px;
- border-radius: 50%;
- flex-shrink: 0;
-}
-
-.dotR {
- background: #e0685a;
-}
-.dotY {
- background: #e0b148;
-}
-.dotG {
- background: #83b06a;
-}
-
-.urlPill {
- margin-left: 8px;
- flex: 0 1 auto;
- min-width: 0;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 1px;
+ margin-top: 14px;
overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- font-family: var(--font-mono);
- font-size: 0.7rem;
- color: var(--ink-3);
- background: var(--panel);
border: 1px solid var(--hairline);
- border-radius: 999px;
- padding: 3px 11px;
-}
-
-.realTag {
- margin-left: auto;
- flex-shrink: 0;
- display: inline-flex;
- align-items: center;
- gap: 5px;
- font-family: var(--font-mono);
- font-size: 0.62rem;
- font-weight: 600;
- letter-spacing: 0.09em;
- text-transform: uppercase;
- color: var(--accent);
- border: 1px solid rgba(62, 107, 79, 0.4);
- border-radius: 999px;
- padding: 2px 9px;
- background: rgba(62, 107, 79, 0.06);
-}
-
-.realDot {
- width: 6px;
- height: 6px;
- border-radius: 50%;
- background: var(--accent);
- box-shadow: 0 0 0 3px rgba(62, 107, 79, 0.16);
- animation: livePulse 2.4s ease-in-out infinite;
-}
-
-@keyframes livePulse {
- 0%,
- 100% {
- opacity: 1;
- }
- 50% {
- opacity: 0.4;
- }
-}
-
-.screen {
- position: relative;
- width: 100%;
- background: #f4f6f8;
- aspect-ratio: 880 / 550;
- overflow: hidden;
-}
-
-.video {
- display: block;
- width: 100%;
- height: 100%;
- object-fit: cover;
- object-position: top left;
-}
-
-/* ── Floating OpenAdapt system overlay (HUD) ────────────────────────────────
- A dark-glass widget the OpenAdapt system paints ON TOP of the running app.
- It is a deliberately distinct visual layer from the light OpenEMR content
- and the browser chrome: real elevation (layered drop shadow) so it reads as
- floating above the page, reinforcing "OpenAdapt runs over your existing
- apps." Absolutely positioned inside .screen (which clips overflow), so it
- can never spill past the frame or cause page-level horizontal scroll. */
-.sysOverlay {
- position: absolute;
- right: 14px;
- bottom: 14px;
- z-index: 2;
- display: inline-flex;
- align-items: center;
- gap: 9px;
- max-width: calc(100% - 28px);
- padding: 8px 12px 8px 9px;
border-radius: 12px;
- background: rgba(18, 21, 24, 0.82);
- border: 1px solid rgba(255, 255, 255, 0.12);
- box-shadow: 0 14px 34px -10px rgba(6, 9, 7, 0.62),
- 0 3px 10px rgba(6, 9, 7, 0.34), 0 0 0 1px rgba(6, 9, 7, 0.18);
- -webkit-backdrop-filter: blur(9px) saturate(1.15);
- backdrop-filter: blur(9px) saturate(1.15);
- pointer-events: none;
-}
-
-.sysMark {
- flex-shrink: 0;
- display: inline-flex;
- width: 24px;
- height: 24px;
- border-radius: 7px;
- box-shadow: 0 2px 6px rgba(6, 9, 7, 0.4);
-}
-
-.sysMark svg {
- width: 24px;
- height: 24px;
- display: block;
-}
-
-.sysMeta {
- display: flex;
- flex-direction: column;
- gap: 2px;
- min-width: 0;
-}
-
-.sysBrand {
- display: inline-flex;
- align-items: center;
- gap: 6px;
- font-family: var(--font-display);
- font-size: 0.72rem;
- font-weight: 600;
- line-height: 1;
- letter-spacing: 0.01em;
- color: #f3f5f2;
-}
-
-.sysDot {
- width: 6px;
- height: 6px;
- border-radius: 50%;
- background: var(--inset-ok);
- box-shadow: 0 0 0 3px rgba(134, 217, 168, 0.2);
- animation: livePulse 2.4s ease-in-out infinite;
-}
-
-.sysStatus {
- font-family: var(--font-mono);
- font-size: 0.66rem;
- line-height: 1;
- letter-spacing: 0.02em;
- color: var(--inset-ok);
- white-space: nowrap;
-}
-
-@media (max-width: 380px) {
- .sysOverlay {
- right: 10px;
- bottom: 10px;
- gap: 7px;
- padding: 7px 10px 7px 8px;
- }
-
- .sysStatus {
- font-size: 0.62rem;
- }
+ background: var(--hairline);
}
-.frameCaption {
- padding: 11px 15px;
- border-top: 1px solid var(--hairline);
- background: var(--panel);
- font-family: var(--font-mono);
- font-size: 0.7rem;
- line-height: 1.5;
- color: var(--ink-3);
-}
-
-/* ── Measured-numbers ledger ───────────────────────────────────────────── */
-.ledger {
- display: flex;
- flex-direction: column;
- min-width: 0;
- border: 1px solid var(--hairline);
- border-radius: 14px;
+.proofStrip div {
+ display: grid;
+ gap: 5px;
+ padding: 13px 15px;
background: var(--panel);
- box-shadow: 0 24px 60px -20px rgba(35, 40, 31, 0.28),
- 0 2px 6px rgba(35, 40, 31, 0.05);
- padding: 16px 18px;
}
-.ledgerHead {
- display: flex;
- align-items: center;
- gap: 10px;
- padding-bottom: 12px;
- border-bottom: 1px solid var(--hairline);
-}
-
-.eyebrow {
- font-family: var(--font-mono);
- font-size: 0.62rem;
- letter-spacing: 0.1em;
- text-transform: uppercase;
+.proofStrip span {
color: var(--ink-3);
-}
-
-.stamp {
- margin-left: auto;
- flex-shrink: 0;
font-family: var(--font-mono);
- font-size: 0.6rem;
- font-weight: 600;
- letter-spacing: 0.12em;
+ font-size: 9px;
+ letter-spacing: 0.08em;
text-transform: uppercase;
- color: var(--accent);
- border: 1.5px solid var(--accent);
- border-radius: 5px;
- padding: 3px 9px;
- transform: rotate(-5deg);
- animation: stampPunch 0.5s cubic-bezier(0.2, 1.5, 0.4, 1) both;
- animation-delay: 0.35s;
-}
-
-@keyframes stampPunch {
- 0% {
- opacity: 0;
- transform: rotate(-5deg) scale(1.8);
- }
- 70% {
- opacity: 1;
- transform: rotate(-5deg) scale(0.94);
- }
- 100% {
- opacity: 1;
- transform: rotate(-5deg) scale(1);
- }
-}
-
-/* Effect-verification thesis pill — what "Verified" actually means. */
-.effectPill {
- display: flex;
- align-items: flex-start;
- gap: 8px;
- margin: 12px 0 0;
- padding: 9px 11px;
- border: 1px solid rgba(62, 107, 79, 0.28);
- border-left: 3px solid var(--accent);
- border-radius: 8px;
- background: rgba(62, 107, 79, 0.06);
- font-size: 0.74rem;
- line-height: 1.45;
- color: var(--ink-2);
-}
-
-.effectPill b {
- color: var(--accent-hover);
- font-weight: 600;
-}
-
-.effectMark {
- flex-shrink: 0;
- margin-top: 1px;
- width: 16px;
- height: 16px;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- border-radius: 50%;
- background: var(--accent);
- color: #fff;
- font-size: 0.64rem;
- font-weight: 700;
- line-height: 1;
-}
-
-.statGrid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 8px;
- padding: 16px 0 4px;
}
-.stat {
- display: flex;
- flex-direction: column;
- gap: 3px;
- min-width: 0;
-}
-
-.statNum {
- font-family: var(--font-display);
- font-size: clamp(1.5rem, 4.4vw, 2rem);
- font-weight: 600;
- line-height: 1;
- letter-spacing: -0.02em;
+.proofStrip strong {
color: var(--ink);
-}
-
-.statLabel {
- font-family: var(--font-mono);
- font-size: 0.6rem;
- letter-spacing: 0.04em;
- text-transform: uppercase;
- color: var(--ink-3);
- line-height: 1.25;
-}
-
-/* ── Head-to-head comparison table (agent vs compiled) ─────────────────────
- A real table, not monospace rows: metric column plus one column per arm,
- OpenAdapt's winning cells emphasized. Short labels + tabular numerals keep
- it inside the ledger with no horizontal overflow down to 320px. */
-.vs {
- margin-top: 14px;
- width: 100%;
- border-collapse: separate;
- border-spacing: 0;
- table-layout: fixed;
- border: 1px solid var(--hairline);
- border-radius: 10px;
- overflow: hidden;
-}
-
-.vsCaption {
- caption-side: top;
- text-align: left;
- padding: 0 0 8px;
- font-family: var(--font-mono);
- font-size: 0.6rem;
- letter-spacing: 0.1em;
- text-transform: uppercase;
- color: var(--ink-3);
-}
-
-.vs th,
-.vs td {
- padding: 8px 10px;
- text-align: right;
- font-size: 0.82rem;
- line-height: 1.15;
- border-bottom: 1px solid var(--hairline);
-}
-
-.vs tbody tr:last-child th,
-.vs tbody tr:last-child td {
- border-bottom: 0;
-}
-
-.vs thead th {
- font-family: var(--font-mono);
- font-size: 0.62rem;
- font-weight: 600;
- letter-spacing: 0.06em;
- text-transform: uppercase;
- color: var(--ink-3);
- background: var(--ground);
- vertical-align: bottom;
-}
-
-/* Metric column: left-aligned row labels. */
-.vsMetric {
- width: 40%;
- text-align: left !important;
+ font-size: 12px;
font-weight: 600;
- color: var(--ink-2);
-}
-
-.vs thead .vsMetric {
- color: var(--ink-3);
-}
-
-/* Agent column stays quiet, tertiary. */
-.vsAgentCol {
- width: 30%;
- color: var(--ink-3);
- font-variant-numeric: tabular-nums;
-}
-
-/* OpenAdapt column is the emphasized winner: accent tint down the column. */
-.vsUsCol {
- width: 30%;
- background: rgba(62, 107, 79, 0.08);
- color: var(--accent-hover);
- box-shadow: inset 1px 0 0 rgba(62, 107, 79, 0.24);
- font-variant-numeric: tabular-nums;
-}
-
-.vs thead .vsUsCol {
- color: var(--accent);
- background: rgba(62, 107, 79, 0.14);
-}
-
-/* Winning value cells: bold, accent, so the $0.00 / 0 / faster time pop. */
-.vsWin {
- font-weight: 700;
- color: var(--accent-hover);
+ line-height: 1.4;
}
-/* Cost per 1,000 runs — the dramatic real spread ($552 agent vs $0). */
-.per1k {
- margin-top: 16px;
- padding-top: 14px;
- border-top: 1px solid var(--hairline);
+.actions {
display: flex;
- flex-direction: column;
+ justify-content: center;
gap: 9px;
+ margin-top: 18px;
}
-.per1kHead {
- font-family: var(--font-mono);
- font-size: 0.6rem;
- letter-spacing: 0.1em;
- text-transform: uppercase;
- color: var(--ink-3);
-}
-
-.barRow {
- display: grid;
- grid-template-columns: 66px 1fr auto;
- align-items: center;
- gap: 10px;
-}
-
-.barLabel {
- font-size: 0.74rem;
- font-weight: 600;
- color: var(--ink-2);
-}
-
-.barRowUs .barLabel {
- color: var(--accent-hover);
-}
-
-.barTrack {
- height: 9px;
- border-radius: 999px;
- background: var(--ground);
- border: 1px solid var(--hairline);
- overflow: hidden;
-}
-
-.barFillAgent {
- display: block;
- height: 100%;
- width: 100%;
- background: linear-gradient(90deg, #c0864e, #a5652f);
-}
-
-.barFillUs {
- display: block;
- height: 100%;
- width: 3px;
- background: var(--accent);
-}
-
-.barVal {
- font-family: var(--font-mono);
- font-size: 0.76rem;
- font-weight: 600;
- color: var(--ink);
- text-align: right;
- min-width: 3em;
-}
-
-.barRowUs .barVal {
- color: var(--accent-hover);
-}
-
-.ledgerFoot {
- margin-top: auto;
- padding-top: 13px;
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 10px;
- flex-wrap: wrap;
- row-gap: 4px;
- font-family: var(--font-mono);
- font-size: 0.68rem;
- color: var(--ink-3);
-}
-
-.ledgerFoot a {
- color: var(--accent);
- white-space: nowrap;
-}
-
-/* ── Governed-drift proof card ─────────────────────────────────────────── */
-.drift {
- display: grid;
- grid-template-columns: 1.2fr 1fr;
- gap: 18px;
- align-items: stretch;
- margin-top: 14px;
- padding: 16px 18px;
- border: 1px solid var(--hairline);
- border-radius: 14px;
- background: var(--panel);
- box-shadow: 0 8px 28px -16px rgba(35, 40, 31, 0.22);
- min-width: 0;
-}
-
-.driftBody {
- display: flex;
- flex-direction: column;
- gap: 8px;
- min-width: 0;
-}
-
-.driftEyebrow {
- font-family: var(--font-mono);
- font-size: 0.62rem;
- letter-spacing: 0.1em;
- text-transform: uppercase;
- color: var(--ink-3);
-}
-
-.driftHead {
- margin: 0;
- font-family: var(--font-display);
- font-size: clamp(0.98rem, 2.1vw, 1.14rem);
- font-weight: 600;
- line-height: 1.3;
- letter-spacing: -0.01em;
- color: var(--ink);
-}
-
-.driftCallout {
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- gap: 6px;
- margin: 2px 0 0;
- padding: 8px 11px;
- border-radius: 8px;
- border: 1px solid var(--inset-border);
- background: var(--inset-bg);
- font-family: var(--font-mono);
- font-size: 0.72rem;
- line-height: 1.5;
- color: var(--inset-text);
-}
-
-.driftCallout b {
- color: var(--inset-ok);
- font-weight: 600;
-}
-
-.driftWarn {
- flex-shrink: 0;
- color: var(--inset-warn);
- font-size: 0.82rem;
- line-height: 1;
-}
-
-.driftFoot {
- margin: auto 0 0;
- padding-top: 4px;
- font-family: var(--font-mono);
- font-size: 0.66rem;
- line-height: 1.4;
- color: var(--ink-3);
-}
-
-.driftShotWrap {
- position: relative;
- margin: 0;
- min-width: 0;
- border-radius: 10px;
- overflow: hidden;
- border: 1px solid var(--inset-border);
- background: var(--inset-bg);
- aspect-ratio: 880 / 360;
-}
-
-.driftTag {
- position: absolute;
- top: 8px;
- right: 8px;
- z-index: 1;
- display: inline-flex;
- align-items: center;
- gap: 5px;
- font-family: var(--font-mono);
- font-size: 0.58rem;
- font-weight: 600;
- letter-spacing: 0.09em;
- text-transform: uppercase;
- color: var(--inset-ok);
- border: 1px solid rgba(134, 217, 168, 0.4);
- border-radius: 999px;
- padding: 2px 8px;
- background: rgba(10, 14, 18, 0.72);
-}
-
-.driftTag .realDot {
- background: var(--inset-ok);
- box-shadow: 0 0 0 3px rgba(134, 217, 168, 0.18);
-}
-
-.driftShot {
- display: block;
- width: 100%;
- height: 100%;
- object-fit: cover;
- object-position: top left;
-}
-
-@media (max-width: 720px) {
- .drift {
+@media (max-width: 700px) {
+ .proofStrip {
grid-template-columns: 1fr;
- gap: 12px;
- }
-
- .driftShotWrap {
- order: -1;
- }
-}
-
-/* ── Shipping-product proof strip ──────────────────────────────────────── */
-.hosted {
- display: flex;
- align-items: center;
- gap: 14px;
- margin-top: 14px;
- padding: 10px 14px 10px 10px;
- border: 1px solid var(--hairline);
- border-radius: 12px;
- background: var(--panel);
- box-shadow: 0 8px 28px -14px rgba(35, 40, 31, 0.2);
- text-decoration: none;
- transition: border-color var(--dur-2, 180ms) var(--ease-out, ease),
- box-shadow var(--dur-2, 180ms) var(--ease-out, ease);
-}
-
-.hosted:hover {
- border-color: rgba(62, 107, 79, 0.4);
- box-shadow: 0 12px 32px -14px rgba(35, 40, 31, 0.3);
-}
-
-.hostedShotWrap {
- flex-shrink: 0;
- width: 132px;
- height: 74px;
- border-radius: 7px;
- overflow: hidden;
- border: 1px solid var(--hairline);
-}
-
-.hostedShot {
- display: block;
- width: 100%;
- height: 100%;
- object-fit: cover;
- object-position: top left;
-}
-
-.hostedText {
- display: flex;
- flex-direction: column;
- gap: 3px;
- min-width: 0;
-}
-
-.hostedText b {
- font-family: var(--font-display);
- font-size: 0.92rem;
- font-weight: 600;
- color: var(--ink);
-}
-
-.hostedSub {
- font-size: 0.78rem;
- line-height: 1.4;
- color: var(--ink-2);
-}
-
-.hostedArrow {
- margin-left: auto;
- flex-shrink: 0;
- font-size: 1.1rem;
- color: var(--accent);
-}
-
-@media (max-width: 480px) {
- .vs th,
- .vs td {
- padding: 7px 8px;
- font-size: 0.78rem;
- }
-
- .hostedShotWrap {
- display: none;
}
-}
-@media (prefers-reduced-motion: reduce) {
- .realDot,
- .sysDot,
- .stamp {
- animation: none;
+ .actions {
+ align-items: stretch;
+ flex-direction: column;
}
- .stamp {
- opacity: 1;
+ .actions a {
+ justify-content: center;
+ text-align: center;
}
}
diff --git a/cypress/e2e/basic.cy.js b/cypress/e2e/basic.cy.js
index 17c1cd78..4ff8ba0f 100644
--- a/cypress/e2e/basic.cy.js
+++ b/cypress/e2e/basic.cy.js
@@ -479,53 +479,55 @@ describe('public product truth', () => {
cy.contains('supported APIs and exports').should('be.visible')
cy.contains('customer-controlled deployment').should('be.visible')
cy.contains('experimental').should('not.exist')
- cy.get('[data-testid="frappe-lending-workflow-demo"]').should(
- 'be.visible'
- )
- cy.get('img[alt*="Frappe Lending frames"]')
- .scrollIntoView()
- .should('be.visible')
- cy.get('img[alt*="deterministically replaying"]')
- .scrollIntoView()
- .should('be.visible')
- cy.contains('6/6 compiled trials correct').should('be.visible')
- cy.get('img[alt*="Frappe Lending frames"]')
- .should('have.attr', 'src')
- .and('equal', '/lending-demo/record-frappe.gif')
- cy.get('img[alt*="deterministically replaying"]')
- .should('have.attr', 'src')
- .and('equal', '/lending-demo/replay-frappe.gif')
- cy.contains(/Pause animation|Play animation/).should('not.exist')
- cy.contains('Inspect evidence manifest')
- .should('have.attr', 'href')
- .and(
- 'equal',
- '/artifacts/json?source=%2Flending-demo%2Fprovenance.json'
- )
- cy.get('img[alt*="OpenEMR"]').should('not.exist')
+ cy.get('[data-testid="reference-demo-showcase"]')
+ .should('have.attr', 'data-active-reference', 'lending')
+ .within(() => {
+ cy.contains('Frappe Lending').should('be.visible')
+ cy.contains('button', 'Recorded demonstration').click()
+ cy.get('img')
+ .should('have.attr', 'alt')
+ .and('contain', 'recording a synthetic Loan Application')
+ cy.contains('button', 'Compiled replay').click()
+ cy.get('img')
+ .should('have.attr', 'alt')
+ .and('contain', 'replaying the compiled synthetic Loan Application')
+ cy.contains('Compiled trials')
+ cy.contains('6/6')
+ cy.contains('Evidence manifest')
+ .should('have.attr', 'href')
+ .and(
+ 'equal',
+ '/artifacts/json?source=%2Flending-demo%2Fprovenance.json'
+ )
+ })
cy.visit('/solutions/insurance')
cy.get('h1').should('contain.text', 'Claims intake')
cy.contains('supported APIs for adjudication').should('be.visible')
- cy.get('[data-testid="openimis-claims-workflow-demo"]').should(
- 'be.visible'
- )
- cy.get('img[src="/insurance-demo/record-openimis.gif"]')
- .scrollIntoView()
- .should('be.visible')
- cy.get('img[src="/insurance-demo/replay-openimis.gif"]')
- .scrollIntoView()
- .should('be.visible')
- cy.contains('Inspect evidence manifest')
- .should('have.attr', 'href')
- .and(
- 'equal',
- '/artifacts/json?source=%2Finsurance-demo%2Fprovenance.json'
- )
+ cy.get('[data-testid="reference-demo-showcase"]')
+ .should('have.attr', 'data-active-reference', 'insurance')
+ .within(() => {
+ cy.contains('openIMIS').should('be.visible')
+ cy.contains('button', 'Recorded demonstration').click()
+ cy.get('img')
+ .should('have.attr', 'alt')
+ .and('contain', 'recording a synthetic health-facility claim')
+ cy.contains('button', 'Compiled replay').click()
+ cy.get('img')
+ .should('have.attr', 'alt')
+ .and('contain', 'replaying the compiled synthetic claim')
+ cy.contains('Evidence manifest')
+ .should('have.attr', 'href')
+ .and(
+ 'equal',
+ '/artifacts/json?source=%2Finsurance-demo%2Fprovenance.json'
+ )
+ })
cy.viewport(375, 812)
cy.visit('/solutions/lending')
- cy.get('[data-testid="frappe-lending-workflow-demo"]')
+ cy.get('[data-testid="reference-demo-showcase"]')
+ .should('have.attr', 'data-active-reference', 'lending')
.scrollIntoView()
.should('be.visible')
cy.document().then((document) => {
diff --git a/cypress/e2e/reference-demo.cy.js b/cypress/e2e/reference-demo.cy.js
new file mode 100644
index 00000000..8895db36
--- /dev/null
+++ b/cypress/e2e/reference-demo.cy.js
@@ -0,0 +1,101 @@
+describe('shared real-application demo', () => {
+ const routes = [
+ ['/', 'healthcare', 'exact-decoded-frame-bound'],
+ ['/solutions/healthcare', 'healthcare', 'exact-decoded-frame-bound'],
+ ['/solutions/lending', 'lending', 'omitted-without-exact-timeline'],
+ ['/solutions/insurance', 'insurance', 'omitted-without-exact-timeline'],
+ ['/how-it-works', 'healthcare', 'exact-decoded-frame-bound'],
+ ['/dental', 'insurance', 'omitted-without-exact-timeline'],
+ ]
+
+ for (const [route, initialReference, replayTracking] of routes) {
+ it(`renders the shared evidence player on ${route}`, () => {
+ cy.visit(route)
+ cy.get('[data-testid="reference-demo-showcase"]')
+ .first()
+ .should('have.attr', 'data-active-reference', initialReference)
+ .within(() => {
+ cy.get('[data-testid="reference-evidence-player"]')
+ .should(
+ 'have.attr',
+ 'data-target-tracking',
+ replayTracking
+ )
+ cy.contains('button', 'Recorded demonstration').click()
+ cy.get('[data-testid="reference-evidence-player"]')
+ .should(
+ 'have.attr',
+ 'data-target-tracking',
+ 'omitted-without-exact-timeline'
+ )
+ cy.contains('button', 'Compiled replay').click()
+ cy.get('[data-testid="reference-evidence-player"]')
+ .should('have.attr', 'data-target-tracking', replayTracking)
+ cy.contains('Open the full Cloud demo')
+ })
+ })
+ }
+
+ it('keeps the player usable on a narrow viewport', () => {
+ cy.viewport(390, 844)
+ cy.visit('/solutions/lending')
+ cy.get('[data-testid="reference-evidence-player"]')
+ .scrollIntoView()
+ .should('be.visible')
+ .within(() => {
+ cy.get('img').should(($image) => {
+ expect($image[0].naturalWidth).to.be.greaterThan(0)
+ })
+ cy.get('button[aria-label="Pause"], button[aria-label="Play"]')
+ .should('have.css', 'width', '44px')
+ cy.get('button[aria-label="Enter full screen"]')
+ .should('have.css', 'height', '44px')
+ cy.get('[data-overlay-kind="source-metadata"]').should(
+ 'not.exist'
+ )
+ })
+ })
+
+ it('remounts exact media and supports keyboard-complete application tabs', () => {
+ cy.visit('/')
+ cy.get('[data-testid="reference-demo-showcase"]')
+ .first()
+ .as('showcase')
+ cy.get('@showcase')
+ .find('video')
+ .should(($video) =>
+ expect($video[0].currentSrc).to.include('openemr-replay.mp4')
+ )
+ cy.get('@showcase').contains('button', 'Guided view').should('be.visible')
+ cy.get('@showcase').contains('button', 'Raw footage').click()
+ cy.get('@showcase')
+ .find('[data-testid="reference-evidence-player"]')
+ .should(
+ 'have.attr',
+ 'data-target-tracking',
+ 'omitted-without-exact-timeline'
+ )
+ cy.get('@showcase').contains('button', 'Guided view').click()
+ cy.get('@showcase').contains('button', 'Recorded demonstration').click()
+ cy.get('@showcase')
+ .find('video')
+ .should(($video) =>
+ expect($video[0].currentSrc).to.include('openemr-source-recording.unbound.mp4')
+ )
+
+ cy.get('@showcase')
+ .find('[role="tab"][aria-selected="true"]')
+ .focus()
+ .type('{rightarrow}')
+ cy.get('@showcase')
+ .should('have.attr', 'data-active-reference', 'lending')
+ .find('[role="tab"][aria-selected="true"]')
+ .should('contain.text', 'Lending')
+ .type('{end}')
+ cy.get('@showcase')
+ .should('have.attr', 'data-active-reference', 'insurance')
+ .find('[role="tabpanel"]')
+ .should('have.attr', 'aria-labelledby')
+ })
+
+})
diff --git a/data/referenceDemos.js b/data/referenceDemos.js
new file mode 100644
index 00000000..a5a33e0f
--- /dev/null
+++ b/data/referenceDemos.js
@@ -0,0 +1,209 @@
+import presentationAssets from './referencePresentationAssets.mjs'
+import {
+ bindExecutionOverlayContext,
+ bindExecutionOverlayTimeline,
+ isSingleSourceExactPresentationMedia,
+} from '../lib/executionOverlayTimeline'
+
+const exactPresentationFor = (applicationId, phase) => {
+ const asset = presentationAssets.assets.find(
+ (candidate) =>
+ candidate.applicationId === applicationId && candidate.phase === phase
+ )
+ return Object.freeze({
+ presentationMedia: asset?.media ?? null,
+ presentationTimeline: asset?.timeline ?? null,
+ presentationBinding: asset?.binding ?? null,
+ presentationContexts: asset?.contexts ?? null,
+ })
+}
+
+/**
+ * One source of truth for the public real-application footage.
+ *
+ * Source media remains unmodified and never receives an inferred overlay. A
+ * phase may add presentationMedia, a canonical ControlOverlayTimelineV2,
+ * and its exact decoded-frame inventory. getExactBoundPresentation refuses the
+ * view unless every public-contract and media binding check passes. Raw source
+ * media remains inspectable and is never modified by presentation chrome.
+ */
+export const REFERENCE_DEMOS = Object.freeze([
+ Object.freeze({
+ id: 'healthcare',
+ industry: 'Healthcare',
+ application: 'OpenEMR',
+ applicationDetail: '8.0.0.3 · pinned local synthetic fixture',
+ route: '/solutions/healthcare',
+ evidenceClass: 'Reference qualification',
+ task: 'Create exactly one complete synthetic patient record from structured demographics.',
+ recording: Object.freeze({
+ kind: 'video',
+ src: '/reference/openemr-patient-registration-standard-synthetic-v1/recording/openemr-source-recording.unbound.mp4',
+ mimeType: 'video/mp4',
+ poster: '/reference/openemr-patient-registration-standard-synthetic-v1/recording/openemr-source-recording.poster.png',
+ width: 1280,
+ height: 800,
+ alt: 'OpenAdapt recording a synthetic patient registration workflow in OpenEMR.',
+ sourceCaption:
+ 'Unbound source recording used to compile the OpenEMR workflow. It carries no overlay or outcome claim.',
+ ...exactPresentationFor('healthcare', 'recording'),
+ }),
+ replay: Object.freeze({
+ kind: 'video',
+ src: '/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.mp4',
+ mimeType: 'video/mp4',
+ poster: '/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.poster.png',
+ width: 1280,
+ height: 800,
+ alt: 'OpenAdapt replaying a qualified synthetic patient registration workflow in OpenEMR.',
+ sourceCaption:
+ 'Exact replay evidence media with presentation chrome omitted.',
+ ...exactPresentationFor('healthcare', 'replay'),
+ }),
+ metrics: Object.freeze([
+ Object.freeze({ label: 'Standard VERIFIED', value: '3/3' }),
+ Object.freeze({ label: 'REST + SQL parity', value: '3/3' }),
+ Object.freeze({ label: 'Model calls', value: '0' }),
+ ]),
+ verification:
+ 'All 3 fresh Standard-profile runs created exactly one synthetic patient and returned VERIFIED only after separately authenticated REST readback agreed with direct SQL and non-target delta audit. Median end-to-end runtime was 59.8 seconds; observed silent incorrect success was 0/3.',
+ evidenceHref: '/artifacts/json?source=%2Freference%2Fopenemr-patient-registration-standard-synthetic-v1%2Fmanifest.json',
+ evidenceLabel: 'Qualification pack',
+ methodologyHref:
+ 'https://github.com/OpenAdaptAI/openadapt-flow/tree/cb8b785cab84e2c42e8072a1bbd1099ce2454e1e/benchmark/openemr_local',
+ methodologyLabel: 'Reference method',
+ }),
+ Object.freeze({
+ id: 'lending',
+ industry: 'Lending',
+ application: 'Frappe Lending',
+ applicationDetail: 'pinned local reference',
+ route: '/solutions/lending',
+ evidenceClass: 'Public application reference',
+ task: 'Create exactly one synthetic Loan Application from structured applicant and loan inputs.',
+ recording: Object.freeze({
+ kind: 'gif',
+ src: '/lending-demo/record-frappe.gif',
+ poster: '/lending-demo/record-frappe.jpg',
+ width: 880,
+ height: 550,
+ alt: 'OpenAdapt recording a synthetic Loan Application workflow in Frappe Lending.',
+ sourceCaption:
+ 'Source-derived evidence sequence from the Frappe Lending reference run; not a literal continuous screen recording.',
+ ...exactPresentationFor('lending', 'recording'),
+ }),
+ replay: Object.freeze({
+ kind: 'gif',
+ src: '/lending-demo/replay-frappe.gif',
+ poster: '/lending-demo/replay-frappe.jpg',
+ width: 880,
+ height: 550,
+ alt: 'OpenAdapt replaying the compiled synthetic Loan Application workflow in Frappe Lending.',
+ sourceCaption:
+ 'Source-derived evidence sequence from the Frappe Lending compiled replay; not literal continuous footage.',
+ ...exactPresentationFor('lending', 'replay'),
+ }),
+ metrics: Object.freeze([
+ Object.freeze({ label: 'Compiled trials', value: '6/6' }),
+ Object.freeze({ label: 'Silent wrong success', value: '0' }),
+ Object.freeze({ label: 'Model calls', value: '0' }),
+ ]),
+ verification:
+ 'A separately authenticated REST readback, direct SQL table delta, and non-target digest audit accepted the saved record.',
+ evidenceHref: '/artifacts/json?source=%2Flending-demo%2Fprovenance.json',
+ evidenceLabel: 'Evidence manifest',
+ methodologyHref:
+ 'https://github.com/OpenAdaptAI/openadapt-flow/tree/84c7a94f2d2ca9e183799394d1952ae32fa6bf92/benchmark/frappe_lending',
+ methodologyLabel: 'Reference source',
+ }),
+ Object.freeze({
+ id: 'insurance',
+ industry: 'Insurance',
+ application: 'openIMIS',
+ applicationDetail: 'pinned local reference',
+ route: '/solutions/insurance',
+ evidenceClass: 'Public application reference',
+ task: 'Enter exactly one synthetic health-facility claim and save it for review.',
+ recording: Object.freeze({
+ kind: 'gif',
+ src: '/insurance-demo/record-openimis.gif',
+ poster: '/insurance-demo/record-openimis.jpg',
+ width: 880,
+ height: 550,
+ alt: 'OpenAdapt recording a synthetic health-facility claim in openIMIS.',
+ sourceCaption:
+ 'Source-derived evidence sequence from the openIMIS reference run; not a literal continuous screen recording.',
+ ...exactPresentationFor('insurance', 'recording'),
+ }),
+ replay: Object.freeze({
+ kind: 'gif',
+ src: '/insurance-demo/replay-openimis.gif',
+ poster: '/insurance-demo/replay-openimis.jpg',
+ width: 880,
+ height: 550,
+ alt: 'OpenAdapt replaying the compiled synthetic claim workflow in openIMIS.',
+ sourceCaption:
+ 'Source-derived evidence sequence from the openIMIS compiled replay; not literal continuous footage.',
+ ...exactPresentationFor('insurance', 'replay'),
+ }),
+ metrics: Object.freeze([
+ Object.freeze({ label: 'Compiled replays', value: '3/3' }),
+ Object.freeze({ label: 'Wrong-record writes', value: '0' }),
+ Object.freeze({ label: 'Model calls', value: '0' }),
+ ]),
+ verification:
+ 'A direct SQL read required exactly one non-voided claim in Entered status for the intended insuree and facility.',
+ evidenceHref: '/artifacts/json?source=%2Finsurance-demo%2Fprovenance.json',
+ evidenceLabel: 'Evidence manifest',
+ methodologyHref:
+ 'https://github.com/OpenAdaptAI/openadapt-flow/tree/3276ad2b537c558211a5a357fd7ac1e19f0a029e/benchmark/openimis_claims',
+ methodologyLabel: 'Reference source',
+ }),
+])
+
+export function getReferenceDemo(id) {
+ return REFERENCE_DEMOS.find((demo) => demo.id === id) ?? REFERENCE_DEMOS[0]
+}
+
+export function hasExactBoundPresentation(media) {
+ return getExactBoundPresentation(media) !== null
+}
+
+export function getExactBoundPresentation(media) {
+ if (
+ !isSingleSourceExactPresentationMedia(media?.presentationMedia) ||
+ // A different fallback encoding has different bytes and decoded-frame
+ // timing. Exact presentation therefore admits one digest-bound source;
+ // raw footage may continue to offer ordinary browser fallbacks.
+ !media.presentationTimeline ||
+ !media.presentationBinding
+ ) {
+ return null
+ }
+ try {
+ const exact = bindExecutionOverlayTimeline(
+ media.presentationTimeline,
+ media.presentationBinding
+ )
+ if (media.presentationMedia.sha256 !== exact.binding.mediaSha256) {
+ return null
+ }
+ const contextsBySequence = Object.create(null)
+ for (const context of media.presentationContexts ?? []) {
+ const event = exact.timeline.events.find(
+ (candidate) =>
+ candidate.frame.event_sequence === context.event_sequence
+ )
+ if (!event) return null
+ contextsBySequence[context.event_sequence] =
+ bindExecutionOverlayContext(event.frame, context)
+ }
+ return Object.freeze({
+ media: media.presentationMedia,
+ ...exact,
+ contextsBySequence: Object.freeze(contextsBySequence),
+ })
+ } catch {
+ return null
+ }
+}
diff --git a/data/referencePresentationAssets.mjs b/data/referencePresentationAssets.mjs
new file mode 100644
index 00000000..a206e46d
--- /dev/null
+++ b/data/referencePresentationAssets.mjs
@@ -0,0 +1,54 @@
+import openemrReplayBinding from '../public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.media-binding.json' with { type: 'json' }
+import openemrReplayContexts from '../public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.contexts.json' with { type: 'json' }
+import openemrReplayTimeline from '../public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.control-overlay.v2.json' with { type: 'json' }
+
+const openemrRoot =
+ '/reference/openemr-patient-registration-standard-synthetic-v1'
+
+/**
+ * Thin browser adapter over the byte-identical, consumer-neutral public pack.
+ * The production verifier checks every adapter field back against the pack's
+ * manifest, inventory, media, timeline, binding, and context documents.
+ */
+const referencePresentationAssets = Object.freeze({
+ schemaVersion: 2,
+ assets: Object.freeze([
+ Object.freeze({
+ applicationId: 'healthcare',
+ phase: 'replay',
+ media: Object.freeze({
+ kind: 'video',
+ src: `${openemrRoot}/replay/openemr-replay.mp4`,
+ mimeType: 'video/mp4',
+ poster: `${openemrRoot}/replay/openemr-replay.poster.png`,
+ sha256: openemrReplayBinding.media_sha256,
+ width: openemrReplayBinding.decoded_width,
+ height: openemrReplayBinding.decoded_height,
+ alt: 'OpenAdapt replaying a qualified synthetic patient registration workflow in OpenEMR.',
+ }),
+ timeline: openemrReplayTimeline,
+ binding: Object.freeze({
+ evidencePackId: openemrReplayTimeline.evidence_pack_id,
+ mediaSha256: openemrReplayBinding.media_sha256,
+ mediaFrameCount: openemrReplayBinding.decoded_frame_count,
+ mediaFramePresentationTimesUs:
+ openemrReplayBinding.presentation_times_us,
+ browserViewportIsExact: true,
+ }),
+ // These facts are copied from the consumer-neutral, event-bound
+ // public context document. The renderer must not infer additional
+ // execution facts from timeline phase names.
+ contexts: Object.freeze(openemrReplayContexts.contexts),
+ pack: Object.freeze({
+ root: openemrRoot,
+ manifest: `${openemrRoot}/manifest.json`,
+ inventory: `${openemrRoot}/inventory.json`,
+ timeline: `${openemrRoot}/replay/openemr-replay.control-overlay.v2.json`,
+ binding: `${openemrRoot}/replay/openemr-replay.media-binding.json`,
+ contexts: `${openemrRoot}/replay/openemr-replay.contexts.json`,
+ }),
+ }),
+ ]),
+})
+
+export default referencePresentationAssets
diff --git a/data/referenceWorkflows.js b/data/referenceWorkflows.js
deleted file mode 100644
index add545ca..00000000
--- a/data/referenceWorkflows.js
+++ /dev/null
@@ -1,204 +0,0 @@
-// Shared honest source of truth for the homepage reference-workflow selector.
-//
-// The homepage was restructured (#223/#224): the interactive "OpenAdapt Cloud"
-// preview moved to /hosted/welcome and the full per-application HowItWorks
-// selector moved to the solution pages, leaving the homepage with a single
-// hard-coded Lending process demo plus a static list of reference links. This
-// module lets ONE lifted selection drive every reference-aware homepage
-// section, so choosing a vertical in the process section or in the reference
-// list updates the other.
-//
-// Evidence and labels mirror the bounded per-application content on the
-// solution pages (components/HowItWorks.js) and the Cloud preview
-// (components/DashboardShowcase.js). Lending and Insurance carry their bounded
-// verified trial counts; Healthcare stays "qualification required" because the
-// OpenEMR footage does not establish an independent effect oracle. Do not
-// promote Healthcare to a verified claim here.
-
-export const VERTICAL_KEYS = ['healthcare', 'lending', 'insurance']
-
-// The homepage leads with the strongest bounded evidence (the verified Frappe
-// Lending reference), matching the pre-sync single-vertical demo.
-export const DEFAULT_VERTICAL = 'lending'
-
-export const HOME_REFERENCES = [
- {
- key: 'healthcare',
- label: 'Healthcare',
- application: 'OpenEMR',
- href: '/solutions/healthcare',
- // Exact label kept in sync with the reference list rendered from
- // pages/index.js (asserted by tests/insuranceReference.test.js).
- linkLabel: 'Healthcare workflow reference',
- eyebrow: 'Real reference workflow',
- heading: 'From demonstration to a qualification-gated OpenEMR write',
- subheading:
- 'Real OpenEMR footage on a pinned local instance. The effect oracle is deployment-specific and not established by this media.',
- record: {
- gif: '/how-it-works/record_openemr.gif',
- width: 880,
- height: 550,
- alt: 'Captured OpenEMR frames showing a synthetic patient workflow demonstration in a live, pinned OpenEMR instance.',
- caption:
- 'Demonstrate — captured OpenEMR frames · synthetic local instance',
- },
- replay: {
- gif: '/how-it-works/run_openemr.gif',
- width: 880,
- height: 550,
- alt: 'OpenAdapt replaying the compiled OpenEMR workflow locally with no per-run model calls.',
- caption:
- 'Replay — compiled OpenEMR run · local and model-free',
- },
- compile: {
- workflow: 'openemr-browser-reference',
- parameters: 'workflow-defined inputs',
- target: 'Bounded OpenEMR browser task',
- effect: 'Deployment-specific oracle required',
- healthy: 'Deterministic · zero model calls',
- },
- verify: {
- qualified: false,
- status: 'Qualification required',
- heading: 'qualification contract',
- checks: [
- ['Recorded media', 'record and compiled-replay footage'],
- ['Effect oracle', 'not established by this media'],
- ['Identity policy', 'must be configured for the workflow'],
- ['Acceptance', 'halt until declared checks pass'],
- ],
- metrics: ['No application-specific audit result claimed'],
- caption:
- 'Qualification contract for the OpenEMR reference. The footage does not establish an independent effect audit or production EMR reliability.',
- },
- disclosure: {
- text:
- 'OpenEMR footage shows a real demonstration and compiled replay on a pinned local instance with synthetic data. This reference has no independent effect oracle yet — a deployment-specific verifier must be configured before any correctness claim.',
- linkHref: '/solutions/healthcare',
- linkLabel: 'View the healthcare reference',
- },
- },
- {
- key: 'lending',
- label: 'Lending',
- application: 'Frappe Lending',
- href: '/solutions/lending',
- linkLabel: 'Lending operations reference',
- eyebrow: 'Real reference workflow',
- heading: 'From demonstration to verified Frappe write',
- subheading:
- 'Synthetic local data, real Frappe Lending interactions, and an oracle outside the replay path.',
- record: {
- gif: '/lending-demo/record-frappe.gif',
- width: 880,
- height: 550,
- alt: 'Captured Frappe Lending frames showing a synthetic loan application demonstration being completed and saved.',
- caption:
- 'Demonstrate — captured Frappe Lending frames · synthetic local fixture',
- },
- replay: {
- gif: '/lending-demo/replay-frappe.gif',
- width: 880,
- height: 550,
- alt: 'OpenAdapt deterministically replaying the compiled synthetic loan application workflow in Frappe Lending.',
- caption:
- 'Replay — real compiled run · local, model-free, independently checked',
- },
- compile: {
- workflow: 'create-loan-application',
- parameters: 'email · phone · product · amount · term',
- target: 'Loan Application form',
- effect: 'exactly one matching record',
- healthy: 'deterministic · zero model calls',
- },
- verify: {
- qualified: true,
- status: 'Verified',
- heading: 'independent effect evidence',
- checks: [
- ['REST readback', 'exact fields matched'],
- ['SQL delta', '+1 Loan Application'],
- ['Collateral audit', 'non-target digest unchanged'],
- ['Execution', '6/6 compiled trials correct'],
- ],
- metrics: [
- '0 silent incorrect successes',
- '0 over-halts',
- '0 model calls',
- ],
- caption:
- 'Verify — three baseline and three cosmetic-drift compiled trials; scoped to the pinned local reference environment.',
- },
- disclosure: {
- text:
- 'Frappe Lending v16.2.0, Frappe v16.27.0, and ERPNext v16.27.0 were pinned in a local fixture with fictional values. The six compiled trials cover one task on one environment under baseline and cosmetic-drift conditions. OpenAdapt is unaffiliated with Frappe Technologies Pvt. Ltd.; Frappe is its registered trademark.',
- linkHref: '/lending-demo/provenance.json',
- linkLabel: 'Inspect evidence manifest',
- },
- },
- {
- key: 'insurance',
- label: 'Insurance',
- application: 'openIMIS',
- href: '/solutions/insurance',
- linkLabel: 'Insurance claims reference',
- eyebrow: 'Real reference workflow',
- heading: 'From demonstration to verified openIMIS claim',
- subheading:
- 'Synthetic claim data, real openIMIS interactions, and a claims-database oracle outside the replay path.',
- record: {
- gif: '/insurance-demo/record-openimis.gif',
- width: 880,
- height: 550,
- alt: 'Captured openIMIS frames showing a synthetic health-facility claim being entered and saved.',
- caption:
- 'Demonstrate — captured openIMIS frames · synthetic local fixture',
- },
- replay: {
- gif: '/insurance-demo/replay-openimis.gif',
- width: 880,
- height: 550,
- alt: 'OpenAdapt deterministically replaying the compiled claims-intake workflow in openIMIS with a fresh claim number.',
- caption:
- 'Replay — real compiled run · local, model-free, independently checked',
- },
- compile: {
- workflow: 'openimis-claim-intake',
- parameters: 'insuree no. · claim no. · explanation',
- target: 'Health Facility Claim form',
- effect: 'exactly one claim row in status Entered',
- healthy: 'deterministic · zero model calls',
- },
- verify: {
- qualified: true,
- status: 'Verified',
- heading: 'independent effect evidence',
- checks: [
- ['SQL claim readback', 'exactly one new claim row'],
- ['Claim status', 'Entered, ready for review'],
- ['Record context', 'insuree and facility matched'],
- ['Execution', 'three compiled replays verified'],
- ],
- metrics: [
- '0 duplicate claims',
- '0 wrong-policyholder writes',
- '0 model calls',
- ],
- caption:
- 'Verify — three compiled replays with fresh claim numbers; scoped to the pinned local reference environment.',
- },
- disclosure: {
- text:
- 'openIMIS was pinned in a local fixture with fictional claim data. The three compiled replays cover one claim-intake task, each checked against the claims database. OpenAdapt is unaffiliated with the openIMIS Initiative.',
- linkHref: '/insurance-demo/provenance.json',
- linkLabel: 'Inspect evidence manifest',
- },
- },
-]
-
-export function getHomeReference(key) {
- return (
- HOME_REFERENCES.find((reference) => reference.key === key) ||
- HOME_REFERENCES.find((reference) => reference.key === DEFAULT_VERTICAL)
- )
-}
diff --git a/generated/controlOverlayContract.js b/generated/controlOverlayContract.js
new file mode 100644
index 00000000..0c83d73f
--- /dev/null
+++ b/generated/controlOverlayContract.js
@@ -0,0 +1,77 @@
+/* eslint-disable */
+/**
+ * GENERATED public projection from openadapt-types 0.5.0 at
+ * 80708f5b8e87c87fc847bcf57d61b54a269087c4. Do not edit by hand.
+ *
+ * Schema SHA-256:
+ * frame-v2 f1fc8b694600c28d331dfb0e8a21ea7ece62aa46f9c5130f8289f237ae9f73b6
+ * timeline-v2 655f8060b7904d4bc02fced631af1f733f77dd30e7c186eda15b575e346f9748
+ */
+
+export const CONTROL_OVERLAY_FRAME_V2_SCHEMA =
+ 'openadapt.control-overlay-frame/v2'
+export const CONTROL_OVERLAY_TIMELINE_V2_SCHEMA =
+ 'openadapt.control-overlay-timeline/v2'
+
+export const CONTROL_OVERLAY_PHASES = Object.freeze([
+ 'idle',
+ 'observing',
+ 'recording',
+ 'executing',
+ 'pausing',
+ 'paused',
+ 'resuming',
+ 'stopping',
+ 'verifying',
+ 'verified',
+ 'completed_unverified',
+ 'halted',
+ 'failed',
+ 'rolled_back',
+])
+export const CONTROL_OVERLAY_MODES = Object.freeze([
+ 'demonstration',
+ 'replay',
+ 'governed',
+ 'managed',
+])
+export const CONTROL_OVERLAY_PROFILES = Object.freeze([
+ 'demo',
+ 'standard',
+ 'regulated',
+])
+export const CONTROL_OVERLAY_WORKFLOW_LABELS = Object.freeze([
+ 'Workflow demonstration',
+ 'Workflow replay',
+ 'Governed workflow',
+ 'Managed workflow',
+])
+export const CONTROL_OVERLAY_STATUS_BY_PHASE = Object.freeze({
+ idle: 'Ready',
+ observing: 'Observing the application',
+ recording: 'Watching your demonstration',
+ executing: 'Executing with verification gates',
+ pausing: 'Pausing at a safe boundary',
+ paused: 'Execution paused',
+ resuming: 'Resuming at a safe boundary',
+ stopping: 'Stopping at a safe boundary',
+ verifying: 'Verifying the intended result',
+ verified: 'Outcome verified',
+ completed_unverified: 'Completed without sufficient verification',
+ halted: 'Halted instead of guessing',
+ failed: 'Execution failed',
+ rolled_back: 'Compensating action completed',
+})
+export const CONTROL_OVERLAY_TARGET_ACTION_KINDS = Object.freeze([
+ 'click',
+ 'double_click',
+ 'right_click',
+ 'drag',
+ 'type',
+ 'select',
+ 'toggle',
+ 'invoke',
+ 'expand_collapse',
+ 'scroll',
+ 'hover',
+])
diff --git a/lib/executionOverlayTimeline.js b/lib/executionOverlayTimeline.js
new file mode 100644
index 00000000..d96eefd2
--- /dev/null
+++ b/lib/executionOverlayTimeline.js
@@ -0,0 +1,834 @@
+import {
+ CONTROL_OVERLAY_FRAME_V2_SCHEMA,
+ CONTROL_OVERLAY_MODES,
+ CONTROL_OVERLAY_PHASES,
+ CONTROL_OVERLAY_PROFILES,
+ CONTROL_OVERLAY_STATUS_BY_PHASE,
+ CONTROL_OVERLAY_TARGET_ACTION_KINDS,
+ CONTROL_OVERLAY_TIMELINE_V2_SCHEMA,
+ CONTROL_OVERLAY_WORKFLOW_LABELS,
+} from '../generated/controlOverlayContract.js'
+import { sha256 } from '@noble/hashes/sha2.js'
+import { bytesToHex, utf8ToBytes } from '@noble/hashes/utils.js'
+
+const PHASES = new Set(CONTROL_OVERLAY_PHASES)
+const MODES = new Set(CONTROL_OVERLAY_MODES)
+const PROFILES = new Set(CONTROL_OVERLAY_PROFILES)
+const LABELS = new Set(CONTROL_OVERLAY_WORKFLOW_LABELS)
+const ACTIONS = new Set(CONTROL_OVERLAY_TARGET_ACTION_KINDS)
+const LABEL_BY_MODE = Object.freeze({
+ demonstration: 'Workflow demonstration',
+ replay: 'Workflow replay',
+ governed: 'Governed workflow',
+ managed: 'Managed workflow',
+})
+const SHA256 = /^[a-f0-9]{64}$/u
+const PACK_ID = /^[a-z0-9][a-z0-9._-]{0,95}$/u
+const SURFACES = new Set(['browser', 'native_desktop', 'remote_application'])
+const RUNTIMES = new Set(['local', 'managed', 'customer_controlled'])
+const EFFECT_STATES = new Set(['pending', 'passed', 'refuted', 'unverifiable'])
+const HALT_CLASSES = new Set(['no_delivery', 'uncertain_delivery', 'refuted_effect'])
+const EXECUTION_STAGES = new Set(['resolve', 'act', 'verify'])
+const EXTERNAL_NETWORK_STATES = new Set(['none', 'observed', 'unknown'])
+const PHASE_LABELS = Object.freeze({
+ idle: 'Ready',
+ observing: 'Observing',
+ recording: 'Recording',
+ executing: 'Executing',
+ pausing: 'Pausing',
+ paused: 'Paused',
+ resuming: 'Resuming',
+ stopping: 'Stopping',
+ verifying: 'Verifying',
+ verified: 'Verified',
+ completed_unverified: 'Unverified',
+ halted: 'Halted',
+ failed: 'Failed',
+ rolled_back: 'Rolled back',
+})
+const SURFACE_LABELS = Object.freeze({
+ browser: 'Browser',
+ native_desktop: 'Native desktop',
+ remote_application: 'Remote application',
+})
+const RUNTIME_LABELS = Object.freeze({
+ local: 'Local runtime',
+ managed: 'Managed runtime',
+ customer_controlled: 'Customer-controlled runtime',
+})
+const EFFECT_LABELS = Object.freeze({
+ pending: 'Effect check pending',
+ passed: 'Effect evidence passed',
+ refuted: 'Effect evidence refuted',
+ unverifiable: 'Effect evidence insufficient',
+})
+const EFFECT_TIER_LABELS = Object.freeze({
+ 1: 'Independent system check (Tier 1)',
+ 2: 'Separate read-only check (Tier 2)',
+ 3: 'Persisted-state reacquisition (Tier 3)',
+ 4: 'Immediate screen confirmation (Tier 4)',
+})
+const TERMINAL_EXPLANATIONS = Object.freeze({
+ paused: 'Execution is paused at a safe boundary. State is revalidated before continuing.',
+ verified: 'The required execution and verification contracts passed.',
+ completed_unverified: 'Execution finished, but the available evidence was not strong enough to verify the outcome.',
+ halted: 'OpenAdapt stopped because the required execution contract could not be proven safely.',
+ failed: 'The runtime encountered an infrastructure or execution failure.',
+ rolled_back: 'The configured compensating action completed.',
+})
+const HALT_EXPLANATIONS = Object.freeze({
+ no_delivery: 'No consequential action was delivered.',
+ uncertain_delivery: 'The action may have been delivered. OpenAdapt did not retry it and requires effect reconciliation.',
+ refuted_effect: 'The effect check did not match the intended result.',
+})
+
+export function isSingleSourceExactPresentationMedia(media) {
+ return Boolean(
+ media?.kind === 'video' &&
+ typeof media.src === 'string' &&
+ /^\/[A-Za-z0-9][A-Za-z0-9._/-]*$/u.test(media.src) &&
+ Number.isSafeInteger(media.width) &&
+ media.width > 0 &&
+ Number.isSafeInteger(media.height) &&
+ media.height > 0 &&
+ typeof media.alt === 'string' &&
+ media.alt.length > 0 &&
+ media.alt.length <= 300 &&
+ (media.poster === undefined ||
+ (typeof media.poster === 'string' &&
+ /^\/[A-Za-z0-9][A-Za-z0-9._/-]*$/u.test(media.poster))) &&
+ typeof media.sha256 === 'string' &&
+ SHA256.test(media.sha256) &&
+ // Exact public presentation assets use one browser-portable MP4.
+ // Raw evidence may retain WebM and fallback encodings, but an exact
+ // overlay must bind one byte-identical source whose decoded sample
+ // inventory is verified during the production build.
+ media.mimeType === 'video/mp4' &&
+ !media.fallbackSrc
+ )
+}
+
+function pythonJsonFloat(value) {
+ if (!Number.isFinite(value)) throw new Error('canonical float must be finite')
+ if (Object.is(value, -0)) return '-0.0'
+ const negative = value < 0
+ const source = Math.abs(value).toString().toLowerCase()
+ if (source === '0') return '0.0'
+
+ let digits
+ let decimalPosition
+ if (source.includes('e')) {
+ const [coefficient, exponentText] = source.split('e')
+ const point = coefficient.indexOf('.')
+ const integerDigits = point === -1 ? coefficient.length : point
+ digits = coefficient.replace('.', '')
+ decimalPosition = integerDigits + Number(exponentText)
+ } else {
+ const point = source.indexOf('.')
+ const integerDigits = point === -1 ? source.length : point
+ const combined = source.replace('.', '')
+ const leadingZeroes = combined.match(/^0*/u)[0].length
+ digits = combined.slice(leadingZeroes) || '0'
+ decimalPosition = integerDigits - leadingZeroes
+ }
+
+ const exponent = decimalPosition - 1
+ let rendered
+ if (exponent >= -4 && exponent < 16) {
+ if (decimalPosition <= 0) {
+ rendered = `0.${'0'.repeat(-decimalPosition)}${digits}`
+ } else if (decimalPosition >= digits.length) {
+ rendered = `${digits}${'0'.repeat(decimalPosition - digits.length)}.0`
+ } else {
+ rendered = `${digits.slice(0, decimalPosition)}.${digits.slice(decimalPosition)}`
+ }
+ } else {
+ const significant = digits.replace(/0+$/u, '') || '0'
+ const coefficient = significant.length === 1
+ ? significant
+ : `${significant[0]}.${significant.slice(1)}`
+ const exponentDigits = Math.abs(exponent).toString().padStart(2, '0')
+ rendered = `${coefficient}e${exponent >= 0 ? '+' : '-'}${exponentDigits}`
+ }
+ return negative ? `-${rendered}` : rendered
+}
+
+export function canonicalControlOverlayTargetJson(target) {
+ const action = target.action_kind === null
+ ? 'null'
+ : JSON.stringify(target.action_kind)
+ return [
+ '{"action_kind":', action,
+ ',"binding":{"frame_index":', String(target.binding.frame_index),
+ ',"kind":', JSON.stringify(target.binding.kind),
+ ',"media_sha256":', JSON.stringify(target.binding.media_sha256), '}',
+ ',"coordinate_space":', JSON.stringify(target.coordinate_space),
+ ',"rect":{"height":', pythonJsonFloat(target.rect.height),
+ ',"width":', pythonJsonFloat(target.rect.width),
+ ',"x":', pythonJsonFloat(target.rect.x),
+ ',"y":', pythonJsonFloat(target.rect.y), '}',
+ ',"source_viewport":{"device_pixel_ratio":',
+ pythonJsonFloat(target.source_viewport.device_pixel_ratio),
+ ',"height_css_px":', String(target.source_viewport.height_css_px),
+ ',"width_css_px":', String(target.source_viewport.width_css_px), '}}',
+ ].join('')
+}
+
+function targetStateDigest(target) {
+ if (target === null) return 'no-target'
+ const canonical = canonicalControlOverlayTargetJson(target)
+ return `target-${bytesToHex(sha256(utf8ToBytes(canonical))).slice(0, 16)}`
+}
+
+function deepFreeze(value) {
+ if (!value || typeof value !== 'object' || Object.isFrozen(value)) return value
+ Object.values(value).forEach(deepFreeze)
+ return Object.freeze(value)
+}
+
+function immutableJsonValue(value) {
+ return deepFreeze(JSON.parse(JSON.stringify(value)))
+}
+
+function record(value, field) {
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
+ throw new Error(`${field} must be an object`)
+ }
+ return value
+}
+
+function exactKeys(value, keys, field) {
+ const allowed = new Set(keys)
+ const unexpected = Object.keys(value).find((key) => !allowed.has(key))
+ if (unexpected) {
+ throw new Error(`${field} contains an unexpected field: ${unexpected}`)
+ }
+}
+
+function integer(value, field, minimum = 0) {
+ if (!Number.isSafeInteger(value) || value < minimum) {
+ throw new Error(`${field} must be an integer >= ${minimum}`)
+ }
+ return value
+}
+
+function number(value, field, { minimum = 0, maximum = Number.MAX_VALUE } = {}) {
+ if (
+ typeof value !== 'number' ||
+ !Number.isFinite(value) ||
+ value < minimum ||
+ value > maximum
+ ) {
+ throw new Error(`${field} is outside its allowed range`)
+ }
+ return value
+}
+
+function parseTarget(value, field) {
+ const target = record(value, field)
+ exactKeys(
+ target,
+ ['coordinate_space', 'rect', 'source_viewport', 'binding', 'action_kind'],
+ field
+ )
+ if (target.coordinate_space !== 'top_level_viewport_normalized') {
+ throw new Error(`${field} has an unsupported coordinate space`)
+ }
+ const rect = record(target.rect, `${field}.rect`)
+ exactKeys(rect, ['x', 'y', 'width', 'height'], `${field}.rect`)
+ const x = number(rect.x, `${field}.rect.x`, { maximum: 1 })
+ const y = number(rect.y, `${field}.rect.y`, { maximum: 1 })
+ const width = number(rect.width, `${field}.rect.width`, {
+ minimum: Number.EPSILON,
+ maximum: 1,
+ })
+ const height = number(rect.height, `${field}.rect.height`, {
+ minimum: Number.EPSILON,
+ maximum: 1,
+ })
+ if (x + width > 1 || y + height > 1) {
+ throw new Error(`${field}.rect is outside the source viewport`)
+ }
+ const viewport = record(target.source_viewport, `${field}.source_viewport`)
+ exactKeys(
+ viewport,
+ ['width_css_px', 'height_css_px', 'device_pixel_ratio'],
+ `${field}.source_viewport`
+ )
+ integer(viewport.width_css_px, `${field}.source_viewport.width_css_px`, 1)
+ integer(viewport.height_css_px, `${field}.source_viewport.height_css_px`, 1)
+ if (viewport.width_css_px > 32768 || viewport.height_css_px > 32768) {
+ throw new Error(`${field}.source_viewport exceeds the schema maximum`)
+ }
+ number(viewport.device_pixel_ratio, `${field}.source_viewport.device_pixel_ratio`, {
+ minimum: Number.EPSILON,
+ maximum: 16,
+ })
+ const binding = record(target.binding, `${field}.binding`)
+ exactKeys(binding, ['kind', 'media_sha256', 'frame_index'], `${field}.binding`)
+ if (
+ binding.kind !== 'media_frame' ||
+ typeof binding.media_sha256 !== 'string' ||
+ !SHA256.test(binding.media_sha256)
+ ) {
+ throw new Error(`${field}.binding is not an exact media frame`)
+ }
+ integer(binding.frame_index, `${field}.binding.frame_index`)
+ if (
+ target.action_kind !== null &&
+ (typeof target.action_kind !== 'string' || !ACTIONS.has(target.action_kind))
+ ) {
+ throw new Error(`${field}.action_kind is invalid`)
+ }
+ return target
+}
+
+function parseFrame(value, field) {
+ const frame = record(value, field)
+ exactKeys(
+ frame,
+ [
+ 'schema_version',
+ 'state_id',
+ 'event_sequence',
+ 'observed_at_unix_ms',
+ 'observed_at_monotonic_ms',
+ 'visible',
+ 'phase',
+ 'workflow_label',
+ 'mode',
+ 'profile',
+ 'step',
+ 'controls',
+ 'status',
+ 'presentation',
+ 'target_tracking',
+ ],
+ field
+ )
+ if (frame.schema_version !== CONTROL_OVERLAY_FRAME_V2_SCHEMA) {
+ throw new Error(`${field} has an unsupported frame schema`)
+ }
+ if (
+ typeof frame.state_id !== 'string' ||
+ frame.state_id.length < 1 ||
+ frame.state_id.length > 280
+ ) {
+ throw new Error(`${field}.state_id is invalid`)
+ }
+ integer(frame.event_sequence, `${field}.event_sequence`)
+ integer(frame.observed_at_unix_ms, `${field}.observed_at_unix_ms`)
+ number(frame.observed_at_monotonic_ms, `${field}.observed_at_monotonic_ms`)
+ if (typeof frame.visible !== 'boolean' || frame.presentation !== true) {
+ throw new Error(`${field} is not presentation-safe`)
+ }
+ if (!PHASES.has(frame.phase)) throw new Error(`${field}.phase is invalid`)
+ if (!MODES.has(frame.mode)) throw new Error(`${field}.mode is invalid`)
+ if (frame.profile !== null && !PROFILES.has(frame.profile)) {
+ throw new Error(`${field}.profile is invalid`)
+ }
+ if (!LABELS.has(frame.workflow_label) || frame.workflow_label !== LABEL_BY_MODE[frame.mode]) {
+ throw new Error(`${field}.workflow_label does not match mode`)
+ }
+ if (frame.status !== CONTROL_OVERLAY_STATUS_BY_PHASE[frame.phase]) {
+ throw new Error(`${field}.status is not canonical`)
+ }
+ const step = record(frame.step, `${field}.step`)
+ exactKeys(step, ['current', 'total'], `${field}.step`)
+ const current = step.current === null ? null : integer(step.current, `${field}.step.current`, 1)
+ const total = step.total === null ? null : integer(step.total, `${field}.step.total`, 1)
+ if ((current === null) !== (total === null) || (current !== null && current > total)) {
+ throw new Error(`${field}.step is inconsistent`)
+ }
+ const controls = record(frame.controls, `${field}.controls`)
+ exactKeys(controls, ['pause', 'resume', 'stop'], `${field}.controls`)
+ if (['pause', 'resume', 'stop'].some((key) => typeof controls[key] !== 'boolean')) {
+ throw new Error(`${field}.controls is invalid`)
+ }
+ const target = frame.target_tracking === null
+ ? null
+ : parseTarget(frame.target_tracking, `${field}.target_tracking`)
+ const baseStateId = [
+ frame.visible ? 'visible' : 'hidden',
+ frame.phase,
+ frame.mode,
+ frame.profile ?? 'no-profile',
+ current ?? 'no-step',
+ total ?? 'no-total',
+ controls.pause ? 'pause' : 'no-pause',
+ controls.resume ? 'resume' : 'no-resume',
+ controls.stop ? 'stop' : 'no-stop',
+ ].join(':')
+ const expectedStateId = `${baseStateId}:${targetStateDigest(target)}`
+ if (frame.state_id !== expectedStateId) {
+ throw new Error(`${field}.state_id does not match the semantic V2 frame state`)
+ }
+ return frame
+}
+
+export function parseExecutionOverlayTimeline(value) {
+ const timeline = record(value, 'execution overlay timeline')
+ exactKeys(
+ timeline,
+ [
+ 'schema_version',
+ 'data_classification',
+ 'evidence_pack_id',
+ 'media_sha256',
+ 'media_frame_count',
+ 'duration_ms',
+ 'events',
+ ],
+ 'execution overlay timeline'
+ )
+ if (timeline.schema_version !== CONTROL_OVERLAY_TIMELINE_V2_SCHEMA) {
+ throw new Error('unsupported execution overlay timeline schema')
+ }
+ if (!['synthetic', 'sanitized_public'].includes(timeline.data_classification)) {
+ throw new Error('execution overlay timeline is not public-safe')
+ }
+ if (
+ typeof timeline.evidence_pack_id !== 'string' ||
+ !PACK_ID.test(timeline.evidence_pack_id)
+ ) {
+ throw new Error('evidence_pack_id is invalid')
+ }
+ if (typeof timeline.media_sha256 !== 'string' || !SHA256.test(timeline.media_sha256)) {
+ throw new Error('media_sha256 is invalid')
+ }
+ const frameCount = integer(timeline.media_frame_count, 'media_frame_count', 1)
+ const duration = integer(timeline.duration_ms, 'duration_ms', 1)
+ if (!Array.isArray(timeline.events) || timeline.events.length === 0) {
+ throw new Error('execution overlay timeline must contain events')
+ }
+ let previousAt = -1
+ let previousFrame = -1
+ let previousSequence = -1
+ let previousMonotonic = -1
+ const events = timeline.events.map((candidate, index) => {
+ const event = record(candidate, `execution overlay event ${index}`)
+ exactKeys(
+ event,
+ ['at_ms', 'media_frame_index', 'frame'],
+ `execution overlay event ${index}`
+ )
+ const at = integer(event.at_ms, `execution overlay event ${index}.at_ms`)
+ const mediaFrameIndex = integer(
+ event.media_frame_index,
+ `execution overlay event ${index}.media_frame_index`
+ )
+ if (at <= previousAt || at > duration) {
+ throw new Error(`execution overlay event ${index} has invalid media timing`)
+ }
+ if (mediaFrameIndex <= previousFrame || mediaFrameIndex >= frameCount) {
+ throw new Error(`execution overlay event ${index} has invalid frame binding`)
+ }
+ const frame = parseFrame(event.frame, `execution overlay event ${index}.frame`)
+ if (
+ frame.event_sequence <= previousSequence ||
+ frame.observed_at_monotonic_ms < previousMonotonic
+ ) {
+ throw new Error(`execution overlay event ${index} is out of source order`)
+ }
+ const target = frame.target_tracking
+ if (
+ target !== null &&
+ (target.binding.media_sha256 !== timeline.media_sha256 ||
+ target.binding.frame_index !== mediaFrameIndex)
+ ) {
+ throw new Error(
+ `execution overlay event ${index} target is not bound to its exact media frame`
+ )
+ }
+ previousAt = at
+ previousFrame = mediaFrameIndex
+ previousSequence = frame.event_sequence
+ previousMonotonic = frame.observed_at_monotonic_ms
+ return candidate
+ })
+ if (events[0].at_ms !== 0 || events[0].media_frame_index !== 0) {
+ throw new Error('execution overlay timeline must begin at media frame zero')
+ }
+ return { ...timeline, events }
+}
+
+export function bindExecutionOverlayTimeline(timelineValue, bindingValue) {
+ const timeline = parseExecutionOverlayTimeline(timelineValue)
+ const binding = record(bindingValue, 'execution overlay media binding')
+ exactKeys(
+ binding,
+ [
+ 'evidencePackId',
+ 'mediaSha256',
+ 'mediaFrameCount',
+ 'mediaFramePresentationTimesUs',
+ 'browserViewportIsExact',
+ ],
+ 'execution overlay media binding'
+ )
+ if (timeline.evidence_pack_id !== binding.evidencePackId) {
+ throw new Error('execution overlay timeline belongs to a different evidence pack')
+ }
+ if (timeline.media_sha256 !== binding.mediaSha256) {
+ throw new Error('execution overlay timeline does not match the exact media digest')
+ }
+ if (timeline.media_frame_count !== binding.mediaFrameCount) {
+ throw new Error('execution overlay timeline does not match decoded frame count')
+ }
+ if (binding.browserViewportIsExact !== true) {
+ throw new Error('presentation media is not an exact browser viewport')
+ }
+ const pts = binding.mediaFramePresentationTimesUs
+ if (
+ !Array.isArray(pts) ||
+ pts.length !== timeline.media_frame_count ||
+ pts.some(
+ (value, index) =>
+ !Number.isSafeInteger(value) ||
+ value < 0 ||
+ (index > 0 && value <= pts[index - 1])
+ )
+ ) {
+ throw new Error('decoded frame presentation timestamps are invalid')
+ }
+ timeline.events.forEach((event, index) => {
+ const inventoriedAtMs = Math.round(pts[event.media_frame_index] / 1000)
+ if (event.at_ms !== inventoriedAtMs) {
+ throw new Error(
+ `execution overlay event ${index} does not match its inventoried decoded-frame PTS`
+ )
+ }
+ })
+ return Object.freeze({
+ timeline: immutableJsonValue(timeline),
+ binding: immutableJsonValue(binding),
+ })
+}
+
+export function executionOverlayFrameAt(timeline, currentTimeMs) {
+ const bounded = Math.max(0, Math.min(currentTimeMs, timeline.duration_ms))
+ let low = 0
+ let high = timeline.events.length - 1
+ while (low < high) {
+ const midpoint = Math.ceil((low + high) / 2)
+ if (timeline.events[midpoint].at_ms <= bounded) low = midpoint
+ else high = midpoint - 1
+ }
+ return timeline.events[low].frame
+}
+
+export function decodedMediaFrameIndex(mediaTimeSeconds, binding) {
+ const pts = binding.mediaFramePresentationTimesUs
+ if (!Number.isFinite(mediaTimeSeconds)) return null
+ const targetUs = Math.round(mediaTimeSeconds * 1_000_000)
+ let low = 0
+ let high = pts.length - 1
+ while (low <= high) {
+ const midpoint = Math.floor((low + high) / 2)
+ if (pts[midpoint] === targetUs) return midpoint
+ if (pts[midpoint] < targetUs) low = midpoint + 1
+ else high = midpoint - 1
+ }
+ return null
+}
+
+export function exactTargetForDecodedFrame(timeline, binding, frameIndex) {
+ if (frameIndex === null || binding.browserViewportIsExact !== true) return null
+ const event = timeline.events.find(
+ (candidate) => candidate.media_frame_index === frameIndex
+ )
+ const target = event?.frame.target_tracking ?? null
+ if (
+ target?.binding.kind !== 'media_frame' ||
+ target.binding.frame_index !== frameIndex ||
+ target.binding.media_sha256 !== binding.mediaSha256
+ ) {
+ return null
+ }
+ return target
+}
+
+export function mapTargetToContainedVideo(target, metrics) {
+ const { elementWidth, elementHeight, videoWidth, videoHeight } = metrics
+ if (
+ ![elementWidth, elementHeight, videoWidth, videoHeight].every(
+ (value) => Number.isFinite(value) && value > 0
+ )
+ ) {
+ return null
+ }
+ const sourceAspect =
+ target.source_viewport.width_css_px /
+ target.source_viewport.height_css_px
+ const videoAspect = videoWidth / videoHeight
+ if (Math.abs(sourceAspect - videoAspect) > 1e-6) return null
+ const scale = Math.min(elementWidth / videoWidth, elementHeight / videoHeight)
+ const contentWidth = videoWidth * scale
+ const contentHeight = videoHeight * scale
+ const contentLeft = (elementWidth - contentWidth) / 2
+ const contentTop = (elementHeight - contentHeight) / 2
+ return {
+ left: contentLeft + target.rect.x * contentWidth,
+ top: contentTop + target.rect.y * contentHeight,
+ width: target.rect.width * contentWidth,
+ height: target.rect.height * contentHeight,
+ }
+}
+
+export function chooseOverlayPlacement({
+ stageWidth,
+ stageHeight,
+ capsuleWidth,
+ capsuleHeight,
+ avoidRegions = [],
+ currentPlacement = null,
+ inset = 10,
+ clearance = 8,
+}) {
+ if (
+ ![stageWidth, stageHeight, capsuleWidth, capsuleHeight].every(
+ (value) => Number.isFinite(value) && value > 0
+ ) ||
+ capsuleWidth + inset * 2 > stageWidth ||
+ capsuleHeight + inset * 2 > stageHeight
+ ) {
+ return 'hidden'
+ }
+ const top = stageHeight - inset - capsuleHeight
+ const candidates = {
+ 'bottom-left': {
+ left: inset,
+ top,
+ width: capsuleWidth,
+ height: capsuleHeight,
+ },
+ 'bottom-right': {
+ left: stageWidth - inset - capsuleWidth,
+ top,
+ width: capsuleWidth,
+ height: capsuleHeight,
+ },
+ }
+ const intersects = (left, right) =>
+ !(
+ left.left + left.width + clearance <= right.left ||
+ right.left + right.width + clearance <= left.left ||
+ left.top + left.height + clearance <= right.top ||
+ right.top + right.height + clearance <= left.top
+ )
+ const order = [
+ ...(['bottom-left', 'bottom-right'].includes(currentPlacement)
+ ? [currentPlacement]
+ : []),
+ 'bottom-left',
+ 'bottom-right',
+ ]
+ for (const placement of [...new Set(order)]) {
+ if (!avoidRegions.some((region) => intersects(candidates[placement], region))) {
+ return placement
+ }
+ }
+ return 'hidden'
+}
+
+export function executionRailForBoundContext(frame, context) {
+ const canonicalPhaseStates = {
+ observing: ['active', 'pending', 'pending'],
+ executing: ['complete', 'active', 'pending'],
+ verifying: ['complete', 'complete', 'active'],
+ verified: ['complete', 'complete', 'complete'],
+ completed_unverified: ['complete', 'complete', 'halted'],
+ }
+ const canonical = canonicalPhaseStates[frame.phase]
+ if (canonical) {
+ return ['Resolve', 'Act', 'Verify'].map((label, index) => ({
+ label,
+ state: canonical[index],
+ }))
+ }
+
+ const bound =
+ context?.state_id === frame.state_id &&
+ context?.event_sequence === frame.event_sequence
+ ? context
+ : null
+ if (!bound || !['resolve', 'act', 'verify'].includes(bound.execution_stage)) {
+ return []
+ }
+
+ const stages = ['resolve', 'act', 'verify']
+ const active = stages.indexOf(bound.execution_stage)
+ return stages.map((stage, index) => ({
+ label: stage[0].toUpperCase() + stage.slice(1),
+ state:
+ index < active
+ ? 'complete'
+ : index > active
+ ? 'pending'
+ : ['halted', 'failed'].includes(frame.phase)
+ ? 'halted'
+ : frame.phase === 'verified'
+ ? 'complete'
+ : 'active',
+ }))
+}
+
+export function bindExecutionOverlayContext(frame, value) {
+ const context = record(value, 'execution overlay presentation context')
+ exactKeys(
+ context,
+ [
+ 'state_id',
+ 'event_sequence',
+ 'surface',
+ 'runtime',
+ 'elapsed_ms',
+ 'minimum_effect_tier',
+ 'effect_evidence',
+ 'halt_delivery_class',
+ 'execution_stage',
+ 'model_calls',
+ 'external_network_calls',
+ 'evidence_href',
+ ],
+ 'execution overlay presentation context'
+ )
+ if (
+ context.state_id !== frame.state_id ||
+ context.event_sequence !== frame.event_sequence
+ ) {
+ throw new Error('execution overlay presentation context is not bound to the exact frame')
+ }
+ if (context.surface !== undefined && !SURFACES.has(context.surface)) {
+ throw new Error('execution overlay presentation context has an invalid surface')
+ }
+ if (context.runtime !== undefined && !RUNTIMES.has(context.runtime)) {
+ throw new Error('execution overlay presentation context has an invalid runtime')
+ }
+ if (
+ context.elapsed_ms !== undefined &&
+ (!Number.isFinite(context.elapsed_ms) || context.elapsed_ms < 0)
+ ) {
+ throw new Error('execution overlay presentation context has invalid elapsed time')
+ }
+ if (
+ context.minimum_effect_tier !== undefined &&
+ ![1, 2, 3, 4].includes(context.minimum_effect_tier)
+ ) {
+ throw new Error('execution overlay presentation context has an invalid effect tier')
+ }
+ if (
+ context.effect_evidence !== undefined &&
+ !EFFECT_STATES.has(context.effect_evidence)
+ ) {
+ throw new Error('execution overlay presentation context has invalid effect evidence')
+ }
+ if (
+ context.halt_delivery_class !== undefined &&
+ !HALT_CLASSES.has(context.halt_delivery_class)
+ ) {
+ throw new Error('execution overlay presentation context has an invalid delivery class')
+ }
+ if (
+ context.execution_stage !== undefined &&
+ !EXECUTION_STAGES.has(context.execution_stage)
+ ) {
+ throw new Error('execution overlay presentation context has an invalid stage')
+ }
+ if (
+ context.model_calls !== undefined &&
+ (!Number.isSafeInteger(context.model_calls) || context.model_calls < 0)
+ ) {
+ throw new Error('execution overlay presentation context has invalid model calls')
+ }
+ if (
+ context.external_network_calls !== undefined &&
+ !EXTERNAL_NETWORK_STATES.has(context.external_network_calls)
+ ) {
+ throw new Error('execution overlay presentation context has invalid network state')
+ }
+ if (
+ context.evidence_href !== undefined &&
+ (!context.evidence_href.startsWith('/') || context.evidence_href.startsWith('//'))
+ ) {
+ throw new Error('execution overlay presentation context has an unsafe evidence link')
+ }
+ return Object.freeze({ ...context })
+}
+
+function fallbackRuntime(frame) {
+ if (frame.mode === 'managed') return 'Managed runtime'
+ if (frame.mode === 'demonstration') return 'Recorder'
+ if (frame.mode === 'replay') return 'Replay runtime'
+ return 'Governed runtime'
+}
+
+function formatElapsed(elapsedMs) {
+ const totalSeconds = Math.max(0, Math.floor(elapsedMs / 1000))
+ const minutes = Math.floor(totalSeconds / 60)
+ return `${minutes}:${String(totalSeconds % 60).padStart(2, '0')}`
+}
+
+export function executionOverlayPresentation(frame, context, mediaElapsedMs) {
+ const bound =
+ context?.state_id === frame.state_id &&
+ context?.event_sequence === frame.event_sequence
+ ? context
+ : null
+ const current = frame.step.current
+ const total = frame.step.total
+ const expanded = [
+ 'paused',
+ 'verified',
+ 'completed_unverified',
+ 'halted',
+ 'failed',
+ 'rolled_back',
+ ].includes(frame.phase)
+ const secondaryLabels = [
+ bound?.surface ? SURFACE_LABELS[bound.surface] : null,
+ bound?.runtime ? RUNTIME_LABELS[bound.runtime] : fallbackRuntime(frame),
+ frame.profile
+ ? `${frame.profile[0].toUpperCase()}${frame.profile.slice(1)} profile`
+ : null,
+ Number.isFinite(mediaElapsedMs) && mediaElapsedMs >= 0
+ ? formatElapsed(mediaElapsedMs)
+ : bound?.elapsed_ms !== undefined
+ ? formatElapsed(bound.elapsed_ms)
+ : null,
+ bound?.minimum_effect_tier
+ ? EFFECT_TIER_LABELS[bound.minimum_effect_tier]
+ : null,
+ bound?.effect_evidence ? EFFECT_LABELS[bound.effect_evidence] : null,
+ bound?.model_calls !== undefined
+ ? `${bound.model_calls} model ${bound.model_calls === 1 ? 'call' : 'calls'}`
+ : null,
+ bound?.external_network_calls === 'none'
+ ? 'No external network calls'
+ : bound?.external_network_calls === 'observed'
+ ? 'External network activity observed'
+ : bound?.external_network_calls === 'unknown'
+ ? 'External network activity unknown'
+ : null,
+ ].filter(Boolean)
+ return Object.freeze({
+ phaseLabel: PHASE_LABELS[frame.phase],
+ safetyLabel: frame.status,
+ progressLabel:
+ current !== null && total !== null
+ ? `Step ${current} of ${total}`
+ : 'Progress pending',
+ progressValue: current,
+ progressMax: total,
+ secondaryLabels: Object.freeze(secondaryLabels),
+ rail: Object.freeze(executionRailForBoundContext(frame, bound)),
+ expanded,
+ explanation:
+ expanded && frame.phase === 'halted' && bound?.halt_delivery_class
+ ? HALT_EXPLANATIONS[bound.halt_delivery_class]
+ : expanded
+ ? TERMINAL_EXPLANATIONS[frame.phase] ?? null
+ : null,
+ evidenceHref: expanded ? bound?.evidence_href ?? null : null,
+ })
+}
diff --git a/lib/publicJsonArtifacts.mjs b/lib/publicJsonArtifacts.mjs
index 547a43bf..bdfccb87 100644
--- a/lib/publicJsonArtifacts.mjs
+++ b/lib/publicJsonArtifacts.mjs
@@ -60,6 +60,51 @@ export const PUBLIC_JSON_ARTIFACTS = Object.freeze({
'Source and content-hash provenance for the public workflow footage.',
sha256: '7e650141f3772d979cb58b83d162df7b7d1f4e530d93c2b64de53c48f5845029',
}),
+ '/reference/openemr-patient-registration-standard-synthetic-v1/manifest.json': Object.freeze({
+ source: '/reference/openemr-patient-registration-standard-synthetic-v1/manifest.json',
+ fileName: 'manifest.json',
+ format: 'json',
+ title: 'OpenEMR Standard qualification pack',
+ description:
+ 'Application boundary, fresh-trial outcomes, independent REST and SQL verification, media provenance, and exact runtime source for the OpenEMR reference qualification.',
+ sha256: 'fe6a3e778f169cbacd169a71161626f06ffa2a90f9a7cae2421f4061ec30a646',
+ }),
+ '/reference/openemr-patient-registration-standard-synthetic-v1/inventory.json': Object.freeze({
+ source: '/reference/openemr-patient-registration-standard-synthetic-v1/inventory.json',
+ fileName: 'inventory.json',
+ format: 'json',
+ title: 'OpenEMR qualification pack inventory',
+ description:
+ 'Content hashes and byte counts for every retained file in the OpenEMR public qualification pack.',
+ sha256: '4a3e4cdcec7dd775877663174af31ae5e905551b8b023feeefdf0c1ff3033a52',
+ }),
+ '/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.control-overlay.v2.json': Object.freeze({
+ source: '/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.control-overlay.v2.json',
+ fileName: 'openemr-replay.control-overlay.v2.json',
+ format: 'json',
+ title: 'OpenEMR exact runtime timeline',
+ description:
+ 'Presentation-safe runtime states and exact media-frame target bindings retained during the qualified OpenEMR replay.',
+ sha256: '57a71f6652786dddb77b03d985be78323e4922a77fa14eded7b16d475dce17dc',
+ }),
+ '/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.media-binding.json': Object.freeze({
+ source: '/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.media-binding.json',
+ fileName: 'openemr-replay.media-binding.json',
+ format: 'json',
+ title: 'OpenEMR decoded-frame binding',
+ description:
+ 'Media digest, dimensions, frame count, and complete decoded presentation-time inventory for the qualified replay.',
+ sha256: '15d476ad1616b8ba15a213742ea841ef36babbdec12b565b83b54a92db949273',
+ }),
+ '/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.contexts.json': Object.freeze({
+ source: '/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.contexts.json',
+ fileName: 'openemr-replay.contexts.json',
+ format: 'json',
+ title: 'OpenEMR presentation contexts',
+ description:
+ 'Consumer-neutral, exact-event runtime, surface, verification-tier, model, network, and terminal effect facts for the qualified OpenEMR replay.',
+ sha256: '98c884953c4858e5451c0f686612657a1b4a9dc0941f335b6cd18b010329c39a',
+ }),
'/product-preview/MANIFEST.json': Object.freeze({
source: '/product-preview/MANIFEST.json',
fileName: 'MANIFEST.json',
diff --git a/package-lock.json b/package-lock.json
index fbfceb5a..ed80998f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
"@fortawesome/free-regular-svg-icons": "^6.4.0",
"@fortawesome/free-solid-svg-icons": "^6.4.0",
"@fortawesome/react-fontawesome": "^0.2.0",
+ "@noble/hashes": "2.2.0",
"@tailwindcss/line-clamp": "^0.4.4",
"chart.js": "^4.4.3",
"chartjs-adapter-date-fns": "^3.0.0",
@@ -38,6 +39,7 @@
"cypress": "^15.18.1",
"eslint": "^9.39.5",
"eslint-config-next": "^15.5.16",
+ "mp4box": "2.4.1",
"postcss": "^8.5.10",
"tailwindcss": "^3.4.1"
}
@@ -1112,6 +1114,18 @@
"node": ">= 10"
}
},
+ "node_modules/@noble/hashes": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz",
+ "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 20.19.0"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -5800,6 +5814,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/mp4box": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/mp4box/-/mp4box-2.4.1.tgz",
+ "integrity": "sha512-0HGX7nXoDIX6FKLVl4a3wtYjBlwqsN3xuQC3GXzNtKp98FXUOhDSq623azsz8DG5ptd9ZXcXodDkgbdMZOjWvw==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=20.8.1"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -8895,6 +8919,11 @@
"integrity": "sha512-T/L7CXpR1M0wij/xbF3rT1+7KvSkfOLr7C+ToHHWZTG2eKmb52C5WvsyGCBNtkVvDEUESWkRUbbqSH4rSbOCYQ==",
"optional": true
},
+ "@noble/hashes": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.2.0.tgz",
+ "integrity": "sha512-IYqDGiTXab6FniAgnSdZwgWbomxpy9FtYvLKs7wCUs2a8RkITG+DFGO1DM9cr+E3/RgADRpFjrKVaJ1z6sjtEg=="
+ },
"@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -11998,6 +12027,12 @@
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true
},
+ "mp4box": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/mp4box/-/mp4box-2.4.1.tgz",
+ "integrity": "sha512-0HGX7nXoDIX6FKLVl4a3wtYjBlwqsN3xuQC3GXzNtKp98FXUOhDSq623azsz8DG5ptd9ZXcXodDkgbdMZOjWvw==",
+ "dev": true
+ },
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
diff --git a/package.json b/package.json
index e27dd06d..fcebed5c 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,8 @@
"scripts": {
"dev": "next dev",
"fetch:paper": "node scripts/fetch-paper-pdf.js",
- "prebuild": "npm run fetch:paper && npm test",
+ "verify:presentations": "node scripts/verify-reference-presentations.mjs",
+ "prebuild": "npm run fetch:paper && npm test && npm run verify:presentations",
"build": "next build",
"start": "next start -H 127.0.0.1 -p 3000",
"test": "node --test tests/*.test.js",
@@ -23,6 +24,7 @@
"@fortawesome/free-regular-svg-icons": "^6.4.0",
"@fortawesome/free-solid-svg-icons": "^6.4.0",
"@fortawesome/react-fontawesome": "^0.2.0",
+ "@noble/hashes": "2.2.0",
"@tailwindcss/line-clamp": "^0.4.4",
"chart.js": "^4.4.3",
"chartjs-adapter-date-fns": "^3.0.0",
@@ -48,6 +50,7 @@
"cypress": "^15.18.1",
"eslint": "^9.39.5",
"eslint-config-next": "^15.5.16",
+ "mp4box": "2.4.1",
"postcss": "^8.5.10",
"tailwindcss": "^3.4.1"
},
diff --git a/pages/how-it-works.js b/pages/how-it-works.js
index 443eec3b..78919783 100644
--- a/pages/how-it-works.js
+++ b/pages/how-it-works.js
@@ -5,6 +5,7 @@ import CompiledProgramSection from '@components/CompiledProgramSection'
import DriftOutcomes from '@components/DriftOutcomes'
import Footer from '@components/Footer'
import HowItWorksCondensed from '@components/HowItWorksCondensed'
+import ReferenceDemoShowcase from '@components/ReferenceDemoShowcase'
import Reveal from '@components/Reveal'
// Concepts / method page. The homepage keeps one clear narrative arc, so the
@@ -83,7 +84,7 @@ export default function HowItWorksPage() {
- Evaluate a workflow
+ Qualify one workflow
Read the technical paper
@@ -102,26 +103,13 @@ export default function HowItWorksPage() {
-
-
-
See it running
-
- Watch the same loop on a real reference workflow
-
-
- Each reference is a bounded, synthetic fixture with its
- own honest evidence and caveats.
-
-
-
- See reference workflows
-
-
- Compare with RPA and agents
-
-
-
-
+
+
+
diff --git a/pages/solutions/healthcare.js b/pages/solutions/healthcare.js
index d31aad2b..d728457e 100644
--- a/pages/solutions/healthcare.js
+++ b/pages/solutions/healthcare.js
@@ -3,7 +3,7 @@ import Link from 'next/link'
import CustomerCaseStudy from '@components/CustomerCaseStudy'
import Footer from '@components/Footer'
-import HowItWorks from '@components/HowItWorks'
+import ReferenceDemoShowcase from '@components/ReferenceDemoShowcase'
export default function HealthcarePage() {
return (
@@ -71,7 +71,11 @@ export default function HealthcarePage() {
-
+
diff --git a/pages/solutions/insurance.js b/pages/solutions/insurance.js
index a3765e87..6f252c2d 100644
--- a/pages/solutions/insurance.js
+++ b/pages/solutions/insurance.js
@@ -2,7 +2,7 @@ import Head from 'next/head'
import Link from 'next/link'
import Footer from '@components/Footer'
-import InsuranceWorkflowDemo from '@components/InsuranceWorkflowDemo'
+import ReferenceDemoShowcase from '@components/ReferenceDemoShowcase'
export default function InsurancePage() {
return (
@@ -46,7 +46,7 @@ export default function InsurancePage() {
href="/qualify"
className="btn-ink"
>
- Evaluate a workflow
+ Qualify one workflow
-
+
@@ -108,7 +112,7 @@ export default function InsurancePage() {
href="/qualify"
className="btn-ink mt-5 inline-block"
>
- Evaluate a workflow
+ Qualify one workflow
diff --git a/pages/solutions/lending.js b/pages/solutions/lending.js
index d2f9482f..dae8d2fb 100644
--- a/pages/solutions/lending.js
+++ b/pages/solutions/lending.js
@@ -2,7 +2,7 @@ import Head from 'next/head'
import Link from 'next/link'
import Footer from '@components/Footer'
-import LendingWorkflowDemo from '@components/LendingWorkflowDemo'
+import ReferenceDemoShowcase from '@components/ReferenceDemoShowcase'
export default function LendingPage() {
return (
@@ -39,7 +39,7 @@ export default function LendingPage() {
href="/qualify"
className="btn-ink"
>
- Evaluate a workflow
+ Qualify one workflow
-
+
@@ -102,7 +106,7 @@ export default function LendingPage() {
href="/qualify"
className="btn-ink mt-5 inline-block"
>
- Evaluate a workflow
+ Qualify one workflow
diff --git a/public/reference/openemr-patient-registration-standard-synthetic-v1/inventory.json b/public/reference/openemr-patient-registration-standard-synthetic-v1/inventory.json
new file mode 100644
index 00000000..7c416903
--- /dev/null
+++ b/public/reference/openemr-patient-registration-standard-synthetic-v1/inventory.json
@@ -0,0 +1,55 @@
+{
+ "files": [
+ {
+ "bytes": 9099,
+ "path": "manifest.json",
+ "sha256": "fe6a3e778f169cbacd169a71161626f06ffa2a90f9a7cae2421f4061ec30a646"
+ },
+ {
+ "bytes": 369488,
+ "height": 800,
+ "path": "recording/openemr-source-recording.poster.png",
+ "sha256": "5d1f793fcbff2415a83ec894fecb45f6e129402731344b79216b2bba43b88b10",
+ "width": 1280
+ },
+ {
+ "bytes": 2206939,
+ "codec": "h264",
+ "height": 800,
+ "path": "recording/openemr-source-recording.unbound.mp4",
+ "sha256": "9a730129bf6146e969bcc4de0298578bc7744149f4f064c14f24aebce731c9ec",
+ "width": 1280
+ },
+ {
+ "bytes": 29730,
+ "path": "replay/openemr-replay.contexts.json",
+ "sha256": "98c884953c4858e5451c0f686612657a1b4a9dc0941f335b6cd18b010329c39a"
+ },
+ {
+ "bytes": 93571,
+ "path": "replay/openemr-replay.control-overlay.v2.json",
+ "sha256": "57a71f6652786dddb77b03d985be78323e4922a77fa14eded7b16d475dce17dc"
+ },
+ {
+ "bytes": 2012,
+ "path": "replay/openemr-replay.media-binding.json",
+ "sha256": "15d476ad1616b8ba15a213742ea841ef36babbdec12b565b83b54a92db949273"
+ },
+ {
+ "bytes": 278805,
+ "codec": "h264",
+ "height": 800,
+ "path": "replay/openemr-replay.mp4",
+ "sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5",
+ "width": 1280
+ },
+ {
+ "bytes": 149927,
+ "height": 800,
+ "path": "replay/openemr-replay.poster.png",
+ "sha256": "56043b3d7c7a169a1369b4ed192f1326eeb25cb761683dd8410234923d12363b",
+ "width": 1280
+ }
+ ],
+ "schema_version": "openadapt.public-pack-inventory/v1"
+}
diff --git a/public/reference/openemr-patient-registration-standard-synthetic-v1/manifest.json b/public/reference/openemr-patient-registration-standard-synthetic-v1/manifest.json
new file mode 100644
index 00000000..a2f23dc7
--- /dev/null
+++ b/public/reference/openemr-patient-registration-standard-synthetic-v1/manifest.json
@@ -0,0 +1,327 @@
+{
+ "application": {
+ "container_image": "openemr/openemr:8.0.0.3",
+ "container_image_digest": "sha256:0aa4d3d52b22fa69986c087e7c99e9854d8dfd70440634eb7c8af0e08f19f3ab",
+ "environment": "local synthetic reference fixture",
+ "name": "OpenEMR",
+ "surface": "browser",
+ "version": "8.0.0.3"
+ },
+ "data_classification": "synthetic",
+ "methodology_links": [
+ "https://github.com/OpenAdaptAI/openadapt-flow/tree/main/benchmark/openemr_local",
+ "https://docs.openadapt.ai/concepts/effect-verification/",
+ "https://docs.openadapt.ai/concepts/execution-profiles/"
+ ],
+ "metrics": {
+ "fresh_trials": 3,
+ "halted_trials": 0,
+ "independent_rest_sql_parity_trials": 3,
+ "model_calls": 0,
+ "observed_silent_incorrect_success": 0,
+ "verified_trials": 3
+ },
+ "pack_id": "openemr-patient-registration-standard-synthetic-v1",
+ "phase": "qualified_compiled_replay",
+ "provenance": {
+ "execution_boundary": "local browser plus independent REST and direct SQL readback",
+ "fixture": "pinned OpenEMR container with synthetic data only",
+ "presentation_note": "Overlay is a post-composed presentation derivative from exact runtime-retained observations; execution evidence media remains unmodified.",
+ "runtime_repository": "https://github.com/OpenAdaptAI/openadapt-flow",
+ "runtime_source_commit": "cb8b785cab84e2c42e8072a1bbd1099ce2454e1e"
+ },
+ "recording": {
+ "bundle_source_recording_sha256": "c6a91a83d9560020bc253278d702c43de3eaf9ddf4ad5b60eb49b17df81fa474",
+ "media": {
+ "bytes": 2206939,
+ "codec": "h264",
+ "height": 800,
+ "path": "recording/openemr-source-recording.unbound.mp4",
+ "sha256": "9a730129bf6146e969bcc4de0298578bc7744149f4f064c14f24aebce731c9ec",
+ "width": 1280
+ },
+ "outcome_claim": null,
+ "overlay_timeline": null,
+ "poster": {
+ "bytes": 369488,
+ "height": 800,
+ "path": "recording/openemr-source-recording.poster.png",
+ "sha256": "5d1f793fcbff2415a83ec894fecb45f6e129402731344b79216b2bba43b88b10",
+ "width": 1280
+ },
+ "poster_transform": {
+ "argv": [
+ "ffmpeg",
+ "-nostdin",
+ "-loglevel",
+ "error",
+ "-y",
+ "-ss",
+ "5.000",
+ "-i",
+ "
",
+ "-frames:v",
+ "1",
+ ""
+ ],
+ "selection": "first decoded frame at or after 5.000 seconds",
+ "tool": "ffmpeg version 8.1.2 Copyright (c) 2000-2026 the FFmpeg developers"
+ },
+ "raw_source": {
+ "bytes": 3221791,
+ "codec_name": "vp8",
+ "height": 800,
+ "sha256": "462a7aa9bd74180fc58066744c9f87dbd4b76afe292a5d9c0075403a87412c38",
+ "width": 1280
+ },
+ "relationship": "unbound source recording for the same compiled workflow",
+ "transform": {
+ "argv": [
+ "ffmpeg",
+ "-nostdin",
+ "-loglevel",
+ "error",
+ "-y",
+ "-i",
+ "",
+ "-map",
+ "0:v:0",
+ "-an",
+ "-c:v",
+ "libx264",
+ "-preset",
+ "slow",
+ "-crf",
+ "18",
+ "-pix_fmt",
+ "yuv420p",
+ "-movflags",
+ "+faststart",
+ ""
+ ],
+ "tool": "ffmpeg version 8.1.2 Copyright (c) 2000-2026 the FFmpeg developers"
+ }
+ },
+ "replay": {
+ "binding": {
+ "bytes": 2012,
+ "path": "replay/openemr-replay.media-binding.json",
+ "sha256": "15d476ad1616b8ba15a213742ea841ef36babbdec12b565b83b54a92db949273"
+ },
+ "contexts": {
+ "bytes": 29730,
+ "path": "replay/openemr-replay.contexts.json",
+ "sha256": "98c884953c4858e5451c0f686612657a1b4a9dc0941f335b6cd18b010329c39a"
+ },
+ "declared_format_duration_us": 65442000,
+ "declared_stream_duration_us": 65442000,
+ "decoded_frame_count": 101,
+ "duration_repair": {
+ "argv": [
+ "ffmpeg",
+ "-nostdin",
+ "-loglevel",
+ "error",
+ "-y",
+ "-i",
+ "",
+ "-map",
+ "0:v:0",
+ "-an",
+ "-c:v",
+ "libx264",
+ "-preset",
+ "slow",
+ "-crf",
+ "18",
+ "-pix_fmt",
+ "yuv420p",
+ "-bf",
+ "0",
+ "-fps_mode",
+ "passthrough",
+ "-enc_time_base",
+ "demux",
+ "-video_track_timescale",
+ "1000000",
+ "-movflags",
+ "+faststart",
+ ""
+ ],
+ "decoded_frame_count_after": 101,
+ "decoded_frame_count_before": 101,
+ "decoded_presentation_times_preserved_exactly": true,
+ "frame_fabrication": false,
+ "frame_interpolation": false,
+ "reason": "Remove B-frame timestamp reordering so declared MP4 duration covers every retained decoded presentation timestamp.",
+ "source_media_sha256": "d97427729f82db16d984bb446efded0d9a571595e821eff25b19c08e50b00726",
+ "tool": "ffmpeg version 8.1.2 Copyright (c) 2000-2026 the FFmpeg developers"
+ },
+ "evidence_class": "reference_qualification",
+ "execution_profile": "standard",
+ "media": {
+ "bytes": 278805,
+ "codec": "h264",
+ "height": 800,
+ "path": "replay/openemr-replay.mp4",
+ "sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5",
+ "width": 1280
+ },
+ "outcome": "VERIFIED",
+ "poster": {
+ "bytes": 149927,
+ "height": 800,
+ "path": "replay/openemr-replay.poster.png",
+ "sha256": "56043b3d7c7a169a1369b4ed192f1326eeb25cb761683dd8410234923d12363b",
+ "width": 1280
+ },
+ "presentation_times_us": [
+ 0,
+ 402000,
+ 628000,
+ 3815000,
+ 3960000,
+ 4410000,
+ 5009000,
+ 5143000,
+ 5319000,
+ 5944000,
+ 6636000,
+ 6850000,
+ 7450000,
+ 7600000,
+ 8273000,
+ 8902000,
+ 9249000,
+ 9469000,
+ 10083000,
+ 10211000,
+ 10868000,
+ 11468000,
+ 11796000,
+ 12163000,
+ 14010000,
+ 14147000,
+ 14787000,
+ 15385000,
+ 15693000,
+ 16055000,
+ 16652000,
+ 16786000,
+ 17412000,
+ 20127000,
+ 20267000,
+ 20440000,
+ 21032000,
+ 21372000,
+ 21594000,
+ 22208000,
+ 22337000,
+ 25692000,
+ 26290000,
+ 26642000,
+ 26985000,
+ 27598000,
+ 27727000,
+ 28454000,
+ 29024000,
+ 29386000,
+ 29584000,
+ 30185000,
+ 30310000,
+ 30876000,
+ 31467000,
+ 31758000,
+ 31966000,
+ 32574000,
+ 32702000,
+ 33358000,
+ 33941000,
+ 34063000,
+ 34242000,
+ 34839000,
+ 35140000,
+ 35348000,
+ 35944000,
+ 36077000,
+ 36633000,
+ 37220000,
+ 37615000,
+ 37966000,
+ 40167000,
+ 40301000,
+ 40909000,
+ 41501000,
+ 41793000,
+ 41991000,
+ 42583000,
+ 42713000,
+ 43671000,
+ 44277000,
+ 44631000,
+ 44834000,
+ 45429000,
+ 45559000,
+ 45942000,
+ 48320000,
+ 48462000,
+ 48635000,
+ 49225000,
+ 49361000,
+ 52525000,
+ 53108000,
+ 53453000,
+ 54281000,
+ 55959000,
+ 56411000,
+ 56902000,
+ 63691000,
+ 65441000
+ ],
+ "relationship": "exact runtime-observation presentation derivative",
+ "timeline": {
+ "bytes": 93571,
+ "path": "replay/openemr-replay.control-overlay.v2.json",
+ "sha256": "57a71f6652786dddb77b03d985be78323e4922a77fa14eded7b16d475dce17dc"
+ }
+ },
+ "schema_version": "openadapt.public-cross-surface-presentation/v1",
+ "trials": [
+ {
+ "bundle_content_digest": "8e4a4f7f08e965bfd35cfe1b4e377b478f099125c9a5ec12dc0de62635104c20",
+ "execution_outcome": "VERIFIED",
+ "heal_count": 0,
+ "label": "final-standard-1",
+ "model_calls": 0,
+ "report_sha256": "a826023248fde0248b265cccef57e2e4326a971a340aafabd68d718632d1e07c",
+ "rest_record_count": 1,
+ "runtime_ms": 56914.125124923885,
+ "runtime_source_commit": "cb8b785cab84e2c42e8072a1bbd1099ce2454e1e",
+ "sql_record_count": 1
+ },
+ {
+ "bundle_content_digest": "8e4a4f7f08e965bfd35cfe1b4e377b478f099125c9a5ec12dc0de62635104c20",
+ "execution_outcome": "VERIFIED",
+ "heal_count": 0,
+ "label": "final-standard-2",
+ "model_calls": 0,
+ "report_sha256": "e7aae82fed15740335b391d5193185be7b65e84a9b627730bf60beb2edab7c67",
+ "rest_record_count": 1,
+ "runtime_ms": 59760.71804203093,
+ "runtime_source_commit": "cb8b785cab84e2c42e8072a1bbd1099ce2454e1e",
+ "sql_record_count": 1
+ },
+ {
+ "bundle_content_digest": "8e4a4f7f08e965bfd35cfe1b4e377b478f099125c9a5ec12dc0de62635104c20",
+ "execution_outcome": "VERIFIED",
+ "heal_count": 0,
+ "label": "final-standard-3",
+ "model_calls": 0,
+ "report_sha256": "556ef3960e04bcd25349af094a2544262c1de8a3363dbf76b791ea0f2649e56f",
+ "rest_record_count": 1,
+ "runtime_ms": 63906.22883406468,
+ "runtime_source_commit": "cb8b785cab84e2c42e8072a1bbd1099ce2454e1e",
+ "sql_record_count": 1
+ }
+ ]
+}
diff --git a/public/reference/openemr-patient-registration-standard-synthetic-v1/recording/openemr-source-recording.poster.png b/public/reference/openemr-patient-registration-standard-synthetic-v1/recording/openemr-source-recording.poster.png
new file mode 100644
index 00000000..c890b88d
Binary files /dev/null and b/public/reference/openemr-patient-registration-standard-synthetic-v1/recording/openemr-source-recording.poster.png differ
diff --git a/public/reference/openemr-patient-registration-standard-synthetic-v1/recording/openemr-source-recording.unbound.mp4 b/public/reference/openemr-patient-registration-standard-synthetic-v1/recording/openemr-source-recording.unbound.mp4
new file mode 100644
index 00000000..bfad80cb
Binary files /dev/null and b/public/reference/openemr-patient-registration-standard-synthetic-v1/recording/openemr-source-recording.unbound.mp4 differ
diff --git a/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.contexts.json b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.contexts.json
new file mode 100644
index 00000000..f1267c9b
--- /dev/null
+++ b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.contexts.json
@@ -0,0 +1,907 @@
+{
+ "contexts": [
+ {
+ "event_sequence": 0,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:1:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 1,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:1:33:no-pause:no-resume:no-stop:target-ff723d6e00a1d25d",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 2,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:1:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 3,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:2:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 4,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:2:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 5,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:2:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 6,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:3:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 7,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:3:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 8,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:3:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 9,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:4:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 10,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:4:33:no-pause:no-resume:no-stop:target-065bf882641167b7",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 11,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:4:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 12,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:5:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 13,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:5:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 14,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:5:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 15,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:6:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 16,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:6:33:no-pause:no-resume:no-stop:target-536a7bc428c6686a",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 17,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:6:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 18,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:7:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 19,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:7:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 20,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:7:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 21,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:8:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 22,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:8:33:no-pause:no-resume:no-stop:target-c2c2630177c2b8bf",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 23,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:8:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 24,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:9:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 25,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:9:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 26,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:9:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 27,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:10:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 28,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:10:33:no-pause:no-resume:no-stop:target-859479b1bb029748",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 29,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:10:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 30,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:11:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 31,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:11:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 32,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:11:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 33,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:12:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 34,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:12:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 35,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:12:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 36,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:13:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 37,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:13:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 38,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:13:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 39,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:14:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 40,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:14:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 41,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:14:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 42,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:15:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 43,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:15:33:no-pause:no-resume:no-stop:target-3390612a8dbe6986",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 44,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:15:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 45,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:16:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 46,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:16:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 47,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:16:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 48,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:17:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 49,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:17:33:no-pause:no-resume:no-stop:target-1b318bb98cd8fe16",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 50,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:17:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 51,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:18:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 52,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:18:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 53,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:18:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 54,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:19:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 55,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:19:33:no-pause:no-resume:no-stop:target-999f28900bbd9ce2",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 56,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:19:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 57,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:20:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 58,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:20:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 59,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:20:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 60,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:21:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 61,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:21:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 62,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:21:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 63,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:22:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 64,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:22:33:no-pause:no-resume:no-stop:target-348abb4d1d8ce8ee",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 65,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:22:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 66,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:23:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 67,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:23:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 68,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:23:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 69,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:24:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 70,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:24:33:no-pause:no-resume:no-stop:target-2842b71719c6e4b2",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 71,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:24:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 72,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:25:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 73,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:25:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 74,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:25:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 75,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:26:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 76,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:26:33:no-pause:no-resume:no-stop:target-a5e22edd5ff179de",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 77,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:26:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 78,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:27:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 79,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:27:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 80,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:27:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 81,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:28:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 82,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:28:33:no-pause:no-resume:no-stop:target-71a080fb1c7c9612",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 83,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:28:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 84,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:29:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 85,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:29:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 86,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:29:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 87,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:30:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 88,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:30:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 89,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:30:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 90,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:31:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 91,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:31:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 92,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:31:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 93,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:32:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 94,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:32:33:no-pause:no-resume:no-stop:target-8fb7b5cb9d5738aa",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 95,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:32:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 96,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:observing:governed:standard:33:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 97,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:executing:governed:standard:33:33:no-pause:no-resume:no-stop:target-84f9deb831216bf4",
+ "surface": "browser"
+ },
+ {
+ "event_sequence": 98,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verifying:governed:standard:33:33:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ },
+ {
+ "effect_evidence": "passed",
+ "event_sequence": 99,
+ "external_network_calls": "observed",
+ "minimum_effect_tier": 1,
+ "model_calls": 0,
+ "runtime": "local",
+ "state_id": "visible:verified:governed:standard:no-step:no-total:no-pause:no-resume:no-stop:no-target",
+ "surface": "browser"
+ }
+ ],
+ "data_classification": "synthetic",
+ "schema_version": "openadapt.public-presentation-contexts/v2"
+}
diff --git a/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.control-overlay.v2.json b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.control-overlay.v2.json
new file mode 100644
index 00000000..ab40f858
--- /dev/null
+++ b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.control-overlay.v2.json
@@ -0,0 +1,3076 @@
+{
+ "data_classification": "synthetic",
+ "duration_ms": 65442,
+ "events": [
+ {
+ "at_ms": 0,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 0,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286585635.230166,
+ "observed_at_unix_ms": 1785057373509,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:1:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 1,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 0
+ },
+ {
+ "at_ms": 402,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 1,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286586037.084791,
+ "observed_at_unix_ms": 1785057373911,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:1:33:no-pause:no-resume:no-stop:target-ff723d6e00a1d25d",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 1,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 1,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.0875,
+ "x": 0.296875,
+ "y": 0.3325
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 1
+ },
+ {
+ "at_ms": 628,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 2,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286586263.5245,
+ "observed_at_unix_ms": 1785057374137,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:1:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 1,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 2
+ },
+ {
+ "at_ms": 3815,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 3,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286589450.627625,
+ "observed_at_unix_ms": 1785057377324,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:2:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 2,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 3
+ },
+ {
+ "at_ms": 3960,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 4,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286589595.5735,
+ "observed_at_unix_ms": 1785057377469,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:2:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 2,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 4
+ },
+ {
+ "at_ms": 4410,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 5,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286590045.267625,
+ "observed_at_unix_ms": 1785057377919,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:2:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 2,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 5
+ },
+ {
+ "at_ms": 5009,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 6,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286590644.447541,
+ "observed_at_unix_ms": 1785057378518,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:3:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 3,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 6
+ },
+ {
+ "at_ms": 5143,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 7,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286590778.196625,
+ "observed_at_unix_ms": 1785057378652,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:3:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 3,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 7
+ },
+ {
+ "at_ms": 5319,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 8,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286590953.846541,
+ "observed_at_unix_ms": 1785057378827,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:3:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 3,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 8
+ },
+ {
+ "at_ms": 5944,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 9,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286591579.690833,
+ "observed_at_unix_ms": 1785057379453,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:4:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 4,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 9
+ },
+ {
+ "at_ms": 6636,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 10,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286592271.459291,
+ "observed_at_unix_ms": 1785057380145,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:4:33:no-pause:no-resume:no-stop:target-065bf882641167b7",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 4,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 10,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.10078125,
+ "x": 0.296875,
+ "y": 0.37625
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 10
+ },
+ {
+ "at_ms": 6850,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 11,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286592485.616291,
+ "observed_at_unix_ms": 1785057380359,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:4:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 4,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 11
+ },
+ {
+ "at_ms": 7450,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 12,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286593085.184333,
+ "observed_at_unix_ms": 1785057380959,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:5:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 5,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 12
+ },
+ {
+ "at_ms": 7600,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 13,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286593234.983541,
+ "observed_at_unix_ms": 1785057381108,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:5:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 5,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 13
+ },
+ {
+ "at_ms": 8273,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 14,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286593908.113125,
+ "observed_at_unix_ms": 1785057381782,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:5:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 5,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 14
+ },
+ {
+ "at_ms": 8902,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 15,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286594537.173333,
+ "observed_at_unix_ms": 1785057382411,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:6:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 6,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 15
+ },
+ {
+ "at_ms": 9249,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 16,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286594884.595375,
+ "observed_at_unix_ms": 1785057382758,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:6:33:no-pause:no-resume:no-stop:target-536a7bc428c6686a",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 6,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 16,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.128125,
+ "x": 0.46015625,
+ "y": 0.37625
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 16
+ },
+ {
+ "at_ms": 9469,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 17,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286595104.31375,
+ "observed_at_unix_ms": 1785057382978,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:6:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 6,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 17
+ },
+ {
+ "at_ms": 10083,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 18,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286595718.448416,
+ "observed_at_unix_ms": 1785057383592,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:7:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 7,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 18
+ },
+ {
+ "at_ms": 10211,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 19,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286595846.5365,
+ "observed_at_unix_ms": 1785057383720,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:7:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 7,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 19
+ },
+ {
+ "at_ms": 10868,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 20,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286596502.864333,
+ "observed_at_unix_ms": 1785057384376,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:7:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 7,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 20
+ },
+ {
+ "at_ms": 11468,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 21,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286597103.080958,
+ "observed_at_unix_ms": 1785057384977,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:8:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 8,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 21
+ },
+ {
+ "at_ms": 11796,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 22,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286597431.539708,
+ "observed_at_unix_ms": 1785057385305,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:8:33:no-pause:no-resume:no-stop:target-c2c2630177c2b8bf",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 8,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 22,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.0734375,
+ "x": 0.296875,
+ "y": 0.5175
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 22
+ },
+ {
+ "at_ms": 12163,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 23,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286597798.700041,
+ "observed_at_unix_ms": 1785057385672,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:8:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 8,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 23
+ },
+ {
+ "at_ms": 14010,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 24,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286599645.416166,
+ "observed_at_unix_ms": 1785057387519,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:9:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 9,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 24
+ },
+ {
+ "at_ms": 14147,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 25,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286599781.927916,
+ "observed_at_unix_ms": 1785057387655,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:9:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 9,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 25
+ },
+ {
+ "at_ms": 14787,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 26,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286600421.930125,
+ "observed_at_unix_ms": 1785057388295,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:9:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 9,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 26
+ },
+ {
+ "at_ms": 15385,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 27,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286601020.5185,
+ "observed_at_unix_ms": 1785057388894,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:10:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 10,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 27
+ },
+ {
+ "at_ms": 15693,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 28,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286601327.803458,
+ "observed_at_unix_ms": 1785057389201,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:10:33:no-pause:no-resume:no-stop:target-859479b1bb029748",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 10,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 28,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.0875,
+ "x": 0.71796875,
+ "y": 0.5175
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 28
+ },
+ {
+ "at_ms": 16055,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 29,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286601690.327958,
+ "observed_at_unix_ms": 1785057389564,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:10:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 10,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 29
+ },
+ {
+ "at_ms": 16652,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 30,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286602286.931666,
+ "observed_at_unix_ms": 1785057390160,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:11:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 11,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 30
+ },
+ {
+ "at_ms": 16786,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 31,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286602421.696583,
+ "observed_at_unix_ms": 1785057390295,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:11:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 11,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 31
+ },
+ {
+ "at_ms": 17412,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 32,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286603047.323666,
+ "observed_at_unix_ms": 1785057390921,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:11:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 11,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 32
+ },
+ {
+ "at_ms": 20127,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 33,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286605762.578,
+ "observed_at_unix_ms": 1785057393636,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:12:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 12,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 33
+ },
+ {
+ "at_ms": 20267,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 34,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286605902.006041,
+ "observed_at_unix_ms": 1785057393775,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:12:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 12,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 34
+ },
+ {
+ "at_ms": 20440,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 35,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286606075.24125,
+ "observed_at_unix_ms": 1785057393949,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:12:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 12,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 35
+ },
+ {
+ "at_ms": 21032,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 36,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286606667.552833,
+ "observed_at_unix_ms": 1785057394541,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:13:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 13,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 36
+ },
+ {
+ "at_ms": 21372,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 37,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286607006.796708,
+ "observed_at_unix_ms": 1785057394880,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:13:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 13,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 37
+ },
+ {
+ "at_ms": 21594,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 38,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286607229.04025,
+ "observed_at_unix_ms": 1785057395102,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:13:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 13,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 38
+ },
+ {
+ "at_ms": 22208,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 39,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286607843.318541,
+ "observed_at_unix_ms": 1785057395717,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:14:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 14,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 39
+ },
+ {
+ "at_ms": 22337,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 40,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286607972.2275,
+ "observed_at_unix_ms": 1785057395846,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:14:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 14,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 40
+ },
+ {
+ "at_ms": 25692,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 41,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286611326.869291,
+ "observed_at_unix_ms": 1785057399200,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:14:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 14,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 41
+ },
+ {
+ "at_ms": 26290,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 42,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286611925.217791,
+ "observed_at_unix_ms": 1785057399799,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:15:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 15,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 42
+ },
+ {
+ "at_ms": 26642,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 43,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286612277.579333,
+ "observed_at_unix_ms": 1785057400151,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:15:33:no-pause:no-resume:no-stop:target-3390612a8dbe6986",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 15,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 43,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.15546875,
+ "x": 0.296875,
+ "y": 0.27625
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 43
+ },
+ {
+ "at_ms": 26985,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 44,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286612620.535416,
+ "observed_at_unix_ms": 1785057400494,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:15:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 15,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 44
+ },
+ {
+ "at_ms": 27598,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 45,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286613232.754416,
+ "observed_at_unix_ms": 1785057401106,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:16:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 16,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 45
+ },
+ {
+ "at_ms": 27727,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 46,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286613361.810791,
+ "observed_at_unix_ms": 1785057401235,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:16:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 16,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 46
+ },
+ {
+ "at_ms": 28454,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 47,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286614089.621208,
+ "observed_at_unix_ms": 1785057401963,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:16:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 16,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 47
+ },
+ {
+ "at_ms": 29024,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 48,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286614659.686083,
+ "observed_at_unix_ms": 1785057402533,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:17:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 17,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 48
+ },
+ {
+ "at_ms": 29386,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 49,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286615020.899916,
+ "observed_at_unix_ms": 1785057402894,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:17:33:no-pause:no-resume:no-stop:target-1b318bb98cd8fe16",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 17,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 49,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.10078125,
+ "x": 0.296875,
+ "y": 0.32
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 49
+ },
+ {
+ "at_ms": 29584,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 50,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286615218.816916,
+ "observed_at_unix_ms": 1785057403092,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:17:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 17,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 50
+ },
+ {
+ "at_ms": 30185,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 51,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286615820.185458,
+ "observed_at_unix_ms": 1785057403693,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:18:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 18,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 51
+ },
+ {
+ "at_ms": 30310,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 52,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286615945.164,
+ "observed_at_unix_ms": 1785057403818,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:18:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 18,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 52
+ },
+ {
+ "at_ms": 30876,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 53,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286616510.805708,
+ "observed_at_unix_ms": 1785057404384,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:18:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 18,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 53
+ },
+ {
+ "at_ms": 31467,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 54,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286617101.832833,
+ "observed_at_unix_ms": 1785057404975,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:19:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 19,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 54
+ },
+ {
+ "at_ms": 31758,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 55,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286617392.865583,
+ "observed_at_unix_ms": 1785057405266,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:19:33:no-pause:no-resume:no-stop:target-999f28900bbd9ce2",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 19,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 55,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.15390625,
+ "x": 0.71796875,
+ "y": 0.32
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 55
+ },
+ {
+ "at_ms": 31966,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 56,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286617601.306375,
+ "observed_at_unix_ms": 1785057405475,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:19:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 19,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 56
+ },
+ {
+ "at_ms": 32574,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 57,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286618209.162666,
+ "observed_at_unix_ms": 1785057406082,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:20:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 20,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 57
+ },
+ {
+ "at_ms": 32702,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 58,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286618337.136666,
+ "observed_at_unix_ms": 1785057406210,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:20:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 20,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 58
+ },
+ {
+ "at_ms": 33358,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 59,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286618993.561833,
+ "observed_at_unix_ms": 1785057406867,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:20:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 20,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 59
+ },
+ {
+ "at_ms": 33941,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 60,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286619576.650125,
+ "observed_at_unix_ms": 1785057407450,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:21:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 21,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 60
+ },
+ {
+ "at_ms": 34063,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 61,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286619697.923125,
+ "observed_at_unix_ms": 1785057407571,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:21:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 21,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 61
+ },
+ {
+ "at_ms": 34242,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 62,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286619877.58025,
+ "observed_at_unix_ms": 1785057407751,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:21:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 21,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 62
+ },
+ {
+ "at_ms": 34839,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 63,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286620473.769375,
+ "observed_at_unix_ms": 1785057408347,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:22:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 22,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 63
+ },
+ {
+ "at_ms": 35140,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 64,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286620774.892083,
+ "observed_at_unix_ms": 1785057408648,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:22:33:no-pause:no-resume:no-stop:target-348abb4d1d8ce8ee",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 22,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 64,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.0625,
+ "x": 0.296875,
+ "y": 0.36875
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 64
+ },
+ {
+ "at_ms": 35348,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 65,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286620982.81675,
+ "observed_at_unix_ms": 1785057408856,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:22:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 22,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 65
+ },
+ {
+ "at_ms": 35944,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 66,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286621579.38575,
+ "observed_at_unix_ms": 1785057409453,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:23:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 23,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 66
+ },
+ {
+ "at_ms": 36077,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 67,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286621712.325916,
+ "observed_at_unix_ms": 1785057409586,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:23:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 23,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 67
+ },
+ {
+ "at_ms": 36633,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 68,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286622268.318458,
+ "observed_at_unix_ms": 1785057410142,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:23:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 23,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 68
+ },
+ {
+ "at_ms": 37220,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 69,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286622855.157666,
+ "observed_at_unix_ms": 1785057410728,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:24:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 24,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 69
+ },
+ {
+ "at_ms": 37615,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 70,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286623250.423166,
+ "observed_at_unix_ms": 1785057411124,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:24:33:no-pause:no-resume:no-stop:target-2842b71719c6e4b2",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 24,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 70,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.128125,
+ "x": 0.296875,
+ "y": 0.51
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 70
+ },
+ {
+ "at_ms": 37966,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 71,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286623601.164833,
+ "observed_at_unix_ms": 1785057411474,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:24:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 24,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 71
+ },
+ {
+ "at_ms": 40167,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 72,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286625802.6865,
+ "observed_at_unix_ms": 1785057413676,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:25:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 25,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 72
+ },
+ {
+ "at_ms": 40301,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 73,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286625936.400666,
+ "observed_at_unix_ms": 1785057413810,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:25:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 25,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 73
+ },
+ {
+ "at_ms": 40909,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 74,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286626543.790416,
+ "observed_at_unix_ms": 1785057414417,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:25:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 25,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 74
+ },
+ {
+ "at_ms": 41501,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 75,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286627135.868125,
+ "observed_at_unix_ms": 1785057415009,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:26:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 26,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 75
+ },
+ {
+ "at_ms": 41793,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 76,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286627428.567041,
+ "observed_at_unix_ms": 1785057415302,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:26:33:no-pause:no-resume:no-stop:target-a5e22edd5ff179de",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 26,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 76,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.1828125,
+ "x": 0.71796875,
+ "y": 0.55375
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 76
+ },
+ {
+ "at_ms": 41991,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 77,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286627626.318208,
+ "observed_at_unix_ms": 1785057415500,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:26:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 26,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 77
+ },
+ {
+ "at_ms": 42583,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 78,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286628218.271958,
+ "observed_at_unix_ms": 1785057416091,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:27:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 27,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 78
+ },
+ {
+ "at_ms": 42713,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 79,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286628348.376541,
+ "observed_at_unix_ms": 1785057416222,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:27:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 27,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 79
+ },
+ {
+ "at_ms": 43671,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 80,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286629305.953625,
+ "observed_at_unix_ms": 1785057417179,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:27:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 27,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 80
+ },
+ {
+ "at_ms": 44277,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 81,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286629912.274708,
+ "observed_at_unix_ms": 1785057417785,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:28:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 28,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 81
+ },
+ {
+ "at_ms": 44631,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 82,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286630266.403708,
+ "observed_at_unix_ms": 1785057418140,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:28:33:no-pause:no-resume:no-stop:target-71a080fb1c7c9612",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 28,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 82,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.03875,
+ "width": 0.15390625,
+ "x": 0.71796875,
+ "y": 0.36875
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 82
+ },
+ {
+ "at_ms": 44834,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 83,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286630469.46425,
+ "observed_at_unix_ms": 1785057418343,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:28:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 28,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 83
+ },
+ {
+ "at_ms": 45429,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 84,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286631063.882208,
+ "observed_at_unix_ms": 1785057418937,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:29:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 29,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 84
+ },
+ {
+ "at_ms": 45559,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 85,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286631194.062916,
+ "observed_at_unix_ms": 1785057419067,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:29:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 29,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 85
+ },
+ {
+ "at_ms": 45942,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 86,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286631576.989125,
+ "observed_at_unix_ms": 1785057419450,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:29:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 29,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 86
+ },
+ {
+ "at_ms": 48320,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 87,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286633954.766916,
+ "observed_at_unix_ms": 1785057421828,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:30:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 30,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 87
+ },
+ {
+ "at_ms": 48462,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 88,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286634097.703708,
+ "observed_at_unix_ms": 1785057421971,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:30:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 30,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 88
+ },
+ {
+ "at_ms": 48635,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 89,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286634269.879291,
+ "observed_at_unix_ms": 1785057422143,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:30:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 30,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 89
+ },
+ {
+ "at_ms": 49225,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 90,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286634859.91975,
+ "observed_at_unix_ms": 1785057422733,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:31:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 31,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 90
+ },
+ {
+ "at_ms": 49361,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 91,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286634995.792291,
+ "observed_at_unix_ms": 1785057422869,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:31:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 31,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 91
+ },
+ {
+ "at_ms": 52525,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 92,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286638160.431375,
+ "observed_at_unix_ms": 1785057426034,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:31:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 31,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 92
+ },
+ {
+ "at_ms": 53108,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 93,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286638743.390625,
+ "observed_at_unix_ms": 1785057426617,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:32:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 32,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 93
+ },
+ {
+ "at_ms": 53453,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 94,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286639087.979875,
+ "observed_at_unix_ms": 1785057426961,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:32:33:no-pause:no-resume:no-stop:target-8fb7b5cb9d5738aa",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 32,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 94,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.04875,
+ "width": 0.14921875,
+ "x": 0.14765625,
+ "y": 0.94125
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 94
+ },
+ {
+ "at_ms": 54281,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 95,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286639916.678125,
+ "observed_at_unix_ms": 1785057427790,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:32:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 32,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 95
+ },
+ {
+ "at_ms": 55959,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 96,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286641594.614875,
+ "observed_at_unix_ms": 1785057429468,
+ "phase": "observing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:observing:governed:standard:33:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Observing the application",
+ "step": {
+ "current": 33,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 96
+ },
+ {
+ "at_ms": 56411,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 97,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286642046.123125,
+ "observed_at_unix_ms": 1785057429919,
+ "phase": "executing",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:executing:governed:standard:33:33:no-pause:no-resume:no-stop:target-84f9deb831216bf4",
+ "status": "Executing with verification gates",
+ "step": {
+ "current": 33,
+ "total": 33
+ },
+ "target_tracking": {
+ "action_kind": "click",
+ "binding": {
+ "frame_index": 97,
+ "kind": "media_frame",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5"
+ },
+ "coordinate_space": "top_level_viewport_normalized",
+ "rect": {
+ "height": 0.0475,
+ "width": 0.17578125,
+ "x": 0.38125,
+ "y": 0.32625
+ },
+ "source_viewport": {
+ "device_pixel_ratio": 1.0,
+ "height_css_px": 800,
+ "width_css_px": 1280
+ }
+ },
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 97
+ },
+ {
+ "at_ms": 56902,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 98,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286642536.981333,
+ "observed_at_unix_ms": 1785057430410,
+ "phase": "verifying",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verifying:governed:standard:33:33:no-pause:no-resume:no-stop:no-target",
+ "status": "Verifying the intended result",
+ "step": {
+ "current": 33,
+ "total": 33
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 98
+ },
+ {
+ "at_ms": 63691,
+ "frame": {
+ "controls": {
+ "pause": false,
+ "resume": false,
+ "stop": false
+ },
+ "event_sequence": 99,
+ "mode": "governed",
+ "observed_at_monotonic_ms": 1286649326.41075,
+ "observed_at_unix_ms": 1785057437199,
+ "phase": "verified",
+ "presentation": true,
+ "profile": "standard",
+ "schema_version": "openadapt.control-overlay-frame/v2",
+ "state_id": "visible:verified:governed:standard:no-step:no-total:no-pause:no-resume:no-stop:no-target",
+ "status": "Outcome verified",
+ "step": {
+ "current": null,
+ "total": null
+ },
+ "target_tracking": null,
+ "visible": true,
+ "workflow_label": "Governed workflow"
+ },
+ "media_frame_index": 99
+ }
+ ],
+ "evidence_pack_id": "openemr-patient-registration-standard-synthetic-v1",
+ "media_frame_count": 101,
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5",
+ "schema_version": "openadapt.control-overlay-timeline/v2"
+}
diff --git a/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.media-binding.json b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.media-binding.json
new file mode 100644
index 00000000..a26166ed
--- /dev/null
+++ b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.media-binding.json
@@ -0,0 +1,116 @@
+{
+ "clip_id": "openemr-replay",
+ "decoded_frame_count": 101,
+ "decoded_height": 800,
+ "decoded_width": 1280,
+ "media_file": "openemr-replay.mp4",
+ "media_sha256": "ef77240aa6ce74d9024c9cd95e8e45b886ea033f097c648b2bc20258f91c18d5",
+ "poster_file": "openemr-replay.poster.png",
+ "poster_sha256": "56043b3d7c7a169a1369b4ed192f1326eeb25cb761683dd8410234923d12363b",
+ "presentation_times_us": [
+ 0,
+ 402000,
+ 628000,
+ 3815000,
+ 3960000,
+ 4410000,
+ 5009000,
+ 5143000,
+ 5319000,
+ 5944000,
+ 6636000,
+ 6850000,
+ 7450000,
+ 7600000,
+ 8273000,
+ 8902000,
+ 9249000,
+ 9469000,
+ 10083000,
+ 10211000,
+ 10868000,
+ 11468000,
+ 11796000,
+ 12163000,
+ 14010000,
+ 14147000,
+ 14787000,
+ 15385000,
+ 15693000,
+ 16055000,
+ 16652000,
+ 16786000,
+ 17412000,
+ 20127000,
+ 20267000,
+ 20440000,
+ 21032000,
+ 21372000,
+ 21594000,
+ 22208000,
+ 22337000,
+ 25692000,
+ 26290000,
+ 26642000,
+ 26985000,
+ 27598000,
+ 27727000,
+ 28454000,
+ 29024000,
+ 29386000,
+ 29584000,
+ 30185000,
+ 30310000,
+ 30876000,
+ 31467000,
+ 31758000,
+ 31966000,
+ 32574000,
+ 32702000,
+ 33358000,
+ 33941000,
+ 34063000,
+ 34242000,
+ 34839000,
+ 35140000,
+ 35348000,
+ 35944000,
+ 36077000,
+ 36633000,
+ 37220000,
+ 37615000,
+ 37966000,
+ 40167000,
+ 40301000,
+ 40909000,
+ 41501000,
+ 41793000,
+ 41991000,
+ 42583000,
+ 42713000,
+ 43671000,
+ 44277000,
+ 44631000,
+ 44834000,
+ 45429000,
+ 45559000,
+ 45942000,
+ 48320000,
+ 48462000,
+ 48635000,
+ 49225000,
+ 49361000,
+ 52525000,
+ 53108000,
+ 53453000,
+ 54281000,
+ 55959000,
+ 56411000,
+ 56902000,
+ 63691000,
+ 65441000
+ ],
+ "schema_version": "openadapt.public-presentation-media-binding/v1",
+ "timeline_file": "openemr-replay.control-overlay.v2.json",
+ "timeline_sha256": "57a71f6652786dddb77b03d985be78323e4922a77fa14eded7b16d475dce17dc"
+}
diff --git a/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.mp4 b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.mp4
new file mode 100644
index 00000000..996ff391
Binary files /dev/null and b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.mp4 differ
diff --git a/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.poster.png b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.poster.png
new file mode 100644
index 00000000..cd955d09
Binary files /dev/null and b/public/reference/openemr-patient-registration-standard-synthetic-v1/replay/openemr-replay.poster.png differ
diff --git a/scripts/verify-reference-presentations.mjs b/scripts/verify-reference-presentations.mjs
new file mode 100644
index 00000000..2deadfd4
--- /dev/null
+++ b/scripts/verify-reference-presentations.mjs
@@ -0,0 +1,291 @@
+import assert from 'node:assert/strict'
+import crypto from 'node:crypto'
+import fs from 'node:fs'
+import path from 'node:path'
+import { fileURLToPath } from 'node:url'
+
+import { createFile } from 'mp4box'
+
+import registry from '../data/referencePresentationAssets.mjs'
+import {
+ bindExecutionOverlayContext,
+ bindExecutionOverlayTimeline,
+ isSingleSourceExactPresentationMedia,
+} from '../lib/executionOverlayTimeline.js'
+
+const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
+
+function publicPath(src) {
+ assert.match(src, /^\/[A-Za-z0-9][A-Za-z0-9._/-]*$/u)
+ const resolved = path.resolve(root, 'public', src.slice(1))
+ assert.ok(
+ resolved.startsWith(`${path.resolve(root, 'public')}${path.sep}`),
+ `presentation asset escapes public/: ${src}`
+ )
+ return resolved
+}
+
+function publicJson(src) {
+ return JSON.parse(fs.readFileSync(publicPath(src), 'utf8'))
+}
+
+function sha256(bytes) {
+ return crypto.createHash('sha256').update(bytes).digest('hex')
+}
+
+function packFiles(directory, prefix = '') {
+ const files = []
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
+ const relative = prefix ? `${prefix}/${entry.name}` : entry.name
+ const absolute = path.join(directory, entry.name)
+ if (entry.isDirectory()) files.push(...packFiles(absolute, relative))
+ else files.push(relative)
+ }
+ return files.sort()
+}
+
+function inspectMp4(bytes, label) {
+ return new Promise((resolve, reject) => {
+ const file = createFile()
+ let settled = false
+ file.onError = (module, message) =>
+ reject(new Error(`${label}: MP4 parse failed in ${module}: ${message}`))
+ file.onReady = (info) => {
+ try {
+ const tracks = info.videoTracks ?? info.tracks.filter((track) => track.video)
+ assert.equal(tracks.length, 1, `${label}: expected exactly one video track`)
+ const track = tracks[0]
+ file.onSamples = (_id, _user, samples) => {
+ try {
+ assert.equal(
+ samples.length,
+ track.nb_samples,
+ `${label}: decoded sample inventory is incomplete`
+ )
+ const minimumCts = Math.min(...samples.map((sample) => sample.cts))
+ const presentationTimesUs = samples
+ .map((sample) =>
+ Math.round(
+ ((sample.cts - minimumCts) / sample.timescale) *
+ 1_000_000
+ )
+ )
+ .sort((left, right) => left - right)
+ assert.equal(
+ new Set(presentationTimesUs).size,
+ presentationTimesUs.length,
+ `${label}: duplicate presentation timestamps are unsupported`
+ )
+ const endUs = Math.max(
+ ...samples.map((sample) =>
+ Math.round(
+ ((sample.cts - minimumCts + sample.duration) /
+ sample.timescale) *
+ 1_000_000
+ )
+ )
+ )
+ settled = true
+ resolve({
+ width: track.video.width,
+ height: track.video.height,
+ frameCount: track.nb_samples,
+ presentationTimesUs,
+ durationMs: Math.round(endUs / 1000),
+ })
+ } catch (error) {
+ reject(error)
+ }
+ }
+ file.setExtractionOptions(track.id, null, { nbSamples: track.nb_samples })
+ file.start()
+ } catch (error) {
+ reject(error)
+ }
+ }
+
+ const arrayBuffer = bytes.buffer.slice(
+ bytes.byteOffset,
+ bytes.byteOffset + bytes.byteLength
+ )
+ arrayBuffer.fileStart = 0
+ file.appendBuffer(arrayBuffer, true)
+ file.flush()
+ queueMicrotask(() => {
+ if (!settled && !file.readySent) {
+ reject(new Error(`${label}: MP4 metadata was not found`))
+ }
+ })
+ })
+}
+
+assert.equal(registry.schemaVersion, 2, 'unsupported reference presentation registry')
+assert.ok(Array.isArray(registry.assets), 'reference presentation assets must be an array')
+
+const identities = new Set()
+for (const asset of registry.assets) {
+ const label = `${asset.applicationId}:${asset.phase}`
+ assert.match(asset.applicationId, /^[a-z0-9][a-z0-9-]*$/u, `${label}: invalid app id`)
+ assert.ok(['recording', 'replay'].includes(asset.phase), `${label}: invalid phase`)
+ assert.ok(!identities.has(label), `${label}: duplicate presentation asset`)
+ identities.add(label)
+ assert.ok(
+ isSingleSourceExactPresentationMedia(asset.media),
+ `${label}: exact media contract is invalid`
+ )
+
+ const mediaPath = publicPath(asset.media.src)
+ const bytes = fs.readFileSync(mediaPath)
+ const digest = sha256(bytes)
+ assert.equal(digest, asset.media.sha256, `${label}: media SHA-256 mismatch`)
+ if (asset.media.poster) {
+ assert.ok(fs.statSync(publicPath(asset.media.poster)).isFile(), `${label}: poster missing`)
+ }
+
+ const exact = bindExecutionOverlayTimeline(asset.timeline, asset.binding)
+ assert.equal(exact.binding.mediaSha256, digest, `${label}: binding digest mismatch`)
+ const inspected = await inspectMp4(bytes, label)
+ assert.equal(inspected.width, asset.media.width, `${label}: decoded width mismatch`)
+ assert.equal(inspected.height, asset.media.height, `${label}: decoded height mismatch`)
+ assert.equal(
+ inspected.frameCount,
+ exact.binding.mediaFrameCount,
+ `${label}: decoded frame count mismatch`
+ )
+ assert.deepEqual(
+ inspected.presentationTimesUs,
+ exact.binding.mediaFramePresentationTimesUs,
+ `${label}: decoded frame PTS inventory mismatch`
+ )
+ assert.equal(
+ inspected.durationMs,
+ exact.timeline.duration_ms,
+ `${label}: decoded duration mismatch`
+ )
+
+ const pack = asset.pack
+ assert.ok(pack && typeof pack === 'object', `${label}: public pack is missing`)
+ const inventoryPath = publicPath(pack.inventory)
+ assert.equal(
+ path.dirname(inventoryPath),
+ path.dirname(publicPath(`${pack.root}/placeholder`)),
+ `${label}: inventory is outside the declared pack root`
+ )
+ const manifestBytes = fs.readFileSync(publicPath(pack.manifest))
+ const inventoryBytes = fs.readFileSync(inventoryPath)
+ const packManifest = JSON.parse(manifestBytes.toString('utf8'))
+ const inventory = JSON.parse(inventoryBytes.toString('utf8'))
+ assert.equal(
+ packManifest.schema_version,
+ 'openadapt.public-cross-surface-presentation/v1',
+ `${label}: pack manifest schema mismatch`
+ )
+ assert.equal(
+ inventory.schema_version,
+ 'openadapt.public-pack-inventory/v1',
+ `${label}: pack inventory schema mismatch`
+ )
+ assert.equal(packManifest.pack_id, exact.timeline.evidence_pack_id, `${label}: pack id mismatch`)
+ assert.equal(packManifest.data_classification, exact.timeline.data_classification, `${label}: data classification mismatch`)
+
+ const expectedInventory = new Set()
+ for (const entry of inventory.files) {
+ assert.match(entry.path, /^(?!\/)(?!.*(?:^|\/)\.\.(?:\/|$))[A-Za-z0-9._/-]+$/u)
+ assert.ok(!expectedInventory.has(entry.path), `${label}: duplicate inventory path`)
+ expectedInventory.add(entry.path)
+ const entryPath = path.resolve(path.dirname(inventoryPath), entry.path)
+ assert.ok(
+ entryPath.startsWith(`${path.dirname(inventoryPath)}${path.sep}`),
+ `${label}: inventory path escapes the pack`
+ )
+ const entryBytes = fs.readFileSync(entryPath)
+ assert.equal(entryBytes.byteLength, entry.bytes, `${label}: ${entry.path} byte count mismatch`)
+ assert.equal(sha256(entryBytes), entry.sha256, `${label}: ${entry.path} digest mismatch`)
+ }
+ const actualPackFiles = packFiles(path.dirname(inventoryPath)).filter(
+ (relative) => relative !== path.basename(inventoryPath)
+ )
+ assert.deepEqual(
+ [...expectedInventory].sort(),
+ actualPackFiles,
+ `${label}: pack inventory does not account for every retained file`
+ )
+ assert.equal(
+ sha256(manifestBytes),
+ inventory.files.find((entry) => entry.path === 'manifest.json')?.sha256,
+ `${label}: pack manifest is not inventory-bound`
+ )
+
+ const replay = packManifest.replay
+ assert.equal(
+ `${pack.root}/${replay.media.path}`,
+ asset.media.src,
+ `${label}: registry media differs from pack manifest`
+ )
+ assert.equal(replay.media.sha256, digest, `${label}: pack media digest mismatch`)
+ assert.equal(replay.media.width, inspected.width, `${label}: pack media width mismatch`)
+ assert.equal(replay.media.height, inspected.height, `${label}: pack media height mismatch`)
+ assert.equal(replay.decoded_frame_count, inspected.frameCount, `${label}: pack frame count mismatch`)
+ assert.deepEqual(
+ replay.presentation_times_us,
+ inspected.presentationTimesUs,
+ `${label}: pack PTS inventory mismatch`
+ )
+ assert.equal(
+ replay.declared_stream_duration_us,
+ inspected.durationMs * 1000,
+ `${label}: pack stream duration mismatch`
+ )
+ assert.equal(
+ replay.declared_format_duration_us,
+ inspected.durationMs * 1000,
+ `${label}: pack format duration mismatch`
+ )
+ assert.equal(`${pack.root}/${replay.poster.path}`, asset.media.poster, `${label}: pack poster mismatch`)
+ assert.equal(`${pack.root}/${replay.timeline.path}`, pack.timeline, `${label}: timeline path mismatch`)
+ assert.equal(`${pack.root}/${replay.binding.path}`, pack.binding, `${label}: binding path mismatch`)
+ assert.equal(`${pack.root}/${replay.contexts.path}`, pack.contexts, `${label}: contexts path mismatch`)
+
+ const timelineDocument = publicJson(pack.timeline)
+ const bindingDocument = publicJson(pack.binding)
+ assert.deepEqual(timelineDocument, asset.timeline, `${label}: registry timeline differs from pack bytes`)
+ assert.equal(bindingDocument.schema_version, 'openadapt.public-presentation-media-binding/v1')
+ assert.equal(bindingDocument.media_sha256, exact.binding.mediaSha256)
+ assert.equal(bindingDocument.decoded_frame_count, exact.binding.mediaFrameCount)
+ assert.deepEqual(
+ bindingDocument.presentation_times_us,
+ exact.binding.mediaFramePresentationTimesUs,
+ `${label}: registry binding differs from pack bytes`
+ )
+ assert.equal(bindingDocument.decoded_width, asset.media.width)
+ assert.equal(bindingDocument.decoded_height, asset.media.height)
+
+ const contextDocument = publicJson(pack.contexts)
+ assert.equal(contextDocument.schema_version, 'openadapt.public-presentation-contexts/v2')
+ assert.equal(contextDocument.data_classification, exact.timeline.data_classification)
+ assert.equal(contextDocument.contexts.length, exact.timeline.events.length)
+ const contextSequences = new Set()
+ for (const [index, context] of contextDocument.contexts.entries()) {
+ assert.ok(!contextSequences.has(context.event_sequence), `${label}: duplicate source context`)
+ contextSequences.add(context.event_sequence)
+ const event = exact.timeline.events[index]
+ assert.equal(
+ context.event_sequence,
+ event.frame.event_sequence,
+ `${label}: source context order differs from the timeline`
+ )
+ assert.equal(
+ context.state_id,
+ event.frame.state_id,
+ `${label}: source context state differs from the timeline`
+ )
+ bindExecutionOverlayContext(event.frame, context)
+ }
+ assert.deepEqual(
+ asset.contexts,
+ contextDocument.contexts,
+ `${label}: registry contexts differ from the exact pack bytes`
+ )
+}
+
+console.log(`Verified ${registry.assets.length} exact reference presentation asset(s).`)
diff --git a/tests/dentalOffer.test.js b/tests/dentalOffer.test.js
index 02c7f9f5..8c616b1e 100644
--- a/tests/dentalOffer.test.js
+++ b/tests/dentalOffer.test.js
@@ -49,26 +49,6 @@ test('dental local-first block describes design, and defers the legal call', ()
assert.doesNotMatch(page, /no BAA (is )?required|BAA[- ]free|without a BAA/i)
})
-test('dental halt-moment footage is real and labeled truthfully while dental assets are pending', () => {
- const demo = read('components/DentalHaltMoment.js')
-
- // Slots for the dental payer-portal assets, currently backed by the
- // existing REAL OpenEMR replay footage — labeled as exactly that.
- assert.match(demo, /const DENTAL_CLIPS = null/)
- assert.match(demo, /manifest\.steps\.record_openemr/)
- assert.match(demo, /manifest\.steps\.run_openemr/)
- assert.match(demo, /real, unstaged screen\s+recordings/i)
- assert.match(demo, /live OpenEMR instance/)
- assert.match(demo, /Never point[\s\S]*these slots at mocked or fabricated footage/)
- assert.match(demo, /verifies delivery, not the[\s\S]*payer.*underlying accuracy/)
- assert.match(demo, /does not write benefits back/)
- assert.match(demo, /MFA and CAPTCHA prompts/)
- assert.match(demo, /ready-to-call task/)
- assert.match(demo, /does not place the call/)
- assert.doesNotMatch(demo, /system of record, not just/)
- assert.doesNotMatch(demo, /actually landed where it belongs/)
-})
-
test('dental lead form uses a distinct Netlify form with UTM attribution', () => {
const form = read('components/DentalLeadForm.js')
const registration = read('public/form.html')
diff --git a/tests/executionOverlayTimeline.test.js b/tests/executionOverlayTimeline.test.js
new file mode 100644
index 00000000..7251d8db
--- /dev/null
+++ b/tests/executionOverlayTimeline.test.js
@@ -0,0 +1,253 @@
+const assert = require('node:assert/strict')
+const test = require('node:test')
+
+const digest = 'a'.repeat(64)
+
+const targetState = 'target-59b8e1f7cc3dedc6'
+
+const frame = (sequence, phase = 'executing', target = null, visible = true) => ({
+ schema_version: 'openadapt.control-overlay-frame/v2',
+ state_id: [
+ visible ? 'visible' : 'hidden',
+ phase,
+ 'governed',
+ 'standard',
+ 1,
+ 2,
+ 'no-pause',
+ 'no-resume',
+ 'no-stop',
+ target ? targetState : 'no-target',
+ ].join(':'),
+ event_sequence: sequence,
+ observed_at_unix_ms: 1_785_000_000_000 + sequence,
+ observed_at_monotonic_ms: 10_000 + sequence,
+ visible,
+ phase,
+ workflow_label: 'Governed workflow',
+ mode: 'governed',
+ profile: 'standard',
+ step: { current: 1, total: 2 },
+ controls: { pause: false, resume: false, stop: false },
+ status:
+ phase === 'verified'
+ ? 'Outcome verified'
+ : 'Executing with verification gates',
+ presentation: true,
+ target_tracking: target,
+})
+
+const target = {
+ coordinate_space: 'top_level_viewport_normalized',
+ rect: { x: 0.25, y: 0.25, width: 0.5, height: 0.5 },
+ source_viewport: {
+ width_css_px: 1280,
+ height_css_px: 720,
+ device_pixel_ratio: 1,
+ },
+ binding: { kind: 'media_frame', media_sha256: digest, frame_index: 2 },
+ action_kind: 'click',
+}
+
+const timeline = () => ({
+ schema_version: 'openadapt.control-overlay-timeline/v2',
+ data_classification: 'sanitized_public',
+ evidence_pack_id: 'reference-pack-v2',
+ media_sha256: digest,
+ media_frame_count: 3,
+ duration_ms: 67,
+ events: [
+ { at_ms: 0, media_frame_index: 0, frame: frame(1) },
+ { at_ms: 67, media_frame_index: 2, frame: frame(2, 'verified', target) },
+ ],
+})
+
+const binding = () => ({
+ evidencePackId: 'reference-pack-v2',
+ mediaSha256: digest,
+ mediaFrameCount: 3,
+ mediaFramePresentationTimesUs: [0, 33333, 66667],
+ browserViewportIsExact: true,
+})
+
+test('canonical V2 parsing refuses unsafe fields and media/PTS mismatches', async () => {
+ const { bindExecutionOverlayTimeline, canonicalControlOverlayTargetJson } = await import(
+ '../lib/executionOverlayTimeline.js'
+ )
+ assert.doesNotThrow(() => bindExecutionOverlayTimeline(timeline(), binding()))
+ assert.equal(
+ canonicalControlOverlayTargetJson(target),
+ '{"action_kind":"click","binding":{"frame_index":2,"kind":"media_frame","media_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"coordinate_space":"top_level_viewport_normalized","rect":{"height":0.5,"width":0.5,"x":0.25,"y":0.25},"source_viewport":{"device_pixel_ratio":1.0,"height_css_px":720,"width_css_px":1280}}'
+ )
+
+ const leaked = timeline()
+ leaked.events[0].frame.patient_name = 'Jane Doe'
+ assert.throws(
+ () => bindExecutionOverlayTimeline(leaked, binding()),
+ /unexpected field/
+ )
+ assert.throws(
+ () =>
+ bindExecutionOverlayTimeline(timeline(), {
+ ...binding(),
+ mediaSha256: 'c'.repeat(64),
+ }),
+ /exact media digest/
+ )
+ assert.throws(
+ () =>
+ bindExecutionOverlayTimeline(timeline(), {
+ ...binding(),
+ mediaFramePresentationTimesUs: [0, 33333, 65000],
+ }),
+ /inventoried decoded-frame PTS/
+ )
+ const forged = timeline()
+ forged.events[1].frame.target_tracking = structuredClone(target)
+ forged.events[1].frame.target_tracking.rect.x = 0.2
+ assert.throws(
+ () => bindExecutionOverlayTimeline(forged, binding()),
+ /state_id does not match/
+ )
+})
+
+test('status persists by bounded time while target exists only on its exact frame', async () => {
+ const {
+ bindExecutionOverlayTimeline,
+ exactTargetForDecodedFrame,
+ executionOverlayFrameAt,
+ mapTargetToContainedVideo,
+ } = await import('../lib/executionOverlayTimeline.js')
+ const exact = bindExecutionOverlayTimeline(timeline(), binding())
+ assert.equal(executionOverlayFrameAt(exact.timeline, 66).phase, 'executing')
+ assert.equal(executionOverlayFrameAt(exact.timeline, 1000).phase, 'verified')
+ assert.equal(exactTargetForDecodedFrame(exact.timeline, exact.binding, 1), null)
+ const boundTarget = exactTargetForDecodedFrame(
+ exact.timeline,
+ exact.binding,
+ 2
+ )
+ assert.deepEqual(boundTarget, target)
+ assert.equal(Object.isFrozen(exact.timeline.events[1].frame.target_tracking), true)
+ assert.equal(Object.isFrozen(exact.binding.mediaFramePresentationTimesUs), true)
+ assert.deepEqual(
+ mapTargetToContainedVideo(boundTarget, {
+ elementWidth: 640,
+ elementHeight: 480,
+ videoWidth: 1280,
+ videoHeight: 720,
+ }),
+ { left: 160, top: 150, width: 320, height: 180 }
+ )
+ assert.equal(
+ mapTargetToContainedVideo(boundTarget, {
+ elementWidth: 640,
+ elementHeight: 480,
+ videoWidth: 1024,
+ videoHeight: 768,
+ }),
+ null
+ )
+})
+
+test('capsule placement is event-stable and presentation facts require exact bound context', async () => {
+ const {
+ bindExecutionOverlayContext,
+ chooseOverlayPlacement,
+ executionOverlayPresentation,
+ executionRailForBoundContext,
+ } = await import(
+ '../lib/executionOverlayTimeline.js'
+ )
+ const dimensions = {
+ stageWidth: 800,
+ stageHeight: 450,
+ capsuleWidth: 300,
+ capsuleHeight: 90,
+ }
+ assert.equal(chooseOverlayPlacement(dimensions), 'bottom-left')
+ assert.equal(
+ chooseOverlayPlacement({
+ ...dimensions,
+ currentPlacement: 'bottom-right',
+ }),
+ 'bottom-right'
+ )
+ assert.equal(
+ chooseOverlayPlacement({
+ ...dimensions,
+ avoidRegions: [{ left: 10, top: 350, width: 310, height: 90 }],
+ }),
+ 'bottom-right'
+ )
+ assert.equal(
+ chooseOverlayPlacement({
+ ...dimensions,
+ avoidRegions: [
+ { left: 10, top: 350, width: 310, height: 90 },
+ { left: 480, top: 350, width: 310, height: 90 },
+ ],
+ }),
+ 'hidden'
+ )
+ const activeFrame = frame(5)
+ assert.deepEqual(
+ executionRailForBoundContext(activeFrame, null).map(({ state }) => state),
+ ['complete', 'active', 'pending']
+ )
+ const context = bindExecutionOverlayContext(activeFrame, {
+ state_id: activeFrame.state_id,
+ event_sequence: activeFrame.event_sequence,
+ surface: 'browser',
+ runtime: 'local',
+ minimum_effect_tier: 1,
+ effect_evidence: 'passed',
+ execution_stage: 'act',
+ model_calls: 0,
+ external_network_calls: 'observed',
+ })
+ assert.deepEqual(
+ executionRailForBoundContext(activeFrame, context).map(({ state }) => state),
+ ['complete', 'active', 'pending']
+ )
+ const presentation = executionOverlayPresentation(activeFrame, context, 12_000)
+ assert.equal(presentation.progressLabel, 'Step 1 of 2')
+ assert.deepEqual(presentation.secondaryLabels, [
+ 'Browser',
+ 'Local runtime',
+ 'Standard profile',
+ '0:12',
+ 'Independent system check (Tier 1)',
+ 'Effect evidence passed',
+ '0 model calls',
+ 'External network activity observed',
+ ])
+ assert.throws(
+ () => bindExecutionOverlayContext(activeFrame, {
+ ...context,
+ evidence_href: 'https://example.com/evidence',
+ }),
+ /unsafe evidence link/
+ )
+})
+
+test('exact presentation refuses an unbound fallback encoding', async () => {
+ const { isSingleSourceExactPresentationMedia } = await import(
+ '../lib/executionOverlayTimeline.js'
+ )
+ const exactMedia = {
+ kind: 'video',
+ src: '/presentation.mp4',
+ mimeType: 'video/mp4',
+ sha256: digest,
+ width: 1280,
+ height: 720,
+ alt: 'Exact presentation fixture',
+ fallbackSrc: '/presentation.mp4',
+ fallbackMimeType: 'video/mp4',
+ }
+ assert.equal(isSingleSourceExactPresentationMedia(exactMedia), false)
+ delete exactMedia.fallbackSrc
+ delete exactMedia.fallbackMimeType
+ assert.equal(isSingleSourceExactPresentationMedia(exactMedia), true)
+})
diff --git a/tests/homeVerticalSync.test.js b/tests/homeVerticalSync.test.js
deleted file mode 100644
index 160bad07..00000000
--- a/tests/homeVerticalSync.test.js
+++ /dev/null
@@ -1,81 +0,0 @@
-const assert = require('node:assert/strict')
-const fs = require('node:fs')
-const path = require('node:path')
-const test = require('node:test')
-
-const root = path.join(__dirname, '..')
-const read = (relativePath) =>
- fs.readFileSync(path.join(root, relativePath), 'utf8')
-
-test('the process section derives its vertical from the prop, not its own state', () => {
- const component = read('components/HomeReferenceWorkflow.js')
-
- assert.match(
- component,
- /export default function HomeReferenceWorkflow\(\{ vertical, onSelectVertical \}\)/
- )
- // No independent copy of the selection inside the section.
- assert.doesNotMatch(component, /useState/)
- // The section resolves the active reference from the shared vertical.
- assert.match(component, /HOME_REFERENCES\.find\(\(item\) => item\.key === vertical\)/)
- // The in-section tabs write the shared selection.
- assert.match(component, /onClick=\{\(\) => onSelectVertical\(item\.key\)\}/)
- assert.match(component, /aria-pressed=\{item\.key === reference\.key\}/)
-})
-
-test('reference footage restarts on select and keeps the animated GIF behavior', () => {
- const component = read('components/HomeReferenceWorkflow.js')
-
- // Uses the shared (animated GIF via , #213/#214 behavior).
- assert.match(component, /import Clip from '\.\/Clip'/)
- // Each stage is keyed by the selected vertical, so switching remounts the
- // clips/panels and the GIF restarts from its first frame.
- assert.match(component, /key=\{`\$\{reference\.key\}-record`\}/)
- assert.match(component, /key=\{`\$\{reference\.key\}-replay`\}/)
- // No bespoke reduced-motion swap or play/pause control is reintroduced
- // here; the GIF assets and shared Clip styling own that behavior.
- assert.doesNotMatch(component, /|reducedMotion|Pause animation|Play animation/)
-})
-
-test('shared reference data stays honest per vertical', () => {
- const data = read('data/referenceWorkflows.js')
-
- assert.match(data, /VERTICAL_KEYS = \['healthcare', 'lending', 'insurance'\]/)
- assert.match(data, /DEFAULT_VERTICAL = 'lending'/)
- for (const key of ['healthcare', 'lending', 'insurance']) {
- assert.match(data, new RegExp(`key: '${key}'`))
- }
-
- // Healthcare must stay qualification-required — never promoted to verified.
- // Scope the check to the healthcare block so lending's verified 6/6 does
- // not leak into the assertion.
- const healthcareBlock = data.slice(
- data.indexOf("key: 'healthcare'"),
- data.indexOf("key: 'lending'")
- )
- assert.match(healthcareBlock, /qualified: false/)
- assert.doesNotMatch(healthcareBlock, /qualified: true/)
- assert.doesNotMatch(healthcareBlock, /6 ?\/ ?6|verified/i)
- assert.match(healthcareBlock, /Deployment-specific oracle required/)
- assert.match(healthcareBlock, /No application-specific audit result claimed/)
-
- // Lending and Insurance carry their bounded verified evidence.
- assert.match(data, /key: 'lending'[\s\S]*?qualified: true/)
- assert.match(data, /0 silent incorrect successes/)
- assert.match(data, /key: 'insurance'[\s\S]*?qualified: true/)
- assert.match(data, /0 duplicate claims/)
-
- // Each vertical uses its OWN application footage (no cross-reuse).
- const gifMatches = [...data.matchAll(/gif: '([^']+\.gif)'/g)].map(
- (match) => match[1]
- )
- assert.equal(gifMatches.length, 6)
- assert.equal(new Set(gifMatches).size, 6, 'each clip must use unique footage')
- for (const gif of gifMatches) {
- assert.equal(
- fs.existsSync(path.join(root, 'public', gif)),
- true,
- `${gif} should exist`
- )
- }
-})
diff --git a/tests/howItWorksIndustryPanels.test.js b/tests/howItWorksIndustryPanels.test.js
deleted file mode 100644
index 8b63fa89..00000000
--- a/tests/howItWorksIndustryPanels.test.js
+++ /dev/null
@@ -1,148 +0,0 @@
-const assert = require('node:assert/strict')
-const fs = require('node:fs')
-const path = require('node:path')
-const test = require('node:test')
-
-const root = path.join(__dirname, '..')
-const read = (relativePath) =>
- fs.readFileSync(path.join(root, relativePath), 'utf8')
-
-test('every homepage process visual follows the selected real reference app', () => {
- const howItWorks = read('components/HowItWorks.js')
- const panels = read('components/ReferenceStagePanel.js')
- const panelStyles = read('components/ReferenceStagePanel.module.css')
-
- assert.match(howItWorks, /import ReferenceStagePanel/)
- for (const key of ['healthcare', 'lending', 'insurance']) {
- assert.match(howItWorks, new RegExp(`key: '${key}'`))
- }
- for (const stage of ['record', 'compile', 'replay', 'resolve', 'verify']) {
- assert.match(howItWorks, new RegExp(`visualKey: '${stage}'`))
- }
- assert.match(howItWorks, /selectedReference\[\s*step\.visualKey\s*\]/)
- assert.match(howItWorks, /reference=\{selectedReference\}/)
- assert.doesNotMatch(howItWorks, /manifest\.steps\.(compile|heal|audit)/)
- assert.doesNotMatch(howItWorks, /MockMed|shared engine lifecycle/)
-
- const selectedAppSources = {
- healthcare: [
- '/how-it-works/record_openemr.gif',
- '/how-it-works/run_openemr.gif',
- ],
- lending: [
- '/lending-demo/record-frappe.gif',
- '/lending-demo/replay-frappe.gif',
- ],
- insurance: [
- '/insurance-demo/record-openimis.gif',
- '/insurance-demo/replay-openimis.gif',
- ],
- }
- for (const sources of Object.values(selectedAppSources)) {
- for (const source of sources) {
- assert.match(howItWorks, new RegExp(source.replaceAll('/', '\\/')))
- }
- }
- assert.equal(
- new Set(Object.values(selectedAppSources).flat()).size,
- 6,
- 'each reference app must use its own media sources'
- )
-
- for (const stage of ['compile', 'resolve', 'verify']) {
- assert.match(panels, new RegExp(`stage="${stage}"`))
- }
- assert.match(panels, /data-reference=\{reference\.key\}/)
- assert.match(panels, /data-stage-source=\{media\.src\}/)
- assert.match(panels, /src=\{media\.src\}/)
- assert.match(panels, /className=\{styles\.application\}/)
- assert.doesNotMatch(panels, /sourceChip/)
- const sceneMarkup = panels.slice(
- panels.indexOf(''),
- panels.indexOf(' {
- const howItWorks = read('components/HowItWorks.js')
- const panels = read('components/ReferenceStagePanel.js')
-
- const tracks = [
- ['openemrTargets', '6.58s'],
- ['frappeTargets', '10.18s'],
- ['openimisTargets', '19.79s'],
- ]
- for (const [animationClass, duration] of tracks) {
- assert.match(
- howItWorks,
- new RegExp(
- `animationClass: '${animationClass}'[\\s\\S]*?duration: '${duration.replace(
- '.',
- '\\.'
- )}'`
- )
- )
- }
- assert.equal(
- new Set(tracks.map(([animationClass]) => animationClass)).size,
- tracks.length
- )
- assert.equal(
- new Set(tracks.map(([, duration]) => duration)).size,
- tracks.length
- )
- assert.match(panels, /data-resolve-track=\{track\.animationClass\}/)
- assert.match(panels, /data-resolve-duration=\{track\.duration\}/)
- assert.match(panels, /styles\[track\.animationClass\]/)
- assert.match(panels, /data-media-ready=\{mediaReady \? 'true' : 'false'\}/)
- assert.match(panels, /new IntersectionObserver/)
- assert.match(panels, /key=\{mediaToken\}/)
- assert.match(panels, /onLoad=\{\(\) => setLoadedMedia\(mediaToken\)\}/)
-})
-
-test('industry panels distinguish bounded evidence from required qualification', () => {
- const howItWorks = read('components/HowItWorks.js')
-
- assert.match(
- howItWorks,
- /healthcare:[\s\S]*?status: 'qualification required'[\s\S]*?qualified: false/
- )
- assert.match(howItWorks, /effect oracle', 'not established by this media'/i)
- assert.match(howItWorks, /No application-specific audit result claimed/)
- assert.match(howItWorks, /status: '6 \/ 6 verified'/)
- assert.match(howItWorks, /0 silent incorrect successes/)
- assert.match(howItWorks, /status: '3 \/ 3 verified'/)
- assert.match(howItWorks, /0 duplicate claims/)
- assert.match(
- howItWorks,
- /Every stage uses the selected reference application/
- )
-})
-
-test('primary navigation exposes Insurance and collapses before links crowd', () => {
- const nav = read('components/NavHeader.js')
- const css = read('components/NavHeader.module.css')
-
- assert.match(nav, /label: 'Insurance', href: '\/solutions\/insurance'/)
- // 1200px: the twelve-item nav (Blog + Developers dropdown included)
- // collapses to the mobile menu before links crowd, while the
- // 1280px-wide desktop contract in cypress/e2e/basic.cy.js still
- // sees the full link row.
- assert.match(css, /@media \(max-width: 1200px\)/)
- assert.match(css, /max-height: calc\(100vh - 60px\)/)
- assert.match(css, /overflow-y: auto/)
- assert.match(css, /@media \(max-width: 420px\)/)
-})
diff --git a/tests/insuranceReference.test.js b/tests/insuranceReference.test.js
index ae0992b0..cb70bc7f 100644
--- a/tests/insuranceReference.test.js
+++ b/tests/insuranceReference.test.js
@@ -8,43 +8,10 @@ const root = path.join(__dirname, '..')
const read = (relativePath) =>
fs.readFileSync(path.join(root, relativePath), 'utf8')
-test('insurance page shows a real openIMIS workflow demo without reusing other vertical media', () => {
- const insurance = read('pages/solutions/insurance.js')
- const demo = read('components/InsuranceWorkflowDemo.js')
-
- assert.doesNotMatch(insurance, /import HowItWorks/)
- assert.match(insurance, /import InsuranceWorkflowDemo/)
- assert.match(insurance, /Insurance claims execution/i)
- assert.match(insurance, /supported API/)
- assert.match(insurance, /supported APIs for adjudication/)
- assert.doesNotMatch(`${insurance}\n${demo}`, /OpenEMR|Frappe|Encompass|mortgage/i)
- assert.match(demo, /openimis-claims-workflow-demo/)
- assert.match(demo, /From demonstration to verified openIMIS claim/)
- assert.match(demo, /synthetic local fixture/i)
- assert.match(demo, /direct SQL read/)
- assert.match(demo, /exactly one new claim row/)
- assert.match(demo, /0 duplicate claims/)
- assert.match(demo, /0 wrong-policyholder writes/)
- assert.match(demo, /0 model calls/)
- assert.match(demo, /\/insurance-demo\/record-openimis\.gif/)
- assert.match(demo, /\/insurance-demo\/replay-openimis\.gif/)
- assert.match(demo, /import Clip from '\.\/Clip'/)
- assert.match(demo, /|prefers-reduced-motion/)
- assert.match(demo, /\/insurance-demo\/provenance\.json/)
- assert.match(demo, /Inspect evidence manifest/)
- assert.match(demo, /evidence manifest records the exact[\s\S]*software, task, oracle, media hashes, and scope/i)
- assert.match(demo, /openIMIS 25\.10/)
- assert.match(demo, /unaffiliated with the openIMIS Initiative/)
- assert.doesNotMatch(demo, /insurance-evidence-placeholder|awaiting oracle verification/i)
-})
-
test('insurance reference is linked from the buyer-fit grid and llms.txt', () => {
const industries = read('components/IndustriesGrid.js')
const footer = read('components/Footer.js')
const nav = read('components/NavHeader.js')
- const howItWorks = read('components/HowItWorks.js')
const llms = read('public/llms.txt')
const sitemap = read('public/sitemap.xml')
@@ -52,15 +19,6 @@ test('insurance reference is linked from the buyer-fit grid and llms.txt', () =>
assert.match(industries, /\/solutions\/insurance/)
assert.match(footer, /\/solutions\/insurance/)
assert.match(nav, /\/solutions\/insurance/)
- for (const useCase of ['Healthcare', 'Lending', 'Insurance']) {
- assert.match(howItWorks, new RegExp(`label: '${useCase}'`))
- }
- assert.match(howItWorks, /role="group"/)
- assert.match(howItWorks, /aria-pressed=/)
- assert.match(howItWorks, /\/lending-demo\/record-frappe\.gif/)
- assert.match(howItWorks, /\/lending-demo\/replay-frappe\.gif/)
- assert.match(howItWorks, /\/insurance-demo\/record-openimis\.gif/)
- assert.match(howItWorks, /\/insurance-demo\/replay-openimis\.gif/)
assert.match(sitemap, /https:\/\/openadapt\.ai\/solutions\/insurance/)
assert.match(llms, /Insurance Claims Execution/)
assert.match(llms, /direct SQL claim-row oracle/)
diff --git a/tests/publicTruth.test.js b/tests/publicTruth.test.js
index 5a74f244..ffa35718 100644
--- a/tests/publicTruth.test.js
+++ b/tests/publicTruth.test.js
@@ -157,46 +157,6 @@ test('buyer-fit section leads with infrastructure operators, not vertical claims
assert.doesNotMatch(industries, /theresanaiforthat|TAAFT/i)
})
-test('workflow and execution-environment selectors are independent and media-honest', () => {
- const howItWorks = read('components/HowItWorks.js')
- const overlay = read('components/ExecutionEnvironmentOverlay.js')
-
- for (const label of [
- 'Healthcare',
- 'Lending',
- 'Insurance',
- 'Browser',
- 'Windows',
- 'macOS',
- 'Linux',
- 'RDP',
- 'Citrix',
- ]) {
- assert.match(howItWorks, new RegExp(`label: '${label}'`))
- }
-
- assert.match(
- howItWorks,
- /Choose a workflow and execution environment\s+independently/
- )
- assert.match(howItWorks, /aria-label="Execution environment"/)
- assert.match(howItWorks, /sourceKind: 'application-footage'/)
- assert.match(howItWorks, /sourceKind: 'environment-visualization'/)
- assert.match(howItWorks, /sourceKind: 'transport-visualization'/)
- assert.match(
- howItWorks,
- /Native Linux execution uses AT-SPI structural evidence/
- )
- assert.match(
- howItWorks,
- /Application footage and execution-environment\s+overlays are labeled separately/
- )
- assert.match(
- overlay,
- /data-environment-source-kind=\{environment\.sourceKind\}/
- )
-})
-
test('end-user quickstarts enter through OpenAdapt while engine links stay technical', () => {
const install = read('components/InstallSection.js')
const pricing = read('components/Pricing.js')
@@ -251,39 +211,6 @@ test('public repository declares its lifecycle state', () => {
assert.match(read('README.md'), /Lifecycle: Beta/)
})
-test('lending page shows a real Frappe workflow demo without reusing healthcare media', () => {
- const lending = read('pages/solutions/lending.js')
- const demo = read('components/LendingWorkflowDemo.js')
-
- assert.doesNotMatch(lending, /import HowItWorks/)
- assert.match(lending, /import LendingWorkflowDemo/)
- assert.match(lending, /Lending operations/)
- assert.match(lending, /supported APIs and exports/)
- assert.match(lending, /final UI-only mile/)
- assert.doesNotMatch(`${lending}\n${demo}`, /OpenEMR|mortgage|Encompass/i)
- assert.match(demo, /frappe-lending-workflow-demo/)
- assert.match(demo, /From demonstration to verified Frappe write/)
- assert.match(demo, /synthetic local fixture/i)
- assert.match(demo, /separately authenticated read-only REST session/)
- assert.match(demo, /direct SQL delta audit/)
- assert.match(demo, /6\/6 compiled trials correct/)
- assert.match(demo, /0 silent incorrect successes/)
- assert.match(demo, /0 over-halts/)
- assert.match(demo, /0 model calls/)
- assert.match(demo, /\/lending-demo\/record-frappe\.gif/)
- assert.match(demo, /\/lending-demo\/replay-frappe\.gif/)
- assert.match(demo, /import Clip from '\.\/Clip'/)
- assert.match(demo, /|prefers-reduced-motion/)
- assert.doesNotMatch(demo, /Pause animation|Play animation/)
- assert.match(demo, /\/lending-demo\/provenance\.json/)
- assert.match(demo, /Inspect evidence manifest/)
- assert.match(demo, /evidence manifest records the exact software, task,[\s\S]*oracle, media hashes, and scope/i)
- assert.match(demo, /Frappe Lending v16\.2\.0/)
- assert.doesNotMatch(demo, /lending-evidence-placeholder|awaiting oracle verification/i)
-})
-
test('lending demo media has durable synthetic evidence provenance', () => {
const provenance = JSON.parse(read('public/lending-demo/provenance.json'))