{
 "use_case": "family-film",
 "session_vertical": "studio",
 "title": "Family interview film: consent first, then chapters, traced quotes and a trailer",
 "about": "A refusal in the storyteller's own words must stop the project. Then the synthetic Rosa sample (a 207 s Italian interview with public-domain photos, bundled on the server) must reach ready with at least 4 chapters, every shown quote traced to the second she said it, her voice told from the interviewer's, and a trailer with a C2PA credential, every model call receipted. About 1-2 minutes.",
 "licence": "inputs/refusal-it.wav: a synthetic refusal made with VoxCPM2 voice design (openbmb/VoxCPM2, Apache-2.0) from a text description; no person was recorded or cloned. The Rosa sample on the server: a synthetic interview (same method) and Library of Congress photos with no known restrictions.",
 "inputs": [
  {
   "file": "inputs/refusal-it.wav",
   "what": "A 4 s refusal in Italian (16 kHz WAV). Swap in your own storyteller's consent recording to test a yes."
  }
 ],
 "steps": [
  {
   "id": "project",
   "method": "POST",
   "path": "/studio/projects",
   "body": {
    "name": "[TEST] rehearsal family film"
   }
  },
  {
   "id": "refuse",
   "method": "POST",
   "path": "/studio/projects/${project.project.id}/family?key=${project.project_key}",
   "expect_status": 422,
   "body": {
    "storyteller": "Rosa",
    "language": "it",
    "consent_b64": {
     "$b64": "inputs/refusal-it.wav"
    }
   },
   "timeout": 120
  },
  {
   "id": "sample",
   "method": "POST",
   "path": "/studio/projects/${project.project.id}/family/sample?key=${project.project_key}",
   "timeout": 120
  },
  {
   "id": "film",
   "method": "GET",
   "path": "/studio/family/${sample.id}?key=${project.project_key}",
   "until": {
    "path": "films.trailer.status",
    "in": [
     "done",
     "failed"
    ]
   },
   "interval": 10,
   "max_wait": 900
  }
 ],
 "checks": [
  {
   "says": "a refusal in her own words is refused",
   "path": "refuse.code",
   "equals": "consent"
  },
  {
   "says": "the sample is ready",
   "path": "film.status",
   "equals": "ready"
  },
  {
   "says": "at least 4 chapters of her life",
   "path": "film.chapters",
   "count_min": 4
  },
  {
   "says": "every shown quote is traced to the second she said it",
   "path": "film.tracing.rate",
   "min": 0.9
  },
  {
   "says": "her voice is told from the interviewer's, with her consent recording as the reference",
   "path": "film.speakers.ok",
   "truthy": true
  },
  {
   "says": "the trailer renders",
   "path": "film.films.trailer.status",
   "equals": "done"
  },
  {
   "says": "the trailer carries a C2PA credential",
   "path": "film.films.trailer.credential",
   "equals": "c2pa"
  },
  {
   "says": "every model call has a signed receipt",
   "receipts": "signed",
   "min": 3
  }
 ]
}