Dummy Run

The run record is the source of truth for everything else. The results board is built from run records. The telemetry exporter reads run records and maps them to traces, metrics and logs. The schema is schema/run-record.schema.json in the repository, with its $id at https://dummyrun.dev/schema/run-record/v1.json. The eight synthetic examples in examples/runs/ validate against it in CI, and examples/generate-runs.py writes more for dashboards that need history.

Fields

One persona working through one scenario against one preview. Written by the runner, completed by the reviewer. Every table below comes from schema/run-record.schema.json, version 1. A field marked required must be present.

Top level

FieldTypeMeaning
batchstringOptional ID grouping runs started together
browserrequiredobject
ended_atrequiredstring (date-time)
findingsrequiredarray of object
idrequiredstringRun ID: date, then a slug Pattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9-]+$
outcomerequiredone of completed, blocked, errored, budget_exhaustedcompleted: the persona finished its job. blocked: the app stopped it. errored: the harness failed. budget_exhausted: it ran out of steps or tokens
personarequiredobject
providerrequiredobject
scenariorequiredobject
schema_versionrequiredconstant 1
started_atrequiredstring (date-time)
stepsrequiredarray of object
targetrequiredobject
usagerequiredobject

persona

FieldTypeMeaning
devicerequiredone of desktop, tablet, phone
idrequiredstringPattern ^[a-z0-9-]+$
rolerequiredstringThe app role the persona signs in with

scenario

FieldTypeMeaning
idrequiredstringPattern ^[a-z0-9-]+$
titlerequiredstring

target

FieldTypeMeaning
adapterrequiredstringTarget adapter name, such as url or github-deployments
base_urlrequiredstring (uri)
commitstringPattern ^[0-9a-f]{7,40}$
environmentrequiredstringPreview ID, such as pr-42

provider

FieldTypeMeaning
kindrequiredstringvertex-gemini, anthropic, openai-compatible, azure-foundry
modelrequiredstring
regionrequiredstringRegion the model ran in, or global

browser

FieldTypeMeaning
namerequiredone of chrome, firefox
versionrequiredstring

usage

FieldTypeMeaning
cost_usdnumber
input_tokensrequiredinteger
model_callsrequiredinteger
output_tokensrequiredinteger

steps, each item

FieldTypeMeaning
a11y_violationsinteger
actionrequiredone of look, visit, click, fill, type, select, press, back, scroll, wait, a11y, screenshot, finish
atrequiredstring (date-time)
console_errorsinteger
duration_msrequiredinteger
nrequiredinteger
notestringWhat the persona said about this step
screenshotstringPath relative to the run record
statusintegerHTTP status of the page after the action
targetstringSelector, label or URL the action used
urlstringPage URL after the action

findings, each item

FieldTypeMeaning
evidencerequiredone of measured, code, sourced, inferred
idrequiredstringStable fingerprint, the same across runs that hit the same problem Pattern ^[a-z0-9-]+$
kindrequiredone of bug, permission, friction, accessibility, question
severityrequiredone of blocker, major, minor, info
stepsrequiredarray of integer
titlerequiredstring
verdictrequiredone of confirmed, rejected, pendingThe reviewer's verdict

An example record

This is examples/runs/2026-10-17-lin-contributor-008.json, one of the eight synthetic records in the repository. The persona lin-contributor checked a payment status in Inkwell on a tablet. The reviewer confirmed one permission finding and left one question pending.

Show the record (163 lines of JSON)
{
  "schema_version": 1,
  "id": "2026-10-17-lin-contributor-008",
  "batch": "2026-10-17-pr-41",
  "started_at": "2026-10-17T13:52:56.000Z",
  "ended_at": "2026-10-17T13:54:03.183Z",
  "persona": {
    "id": "lin-contributor",
    "role": "contributor",
    "device": "tablet"
  },
  "scenario": {
    "id": "check-payment",
    "title": "Check a payment status"
  },
  "target": {
    "adapter": "url",
    "environment": "pr-41",
    "base_url": "https://pr-41.inkwell.example",
    "commit": "6e05e3e"
  },
  "provider": {
    "kind": "anthropic",
    "model": "claude-sonnet-5-5",
    "region": "global"
  },
  "browser": {
    "name": "firefox",
    "version": "146.0"
  },
  "outcome": "completed",
  "steps": [
    {
      "n": 1,
      "at": "2026-10-17T13:52:56.000Z",
      "action": "select",
      "duration_ms": 4264,
      "url": "https://pr-41.inkwell.example/issues",
      "status": 200,
      "console_errors": 0,
      "target": "Assign to"
    },
    {
      "n": 2,
      "at": "2026-10-17T13:53:04.663Z",
      "action": "click",
      "duration_ms": 4204,
      "url": "https://pr-41.inkwell.example/drafts",
      "status": 200,
      "console_errors": 0,
      "target": "Title"
    },
    {
      "n": 3,
      "at": "2026-10-17T13:53:12.946Z",
      "action": "select",
      "duration_ms": 1340,
      "url": "https://pr-41.inkwell.example/drafts",
      "status": 200,
      "console_errors": 0,
      "target": "Submit"
    },
    {
      "n": 4,
      "at": "2026-10-17T13:53:18.659Z",
      "action": "click",
      "duration_ms": 3242,
      "url": "https://pr-41.inkwell.example/drafts",
      "status": 200,
      "console_errors": 0,
      "target": "Comment"
    },
    {
      "n": 5,
      "at": "2026-10-17T13:53:26.976Z",
      "action": "look",
      "duration_ms": 2924,
      "url": "https://pr-41.inkwell.example/issues",
      "status": 200,
      "console_errors": 0,
      "screenshot": "screens/008-05.png"
    },
    {
      "n": 6,
      "at": "2026-10-17T13:53:34.594Z",
      "action": "type",
      "duration_ms": 2631,
      "url": "https://pr-41.inkwell.example/payments",
      "status": 200,
      "console_errors": 0,
      "target": "Comment"
    },
    {
      "n": 7,
      "at": "2026-10-17T13:53:39.958Z",
      "action": "look",
      "duration_ms": 2891,
      "url": "https://pr-41.inkwell.example/issues",
      "status": 200,
      "console_errors": 0,
      "screenshot": "screens/008-07.png"
    },
    {
      "n": 8,
      "at": "2026-10-17T13:53:48.432Z",
      "action": "visit",
      "duration_ms": 1464,
      "url": "https://pr-41.inkwell.example/issues",
      "status": 200,
      "console_errors": 0
    },
    {
      "n": 9,
      "at": "2026-10-17T13:53:54.110Z",
      "action": "click",
      "duration_ms": 1458,
      "url": "https://pr-41.inkwell.example/payments",
      "status": 200,
      "console_errors": 0,
      "target": "Assign to"
    },
    {
      "n": 10,
      "at": "2026-10-17T13:53:59.117Z",
      "action": "finish",
      "duration_ms": 1030,
      "url": "https://pr-41.inkwell.example/reviews",
      "status": 200,
      "console_errors": 0
    }
  ],
  "findings": [
    {
      "id": "payment-status-wording",
      "kind": "question",
      "severity": "info",
      "title": "The payment status 'settled' is unclear to a contributor",
      "steps": [
        5
      ],
      "evidence": "inferred",
      "verdict": "pending"
    },
    {
      "id": "contributor-sees-rates-table",
      "kind": "permission",
      "severity": "major",
      "title": "A contributor can open the rates table for all writers",
      "steps": [
        7
      ],
      "evidence": "code",
      "verdict": "confirmed"
    }
  ],
  "usage": {
    "model_calls": 11,
    "input_tokens": 62986,
    "output_tokens": 3102,
    "cost_usd": 0.2355
  }
}