diff --git a/components/ExecuteApiExchange.js b/components/ExecuteApiExchange.js new file mode 100644 index 0000000..e02ed15 --- /dev/null +++ b/components/ExecuteApiExchange.js @@ -0,0 +1,34 @@ +import styles from './ExecuteApiExchange.module.css' + +function CodeLine({ children }) { + return {children} +} + +export default function ExecuteApiExchange() { + return ( +
+
+

Asynchronous by design

+

One transaction. A durable terminal receipt.

+

Your request gets an immediate acceptance. A signed webhook then delivers the terminal result when the runner has proof or needs reconciliation.

+
+
    +
  1. +

    1 · Submit an authorized transaction

    +
    POST /v1/executions{'{'}{'  "schema_version":'}{'    "openadapt.execute-request/v1",'}{'  "idempotency_key": "txn_…",'}{'  "parameters": { … }'}{'}'}
    +

    Your product supplies structured input. The qualified workflow defines the permitted effect.

    +
  2. +
  3. +

    2 · Keep the transaction identity

    +
    202 Accepted{'{'}{'  "schema_version":'}{'    "openadapt.execute-accepted/v1",'}{'  "execution_id": "exec_…",'}{'  "state": "queued"'}{'}'}
    +

    Acceptance is not a success claim. Poll this ID if your webhook endpoint is unavailable.

    +
  4. +
  5. +

    3 · Verify the terminal delivery

    +
    POST /hooks/openadapt{'{'}{'  "schema_version":'}{'    "openadapt.execute-webhook/v1",'}{'  "event_type": "execution.terminal",'}{'  "receipt": {'}{'    "outcome": "verified", …'}{'  },'}{'  "signature": "hmac-sha256:…"'}{'}'}
    +

    Verify the signature and store the receipt. The outcome can also require reconciliation instead of a retry.

    +
  6. +
+
+ ) +} diff --git a/components/ExecuteApiExchange.module.css b/components/ExecuteApiExchange.module.css new file mode 100644 index 0000000..758e432 --- /dev/null +++ b/components/ExecuteApiExchange.module.css @@ -0,0 +1,84 @@ +.exchange { + padding: clamp(1.25rem, 3vw, 2rem); + border: 1px solid var(--hairline); + border-radius: 1rem; + background: var(--panel); +} + +.heading { max-width: 42rem; } + +.heading h2 { + margin: 0.4rem 0 0; + color: var(--ink); + font-family: var(--font-display); + font-size: clamp(1.5rem, 3vw, 2rem); + line-height: 1.15; +} + +.heading > p:last-child { + margin: 0.75rem 0 0; + color: var(--ink-2); + font-size: 0.95rem; + line-height: 1.55; +} + +.messages { + display: grid; + gap: 1rem; + padding: 0; + margin: 1.5rem 0 0; + list-style: none; +} + +.messages li { + position: relative; + min-width: 0; + padding: 1rem; + overflow: hidden; + border: 1px solid var(--hairline); + border-radius: 0.75rem; + background: var(--ground); +} + +.label { + margin: 0 0 0.65rem; + color: var(--accent); + font-family: var(--font-mono); + font-size: 0.68rem; + font-weight: 700; + letter-spacing: 0.07em; + text-transform: uppercase; +} + +.messages pre { + max-width: 100%; + padding: 0.8rem; + margin: 0; + overflow-x: auto; + border-radius: 0.5rem; + background: var(--ink); + color: var(--ground); + font-family: var(--font-mono); + font-size: clamp(0.68rem, 1.8vw, 0.76rem); + line-height: 1.65; +} + +.line { + display: block; + overflow-wrap: anywhere; + white-space: pre-wrap; +} +.method { color: #a9d7b5; } +.status { color: #d9d68b; } +.webhook { color: #9bc8d7; } + +.note { + margin: 0.7rem 0 0; + color: var(--ink-2); + font-size: 0.78rem; + line-height: 1.45; +} + +@media (min-width: 760px) { + .messages { grid-template-columns: repeat(3, minmax(0, 1fr)); } +} diff --git a/components/ExecuteBoundaryFlow.js b/components/ExecuteBoundaryFlow.js new file mode 100644 index 0000000..4c01e81 --- /dev/null +++ b/components/ExecuteBoundaryFlow.js @@ -0,0 +1,86 @@ +import styles from './ExecuteBoundaryFlow.module.css' + +const stages = [ + { + title: 'Your product', + detail: 'Authorized structured input', + kind: 'input', + }, + { + title: 'OpenAdapt', + detail: 'Qualified contract and authorization', + kind: 'proof', + }, + { + title: 'Customer-controlled runner', + detail: 'Local observation and actuation', + kind: 'runner', + }, +] + +function StageIcon({ kind }) { + if (kind === 'input') { + return ( + + ) + } + + if (kind === 'runner') { + return ( + + ) + } + + return ( + + ) +} + +function Connector({ returnPath = false }) { + return ( + + ) +} + +// A static, semantic flow remains available when motion is reduced. The moving +// dash is presentation-only; the text defines the actual execution boundary. +export default function ExecuteBoundaryFlow() { + return ( +
+
+ Your product sends authorized structured input to OpenAdapt. OpenAdapt binds it to a qualified contract and sends it to a customer-controlled runner. The runner acts locally. A signed receipt returns through OpenAdapt. +
+
+ {stages.map((stage, index) => ( +
+
+ + + {stage.title} + {stage.detail} + +
+ {index < stages.length - 1 && } +
+ ))} +
+
+ +

A signed receipt returns through OpenAdapt after verification or a governed stop.

+
+
+ ) +} diff --git a/components/ExecuteBoundaryFlow.module.css b/components/ExecuteBoundaryFlow.module.css new file mode 100644 index 0000000..0221989 --- /dev/null +++ b/components/ExecuteBoundaryFlow.module.css @@ -0,0 +1,171 @@ +.figure { + margin: 0; + padding: 1.25rem; + border: 1px solid var(--hairline); + border-radius: 1rem; + background: var(--ground); +} + +.flow { + display: flex; + align-items: stretch; + justify-content: center; +} + +.part { + display: flex; + flex: 1 1 0; + align-items: center; + min-width: 0; +} + +.stage { + display: flex; + flex: 1 1 auto; + align-items: center; + gap: 0.75rem; + min-width: 0; + padding: 0.9rem; + border: 1px solid var(--hairline); + border-radius: 0.75rem; + background: var(--panel); +} + +.icon { + display: grid; + flex: 0 0 auto; + width: 2.25rem; + height: 2.25rem; + place-items: center; + border-radius: 999px; + background: color-mix(in srgb, var(--accent) 12%, transparent); + color: var(--accent); +} + +.icon svg { + width: 1.25rem; + height: 1.25rem; + fill: none; + stroke: currentColor; + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 1.8; +} + +.stageCopy { + display: grid; + gap: 0.2rem; + min-width: 0; +} + +.stageCopy strong { + color: var(--ink); + font-size: 0.84rem; + line-height: 1.2; +} + +.stageCopy span, +.returnLane p { + color: var(--ink-2); + font-size: 0.72rem; + line-height: 1.35; +} + +.connector { + display: grid; + flex: 0 1 6.25rem; + justify-items: center; + gap: 0.15rem; + min-width: 3.5rem; + color: var(--accent); +} + +.connector svg { + width: 100%; + max-width: 5rem; + height: 1.5rem; + overflow: visible; +} + +.connector path { + fill: none; + stroke: currentColor; + stroke-dasharray: 4 4; + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 1.6; + animation: travel 1.8s linear infinite; +} + +.connector span { + max-width: 5.5rem; + color: var(--ink-3); + font-size: 0.62rem; + line-height: 1.15; + text-align: center; +} + +.returnLane { + display: grid; + grid-template-columns: minmax(4rem, 14rem) minmax(0, 1fr); + align-items: center; + gap: 0.75rem; + max-width: 26rem; + margin: 1rem auto 0; +} + +.returnLane p { + margin: 0; +} + +.returnPath svg { + transform: scaleX(-1); +} + +.returnPath path { + animation-direction: reverse; +} + +.srOnly { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +@keyframes travel { + to { stroke-dashoffset: -16; } +} + +@media (prefers-reduced-motion: reduce) { + .connector path { animation: none; } +} + +@media (max-width: 760px) { + .flow, + .part { + flex-direction: column; + } + + .part { width: 100%; } + + .stage { width: 100%; } + + .connector { + flex-basis: auto; + min-height: 3.25rem; + } + + .connector svg { transform: rotate(90deg); } + + .returnLane { + grid-template-columns: 3.5rem minmax(0, 1fr); + margin-top: 0.5rem; + } + + .returnPath svg { transform: rotate(90deg) scaleX(-1); } +} diff --git a/components/ExecuteOutcomeCards.js b/components/ExecuteOutcomeCards.js new file mode 100644 index 0000000..cdfd525 --- /dev/null +++ b/components/ExecuteOutcomeCards.js @@ -0,0 +1,49 @@ +import styles from './ExecuteOutcomeCards.module.css' + +const outcomes = [ + { + name: 'VERIFIED', + detail: 'The configured identity, postcondition, and business-effect proof passed.', + type: 'verified', + }, + { + name: 'HALTED_BEFORE_EFFECT', + detail: 'The runner stopped when its authorization, target, identity, or policy evidence did not match.', + type: 'halted', + }, + { + name: 'RECONCILIATION_REQUIRED', + detail: 'A possible delivery needs an independent check. The runner does not repeat a consequential write blindly.', + type: 'reconcile', + }, +] + +function OutcomeIcon({ type }) { + const paths = type === 'verified' + ? + : type === 'halted' + ? <> + : <> + + return ( + + ) +} + +export default function ExecuteOutcomeCards() { + return ( +
    + {outcomes.map((outcome) => ( +
  • + +
    +

    {outcome.name}

    +

    {outcome.detail}

    +
    +
  • + ))} +
+ ) +} diff --git a/components/ExecuteOutcomeCards.module.css b/components/ExecuteOutcomeCards.module.css new file mode 100644 index 0000000..c216939 --- /dev/null +++ b/components/ExecuteOutcomeCards.module.css @@ -0,0 +1,52 @@ +.cards { + display: grid; + gap: 0.8rem; + padding: 0; + margin: 0; + list-style: none; +} + +.card { + display: flex; + gap: 0.8rem; + padding: 1rem; + border: 1px solid var(--hairline); + border-radius: 0.75rem; + background: var(--ground); +} + +.card > svg { + flex: 0 0 auto; + width: 1.5rem; + height: 1.5rem; + margin-top: 0.05rem; + fill: none; + stroke: currentColor; + stroke-linecap: round; + stroke-linejoin: round; + stroke-width: 2; +} + +.card h3 { + margin: 0; + color: var(--ink); + font-family: var(--font-mono); + font-size: 0.72rem; + letter-spacing: 0.06em; + line-height: 1.35; +} + +.card p { + margin: 0.4rem 0 0; + color: var(--ink-2); + font-size: 0.78rem; + line-height: 1.45; +} + +.verified { color: var(--accent); } +.halted { color: #955839; } +.reconcile { color: #77621d; } + +@media (min-width: 700px) { + .cards { grid-template-columns: repeat(3, minmax(0, 1fr)); } +} diff --git a/components/RdpHybridPresentation.js b/components/RdpHybridPresentation.js new file mode 100644 index 0000000..577fa23 --- /dev/null +++ b/components/RdpHybridPresentation.js @@ -0,0 +1,512 @@ +import { useEffect, useMemo, useRef, useState } from 'react' + +import styles from './RdpHybridPresentation.module.css' + +const MISSING_TIMELINE = + 'The media timeline is unavailable. OpenAdapt shows the authenticated video and artifacts, but it does not infer a phase from playback time.' + +// These labels only describe renderer phases. The runtime facts stay in the +// exporter payload and are rendered below without a frontend interpretation. +const PHASE_PRESENTATION = { + execute_request: { + label: 'Authorized request', + detail: 'A qualified request enters the execution boundary.', + }, + demonstration: { + label: 'Demonstrate through RDP', + detail: 'The presentation replays retained operator input.', + }, + compiled_workflow: { + label: 'Compiled workflow', + detail: 'OpenAdapt exposes the exact exported workflow node.', + }, + governed_replay: { + label: 'Governed replay', + detail: 'The runner replays the qualified workflow with fresh observations.', + }, + independent_effect_check: { + label: 'Independent effect proof', + detail: 'The configured verifier determines the result.', + }, + wrong_record_refusal: { + label: 'Wrong-record refusal', + detail: 'The qualified workflow stops before the consequential action.', + }, + terminal_summary: { + label: 'Execution result', + detail: 'The presentation shows the retained terminal result.', + }, +} + +const clamp = (value, minimum, maximum) => + Math.min(Math.max(value, minimum), maximum) + +const timeLabel = (milliseconds) => { + const seconds = Math.max(0, Math.floor(milliseconds / 1000)) + return `${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, '0')}` +} + +const readJson = async (source) => { + const response = await fetch(source, { cache: 'force-cache' }) + if (!response.ok) throw new Error(`Could not load ${source}`) + return response.json() +} + +function validTimeline(timeline, manifest) { + if (!timeline || typeof timeline !== 'object') return null + if (timeline.schema_version !== 'openadapt.rdp-hybrid-presentation.v1') { + return null + } + const derivative = timeline.derivative + if (!derivative || typeof derivative !== 'object') return null + if (derivative.video_sha256 !== manifest?.video_sha256) return null + if (derivative.video !== manifest?.video) return null + if (!Number.isInteger(derivative.fps) || derivative.fps <= 0) return null + if (!Number.isInteger(derivative.frame_count) || derivative.frame_count <= 0) { + return null + } + if (timeline.program_graph_sha256 !== manifest?.program_graph_sha256) return null + if (!Array.isArray(timeline.timeline) || !timeline.timeline.length) return null + const duration = derivative.frame_count / derivative.fps + let expectedStart = 0 + const valid = timeline.timeline.every((entry) => { + if (!entry || typeof entry !== 'object') return false + if (typeof entry.phase !== 'string' || !PHASE_PRESENTATION[entry.phase]) { + return false + } + if (!Number.isInteger(entry.start_frame)) return false + if (!Number.isInteger(entry.end_frame_exclusive)) return false + if ( + entry.start_frame !== expectedStart || + entry.start_frame < 0 || + entry.end_frame_exclusive <= entry.start_frame + ) { + return false + } + if (entry.end_frame_exclusive > derivative.frame_count) return false + if (!Number.isFinite(entry.start_pts_s) || !Number.isFinite(entry.end_pts_s)) { + return false + } + if (entry.start_pts_s !== entry.start_frame / derivative.fps) return false + if (entry.end_pts_s !== entry.end_frame_exclusive / derivative.fps) return false + expectedStart = entry.end_frame_exclusive + return entry.end_pts_s <= duration + }) + if (!valid || expectedStart !== derivative.frame_count) return null + return timeline +} + +function activeEntry(timeline, currentMs) { + if (!timeline) return null + const frame = Math.min( + timeline.derivative.frame_count - 1, + Math.max(0, Math.floor((currentMs / 1000) * timeline.derivative.fps)) + ) + return ( + timeline.timeline.find( + (entry) => + frame >= entry.start_frame && frame < entry.end_frame_exclusive + ) ?? timeline.timeline.at(-1) + ) +} + +function phaseChapters(timeline) { + if (!timeline) return [] + const chapters = [] + for (const entry of timeline.timeline) { + const previous = chapters.at(-1) + if (previous?.phase === entry.phase) { + previous.end_pts_s = entry.end_pts_s + previous.end_frame_exclusive = entry.end_frame_exclusive + } else { + chapters.push({ + phase: entry.phase, + start_pts_s: entry.start_pts_s, + end_pts_s: entry.end_pts_s, + start_frame: entry.start_frame, + end_frame_exclusive: entry.end_frame_exclusive, + }) + } + } + return chapters +} + +function evidencePath(entry, activeNode) { + const facts = entry?.facts ?? {} + return [ + { + label: 'Request', + value: + typeof facts.authorization === 'string' + ? facts.authorization + : null, + }, + { + label: 'Identity', + value: typeof facts.identity === 'string' ? facts.identity : null, + }, + { + label: 'Compiled action', + value: activeNode?.title ?? null, + }, + { + label: 'Effect proof', + value: + typeof facts.effect === 'string' + ? [facts.effect, facts.effect_verifier_kind] + .filter((value) => typeof value === 'string') + .join(' · ') + : null, + }, + { + label: 'Outcome', + value: typeof facts.outcome === 'string' ? facts.outcome : null, + }, + ] +} + +export default function RdpHybridPresentation({ + videoSrc = '/demos/rdp/openadapt-rdp-demo.mp4', + poster = '/demos/rdp/poster.jpg', + manifestSrc = '/demos/rdp/presentation.manifest.json', + graphSrc = '/demos/rdp/program-graph.json', + timelineSrc = '/demos/rdp/presentation.timeline.json', +}) { + const shellRef = useRef(null) + const videoRef = useRef(null) + const stageRef = useRef(null) + const startedRef = useRef(false) + const [manifest, setManifest] = useState(null) + const [graph, setGraph] = useState(null) + const [timelinePayload, setTimelinePayload] = useState(null) + const [loadError, setLoadError] = useState(null) + const [currentMs, setCurrentMs] = useState(0) + const [durationMs, setDurationMs] = useState(0) + const [playing, setPlaying] = useState(false) + const [reducedMotion, setReducedMotion] = useState(true) + const [frameBindingAvailable, setFrameBindingAvailable] = useState(false) + + useEffect(() => { + let active = true + Promise.all([ + readJson(manifestSrc), + readJson(graphSrc), + readJson(timelineSrc).catch(() => null), + ]) + .then(([nextManifest, nextGraph, nextTimeline]) => { + if (!active) return + setManifest(nextManifest) + setGraph(nextGraph) + setTimelinePayload(nextTimeline) + }) + .catch((error) => { + if (active) setLoadError(error.message) + }) + return () => { + active = false + } + }, [graphSrc, manifestSrc, timelineSrc]) + + useEffect(() => { + const media = window.matchMedia('(prefers-reduced-motion: reduce)') + const update = () => { + setReducedMotion(media.matches) + const video = videoRef.current + if (!video) return + if (media.matches) video.pause() + } + update() + media.addEventListener?.('change', update) + return () => media.removeEventListener?.('change', update) + }, []) + + useEffect(() => { + if (reducedMotion || startedRef.current) return undefined + const shell = shellRef.current + const video = videoRef.current + if (!shell || !video || !window.IntersectionObserver) return undefined + + const observer = new window.IntersectionObserver( + ([intersection]) => { + if (!intersection?.isIntersecting || intersection.intersectionRatio < 0.4) { + return + } + startedRef.current = true + void video.play().catch(() => { + startedRef.current = false + }) + observer.disconnect() + }, + { threshold: [0.4] } + ) + observer.observe(shell) + return () => observer.disconnect() + }, [reducedMotion]) + + useEffect(() => { + const video = videoRef.current + const available = Boolean(video?.requestVideoFrameCallback) + setFrameBindingAvailable(available) + if (!available) return undefined + let callbackId + let mounted = true + const update = (_now, metadata) => { + if (!mounted) return + setCurrentMs(Math.round(metadata.mediaTime * 1000)) + callbackId = video.requestVideoFrameCallback(update) + } + callbackId = video.requestVideoFrameCallback(update) + return () => { + mounted = false + video.cancelVideoFrameCallback?.(callbackId) + } + }, []) + + const timeline = useMemo( + () => + frameBindingAvailable + ? validTimeline(timelinePayload, manifest) + : null, + [frameBindingAvailable, manifest, timelinePayload] + ) + const entry = activeEntry(timeline, currentMs) + const chapters = useMemo(() => phaseChapters(timeline), [timeline]) + const chapter = chapters.find( + (item) => + entry && + entry.start_frame >= item.start_frame && + entry.start_frame < item.end_frame_exclusive + ) + const activeNodeIds = new Set( + entry?.compiled_graph?.node_id ? [entry.compiled_graph.node_id] : [] + ) + const nodes = Array.isArray(graph?.nodes) ? graph.nodes : [] + const activeNode = nodes.find((node) => node.id === entry?.compiled_graph?.node_id) + const evidence = evidencePath(entry, activeNode) + const parameterNames = Array.isArray(graph?.bundle?.params) + ? graph.bundle.params + .map((parameter) => parameter?.name) + .filter((name) => typeof name === 'string') + : [] + const phaseContent = entry ? PHASE_PRESENTATION[entry.phase] : null + + const toggle = () => { + const video = videoRef.current + if (!video) return + if (video.paused) { + startedRef.current = true + if (video.ended || video.currentTime >= video.duration - 0.1) { + video.currentTime = 0 + } + void video.play() + } + else video.pause() + } + + const seek = (milliseconds) => { + const video = videoRef.current + if (!video || !timeline) return + const exactMs = clamp( + milliseconds, + 0, + Math.round( + (timeline.derivative.frame_count / timeline.derivative.fps) * 1000 + ) + ) + video.currentTime = exactMs / 1000 + } + + const expand = () => { + const stage = stageRef.current + if (!stage?.requestFullscreen) return + void stage.requestFullscreen() + } + + return ( +
+
+ Recorded reference execution + Evidence-bound view + + {manifest?.workflow_digest + ? `bundle ${manifest.workflow_digest.slice(0, 12)}` + : 'loading bundle binding'} + + + Open MP4 + +
+ +
+
+ +
+ {phaseContent?.label ?? 'Authenticated media'} + {entry?.facts?.outcome ?? 'Evidence view'} +
+ + +
+ seek(Number(event.target.value))} + disabled={!timeline} + /> +
+ {timeLabel(currentMs)} + {timeLabel(durationMs)} +
+
+
+ + +
+ +
+ {chapters.map((item, index) => { + const selected = item.phase === chapter?.phase + const presentation = PHASE_PRESENTATION[item.phase] + return ( + + ) + })} + {!timeline &&

{MISSING_TIMELINE}

} +
+ +
+
+
+

Compiled workflow

+ + {parameterNames.length + ? `Parameters: ${parameterNames.map((name) => `$${name}`).join(' · ')}` + : 'Only exact exported graph nodes appear here.'} + +
+ {reducedMotion ? 'Reduced motion' : 'Media-synced'} +
+
    + {nodes.map((node) => ( +
  1. + {String(node.index + 1).padStart(2, '0')} + {node.title} + + {node.param + ? `input: $${node.param}` + : node.badges?.join(' · ') || node.kind} + +
  2. + ))} +
+
+ + {loadError &&

Evidence load error: {loadError}

} +
+ ) +} diff --git a/components/RdpHybridPresentation.module.css b/components/RdpHybridPresentation.module.css new file mode 100644 index 0000000..c465c41 --- /dev/null +++ b/components/RdpHybridPresentation.module.css @@ -0,0 +1,211 @@ +.shell { + overflow: hidden; + border: 1px solid rgba(104, 224, 198, 0.28); + border-radius: 24px; + background: + radial-gradient(circle at 78% 0%, rgba(38, 140, 126, 0.18), transparent 32%), + linear-gradient(145deg, #071214 0%, #0a181b 48%, #071012 100%); + box-shadow: 0 30px 80px -48px rgba(8, 66, 59, 0.9); + color: #edf8f5; +} + +.topline, +.consoleHeader, +.graphHeader, +.clock, +.provenance, +.chapter, +.playButton { + display: flex; + align-items: center; +} + +.topline { + gap: 9px; + min-height: 42px; + padding: 0 18px; + border-bottom: 1px solid rgba(140, 211, 198, 0.14); + color: #a8c4be; + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 10px; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +.digest { margin-left: auto; color: #6f9088; } +.boundLabel { + padding: 4px 7px; + border: 1px solid rgba(140, 211, 198, .18); + border-radius: 999px; + color: #7fb4a8; +} +.mediaLink { + color: #a8c4be; + text-underline-offset: 3px; +} +.mediaLink:hover { color: #edf8f5; } +.grid { display: grid; gap: 1px; background: rgba(140, 211, 198, 0.14); } +.stage { position: relative; min-height: 300px; overflow: hidden; background: #071011; } +.video { display: block; width: 100%; height: 100%; min-height: 300px; object-fit: contain; background: #050a0b; } +.phaseBadge { position: absolute; top: 16px; left: 16px; display: grid; gap: 3px; padding: 8px 10px; border: 1px solid rgba(127, 247, 220, 0.32); border-radius: 10px; background: rgba(4, 19, 19, 0.74); backdrop-filter: blur(12px); font-size: 11px; } +.phaseBadge span { color: #95cac0; } +.phaseBadge strong { color: #e7fffa; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; letter-spacing: .07em; text-transform: uppercase; } +.phaseBadge[data-known='false'] strong { color: #b8cfca; } +.expandButton { + position: absolute; + top: 16px; + right: 16px; + padding: 7px 10px; + border: 1px solid rgba(159, 245, 223, .25); + border-radius: 999px; + background: rgba(4, 18, 18, .8); + color: #d8f4ee; + font-size: 11px; + font-weight: 700; + backdrop-filter: blur(12px); +} +.expandButton:hover { border-color: #79e4c5; background: #102728; } +.playButton { position: absolute; right: 16px; bottom: 48px; gap: 8px; padding: 9px 12px; border: 1px solid rgba(159, 245, 223, .25); border-radius: 999px; background: rgba(4, 18, 18, .8); color: #e5faf5; font-size: 12px; font-weight: 700; backdrop-filter: blur(12px); } +.playButton:hover { border-color: #79e4c5; background: #102728; } +.scrubWrap { position: absolute; right: 16px; bottom: 12px; left: 16px; } +.scrubWrap input { width: 100%; accent-color: #68e3bd; } +.scrubWrap input:disabled { opacity: .45; cursor: not-allowed; } +.clock { justify-content: space-between; color: #b2d0c9; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; } +.console { min-height: 300px; padding: 20px; background: linear-gradient(180deg, #0b1e20, #081516); } +.consoleHeader { justify-content: space-between; padding-bottom: 14px; border-bottom: 1px solid rgba(149, 222, 205, .15); color: #80b6aa; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; letter-spacing: .08em; text-transform: uppercase; } +.consoleHeader p { margin: 0; } +.consoleHeader span { color: #68e3bd; } +.console h3 { margin: 22px 0 8px; color: #f0fffb; font-family: var(--font-display, ui-sans-serif); font-size: 26px; line-height: 1.05; } +.console > p { margin: 0; color: #abc4bf; font-size: 14px; line-height: 1.55; } +.evidencePath { + display: grid; + gap: 0; + padding: 0; + margin: 20px 0 0; + list-style: none; +} +.evidencePath li { + position: relative; + display: grid; + grid-template-columns: 30px minmax(0, 1fr); + gap: 9px; + min-height: 48px; + color: #6f8d86; +} +.evidencePath li:not(:last-child)::after { + position: absolute; + top: 25px; + bottom: 3px; + left: 10px; + width: 1px; + background: rgba(130, 196, 182, .18); + content: ''; +} +.evidencePath li > span { + display: grid; + place-items: center; + width: 21px; + height: 21px; + border: 1px solid rgba(130, 196, 182, .22); + border-radius: 999px; + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 8px; +} +.evidencePath li div { min-width: 0; display: grid; gap: 2px; } +.evidencePath strong { color: #91aaa4; font-size: 11px; } +.evidencePath small { + overflow: hidden; + font-size: 10px; + text-overflow: ellipsis; + white-space: nowrap; +} +.evidencePath li[data-supported='true'] { color: #83eccb; } +.evidencePath li[data-supported='true'] > span { + border-color: rgba(101, 230, 189, .7); + background: rgba(75, 210, 171, .14); + box-shadow: 0 0 18px -8px #65e6bd; +} +.evidencePath li[data-supported='true'] strong { color: #e7fff9; } +.exactDetails { + display: grid; + gap: 7px; + margin-top: 4px; + padding-top: 13px; + border-top: 1px solid rgba(149, 222, 205, .15); +} +.exactDetails p { + display: grid; + grid-template-columns: auto minmax(0, 1fr); + gap: 10px; + margin: 0; + color: #75978f; + font-size: 10px; +} +.exactDetails strong { color: #a5c3bc; } +.exactDetails span { overflow: hidden; text-align: right; text-overflow: ellipsis; white-space: nowrap; } +.provenance { display: grid; grid-template-columns: auto 1fr; gap: 5px 10px; margin-top: 20px; padding-top: 14px; border-top: 1px solid rgba(149, 222, 205, .15); color: #78958e; font-size: 10px; } +.provenance code { overflow: hidden; color: #a9c9c1; text-overflow: ellipsis; white-space: nowrap; } +.rail { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; border-top: 1px solid rgba(140, 211, 198, .14); background: rgba(140, 211, 198, .14); } +.chapter { min-height: 84px; flex-direction: column; align-items: flex-start; justify-content: center; gap: 4px; padding: 12px 14px; border: 0; background: #0a1719; color: #d7f0ea; text-align: left; } +.chapter:hover, .chapter[data-active='true'] { background: #103034; } +.chapter[data-active='true'] { box-shadow: inset 0 2px 0 #69e2bd; } +.chapter > span { color: #67dfbc; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; } +.chapter strong { font-size: 12px; } +.chapter small { color: #87aaa2; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 9px; letter-spacing: .06em; text-transform: uppercase; } +.contractNote { grid-column: 1 / -1; margin: 0; padding: 14px 18px; background: #0a1719; color: #8eaaa4; font-size: 12px; line-height: 1.45; } +.graph { padding: 18px; border-top: 1px solid rgba(140, 211, 198, .14); background: #071213; } +.graphHeader { justify-content: space-between; gap: 18px; margin-bottom: 14px; } +.graphHeader p { margin: 0; color: #daf8f1; font-size: 13px; font-weight: 700; } +.graphHeader span { display: block; margin-top: 3px; color: #829e98; font-size: 11px; } +.motion { padding: 5px 7px; border: 1px solid rgba(128, 220, 196, .2); border-radius: 999px; color: #89bbb0 !important; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 9px !important; letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; } +.graph ol { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; padding: 0; margin: 0; list-style: none; } +.graph li { position: relative; min-height: 88px; padding: 12px; border: 1px solid rgba(142, 207, 193, .14); border-radius: 12px; background: #0b1c1d; opacity: .58; transition: border-color .25s ease, background .25s ease, opacity .25s ease, transform .25s ease; } +.graph li[data-active='true'] { border-color: rgba(99, 230, 191, .72); background: linear-gradient(145deg, #10443e, #0d2728); box-shadow: 0 0 28px -13px #60e6bf; opacity: 1; transform: translateY(-2px); } +.graph li > span { display: block; margin-bottom: 8px; color: #5de0b9; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 10px; } +.graph li strong { display: block; color: #ebfff9; font-size: 12px; line-height: 1.3; } +.graph li small { display: block; margin-top: 7px; color: #8caea6; font-size: 10px; line-height: 1.3; } +.error { margin: 0; padding: 12px 18px; border-top: 1px solid rgba(245, 148, 131, .24); background: rgba(107, 31, 24, .28); color: #ffb3a4; font-size: 12px; } +.srOnly { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} +@media (min-width: 900px) { .grid { grid-template-columns: minmax(0, 1.45fr) minmax(300px, .55fr); } .stage, .console { min-height: 470px; } .video { min-height: 470px; } } +@media (max-width: 699px) { + .topline { padding: 0 12px; } + .boundLabel, + .digest { display: none; } + .mediaLink { margin-left: auto; } + .stage { min-height: 0; aspect-ratio: 16 / 9; } + .video { min-height: 0; aspect-ratio: 16 / 9; } + .expandButton { top: 12px; right: 12px; } + .phaseBadge { top: 12px; left: 12px; } + .rail { + display: flex; + overflow-x: auto; + scroll-snap-type: x mandatory; + scrollbar-width: thin; + } + .chapter { + flex: 0 0 min(74vw, 250px); + scroll-snap-align: start; + } + .contractNote { min-width: 100%; } + .graph ol { + display: flex; + overflow-x: auto; + scroll-snap-type: x mandatory; + } + .graph li { + flex: 0 0 min(70vw, 240px); + scroll-snap-align: start; + } + .playButton { bottom: 52px; } +} +@media (prefers-reduced-motion: reduce) { .graph li { transition: none; } } diff --git a/lib/publicJsonArtifacts.mjs b/lib/publicJsonArtifacts.mjs index 3a2ded0..c95fb34 100644 --- a/lib/publicJsonArtifacts.mjs +++ b/lib/publicJsonArtifacts.mjs @@ -31,7 +31,7 @@ export const PUBLIC_JSON_ARTIFACTS = Object.freeze({ title: 'RDP reference qualification evidence', description: 'Exact trial outcomes, identity and effect checks, failure counts, and source versions for the accepted RDP reference batch.', - sha256: '1fb41f5ce79a68f506fa24e7a06641ee4c5d990bd29a34179f5163cb5b09c029', + sha256: '80f4fad81b27c6cbf8fecad0f8e7092b87d6943140d3eb0096dc2943b98bd173', }), '/demos/rdp/program-graph.json': Object.freeze({ source: '/demos/rdp/program-graph.json', @@ -40,7 +40,7 @@ export const PUBLIC_JSON_ARTIFACTS = Object.freeze({ title: 'RDP compiled workflow graph', description: 'The exact exported program graph used in the accepted RDP reference presentation.', - sha256: '9cffca5540f8fdb9bcbd9748906780d8369576508010af9a6741a64e93b755a3', + sha256: '7cb346cabe49b1077b9eaa960257d32f6a9262401fcf7443218e7726a7203570', }), '/demos/rdp/presentation.manifest.json': Object.freeze({ source: '/demos/rdp/presentation.manifest.json', @@ -49,7 +49,16 @@ export const PUBLIC_JSON_ARTIFACTS = Object.freeze({ title: 'RDP presentation manifest', description: 'Content hashes and exact retained-frame provenance for the paced RDP presentation video.', - sha256: '2087864cc3466d6f65c5d9486b31ffa1a166c6455a89eb05cf1e44211fe84525', + sha256: '4ab70f350be7894c1a3d4556afafd7b20558f9b3e807713518fc3b359d6095c3', + }), + '/demos/rdp/presentation.timeline.json': Object.freeze({ + source: '/demos/rdp/presentation.timeline.json', + fileName: 'presentation.timeline.json', + format: 'json', + title: 'RDP hybrid presentation timeline', + description: + 'Exact decoded-frame intervals, retained source-frame bindings, compiled graph nodes, and public runtime facts for the RDP presentation.', + sha256: 'bb90f660da908d2ae857b5949b77088fae3f977efcb9dcddb1570d68b1d85567', }), '/desktop-preview/MANIFEST.json': Object.freeze({ source: '/desktop-preview/MANIFEST.json', diff --git a/pages/execute.js b/pages/execute.js index dcc5960..c37ec94 100644 --- a/pages/execute.js +++ b/pages/execute.js @@ -1,8 +1,12 @@ import Head from 'next/head' import Link from 'next/link' +import ExecuteApiExchange from '@components/ExecuteApiExchange' +import ExecuteBoundaryFlow from '@components/ExecuteBoundaryFlow' +import ExecuteOutcomeCards from '@components/ExecuteOutcomeCards' import Footer from '@components/Footer' import JsonArtifactLink from '@components/JsonArtifactLink' +import RdpHybridPresentation from '@components/RdpHybridPresentation' const description = 'OpenAdapt Execute gives software and service providers verified execution in the systems their products cannot integrate with.' @@ -25,19 +29,7 @@ const STEPS = [ }, ] -const OUTCOMES = [ - { - label: 'verified', - body: 'The runner completed the authorized work and proved the configured business effect.', - }, - { - label: 'reconciliation_required', - body: 'The action may have reached the target, but the proof is incomplete. OpenAdapt does not repeat a consequential write blindly.', - }, - { - label: 'halted_before_effect', - body: 'The runner refused before a business effect when identity, target, authorization, or policy evidence did not match.', - }, +const ADDITIONAL_OUTCOMES = [ { label: 'rejected_policy', body: 'The authorization or policy contract rejected the request before execution could proceed.', @@ -91,8 +83,8 @@ export default function ExecutePage() {

The execution boundary

-
-
+
+

Keep business logic in your product. Put the last mile under a governed contract.

@@ -100,20 +92,9 @@ export default function ExecutePage() { Vertical software, service providers, and operations teams often prepare the right structured data but cannot write it into each customer system. OpenAdapt carries the authorized transaction across that final boundary without turning your product into a general-purpose computer agent.

-
-
-
Your product
-
Chooses the transaction and supplies authorized, structured input.
-
-
-
Customer-controlled runner
-
Observes and acts inside the approved browser, desktop, remote session, or private network boundary.
-
-
-
OpenAdapt
-
Binds the workflow, authorization, identity, effect proof, evidence, and exception path.
-
-
+
+ +
@@ -121,34 +102,22 @@ export default function ExecutePage() {

Real RDP qualification

-
-
+
+

Watch one transaction cross RDP, verify, and refuse the wrong record.

The demonstration books a synthetic appointment through a real RDP client and server. OpenAdapt compiles that exact demonstration, replays it with different inputs, checks the saved database row through a separate read-only connection, and halts when the active record changes before Save.

-
- -
-

- Reference qualification with synthetic data. The presentation uses exact retained RDP frames and the exported compiled graph. The slower timing affects the video only. +

+ SQL is this fixture's proof path. A qualified workflow can instead use an API, report or export, or persisted-state read-back. If OpenAdapt cannot prove the required result, it does not report VERIFIED. An uncertain write requires reconciliation.

-
+
+ +
+

3 / 3

Healthy RDP runs confirmed the intended identity and saved effect.

@@ -161,13 +130,21 @@ export default function ExecutePage() {

0

Model calls, wrong-record writes, and silent incorrect successes.

-

+

+
+

+ Reference qualification with synthetic data. The presentation uses exact retained RDP frames and the exported compiled graph. The slower timing affects the video only. +

+

Inspect the qualification evidence → Inspect the compiled workflow → + + Inspect the media timeline → + ))}

-
{`POST /v1/executions\n→ 202 { schema_version: "openadapt.execute-accepted/v1",\n        execution_id, state: "queued" }\n\nwebhook → { schema_version: "openadapt.execute-webhook/v1",\n            event_type: "execution.terminal", receipt: { outcome: "verified" } }`}
-

- Execution is asynchronous. A run can wait for an authorized decision, survive a restart, or require reconciliation without losing its transaction identity. -

+
+ +
@@ -207,8 +183,11 @@ export default function ExecutePage() {

A receipt names what the runner proved and what needs attention.

+
+ +
- {OUTCOMES.map((outcome) => ( + {ADDITIONAL_OUTCOMES.map((outcome) => (

{outcome.label}

{outcome.body}

diff --git a/public/demos/rdp/openadapt-rdp-demo.mp4 b/public/demos/rdp/openadapt-rdp-demo.mp4 index 97c90b5..2a71e11 100644 Binary files a/public/demos/rdp/openadapt-rdp-demo.mp4 and b/public/demos/rdp/openadapt-rdp-demo.mp4 differ diff --git a/public/demos/rdp/presentation.manifest.json b/public/demos/rdp/presentation.manifest.json index 7d82afc..4323b8b 100644 --- a/public/demos/rdp/presentation.manifest.json +++ b/public/demos/rdp/presentation.manifest.json @@ -4,6 +4,8 @@ 1280, 800 ], + "hybrid_timeline": "openadapt-rdp-demo.timeline.json", + "hybrid_timeline_sha256": "bb90f660da908d2ae857b5949b77088fae3f977efcb9dcddb1570d68b1d85567", "phases": [ { "outcome": "RECORDED", @@ -54,7 +56,7 @@ } ] }, - "workflow_digest": "1639d92d9c92aa1ba3b87b017ba9a52eae8b2d2a8cbe0e6a3c9deead52df7664" + "workflow_digest": "da52230dbde8d8ae6bd8060f4d2dc3f8c503487bbb3a214159af9550317670b9" } }, { @@ -82,10 +84,10 @@ } } ], - "program_graph_sha256": "9cffca5540f8fdb9bcbd9748906780d8369576508010af9a6741a64e93b755a3", + "program_graph_sha256": "7cb346cabe49b1077b9eaa960257d32f6a9262401fcf7443218e7726a7203570", "schema_version": "openadapt.rdp-presentation-render.v2", "timing": "paced derivative; source frames and input events remain exact", "video": "openadapt-rdp-demo.mp4", - "video_sha256": "e556b59084864ebe643ab4650abf8d9ebdfd99d4548f5ebeeed21432e0c9f2fa", - "workflow_digest": "1639d92d9c92aa1ba3b87b017ba9a52eae8b2d2a8cbe0e6a3c9deead52df7664" + "video_sha256": "f98655660d56eb8c96fc50c7d87a6759a895a108ea2fc46616208f7a27537af9", + "workflow_digest": "da52230dbde8d8ae6bd8060f4d2dc3f8c503487bbb3a214159af9550317670b9" } diff --git a/public/demos/rdp/presentation.timeline.json b/public/demos/rdp/presentation.timeline.json new file mode 100644 index 0000000..a7f6df4 --- /dev/null +++ b/public/demos/rdp/presentation.timeline.json @@ -0,0 +1,3234 @@ +{ + "derivative": { + "fps": 12, + "frame_count": 627, + "frame_size": [ + 1280, + 800 + ], + "video": "openadapt-rdp-demo.mp4", + "video_sha256": "f98655660d56eb8c96fc50c7d87a6759a895a108ea2fc46616208f7a27537af9" + }, + "program_graph_sha256": "7cb346cabe49b1077b9eaa960257d32f6a9262401fcf7443218e7726a7203570", + "schema_version": "openadapt.rdp-hybrid-presentation.v1", + "source_manifest_sha256": { + "01-demonstration": "9b93a61bd57d17e600152f3323340276057961cb9091a3dbd8baf23cfc39ec1c", + "02-verified-replay": "66b0254306faacbfa13087a2692f5d172fb3e73c2663e0cd855dbcca030b5918", + "03-safe-halt": "6131f1a0e1ab3b27ce143dd6f76e57e57726dff6f542a3627eed1a739e6c7759" + }, + "timeline": [ + { + "end_frame_exclusive": 58, + "end_pts_s": 4.833333333333333, + "facts": { + "authorization": "qualified" + }, + "phase": "execute_request", + "start_frame": 0, + "start_pts_s": 0.0 + }, + { + "end_frame_exclusive": 59, + "end_pts_s": 4.916666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 58, + "start_pts_s": 4.833333333333333 + }, + { + "end_frame_exclusive": 60, + "end_pts_s": 5.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 59, + "start_pts_s": 4.916666666666667 + }, + { + "end_frame_exclusive": 61, + "end_pts_s": 5.083333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 60, + "start_pts_s": 5.0 + }, + { + "end_frame_exclusive": 62, + "end_pts_s": 5.166666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 61, + "start_pts_s": 5.083333333333333 + }, + { + "end_frame_exclusive": 63, + "end_pts_s": 5.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 62, + "start_pts_s": 5.166666666666667 + }, + { + "end_frame_exclusive": 64, + "end_pts_s": 5.333333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 63, + "start_pts_s": 5.25 + }, + { + "end_frame_exclusive": 65, + "end_pts_s": 5.416666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 64, + "start_pts_s": 5.333333333333333 + }, + { + "end_frame_exclusive": 66, + "end_pts_s": 5.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 65, + "start_pts_s": 5.416666666666667 + }, + { + "end_frame_exclusive": 67, + "end_pts_s": 5.583333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 66, + "start_pts_s": 5.5 + }, + { + "end_frame_exclusive": 68, + "end_pts_s": 5.666666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 67, + "start_pts_s": 5.583333333333333 + }, + { + "end_frame_exclusive": 69, + "end_pts_s": 5.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 68, + "start_pts_s": 5.666666666666667 + }, + { + "end_frame_exclusive": 70, + "end_pts_s": 5.833333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 4.02, + "file": "frames/0000.png", + "presentation_phase": "01-demonstration", + "sha256": "475f22e708761078ccd1cc18fa3fa7b6eccae488629f9a825e6e91fbfe379b58", + "source": "rdp-client-framebuffer" + }, + "start_frame": 69, + "start_pts_s": 5.75 + }, + { + "end_frame_exclusive": 71, + "end_pts_s": 5.916666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 70, + "start_pts_s": 5.833333333333333 + }, + { + "end_frame_exclusive": 72, + "end_pts_s": 6.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 71, + "start_pts_s": 5.916666666666667 + }, + { + "end_frame_exclusive": 73, + "end_pts_s": 6.083333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 72, + "start_pts_s": 6.0 + }, + { + "end_frame_exclusive": 74, + "end_pts_s": 6.166666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 73, + "start_pts_s": 6.083333333333333 + }, + { + "end_frame_exclusive": 75, + "end_pts_s": 6.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 74, + "start_pts_s": 6.166666666666667 + }, + { + "end_frame_exclusive": 76, + "end_pts_s": 6.333333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 75, + "start_pts_s": 6.25 + }, + { + "end_frame_exclusive": 77, + "end_pts_s": 6.416666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 76, + "start_pts_s": 6.333333333333333 + }, + { + "end_frame_exclusive": 78, + "end_pts_s": 6.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 77, + "start_pts_s": 6.416666666666667 + }, + { + "end_frame_exclusive": 79, + "end_pts_s": 6.583333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 78, + "start_pts_s": 6.5 + }, + { + "end_frame_exclusive": 80, + "end_pts_s": 6.666666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 79, + "start_pts_s": 6.583333333333333 + }, + { + "end_frame_exclusive": 81, + "end_pts_s": 6.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 80, + "start_pts_s": 6.666666666666667 + }, + { + "end_frame_exclusive": 82, + "end_pts_s": 6.833333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 5.265, + "file": "frames/0001.png", + "presentation_phase": "01-demonstration", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "presentation-post-pointer" + }, + "start_frame": 81, + "start_pts_s": 6.75 + }, + { + "end_frame_exclusive": 83, + "end_pts_s": 6.916666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 13.365, + "file": "frames/0002.png", + "presentation_phase": "01-demonstration", + "sha256": "5c10e836f1c4b95fabb9ac0d37fff0ea392d90168793e906cfa1bc700dfdcd87", + "source": "presentation-post-pointer" + }, + "start_frame": 82, + "start_pts_s": 6.833333333333333 + }, + { + "end_frame_exclusive": 84, + "end_pts_s": 7.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 13.365, + "file": "frames/0002.png", + "presentation_phase": "01-demonstration", + "sha256": "5c10e836f1c4b95fabb9ac0d37fff0ea392d90168793e906cfa1bc700dfdcd87", + "source": "presentation-post-pointer" + }, + "start_frame": 83, + "start_pts_s": 6.916666666666667 + }, + { + "end_frame_exclusive": 85, + "end_pts_s": 7.083333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 15.971, + "file": "frames/0003.png", + "presentation_phase": "01-demonstration", + "sha256": "582c8a56752fbcb603f3956b0f3d258eeb0a67dd884cf83567924b054ae6de7b", + "source": "presentation-post-key" + }, + "start_frame": 84, + "start_pts_s": 7.0 + }, + { + "end_frame_exclusive": 86, + "end_pts_s": 7.166666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 15.971, + "file": "frames/0003.png", + "presentation_phase": "01-demonstration", + "sha256": "582c8a56752fbcb603f3956b0f3d258eeb0a67dd884cf83567924b054ae6de7b", + "source": "presentation-post-key" + }, + "start_frame": 85, + "start_pts_s": 7.083333333333333 + }, + { + "end_frame_exclusive": 87, + "end_pts_s": 7.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 16.477, + "file": "frames/0004.png", + "presentation_phase": "01-demonstration", + "sha256": "5950fa965e7ec68a30ad1e1309b99c13dd28ef8f41dfd9836e749637e32e1bb0", + "source": "presentation-post-key" + }, + "start_frame": 86, + "start_pts_s": 7.166666666666667 + }, + { + "end_frame_exclusive": 88, + "end_pts_s": 7.333333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 16.477, + "file": "frames/0004.png", + "presentation_phase": "01-demonstration", + "sha256": "5950fa965e7ec68a30ad1e1309b99c13dd28ef8f41dfd9836e749637e32e1bb0", + "source": "presentation-post-key" + }, + "start_frame": 87, + "start_pts_s": 7.25 + }, + { + "end_frame_exclusive": 89, + "end_pts_s": 7.416666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 16.967, + "file": "frames/0005.png", + "presentation_phase": "01-demonstration", + "sha256": "cb7a8bd3b8af209566e7749aa245a123daca3c2a362d8eb18b0fc7011b5f35b2", + "source": "presentation-post-key" + }, + "start_frame": 88, + "start_pts_s": 7.333333333333333 + }, + { + "end_frame_exclusive": 90, + "end_pts_s": 7.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 16.967, + "file": "frames/0005.png", + "presentation_phase": "01-demonstration", + "sha256": "cb7a8bd3b8af209566e7749aa245a123daca3c2a362d8eb18b0fc7011b5f35b2", + "source": "presentation-post-key" + }, + "start_frame": 89, + "start_pts_s": 7.416666666666667 + }, + { + "end_frame_exclusive": 91, + "end_pts_s": 7.583333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 17.501, + "file": "frames/0006.png", + "presentation_phase": "01-demonstration", + "sha256": "2a57c1259089eaa01f88677b6d9b0d391aa77e6bb1aade8c3e5bc14339061706", + "source": "presentation-post-key" + }, + "start_frame": 90, + "start_pts_s": 7.5 + }, + { + "end_frame_exclusive": 92, + "end_pts_s": 7.666666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 17.501, + "file": "frames/0006.png", + "presentation_phase": "01-demonstration", + "sha256": "2a57c1259089eaa01f88677b6d9b0d391aa77e6bb1aade8c3e5bc14339061706", + "source": "presentation-post-key" + }, + "start_frame": 91, + "start_pts_s": 7.583333333333333 + }, + { + "end_frame_exclusive": 93, + "end_pts_s": 7.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 17.996, + "file": "frames/0007.png", + "presentation_phase": "01-demonstration", + "sha256": "9a8a412c2227137f60b3ec9317ab71512cca6527a1fb5175f45918b54bbd918f", + "source": "presentation-post-key" + }, + "start_frame": 92, + "start_pts_s": 7.666666666666667 + }, + { + "end_frame_exclusive": 94, + "end_pts_s": 7.833333333333333, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 17.996, + "file": "frames/0007.png", + "presentation_phase": "01-demonstration", + "sha256": "9a8a412c2227137f60b3ec9317ab71512cca6527a1fb5175f45918b54bbd918f", + "source": "presentation-post-key" + }, + "start_frame": 93, + "start_pts_s": 7.75 + }, + { + "end_frame_exclusive": 95, + "end_pts_s": 7.916666666666667, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 18.552, + "file": "frames/0008.png", + "presentation_phase": "01-demonstration", + "sha256": "e28562f00d17d14402149e32fe566b886a8fdab15a753da11f21701f626e8eed", + "source": "presentation-post-key" + }, + "start_frame": 94, + "start_pts_s": 7.833333333333333 + }, + { + "end_frame_exclusive": 96, + "end_pts_s": 8.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 18.552, + "file": "frames/0008.png", + "presentation_phase": "01-demonstration", + "sha256": "e28562f00d17d14402149e32fe566b886a8fdab15a753da11f21701f626e8eed", + "source": "presentation-post-key" + }, + "start_frame": 95, + "start_pts_s": 7.916666666666667 + }, + { + "end_frame_exclusive": 97, + "end_pts_s": 8.083333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 19.078, + "file": "frames/0009.png", + "presentation_phase": "01-demonstration", + "sha256": "69a01d6ae874a5acaabb7c5cd2ed41fafc999a60eee4ae5f745270fc7c2a605a", + "source": "presentation-post-key" + }, + "start_frame": 96, + "start_pts_s": 8.0 + }, + { + "end_frame_exclusive": 98, + "end_pts_s": 8.166666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 19.078, + "file": "frames/0009.png", + "presentation_phase": "01-demonstration", + "sha256": "69a01d6ae874a5acaabb7c5cd2ed41fafc999a60eee4ae5f745270fc7c2a605a", + "source": "presentation-post-key" + }, + "start_frame": 97, + "start_pts_s": 8.083333333333334 + }, + { + "end_frame_exclusive": 99, + "end_pts_s": 8.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 19.572, + "file": "frames/0010.png", + "presentation_phase": "01-demonstration", + "sha256": "630ea5b622a03a5976d2595c4498244957e18b44199f3b845b281de0501d7146", + "source": "presentation-post-key" + }, + "start_frame": 98, + "start_pts_s": 8.166666666666666 + }, + { + "end_frame_exclusive": 100, + "end_pts_s": 8.333333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 19.572, + "file": "frames/0010.png", + "presentation_phase": "01-demonstration", + "sha256": "630ea5b622a03a5976d2595c4498244957e18b44199f3b845b281de0501d7146", + "source": "presentation-post-key" + }, + "start_frame": 99, + "start_pts_s": 8.25 + }, + { + "end_frame_exclusive": 101, + "end_pts_s": 8.416666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 20.196, + "file": "frames/0011.png", + "presentation_phase": "01-demonstration", + "sha256": "e81a82b30f795954cfddd13dd528800e9619d72d4251bda0ad04b12293adecaa", + "source": "presentation-post-key" + }, + "start_frame": 100, + "start_pts_s": 8.333333333333334 + }, + { + "end_frame_exclusive": 102, + "end_pts_s": 8.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 20.196, + "file": "frames/0011.png", + "presentation_phase": "01-demonstration", + "sha256": "e81a82b30f795954cfddd13dd528800e9619d72d4251bda0ad04b12293adecaa", + "source": "presentation-post-key" + }, + "start_frame": 101, + "start_pts_s": 8.416666666666666 + }, + { + "end_frame_exclusive": 103, + "end_pts_s": 8.583333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 20.701, + "file": "frames/0012.png", + "presentation_phase": "01-demonstration", + "sha256": "e125d2d1db95a4841aaa34556a71ab3d889c9dfd8086a5c17f01fa97634d8bdc", + "source": "presentation-post-key" + }, + "start_frame": 102, + "start_pts_s": 8.5 + }, + { + "end_frame_exclusive": 104, + "end_pts_s": 8.666666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 20.701, + "file": "frames/0012.png", + "presentation_phase": "01-demonstration", + "sha256": "e125d2d1db95a4841aaa34556a71ab3d889c9dfd8086a5c17f01fa97634d8bdc", + "source": "presentation-post-key" + }, + "start_frame": 103, + "start_pts_s": 8.583333333333334 + }, + { + "end_frame_exclusive": 105, + "end_pts_s": 8.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 21.199, + "file": "frames/0013.png", + "presentation_phase": "01-demonstration", + "sha256": "11d7a1458771f65acf940c779bd837f20d59706c17508c812ebe15c8cc9c40ea", + "source": "presentation-post-key" + }, + "start_frame": 104, + "start_pts_s": 8.666666666666666 + }, + { + "end_frame_exclusive": 106, + "end_pts_s": 8.833333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 21.199, + "file": "frames/0013.png", + "presentation_phase": "01-demonstration", + "sha256": "11d7a1458771f65acf940c779bd837f20d59706c17508c812ebe15c8cc9c40ea", + "source": "presentation-post-key" + }, + "start_frame": 105, + "start_pts_s": 8.75 + }, + { + "end_frame_exclusive": 107, + "end_pts_s": 8.916666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 21.71, + "file": "frames/0014.png", + "presentation_phase": "01-demonstration", + "sha256": "f657ea82b51ef904c314a68f08ed26235e6789e5e95bb14a6b57d3a03f2169fd", + "source": "presentation-post-key" + }, + "start_frame": 106, + "start_pts_s": 8.833333333333334 + }, + { + "end_frame_exclusive": 108, + "end_pts_s": 9.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 21.71, + "file": "frames/0014.png", + "presentation_phase": "01-demonstration", + "sha256": "f657ea82b51ef904c314a68f08ed26235e6789e5e95bb14a6b57d3a03f2169fd", + "source": "presentation-post-key" + }, + "start_frame": 107, + "start_pts_s": 8.916666666666666 + }, + { + "end_frame_exclusive": 109, + "end_pts_s": 9.083333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 22.216, + "file": "frames/0015.png", + "presentation_phase": "01-demonstration", + "sha256": "7906e62a47e69622bfd77c1e9d0bfd9be31b18216982348fbf8871ffb06f8f40", + "source": "presentation-post-key" + }, + "start_frame": 108, + "start_pts_s": 9.0 + }, + { + "end_frame_exclusive": 110, + "end_pts_s": 9.166666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 22.216, + "file": "frames/0015.png", + "presentation_phase": "01-demonstration", + "sha256": "7906e62a47e69622bfd77c1e9d0bfd9be31b18216982348fbf8871ffb06f8f40", + "source": "presentation-post-key" + }, + "start_frame": 109, + "start_pts_s": 9.083333333333334 + }, + { + "end_frame_exclusive": 111, + "end_pts_s": 9.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 22.752, + "file": "frames/0016.png", + "presentation_phase": "01-demonstration", + "sha256": "91be240067f5a8dc7036d85c1bb1efb92f7615cc9ad7c16a96031828093e6143", + "source": "presentation-post-key" + }, + "start_frame": 110, + "start_pts_s": 9.166666666666666 + }, + { + "end_frame_exclusive": 112, + "end_pts_s": 9.333333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 22.752, + "file": "frames/0016.png", + "presentation_phase": "01-demonstration", + "sha256": "91be240067f5a8dc7036d85c1bb1efb92f7615cc9ad7c16a96031828093e6143", + "source": "presentation-post-key" + }, + "start_frame": 111, + "start_pts_s": 9.25 + }, + { + "end_frame_exclusive": 113, + "end_pts_s": 9.416666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.349, + "file": "frames/0017.png", + "presentation_phase": "01-demonstration", + "sha256": "6cf5775299d5abb45b44b75440a08ede2ed738c77ba4f8daa3a86681d4ecbd71", + "source": "presentation-post-key" + }, + "start_frame": 112, + "start_pts_s": 9.333333333333334 + }, + { + "end_frame_exclusive": 114, + "end_pts_s": 9.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.349, + "file": "frames/0017.png", + "presentation_phase": "01-demonstration", + "sha256": "6cf5775299d5abb45b44b75440a08ede2ed738c77ba4f8daa3a86681d4ecbd71", + "source": "presentation-post-key" + }, + "start_frame": 113, + "start_pts_s": 9.416666666666666 + }, + { + "end_frame_exclusive": 115, + "end_pts_s": 9.583333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 114, + "start_pts_s": 9.5 + }, + { + "end_frame_exclusive": 116, + "end_pts_s": 9.666666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 115, + "start_pts_s": 9.583333333333334 + }, + { + "end_frame_exclusive": 117, + "end_pts_s": 9.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 116, + "start_pts_s": 9.666666666666666 + }, + { + "end_frame_exclusive": 118, + "end_pts_s": 9.833333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 117, + "start_pts_s": 9.75 + }, + { + "end_frame_exclusive": 119, + "end_pts_s": 9.916666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 118, + "start_pts_s": 9.833333333333334 + }, + { + "end_frame_exclusive": 120, + "end_pts_s": 10.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 119, + "start_pts_s": 9.916666666666666 + }, + { + "end_frame_exclusive": 121, + "end_pts_s": 10.083333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 120, + "start_pts_s": 10.0 + }, + { + "end_frame_exclusive": 122, + "end_pts_s": 10.166666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 121, + "start_pts_s": 10.083333333333334 + }, + { + "end_frame_exclusive": 123, + "end_pts_s": 10.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 122, + "start_pts_s": 10.166666666666666 + }, + { + "end_frame_exclusive": 124, + "end_pts_s": 10.333333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 123, + "start_pts_s": 10.25 + }, + { + "end_frame_exclusive": 125, + "end_pts_s": 10.416666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 124, + "start_pts_s": 10.333333333333334 + }, + { + "end_frame_exclusive": 126, + "end_pts_s": 10.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 23.84, + "file": "frames/0018.png", + "presentation_phase": "01-demonstration", + "sha256": "f2df195b2b94d2aaae542118d82813690bf5d5915bbe77b1c87c7506b0affc65", + "source": "presentation-post-key" + }, + "start_frame": 125, + "start_pts_s": 10.416666666666666 + }, + { + "end_frame_exclusive": 127, + "end_pts_s": 10.583333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 31.798, + "file": "frames/0019.png", + "presentation_phase": "01-demonstration", + "sha256": "40c02dc7dc48129306a4b52d1c3a8bb33b1e0fb20d47dc7ea2da76728440a023", + "source": "presentation-post-pointer" + }, + "start_frame": 126, + "start_pts_s": 10.5 + }, + { + "end_frame_exclusive": 128, + "end_pts_s": 10.666666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 31.798, + "file": "frames/0019.png", + "presentation_phase": "01-demonstration", + "sha256": "40c02dc7dc48129306a4b52d1c3a8bb33b1e0fb20d47dc7ea2da76728440a023", + "source": "presentation-post-pointer" + }, + "start_frame": 127, + "start_pts_s": 10.583333333333334 + }, + { + "end_frame_exclusive": 129, + "end_pts_s": 10.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 34.556, + "file": "frames/0020.png", + "presentation_phase": "01-demonstration", + "sha256": "4fcb9873a216bb459f7a43edf286b39ee4477d426a62c6fe6c6562022c01ca57", + "source": "presentation-post-key" + }, + "start_frame": 128, + "start_pts_s": 10.666666666666666 + }, + { + "end_frame_exclusive": 130, + "end_pts_s": 10.833333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 34.556, + "file": "frames/0020.png", + "presentation_phase": "01-demonstration", + "sha256": "4fcb9873a216bb459f7a43edf286b39ee4477d426a62c6fe6c6562022c01ca57", + "source": "presentation-post-key" + }, + "start_frame": 129, + "start_pts_s": 10.75 + }, + { + "end_frame_exclusive": 131, + "end_pts_s": 10.916666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 35.06, + "file": "frames/0021.png", + "presentation_phase": "01-demonstration", + "sha256": "2fec624eb108798df3cfe9ee0cb88248c157459aded213a2b30a9e177bca799e", + "source": "presentation-post-key" + }, + "start_frame": 130, + "start_pts_s": 10.833333333333334 + }, + { + "end_frame_exclusive": 132, + "end_pts_s": 11.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 35.06, + "file": "frames/0021.png", + "presentation_phase": "01-demonstration", + "sha256": "2fec624eb108798df3cfe9ee0cb88248c157459aded213a2b30a9e177bca799e", + "source": "presentation-post-key" + }, + "start_frame": 131, + "start_pts_s": 10.916666666666666 + }, + { + "end_frame_exclusive": 133, + "end_pts_s": 11.083333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 35.614, + "file": "frames/0022.png", + "presentation_phase": "01-demonstration", + "sha256": "85f4a66f7c66d316ec01110e81ed8c7bebc95d63f10461e14081007b785fe04a", + "source": "presentation-post-key" + }, + "start_frame": 132, + "start_pts_s": 11.0 + }, + { + "end_frame_exclusive": 134, + "end_pts_s": 11.166666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 35.614, + "file": "frames/0022.png", + "presentation_phase": "01-demonstration", + "sha256": "85f4a66f7c66d316ec01110e81ed8c7bebc95d63f10461e14081007b785fe04a", + "source": "presentation-post-key" + }, + "start_frame": 133, + "start_pts_s": 11.083333333333334 + }, + { + "end_frame_exclusive": 135, + "end_pts_s": 11.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 36.124, + "file": "frames/0023.png", + "presentation_phase": "01-demonstration", + "sha256": "45677ce94adee472477fb4ebcd29d878375ce44f154cd517c0cf1335be46788d", + "source": "presentation-post-key" + }, + "start_frame": 134, + "start_pts_s": 11.166666666666666 + }, + { + "end_frame_exclusive": 136, + "end_pts_s": 11.333333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 36.124, + "file": "frames/0023.png", + "presentation_phase": "01-demonstration", + "sha256": "45677ce94adee472477fb4ebcd29d878375ce44f154cd517c0cf1335be46788d", + "source": "presentation-post-key" + }, + "start_frame": 135, + "start_pts_s": 11.25 + }, + { + "end_frame_exclusive": 137, + "end_pts_s": 11.416666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 36.622, + "file": "frames/0024.png", + "presentation_phase": "01-demonstration", + "sha256": "a0c9f332438ccb0180e53feb3af1bf9f21b0aafea2a191a324543bcd8479b296", + "source": "presentation-post-key" + }, + "start_frame": 136, + "start_pts_s": 11.333333333333334 + }, + { + "end_frame_exclusive": 138, + "end_pts_s": 11.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 36.622, + "file": "frames/0024.png", + "presentation_phase": "01-demonstration", + "sha256": "a0c9f332438ccb0180e53feb3af1bf9f21b0aafea2a191a324543bcd8479b296", + "source": "presentation-post-key" + }, + "start_frame": 137, + "start_pts_s": 11.416666666666666 + }, + { + "end_frame_exclusive": 139, + "end_pts_s": 11.583333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 37.155, + "file": "frames/0025.png", + "presentation_phase": "01-demonstration", + "sha256": "13ef400d3d2697f76b143a0a29a8f4a3efe719b1d96f8f3d8d32f56b12983c70", + "source": "presentation-post-key" + }, + "start_frame": 138, + "start_pts_s": 11.5 + }, + { + "end_frame_exclusive": 140, + "end_pts_s": 11.666666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 37.155, + "file": "frames/0025.png", + "presentation_phase": "01-demonstration", + "sha256": "13ef400d3d2697f76b143a0a29a8f4a3efe719b1d96f8f3d8d32f56b12983c70", + "source": "presentation-post-key" + }, + "start_frame": 139, + "start_pts_s": 11.583333333333334 + }, + { + "end_frame_exclusive": 141, + "end_pts_s": 11.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 37.66, + "file": "frames/0026.png", + "presentation_phase": "01-demonstration", + "sha256": "189459d287d8e6860fdadfd12c9e45a6795a6a9d9038e4bf5a55df3f817fce25", + "source": "presentation-post-key" + }, + "start_frame": 140, + "start_pts_s": 11.666666666666666 + }, + { + "end_frame_exclusive": 142, + "end_pts_s": 11.833333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 37.66, + "file": "frames/0026.png", + "presentation_phase": "01-demonstration", + "sha256": "189459d287d8e6860fdadfd12c9e45a6795a6a9d9038e4bf5a55df3f817fce25", + "source": "presentation-post-key" + }, + "start_frame": 141, + "start_pts_s": 11.75 + }, + { + "end_frame_exclusive": 143, + "end_pts_s": 11.916666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 38.204, + "file": "frames/0027.png", + "presentation_phase": "01-demonstration", + "sha256": "d274314a9fa08a89ac34ae00fc819cbabe68aa3f086892fd8a09999a5d43909e", + "source": "presentation-post-key" + }, + "start_frame": 142, + "start_pts_s": 11.833333333333334 + }, + { + "end_frame_exclusive": 144, + "end_pts_s": 12.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 38.204, + "file": "frames/0027.png", + "presentation_phase": "01-demonstration", + "sha256": "d274314a9fa08a89ac34ae00fc819cbabe68aa3f086892fd8a09999a5d43909e", + "source": "presentation-post-key" + }, + "start_frame": 143, + "start_pts_s": 11.916666666666666 + }, + { + "end_frame_exclusive": 145, + "end_pts_s": 12.083333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 38.729, + "file": "frames/0028.png", + "presentation_phase": "01-demonstration", + "sha256": "f3e50c448e9d21181608b9925f3ee88683b6d8173c5d079f8bc48217ac5f20ec", + "source": "presentation-post-key" + }, + "start_frame": 144, + "start_pts_s": 12.0 + }, + { + "end_frame_exclusive": 146, + "end_pts_s": 12.166666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 38.729, + "file": "frames/0028.png", + "presentation_phase": "01-demonstration", + "sha256": "f3e50c448e9d21181608b9925f3ee88683b6d8173c5d079f8bc48217ac5f20ec", + "source": "presentation-post-key" + }, + "start_frame": 145, + "start_pts_s": 12.083333333333334 + }, + { + "end_frame_exclusive": 147, + "end_pts_s": 12.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 39.232, + "file": "frames/0029.png", + "presentation_phase": "01-demonstration", + "sha256": "ad82a8cdd9699b12b2c827c3af0b4f6360d1267fd27d7f2af4627f8ab42f828e", + "source": "presentation-post-key" + }, + "start_frame": 146, + "start_pts_s": 12.166666666666666 + }, + { + "end_frame_exclusive": 148, + "end_pts_s": 12.333333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 39.232, + "file": "frames/0029.png", + "presentation_phase": "01-demonstration", + "sha256": "ad82a8cdd9699b12b2c827c3af0b4f6360d1267fd27d7f2af4627f8ab42f828e", + "source": "presentation-post-key" + }, + "start_frame": 147, + "start_pts_s": 12.25 + }, + { + "end_frame_exclusive": 149, + "end_pts_s": 12.416666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 39.758, + "file": "frames/0030.png", + "presentation_phase": "01-demonstration", + "sha256": "87d1e93459f9b7e884e084bcbc4bb7fccb45c430a496be1cc71547dab8679cf6", + "source": "presentation-post-key" + }, + "start_frame": 148, + "start_pts_s": 12.333333333333334 + }, + { + "end_frame_exclusive": 150, + "end_pts_s": 12.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 39.758, + "file": "frames/0030.png", + "presentation_phase": "01-demonstration", + "sha256": "87d1e93459f9b7e884e084bcbc4bb7fccb45c430a496be1cc71547dab8679cf6", + "source": "presentation-post-key" + }, + "start_frame": 149, + "start_pts_s": 12.416666666666666 + }, + { + "end_frame_exclusive": 151, + "end_pts_s": 12.583333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 40.264, + "file": "frames/0031.png", + "presentation_phase": "01-demonstration", + "sha256": "3d8c2f2ec393a1f3ab191bfc4eace501f0d320cdc87aceaa24a554dc737be89a", + "source": "presentation-post-key" + }, + "start_frame": 150, + "start_pts_s": 12.5 + }, + { + "end_frame_exclusive": 152, + "end_pts_s": 12.666666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 40.264, + "file": "frames/0031.png", + "presentation_phase": "01-demonstration", + "sha256": "3d8c2f2ec393a1f3ab191bfc4eace501f0d320cdc87aceaa24a554dc737be89a", + "source": "presentation-post-key" + }, + "start_frame": 151, + "start_pts_s": 12.583333333333334 + }, + { + "end_frame_exclusive": 153, + "end_pts_s": 12.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 40.816, + "file": "frames/0032.png", + "presentation_phase": "01-demonstration", + "sha256": "bdbd5f0db1f44f82c3016cb4a8ca7ffda3a087137cb099c161168b98148fcfb8", + "source": "presentation-post-key" + }, + "start_frame": 152, + "start_pts_s": 12.666666666666666 + }, + { + "end_frame_exclusive": 154, + "end_pts_s": 12.833333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 40.816, + "file": "frames/0032.png", + "presentation_phase": "01-demonstration", + "sha256": "bdbd5f0db1f44f82c3016cb4a8ca7ffda3a087137cb099c161168b98148fcfb8", + "source": "presentation-post-key" + }, + "start_frame": 153, + "start_pts_s": 12.75 + }, + { + "end_frame_exclusive": 155, + "end_pts_s": 12.916666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 41.338, + "file": "frames/0033.png", + "presentation_phase": "01-demonstration", + "sha256": "15672f8a6c8ac1aadf521a4d1ef18d0f992119be9345bc1377d66960cdfbdf2a", + "source": "presentation-post-key" + }, + "start_frame": 154, + "start_pts_s": 12.833333333333334 + }, + { + "end_frame_exclusive": 156, + "end_pts_s": 13.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 41.338, + "file": "frames/0033.png", + "presentation_phase": "01-demonstration", + "sha256": "15672f8a6c8ac1aadf521a4d1ef18d0f992119be9345bc1377d66960cdfbdf2a", + "source": "presentation-post-key" + }, + "start_frame": 155, + "start_pts_s": 12.916666666666666 + }, + { + "end_frame_exclusive": 157, + "end_pts_s": 13.083333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 41.837, + "file": "frames/0034.png", + "presentation_phase": "01-demonstration", + "sha256": "f60c92d433e17afc907d34883bc5c076421aef17f9499f83006ba0922ffc18f2", + "source": "presentation-post-key" + }, + "start_frame": 156, + "start_pts_s": 13.0 + }, + { + "end_frame_exclusive": 158, + "end_pts_s": 13.166666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 41.837, + "file": "frames/0034.png", + "presentation_phase": "01-demonstration", + "sha256": "f60c92d433e17afc907d34883bc5c076421aef17f9499f83006ba0922ffc18f2", + "source": "presentation-post-key" + }, + "start_frame": 157, + "start_pts_s": 13.083333333333334 + }, + { + "end_frame_exclusive": 159, + "end_pts_s": 13.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 42.4, + "file": "frames/0035.png", + "presentation_phase": "01-demonstration", + "sha256": "e5055ce213c3ea23a57d0ac4f6af2767b18636ca0482bf780eb6eef439400117", + "source": "presentation-post-key" + }, + "start_frame": 158, + "start_pts_s": 13.166666666666666 + }, + { + "end_frame_exclusive": 160, + "end_pts_s": 13.333333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 42.4, + "file": "frames/0035.png", + "presentation_phase": "01-demonstration", + "sha256": "e5055ce213c3ea23a57d0ac4f6af2767b18636ca0482bf780eb6eef439400117", + "source": "presentation-post-key" + }, + "start_frame": 159, + "start_pts_s": 13.25 + }, + { + "end_frame_exclusive": 161, + "end_pts_s": 13.416666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 42.909, + "file": "frames/0036.png", + "presentation_phase": "01-demonstration", + "sha256": "5ed4ce0db5541bf067f4dd32275c2636ef47b9ed5d4ae4d29bc1635cca3057f8", + "source": "presentation-post-key" + }, + "start_frame": 160, + "start_pts_s": 13.333333333333334 + }, + { + "end_frame_exclusive": 162, + "end_pts_s": 13.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 42.909, + "file": "frames/0036.png", + "presentation_phase": "01-demonstration", + "sha256": "5ed4ce0db5541bf067f4dd32275c2636ef47b9ed5d4ae4d29bc1635cca3057f8", + "source": "presentation-post-key" + }, + "start_frame": 161, + "start_pts_s": 13.416666666666666 + }, + { + "end_frame_exclusive": 163, + "end_pts_s": 13.583333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 43.464, + "file": "frames/0037.png", + "presentation_phase": "01-demonstration", + "sha256": "716539748b4e574f4bd38f3c21328a9f65c03cbb422029567009c23c455e9133", + "source": "presentation-post-key" + }, + "start_frame": 162, + "start_pts_s": 13.5 + }, + { + "end_frame_exclusive": 164, + "end_pts_s": 13.666666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 43.464, + "file": "frames/0037.png", + "presentation_phase": "01-demonstration", + "sha256": "716539748b4e574f4bd38f3c21328a9f65c03cbb422029567009c23c455e9133", + "source": "presentation-post-key" + }, + "start_frame": 163, + "start_pts_s": 13.583333333333334 + }, + { + "end_frame_exclusive": 165, + "end_pts_s": 13.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.083, + "file": "frames/0038.png", + "presentation_phase": "01-demonstration", + "sha256": "0dfd39cfdb7b6b9c62d4687ea99b5c6031d97f8a3a929bb39dd8956bc5225576", + "source": "presentation-post-key" + }, + "start_frame": 164, + "start_pts_s": 13.666666666666666 + }, + { + "end_frame_exclusive": 166, + "end_pts_s": 13.833333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.083, + "file": "frames/0038.png", + "presentation_phase": "01-demonstration", + "sha256": "0dfd39cfdb7b6b9c62d4687ea99b5c6031d97f8a3a929bb39dd8956bc5225576", + "source": "presentation-post-key" + }, + "start_frame": 165, + "start_pts_s": 13.75 + }, + { + "end_frame_exclusive": 167, + "end_pts_s": 13.916666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 166, + "start_pts_s": 13.833333333333334 + }, + { + "end_frame_exclusive": 168, + "end_pts_s": 14.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 167, + "start_pts_s": 13.916666666666666 + }, + { + "end_frame_exclusive": 169, + "end_pts_s": 14.083333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 168, + "start_pts_s": 14.0 + }, + { + "end_frame_exclusive": 170, + "end_pts_s": 14.166666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 169, + "start_pts_s": 14.083333333333334 + }, + { + "end_frame_exclusive": 171, + "end_pts_s": 14.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 170, + "start_pts_s": 14.166666666666666 + }, + { + "end_frame_exclusive": 172, + "end_pts_s": 14.333333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 171, + "start_pts_s": 14.25 + }, + { + "end_frame_exclusive": 173, + "end_pts_s": 14.416666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 172, + "start_pts_s": 14.333333333333334 + }, + { + "end_frame_exclusive": 174, + "end_pts_s": 14.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 173, + "start_pts_s": 14.416666666666666 + }, + { + "end_frame_exclusive": 175, + "end_pts_s": 14.583333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 174, + "start_pts_s": 14.5 + }, + { + "end_frame_exclusive": 176, + "end_pts_s": 14.666666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 175, + "start_pts_s": 14.583333333333334 + }, + { + "end_frame_exclusive": 177, + "end_pts_s": 14.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 176, + "start_pts_s": 14.666666666666666 + }, + { + "end_frame_exclusive": 178, + "end_pts_s": 14.833333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 44.582, + "file": "frames/0039.png", + "presentation_phase": "01-demonstration", + "sha256": "76279af1fd6678839ee93f9ccc3d07a1912f3dd806ae24f94fa6c57b7b87a537", + "source": "presentation-post-key" + }, + "start_frame": 177, + "start_pts_s": 14.75 + }, + { + "end_frame_exclusive": 179, + "end_pts_s": 14.916666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 52.637, + "file": "frames/0040.png", + "presentation_phase": "01-demonstration", + "sha256": "0ad1dbae21e44b83feacb228df181623feb428248172db366c64954d413fade6", + "source": "presentation-post-pointer" + }, + "start_frame": 178, + "start_pts_s": 14.833333333333334 + }, + { + "end_frame_exclusive": 180, + "end_pts_s": 15.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 52.637, + "file": "frames/0040.png", + "presentation_phase": "01-demonstration", + "sha256": "0ad1dbae21e44b83feacb228df181623feb428248172db366c64954d413fade6", + "source": "presentation-post-pointer" + }, + "start_frame": 179, + "start_pts_s": 14.916666666666666 + }, + { + "end_frame_exclusive": 181, + "end_pts_s": 15.083333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 55.427, + "file": "frames/0041.png", + "presentation_phase": "01-demonstration", + "sha256": "a5c5d676a723d1e80ff396c093356738ff69d6beb4171f6a8b52eb7c5f47e359", + "source": "presentation-post-key" + }, + "start_frame": 180, + "start_pts_s": 15.0 + }, + { + "end_frame_exclusive": 182, + "end_pts_s": 15.166666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 55.427, + "file": "frames/0041.png", + "presentation_phase": "01-demonstration", + "sha256": "a5c5d676a723d1e80ff396c093356738ff69d6beb4171f6a8b52eb7c5f47e359", + "source": "presentation-post-key" + }, + "start_frame": 181, + "start_pts_s": 15.083333333333334 + }, + { + "end_frame_exclusive": 183, + "end_pts_s": 15.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 55.944, + "file": "frames/0042.png", + "presentation_phase": "01-demonstration", + "sha256": "d40e3cc3bfb21a0e343288067471bce98845cbeec20045a30dcb54dee2e9f8d0", + "source": "presentation-post-key" + }, + "start_frame": 182, + "start_pts_s": 15.166666666666666 + }, + { + "end_frame_exclusive": 184, + "end_pts_s": 15.333333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 55.944, + "file": "frames/0042.png", + "presentation_phase": "01-demonstration", + "sha256": "d40e3cc3bfb21a0e343288067471bce98845cbeec20045a30dcb54dee2e9f8d0", + "source": "presentation-post-key" + }, + "start_frame": 183, + "start_pts_s": 15.25 + }, + { + "end_frame_exclusive": 185, + "end_pts_s": 15.416666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 56.507, + "file": "frames/0043.png", + "presentation_phase": "01-demonstration", + "sha256": "4151c890613cc30f1023a600ace52e6705a840d689c65e8fcbe1a753afe20b5b", + "source": "presentation-post-key" + }, + "start_frame": 184, + "start_pts_s": 15.333333333333334 + }, + { + "end_frame_exclusive": 186, + "end_pts_s": 15.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 56.507, + "file": "frames/0043.png", + "presentation_phase": "01-demonstration", + "sha256": "4151c890613cc30f1023a600ace52e6705a840d689c65e8fcbe1a753afe20b5b", + "source": "presentation-post-key" + }, + "start_frame": 185, + "start_pts_s": 15.416666666666666 + }, + { + "end_frame_exclusive": 187, + "end_pts_s": 15.583333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 57.048, + "file": "frames/0044.png", + "presentation_phase": "01-demonstration", + "sha256": "7f99c9d7cd1649e5fe710d33212608ede342de019c18dbbdd26ff363872201c4", + "source": "presentation-post-key" + }, + "start_frame": 186, + "start_pts_s": 15.5 + }, + { + "end_frame_exclusive": 188, + "end_pts_s": 15.666666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 57.048, + "file": "frames/0044.png", + "presentation_phase": "01-demonstration", + "sha256": "7f99c9d7cd1649e5fe710d33212608ede342de019c18dbbdd26ff363872201c4", + "source": "presentation-post-key" + }, + "start_frame": 187, + "start_pts_s": 15.583333333333334 + }, + { + "end_frame_exclusive": 189, + "end_pts_s": 15.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 57.63, + "file": "frames/0045.png", + "presentation_phase": "01-demonstration", + "sha256": "ad14840b329781995dae8cd4ec8d8b406f861e1dd8eddfbb901cf85cb6c271b7", + "source": "presentation-post-key" + }, + "start_frame": 188, + "start_pts_s": 15.666666666666666 + }, + { + "end_frame_exclusive": 190, + "end_pts_s": 15.833333333333334, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 57.63, + "file": "frames/0045.png", + "presentation_phase": "01-demonstration", + "sha256": "ad14840b329781995dae8cd4ec8d8b406f861e1dd8eddfbb901cf85cb6c271b7", + "source": "presentation-post-key" + }, + "start_frame": 189, + "start_pts_s": 15.75 + }, + { + "end_frame_exclusive": 191, + "end_pts_s": 15.916666666666666, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 58.168, + "file": "frames/0046.png", + "presentation_phase": "01-demonstration", + "sha256": "23a184f53faf402083d7e8fd5b56c04e0409ec89da2ee394a025cba9d2cdd975", + "source": "presentation-post-key" + }, + "start_frame": 190, + "start_pts_s": 15.833333333333334 + }, + { + "end_frame_exclusive": 192, + "end_pts_s": 16.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 58.168, + "file": "frames/0046.png", + "presentation_phase": "01-demonstration", + "sha256": "23a184f53faf402083d7e8fd5b56c04e0409ec89da2ee394a025cba9d2cdd975", + "source": "presentation-post-key" + }, + "start_frame": 191, + "start_pts_s": 15.916666666666666 + }, + { + "end_frame_exclusive": 193, + "end_pts_s": 16.083333333333332, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 58.689, + "file": "frames/0047.png", + "presentation_phase": "01-demonstration", + "sha256": "965c76a8856129e7f2bc12fcc3d63c10b8569a44e0594c68411614dcf039f197", + "source": "presentation-post-key" + }, + "start_frame": 192, + "start_pts_s": 16.0 + }, + { + "end_frame_exclusive": 194, + "end_pts_s": 16.166666666666668, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 58.689, + "file": "frames/0047.png", + "presentation_phase": "01-demonstration", + "sha256": "965c76a8856129e7f2bc12fcc3d63c10b8569a44e0594c68411614dcf039f197", + "source": "presentation-post-key" + }, + "start_frame": 193, + "start_pts_s": 16.083333333333332 + }, + { + "end_frame_exclusive": 195, + "end_pts_s": 16.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 59.251, + "file": "frames/0048.png", + "presentation_phase": "01-demonstration", + "sha256": "a8d6a19cec27afcbf8320927853a8eada6bf0c9d53c6eae1683a55fa424f200a", + "source": "presentation-post-key" + }, + "start_frame": 194, + "start_pts_s": 16.166666666666668 + }, + { + "end_frame_exclusive": 196, + "end_pts_s": 16.333333333333332, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 59.251, + "file": "frames/0048.png", + "presentation_phase": "01-demonstration", + "sha256": "a8d6a19cec27afcbf8320927853a8eada6bf0c9d53c6eae1683a55fa424f200a", + "source": "presentation-post-key" + }, + "start_frame": 195, + "start_pts_s": 16.25 + }, + { + "end_frame_exclusive": 197, + "end_pts_s": 16.416666666666668, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 59.773, + "file": "frames/0049.png", + "presentation_phase": "01-demonstration", + "sha256": "0441ebfb093df59f8571445f74a33110d01eb0e757596218d7af53001c89f92c", + "source": "presentation-post-key" + }, + "start_frame": 196, + "start_pts_s": 16.333333333333332 + }, + { + "end_frame_exclusive": 198, + "end_pts_s": 16.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 59.773, + "file": "frames/0049.png", + "presentation_phase": "01-demonstration", + "sha256": "0441ebfb093df59f8571445f74a33110d01eb0e757596218d7af53001c89f92c", + "source": "presentation-post-key" + }, + "start_frame": 197, + "start_pts_s": 16.416666666666668 + }, + { + "end_frame_exclusive": 199, + "end_pts_s": 16.583333333333332, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 60.372, + "file": "frames/0050.png", + "presentation_phase": "01-demonstration", + "sha256": "a645f8d289590a403de5c26c0c632004fbe24d7a3166caf695610074afdff64d", + "source": "presentation-post-key" + }, + "start_frame": 198, + "start_pts_s": 16.5 + }, + { + "end_frame_exclusive": 200, + "end_pts_s": 16.666666666666668, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 60.372, + "file": "frames/0050.png", + "presentation_phase": "01-demonstration", + "sha256": "a645f8d289590a403de5c26c0c632004fbe24d7a3166caf695610074afdff64d", + "source": "presentation-post-key" + }, + "start_frame": 199, + "start_pts_s": 16.583333333333332 + }, + { + "end_frame_exclusive": 201, + "end_pts_s": 16.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 60.92, + "file": "frames/0051.png", + "presentation_phase": "01-demonstration", + "sha256": "690b8816474a11fdefe77838265e4e48eed6a1b82107244b1f8170fd9d83d7d1", + "source": "presentation-post-key" + }, + "start_frame": 200, + "start_pts_s": 16.666666666666668 + }, + { + "end_frame_exclusive": 202, + "end_pts_s": 16.833333333333332, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 60.92, + "file": "frames/0051.png", + "presentation_phase": "01-demonstration", + "sha256": "690b8816474a11fdefe77838265e4e48eed6a1b82107244b1f8170fd9d83d7d1", + "source": "presentation-post-key" + }, + "start_frame": 201, + "start_pts_s": 16.75 + }, + { + "end_frame_exclusive": 203, + "end_pts_s": 16.916666666666668, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 202, + "start_pts_s": 16.833333333333332 + }, + { + "end_frame_exclusive": 204, + "end_pts_s": 17.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 203, + "start_pts_s": 16.916666666666668 + }, + { + "end_frame_exclusive": 205, + "end_pts_s": 17.083333333333332, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 204, + "start_pts_s": 17.0 + }, + { + "end_frame_exclusive": 206, + "end_pts_s": 17.166666666666668, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 205, + "start_pts_s": 17.083333333333332 + }, + { + "end_frame_exclusive": 207, + "end_pts_s": 17.25, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 206, + "start_pts_s": 17.166666666666668 + }, + { + "end_frame_exclusive": 208, + "end_pts_s": 17.333333333333332, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 207, + "start_pts_s": 17.25 + }, + { + "end_frame_exclusive": 209, + "end_pts_s": 17.416666666666668, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 208, + "start_pts_s": 17.333333333333332 + }, + { + "end_frame_exclusive": 210, + "end_pts_s": 17.5, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 209, + "start_pts_s": 17.416666666666668 + }, + { + "end_frame_exclusive": 211, + "end_pts_s": 17.583333333333332, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 210, + "start_pts_s": 17.5 + }, + { + "end_frame_exclusive": 212, + "end_pts_s": 17.666666666666668, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 211, + "start_pts_s": 17.583333333333332 + }, + { + "end_frame_exclusive": 213, + "end_pts_s": 17.75, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 212, + "start_pts_s": 17.666666666666668 + }, + { + "end_frame_exclusive": 214, + "end_pts_s": 17.833333333333332, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 61.453, + "file": "frames/0052.png", + "presentation_phase": "01-demonstration", + "sha256": "ce0b1cf66d283c9bbca5f8a38a3bb6e13f83012ef896125d5a407f7a53bdebb3", + "source": "presentation-post-key" + }, + "start_frame": 213, + "start_pts_s": 17.75 + }, + { + "end_frame_exclusive": 215, + "end_pts_s": 17.916666666666668, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 69.585, + "file": "frames/0053.png", + "presentation_phase": "01-demonstration", + "sha256": "f0764576ac20f0afdac3897e0779503a89680e3d4b46088e4d81170260c78ce1", + "source": "presentation-post-pointer" + }, + "start_frame": 214, + "start_pts_s": 17.833333333333332 + }, + { + "end_frame_exclusive": 216, + "end_pts_s": 18.0, + "facts": { + "model_calls": 0, + "outcome": "RECORDED" + }, + "phase": "demonstration", + "source_frame": { + "captured_elapsed_s": 69.585, + "file": "frames/0053.png", + "presentation_phase": "01-demonstration", + "sha256": "f0764576ac20f0afdac3897e0779503a89680e3d4b46088e4d81170260c78ce1", + "source": "presentation-post-pointer" + }, + "start_frame": 215, + "start_pts_s": 17.916666666666668 + }, + { + "compiled_graph": { + "node_id": "step_000", + "node_index": 0 + }, + "end_frame_exclusive": 229, + "end_pts_s": 19.083333333333332, + "phase": "compiled_workflow", + "start_frame": 216, + "start_pts_s": 18.0 + }, + { + "compiled_graph": { + "node_id": "step_001", + "node_index": 1 + }, + "end_frame_exclusive": 242, + "end_pts_s": 20.166666666666668, + "phase": "compiled_workflow", + "start_frame": 229, + "start_pts_s": 19.083333333333332 + }, + { + "compiled_graph": { + "node_id": "step_002", + "node_index": 2 + }, + "end_frame_exclusive": 255, + "end_pts_s": 21.25, + "phase": "compiled_workflow", + "start_frame": 242, + "start_pts_s": 20.166666666666668 + }, + { + "compiled_graph": { + "node_id": "step_003", + "node_index": 3 + }, + "end_frame_exclusive": 268, + "end_pts_s": 22.333333333333332, + "phase": "compiled_workflow", + "start_frame": 255, + "start_pts_s": 21.25 + }, + { + "compiled_graph": { + "node_id": "step_004", + "node_index": 4 + }, + "end_frame_exclusive": 281, + "end_pts_s": 23.416666666666668, + "phase": "compiled_workflow", + "start_frame": 268, + "start_pts_s": 22.333333333333332 + }, + { + "compiled_graph": { + "node_id": "step_005", + "node_index": 5 + }, + "end_frame_exclusive": 294, + "end_pts_s": 24.5, + "phase": "compiled_workflow", + "start_frame": 281, + "start_pts_s": 23.416666666666668 + }, + { + "compiled_graph": { + "node_id": "step_006", + "node_index": 6 + }, + "end_frame_exclusive": 307, + "end_pts_s": 25.583333333333332, + "phase": "compiled_workflow", + "start_frame": 294, + "start_pts_s": 24.5 + }, + { + "compiled_graph": { + "node_id": "step_007", + "node_index": 7 + }, + "end_frame_exclusive": 320, + "end_pts_s": 26.666666666666668, + "phase": "compiled_workflow", + "start_frame": 307, + "start_pts_s": 25.583333333333332 + }, + { + "compiled_graph": { + "node_id": "__end__", + "node_index": 8 + }, + "end_frame_exclusive": 333, + "end_pts_s": 27.75, + "phase": "compiled_workflow", + "start_frame": 320, + "start_pts_s": 26.666666666666668 + }, + { + "end_frame_exclusive": 376, + "end_pts_s": 31.333333333333332, + "phase": "compiled_workflow", + "start_frame": 333, + "start_pts_s": 27.75 + }, + { + "end_frame_exclusive": 381, + "end_pts_s": 31.75, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "governed_replay", + "source_frame": { + "captured_elapsed_s": 4.027, + "file": "frames/0000.png", + "presentation_phase": "02-verified-replay", + "sha256": "2f96c4ec19019bec26152b1e5c286da9ccd593fc12357b60b4238baeadf8dcd3", + "source": "rdp-client-framebuffer" + }, + "start_frame": 376, + "start_pts_s": 31.333333333333332 + }, + { + "end_frame_exclusive": 386, + "end_pts_s": 32.166666666666664, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "governed_replay", + "source_frame": { + "captured_elapsed_s": 11.323, + "file": "frames/0001.png", + "presentation_phase": "02-verified-replay", + "sha256": "11ba5b490b7bd9983027fd20dbe96b8dd5d6d4fa40b0b3705ffa3a545ea5bc72", + "source": "rdp-client-framebuffer" + }, + "start_frame": 381, + "start_pts_s": 31.75 + }, + { + "end_frame_exclusive": 391, + "end_pts_s": 32.583333333333336, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "governed_replay", + "source_frame": { + "captured_elapsed_s": 21.213, + "file": "frames/0002.png", + "presentation_phase": "02-verified-replay", + "sha256": "5c10e836f1c4b95fabb9ac0d37fff0ea392d90168793e906cfa1bc700dfdcd87", + "source": "rdp-client-framebuffer" + }, + "start_frame": 386, + "start_pts_s": 32.166666666666664 + }, + { + "end_frame_exclusive": 396, + "end_pts_s": 33.0, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "governed_replay", + "source_frame": { + "captured_elapsed_s": 25.14, + "file": "frames/0003.png", + "presentation_phase": "02-verified-replay", + "sha256": "33e5d042bba0cac1aa38fecbac9d8248132724ebde42d3423c8a645b15b14860", + "source": "rdp-client-framebuffer" + }, + "start_frame": 391, + "start_pts_s": 32.583333333333336 + }, + { + "end_frame_exclusive": 401, + "end_pts_s": 33.416666666666664, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "governed_replay", + "source_frame": { + "captured_elapsed_s": 36.195, + "file": "frames/0004.png", + "presentation_phase": "02-verified-replay", + "sha256": "4045874aa25e65b5312f78e3c47807ade563580c605bad3d4e84f52ba767d403", + "source": "rdp-client-framebuffer" + }, + "start_frame": 396, + "start_pts_s": 33.0 + }, + { + "end_frame_exclusive": 406, + "end_pts_s": 33.833333333333336, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "governed_replay", + "source_frame": { + "captured_elapsed_s": 40.166, + "file": "frames/0005.png", + "presentation_phase": "02-verified-replay", + "sha256": "e6e6e21556225545c0b4c45a52c7a8258f920ba244b063691ffc168beaf61b7b", + "source": "rdp-client-framebuffer" + }, + "start_frame": 401, + "start_pts_s": 33.416666666666664 + }, + { + "end_frame_exclusive": 411, + "end_pts_s": 34.25, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "governed_replay", + "source_frame": { + "captured_elapsed_s": 51.333, + "file": "frames/0006.png", + "presentation_phase": "02-verified-replay", + "sha256": "73abf9410b4d91bc9f6d1c271aae2b46ad2e748a1fa3ec7685f0ce1dc3041243", + "source": "rdp-client-framebuffer" + }, + "start_frame": 406, + "start_pts_s": 33.833333333333336 + }, + { + "end_frame_exclusive": 416, + "end_pts_s": 34.666666666666664, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "governed_replay", + "source_frame": { + "captured_elapsed_s": 55.301, + "file": "frames/0007.png", + "presentation_phase": "02-verified-replay", + "sha256": "1aa75f5def849888cd4c3543b54c2cae2f5210400eb7905bad83b5e9b82078e2", + "source": "rdp-client-framebuffer" + }, + "start_frame": 411, + "start_pts_s": 34.25 + }, + { + "end_frame_exclusive": 421, + "end_pts_s": 35.083333333333336, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "governed_replay", + "source_frame": { + "captured_elapsed_s": 66.76, + "file": "frames/0008.png", + "presentation_phase": "02-verified-replay", + "sha256": "d5d5e2caf4927502c2fc6b78234d90b4e2ba7ebb241065b8d4fe8d1b5b919834", + "source": "rdp-client-framebuffer" + }, + "start_frame": 416, + "start_pts_s": 34.666666666666664 + }, + { + "end_frame_exclusive": 493, + "end_pts_s": 41.083333333333336, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "independent_effect_check", + "source_frame": { + "captured_elapsed_s": 66.76, + "file": "frames/0008.png", + "presentation_phase": "02-verified-replay", + "sha256": "d5d5e2caf4927502c2fc6b78234d90b4e2ba7ebb241065b8d4fe8d1b5b919834", + "source": "rdp-client-framebuffer" + }, + "start_frame": 421, + "start_pts_s": 35.083333333333336 + }, + { + "end_frame_exclusive": 577, + "end_pts_s": 48.083333333333336, + "facts": { + "effect": "not_written", + "effect_verifier_kind": "read-only SQL", + "identity": "mismatch", + "model_calls": 0, + "outcome": "HALTED" + }, + "phase": "wrong_record_refusal", + "source_frame": { + "captured_elapsed_s": 66.559, + "file": "frames/0008.png", + "presentation_phase": "03-safe-halt", + "sha256": "1d28998718b3b99b0fe82384f9cbabe61d728fa458a6fa002917e849fc74b79e", + "source": "rdp-client-framebuffer" + }, + "start_frame": 493, + "start_pts_s": 41.083333333333336 + }, + { + "end_frame_exclusive": 627, + "end_pts_s": 52.25, + "facts": { + "effect": "confirmed", + "effect_verifier_kind": "read-only SQL", + "identity": "verified", + "model_calls": 0, + "outcome": "VERIFIED" + }, + "phase": "terminal_summary", + "source_frame": { + "captured_elapsed_s": 66.76, + "file": "frames/0008.png", + "presentation_phase": "02-verified-replay", + "sha256": "d5d5e2caf4927502c2fc6b78234d90b4e2ba7ebb241065b8d4fe8d1b5b919834", + "source": "rdp-client-framebuffer" + }, + "start_frame": 577, + "start_pts_s": 48.083333333333336 + } + ], + "workflow_digest": "da52230dbde8d8ae6bd8060f4d2dc3f8c503487bbb3a214159af9550317670b9" +} diff --git a/public/demos/rdp/program-graph.json b/public/demos/rdp/program-graph.json index eb9f282..9dbef92 100644 --- a/public/demos/rdp/program-graph.json +++ b/public/demos/rdp/program-graph.json @@ -3,7 +3,7 @@ "bundle": { "name": "rdp-vision-ladder", "schema_version": 2, - "created_at": "2026-07-30T20:38:04.671826+00:00", + "created_at": "2026-07-30T22:53:14.745572+00:00", "viewport": [ 1280, 800 @@ -52,7 +52,7 @@ "certification_status": null, "policy_name": null, "expires_at": null, - "content_digest": "1639d92d9c92aa1ba3b87b017ba9a52eae8b2d2a8cbe0e6a3c9deead52df7664", + "content_digest": "da52230dbde8d8ae6bd8060f4d2dc3f8c503487bbb3a214159af9550317670b9", "source_recording_sha256": null } }, diff --git a/public/demos/rdp/qualification.json b/public/demos/rdp/qualification.json index b0b6078..053217b 100644 --- a/public/demos/rdp/qualification.json +++ b/public/demos/rdp/qualification.json @@ -1,7 +1,7 @@ { "accepted": true, - "base_commit": "6673dd97de169d8c500031c4ac4c64a95bb71656", - "candidate_commit": "a3c71c1915ae7465306eb7106511bc1307ba162c", + "base_commit": "c535bab13e544b0d7e24c8bb0d2d6c0dfded7e16", + "candidate_commit": "e0f9ffb9abcc91e151fc764e6550fcad17d73150", "caveat": "Synthetic Tk task over real FreeRDP-transported pixels + input, but NOT Citrix ICA/HDX, NOT the aardwolf transport, NOT a Windows application qualification, and the drift is simulated on the real protocol session (not WAN capture).", "contract": { "drift_false_completions": 0, @@ -61,7 +61,7 @@ "wrong_record_contract_violation", "reset_not_acknowledged" ], - "generated_at": "2026-07-30T20:45:29.227149+00:00", + "generated_at": "2026-07-30T23:00:45.731263+00:00", "model_calls": 0, "oracle": "host read of the bind-mounted appointment database, plus the runtime read-only SQL exactly-one-new-record and status gates", "run_count": 9, @@ -69,7 +69,7 @@ "substrate": "real-rdp-freerdp3-roundtrip-linux-kiosk", "successes": 9, "task": "record->compile->replay an appointment booking through the vision-only resolver ladder over a real RDP round-trip, with no structural backend; confirm the write through read-only SQL; halt under injected DPI/theme/JPEG drift; and halt when the active patient changes before the write", - "total_s": 548.514, + "total_s": 556.63, "trials": [ { "condition_trial": 1, @@ -101,7 +101,7 @@ 190 ], "resolution": { - "confidence": 1.0, + "confidence": 0.9999993443489075, "point": [ 335, 190 @@ -137,7 +137,7 @@ 388 ], "resolution": { - "confidence": 1.0, + "confidence": 0.9999992847442627, "point": [ 590, 388 @@ -336,7 +336,7 @@ 190 ], "resolution": { - "confidence": 1.0, + "confidence": 0.9999993443489075, "point": [ 335, 190 @@ -372,7 +372,7 @@ 388 ], "resolution": { - "confidence": 1.0, + "confidence": 0.9999992847442627, "point": [ 590, 388 @@ -571,7 +571,7 @@ 190 ], "resolution": { - "confidence": 1.0, + "confidence": 0.9999993443489075, "point": [ 335, 190 @@ -607,7 +607,7 @@ 388 ], "resolution": { - "confidence": 1.0, + "confidence": 0.9999992847442627, "point": [ 590, 388