{
 "use_case": "field",
 "title": "Field report: 29 seconds of a synthetic roof inspection, streamed from a file",
 "about": "The first 29 seconds of a synthetic roof inspection walk-through (12 Oak Street: granule loss and three missing shingles on the south slope, chimney step flashing lifted about two inches), streamed over the live WebSocket. The session must turn it into a structured inspection report with issues and measurements, each checked against what was said.",
 "licence": "Synthetic: a script written for Decosa (no real people, patients or companies) read by Decosa house voices (Kokoro-82M stock voicepacks, Apache-2.0), each allowed by the consent ledger for project decosa-field-demo. Part of decosa-api, AGPL-3.0-or-later.",
 "inputs": [
  {
   "file": "inputs/roof-inspection-29s.wav",
   "what": "16 kHz mono 16-bit WAV, up to 30 s for a rehearsal (one continuous cut). Your own recordings must be in the same format (ffmpeg -i in.m4a -ac 1 -ar 16000 -sample_fmt s16 out.wav)."
  },
  {
   "file": "inputs/roof-inspection-script.json",
   "what": "The script the clip was cut from (only the turns in the clip, with the cut times), to compare the captions against by eye."
  }
 ],
 "steps": [
  {
   "id": "session",
   "live": {
    "vertical": "field",
    "audio": "inputs/roof-inspection-29s.wav",
    "speed": 2
   },
   "timeout": 150
  }
 ],
 "checks": [
  {
   "says": "the session ends with a done event",
   "path": "session.done",
   "exists": true
  },
  {
   "says": "the session reports no errors",
   "path": "session.errors",
   "count": 0
  },
  {
   "says": "the report is titled for the site (Oak Street)",
   "path": "session.done.summary.report.title",
   "contains": "Oak"
  },
  {
   "says": "at least 2 issues are listed",
   "path": "session.done.summary.report.issues",
   "count_min": 2
  },
  {
   "says": "the missing shingles and the lifted chimney flashing are among the issues",
   "path": "session.done.summary.report.issues.issue",
   "contains": [
    "shingle",
    "flashing"
   ]
  },
  {
   "says": "the roof pitch is recorded as a measurement",
   "path": "session.done.summary.report.measurements.what",
   "contains": "pitch"
  },
  {
   "says": "the overall condition is fair, poor or unsafe (not good)",
   "path": "session.done.summary.report.overall_condition",
   "in": [
    "fair",
    "poor",
    "unsafe"
   ]
  },
  {
   "says": "at least 3 report claims are checked and supported by the transcript",
   "path": "session.done.summary.report_check.counts.SUPPORTED",
   "min": 3
  },
  {
   "says": "every speech and model call has a signed receipt",
   "receipts": "signed"
  }
 ]
}
