{
  "format": "driftproof-answers/2",
  "receipt_hash": "643d86919b8b34178b4a0336afa7835ea0e42e061d2265a2898c2c0301063b99",
  "model_id": "claude-sonnet-5-5",
  "answers": {
    "81d784f64acd5a39bc1bb288ba31c19a859b42ebc26e7dc48ba5a5b4b4b67c51": "Nothing below has been run. Rendering is not part of the sequence because it hasn't been approved.\n\n**1. Start of turn (optional, uses project history)**\n```bash\nnpx hyperframes usage --json\nnpx hyperframes history begin --who claude --label \"Add headline reveal\"\nnpx hyperframes history --since mine --who claude   # see what the person changed; build on it\n```\n\n**2. Discovery: search the catalog before writing motion by hand**\n```bash\nnpx hyperframes catalog --query \"reveal a headline one line at a time\" --json\n```\n- Check `tier` in the JSON. The default is `words`, which is vocabulary-based, so a weak match there is expected.\n- Keep the query in English even if the video's copy isn't.\n- If `warnings` suggests the on-device tier, tell the user it is a one-time ~33 MB download, cached under `~/.hyperframes/`, and ask first. Only after they agree, run:\n  ```bash\n  npx hyperframes catalog --query \"reveal a headline one line at a time\" --on-device -y --json\n  ```\n- If `dropped` or `unindexed` is above zero, re-run with `--on-device` to refetch the index.\n- If nothing fits on either tier, report the gap using the pre-filled `report_gap` line, with `--wanted` filled in:\n  ```bash\n  npx hyperframes feedback --search-miss \"reveal a headline one line at a time\" --wanted \"<the move needed>\" --tier <words|on-device>\n  ```\n  Then author by hand.\n\n**3. Install the match**\n\nRead `/hyperframes-registry` first, then:\n```bash\nnpx hyperframes add <name>\n```\n\n**4. Author**\n\nWire the component into the composition using `/hyperframes-core`. If it involves keyframe motion or a camera move, read `/hyperframes-keyframes` first. To see what is on the timeline without reading every file:\n```bash\nnpx hyperframes timeline --json\n```\n\n**5. Fast feedback after the first HTML pass and structural changes**\n```bash\nnpx hyperframes lint\n```\n\n**6. Final gate (reruns lint itself, so no separate lint beforehand)**\n```bash\nnpx hyperframes check --snapshots\n```\nAdd `--strict` if warnings should gate.\n\n**7. Sub-composition smoke test (only if `index.html` mounts `data-composition-src`)**\n```bash\nnpx hyperframes snapshot --at <t1>,<t2>,<t3>\n```\nInspect the opening 30 seconds and any reported problem times at full resolution. Look for unstyled content, missing hero elements, and timeline-registration timeouts.\n\n**8. Final Studio preview**\n```bash\nnpx hyperframes preview --background\n```\nVerify the URL returns HTTP 200, give the user the timeline project URL, and keep it alive during review.\n\n**9. Close the turn**\n```bash\nnpx hyperframes history end\n```\nIf a check fails or the user says it got worse, use `npx hyperframes history undo --who claude` instead of hand-editing back.\n\n**Stop here.** Ask the user whether to revise or render. Only after approval would the next steps be `render --quality looks`, a non-empty-file check, and `ffprobe`.",
    "97b5a83e28a95f7e10b8ff95592e218de3d242097dc3330a07d721687d87fbb7": "Here is the command sequence, from discovery to the final preview. Nothing has been run, and rendering is excluded because it has not been approved.\n\n**1. Discover (search the catalog before hand-authoring motion)**\n```bash\nnpx hyperframes catalog --query \"reveal a headline one line at a time\"\n```\n- Query in English, describing the effect. Search is local and sends nothing.\n- Read `tier` in the `--json` output (add `--json` if scripting). The default tier is `words`, so a weak result there is expected. If results are poor, offer the on-device tier (~33 MB one-time download) and only pass `--on-device` once the user agrees.\n- If nothing worth installing turns up, report the gap with the pre-filled `report_gap` line:\n  ```bash\n  npx hyperframes feedback --search-miss \"<query>\" --wanted \"<the move you needed>\" --tier <tier>\n  ```\n  (unless telemetry is disabled or the user opted out).\n\n**2. Install the match** (details in `/hyperframes-registry`)\n```bash\nnpx hyperframes add <name>\n```\nAuthor by hand with `/hyperframes-core` only if nothing fits.\n\n**3. Inspect the timeline** (instead of reading every HTML file)\n```bash\nnpx hyperframes timeline --json\n```\n\n**4. Fast feedback while editing**\n```bash\nnpx hyperframes lint\n```\nRun it after the first HTML pass and after structural changes.\n\n**5. Final gate** (it reruns lint itself, so no separate lint beforehand)\n```bash\nnpx hyperframes check --snapshots\n```\nAdd `--strict` if warnings should gate the result.\n\n**6. Sub-composition smoke test** (only if `index.html` mounts `data-composition-src`)\n```bash\nnpx hyperframes snapshot --at <t1>,<t2>,<t3>\n```\nInspect each mounted scene at full resolution, including the opening 30 seconds and any reported problem times.\n\n**7. Final Studio preview**\n```bash\nnpx hyperframes preview --background\n```\nVerify the URL returns HTTP 200, hand the user the timeline project URL, and keep it alive during review.\n\n**8. Stop and ask.** Ask the user whether to revise or render. Do not render until they approve.\n\nOnce approved, the next step would be `npx hyperframes render --quality looks --output out.mp4`, followed by `test -s out.mp4` and an `ffprobe` duration check.",
    "b186639d4d1567b310c8e5662d6dd57c1a3e826ccce163c01ebfa5d26045a0c1": "Nothing below has been run. This is the planned sequence, stopping before any render.\n\n**1. Discovery (catalog search before hand-authoring)**\n```bash\nnpx hyperframes catalog --query \"reveal a headline one line at a time\" --json\n```\n- Query in English, describing the effect. Search is local and sends nothing.\n- Check `tier` in the JSON envelope (`words` vs `on-device`), plus `dropped`, `unindexed`, and `warnings`.\n- If results are weak on `words`, offer the optional ~33 MB `--on-device` download and let you decide before enabling it (`-y` only after you agree).\n- If nothing fits on either tier, send the pre-filled `report_gap` line with `--wanted` filled in:\n  ```bash\n  npx hyperframes feedback --search-miss \"<query>\" --wanted \"<the move you needed>\" --tier <tier>\n  ```\n  Then author by hand.\n\n**2. Install the match**\n```bash\nnpx hyperframes add <name>\n```\n(`/hyperframes-registry` covers details.)\n\n**3. Author and fast feedback**\n\nCompose with `/hyperframes-core`. If a scaffold is still needed first: `npx hyperframes init <project>`. Check structure with `npx hyperframes timeline --json`, then:\n```bash\nnpx hyperframes lint\n```\nRun it after the first HTML pass and after structural changes.\n\n**4. Final gate**\n```bash\nnpx hyperframes check\n```\nThis reruns lint itself, so no separate lint is needed. Add `--snapshots` for annotated frames, and `--strict` if warnings should gate.\n\n**5. Sub-composition smoke test (only if `data-composition-src` is mounted)**\n```bash\nnpx hyperframes snapshot --at <t1>,<t2>,<t3>\n```\nInspect the opening 30 seconds and any reported problem times at full resolution, zooming into text edges.\n\n**6. Final Studio preview**\n```bash\nnpx hyperframes preview --background\n```\nVerify the URL returns HTTP 200, hand you the timeline project URL, keep it alive, and ask whether to revise or render.\n\n**Stop here.** Rendering waits for your explicit approval. When approved, the order would be `--quality draft` while iterating, `looks` for the first encode, and `delivery` for the final.\n\nOptionally, `history begin` at the start of a turn and `history end` at the close keep my writes distinguishable from yours.",
    "c30959e00cb2e509d44b8931db002a817161b894f25c610842bdf9ec7166a5a3": "I haven't verified any HyperFrames CLI syntax, so the subcommand names and flags below are assumptions. Run each tool's `--help` first and adjust. Nothing here has been run, and the sequence stops at preview.\n\n**1. Orient (confirm the CLI and the project state)**\n```sh\nnpx hyperframes --help          # confirm the real subcommand names\nls                              # confirm this is a HyperFrames project (config, compositions)\n```\n\n**2. Discovery (the registry search hasn't been done yet)**\n```sh\nnpx hyperframes registry search \"headline reveal\"\nnpx hyperframes registry search \"title animation\"     # fallback terms\nnpx hyperframes registry search \"text reveal\"\n```\nPick a candidate from the results rather than guessing a name. If nothing fits, the fallback is to hand-write the reveal as a composition in the project.\n\n**3. Inspect before adding**\n```sh\nnpx hyperframes registry show <candidate>    # check description, dependencies, files it will add\n```\n\n**4. Add the chosen item** (this writes files to the project, so confirm first)\n```sh\nnpx hyperframes add <candidate>\n```\n\n**5. Wire it in**\nEdit the composition to use the item and set the headline text, timing, and duration. This is a manual file edit, not a command.\n\n**6. Validate**\n```sh\nnpx hyperframes lint          # or `validate` / `check`, whichever exists\n```\nFix any errors, then re-run until it's clean.\n\n**7. Preview (no render)**\n```sh\nnpx hyperframes preview\n```\nCheck the reveal's timing, easing, and text legibility in the browser.\n\n**8. Stop here**\nNo `render` command is included because rendering hasn't been approved. Once you approve it, I can add that step.\n\nBefore running anything, tell me if you'd like me to check the actual CLI help output to replace these assumed commands with verified ones.",
    "792100529d7a4d81d52f2993bcab3f3b23ccfdfbbb8f3dc7a38f9deec3d126b9": "Nothing was run, and I have no supplied facts about the HyperFrames CLI, so every command below is a draft. Confirm each one against `--help` before running it. The subcommand names (`add`, `lint`, `validate`) are my best guess, not verified.\n\n**Draft sequence (render excluded)**\n\n```sh\n# 0. Confirm the CLI and its real subcommands first\nnpx hyperframes --help\n\n# 1. Discovery: search the registry for headline/text-reveal blocks (not yet done)\nnpx hyperframes search \"headline reveal\"     # or: npx hyperframes registry list / --help to find the real form\n\n# 2. Inspect the candidate before installing (read its description, files, dependencies)\nnpx hyperframes info <candidate-name>        # placeholder, depends on step 1 results\n\n# 3. Install the chosen block into the project\nnpx hyperframes add <candidate-name>\n\n# 4. Edit the headline text, timing, and styling in the added composition\n#    (manual step, no command)\n\n# 5. Validate / lint the project\nnpx hyperframes lint                         # or: validate, whichever step 0 shows\n\n# 6. Preview locally\nnpx hyperframes preview\n```\n\n**Notes**\n- **Step 1 comes first.** Since no registry search has been done, I can't name a block. `<candidate-name>` stays a placeholder until you have real results.\n- **Rendering is deliberately left out.** If you approve it later, it would be a separate `npx hyperframes render` step, run after validation and preview look good.\n- **Preview may start a local server.** Check that its port and host settings are acceptable.\n- **Install runs third-party code.** Step 3 pulls in a registry package, so review step 2's output first.\n\nIf you'd like, I can run step 0 and the discovery search once you allow tool use, and then replace the guesses with confirmed commands.",
    "06561072debaa713b7a688ad425cde18969913203aaa698bee8f236058a78ccc": "I don't have verified documentation for the HyperFrames CLI in what you've supplied, and I can't run `--help` here. The subcommand names below are placeholders for the steps, not confirmed syntax. Check each against the CLI's own help before running it.\n\n**Draft sequence (nothing executed, no render)**\n\n1. **Confirm the CLI and its commands**\n   ```\n   hyperframes --help\n   ```\n   This confirms the binary exists and lists the real subcommands for search, add, validate and preview. Map each step below to what it shows.\n\n2. **Inspect the project**\n   ```\n   hyperframes <info|status>      # placeholder\n   ```\n   Confirm you're in the right project root. The working directory is not a git repo, so there is no VCS safety net for the changes in step 5.\n\n3. **Discovery: search the registry for a headline reveal**\n   ```\n   hyperframes registry search \"headline reveal\"     # placeholder\n   hyperframes registry search \"title\"               # fallback terms: \"text reveal\", \"lower third\"\n   ```\n   No registry search has been done yet, so this is the first real step. Don't assume a matching block exists until the results come back.\n\n4. **Inspect the chosen candidate before installing**\n   ```\n   hyperframes registry show <candidate-name>        # placeholder\n   ```\n   Check its parameters (text, duration, easing), its dependencies, and which files it will add.\n\n5. **Add it to the project**\n   ```\n   hyperframes add <candidate-name>                  # placeholder\n   ```\n   This writes files, so review the candidate first and confirm the target location.\n\n6. **Configure the headline**\n   Edit the added component or composition to set the headline text, timing and styling. This is a manual file edit, not a CLI command.\n\n7. **Validate**\n   ```\n   hyperframes validate        # or lint / check, whichever exists\n   ```\n   Fix any errors before moving on.\n\n8. **Preview**\n   ```\n   hyperframes preview         # placeholder\n   ```\n   Review the reveal timing and appearance interactively.\n\n**Stopped before:** `render`. You haven't approved it, so I've left it out. Once you're happy with the preview, tell me and I can draft that step.\n\nIf you can paste the output of `hyperframes --help` or point me to the docs, I'll replace the placeholders with exact commands.",
    "deef99fa90c0923442df65c865401dcd285e137770b406c6a936ed34809707ad": "I have no verified HyperFrames CLI reference here, so the subcommand names below are placeholders from common conventions. Check each against `--help` before running it. The ordering and gates are the part I'm confident in.\n\n**Known facts**\n- The goal is a headline reveal in a HyperFrames project.\n- No registry search has been done.\n- Rendering is not approved, so the sequence stops at validation and preview.\n\n**Draft sequence**\n\n```sh\n# 0. Orient: confirm the CLI exists and learn its real subcommands\nhyperframes --help\n\n# 1. Confirm project state (are we in a project? what's installed?)\nls -la\nhyperframes info            # placeholder: project/config summary\n\n# 2. Discovery: search the registry for headline/text-reveal blocks\nhyperframes registry search \"headline reveal\"      # placeholder\nhyperframes registry search \"text reveal\"\nhyperframes registry show <candidate-name>         # inspect before adding\n\n# 3. Add the chosen block (changes the project, so do this only after you pick a candidate)\nhyperframes add <candidate-name>                   # placeholder\n\n# 4. Edit: set headline text, timing and style in the composition file\n#    (done by hand or by me with file tools, not a CLI step)\n\n# 5. Validate (lint/check composition, assets, timing)\nhyperframes validate                               # placeholder; may be \"lint\" or \"check\"\n\n# 6. Preview (local, no render output)\nhyperframes preview                                # placeholder\n\n# 7. STOP. No `hyperframes render` until you approve it.\n```\n\n**Gates**\n- After step 2, you choose the candidate. I'd inspect it with `show` before adding anything.\n- Step 3 is the first command that modifies the project.\n- If step 5 reports errors, fix them and re-run before previewing.\n- Step 7 is intentionally absent, since rendering hasn't been approved.\n\nIf you want me to turn this into real commands, I'd need to run `hyperframes --help`, which means lifting the no-tools restriction. Alternatively, paste the help output here and I'll finalize it.",
    "1dff5e6e4a62e3de57d9897f4eb72f05935b6dd9459ba93ae022d191b7f62bf2": "At main time 14 s, the nested scene is at local time 2 s (14 − 12). A clip with local start 2 s therefore begins at exactly 14 s on the main timeline. The sub-composition's local times are not the main timeline's times, so don't compare them directly.\n\n**Find the owning file with the CLI**\n\nDon't open `index.html` and each sub-composition by hand. Ask the timeline command, which reports absolute main-timeline times for nested rows along with the file that owns each one:\n\n```bash\nnpx hyperframes timeline --json\n```\n\nNested rows carry `absStart` and `absEnd` (main-timeline time) and `file` (the owning source file). Use these fields, not the local start values. To filter for clips active at 14 s:\n\n```bash\nnpx hyperframes timeline --json \\\n  | jq '.. | objects | select(has(\"absStart\") and .absStart <= 14 and .absEnd > 14)'\n```\n\nI haven't run this, so the exact JSON shape may differ. The `..` recursive walk avoids depending on it, but adjust the filter if the field names or nesting differ.\n\n**Reading the result**\n\n- Use `absStart <= 14 < absEnd`. A clip that ends at exactly 14 is gone at that instant, and one that starts at 14 is already visible.\n- Several rows may match, since overlapping tracks all show up. The visible one is the topmost, meaning the highest track or z-order that isn't hidden or fully transparent. Audio-only rows don't count as visible.\n- The `file` on the winning row is your answer. It will be the nested scene's file if the clip lives inside the mounted sub-composition, or `index.html` if a root-level clip covers it.\n\n**Confirm visually**\n\nCapture the frame at that time and check that the pixels match the clip you identified:\n\n```bash\nnpx hyperframes snapshot --at 14\n```\n\nIf the snapshot shows something other than the matched row's content, another overlapping track is on top of it. Re-check the track and z-order of the other rows from the filter.",
    "c9c109ee56460ff88507eb74e0e9ff5da752b5d3c3803eb17b690d16e4375e99": "At main time 14, the clip you want starts exactly there, because its local start of 2 s is offset by the scene's mount at 12 s: 12 + 2 = 14. I haven't run anything, so this is the procedure rather than a result.\n\n**Don't read `index.html` and the sub-composition files by hand.** The local start of 2 s is relative to the nested scene, not the main timeline, so the raw file shows the wrong number. `timeline --json` reports nested rows with absolute main-timeline times (`absStart`/`absEnd`) and the owning `file`, so the conversion is already done.\n\n1. **List the timeline as JSON** (preferred over the text form because it costs fewer tokens):\n   ```bash\n   npx hyperframes timeline --json\n   ```\n2. **Find the rows covering t = 14.** Keep rows where `absStart <= 14 < absEnd`. The clip from your nested scene should show `absStart` of 14 (12 + 2). With `jq`, filter on those two fields, but check the actual output shape first, since I haven't seen it.\n3. **Read the `file` field on the matching row.** That is the file that owns the clip. For a clip inside the nested scene it should be the sub-composition's file, not `index.html`.\n4. **Check for overlaps.** If several rows cover t = 14 on different tracks, the visible one is the one stacked on top. Also check that the row's `absEnd` is greater than 14, since a clip ending at 14 isn't visible.\n5. **Confirm visually:**\n   ```bash\n   npx hyperframes snapshot --at 14\n   ```\n   Inspect the frame to check that the content matches the clip you identified. If the mounted scene shows nothing, tiny unstyled content, or a timeline-registration timeout, treat that as a mount defect.\n\nIf the clip is only meant to appear after 14 (for example, a start of 2 s measured from a different origin), the filter will show it, because `absStart` will differ from 14. Take that as the cue to check the mount offset, not to adjust the numbers by hand.",
    "736c3f0808b33e9b1b45784e26c07c4483db3dbef1ef0c1d497e3484000f88c7": "Main time 14 s is the local start of that nested clip: the scene is mounted at 12 s, and the clip begins 2 s into it, so its `absStart` is 12 + 2 = 14 s. Don't read the sub-composition file's local times as main-timeline times. The CLI reports the absolute times for you.\n\n**1. Dump the timeline as JSON**\n\n```bash\nnpx hyperframes timeline --json\n```\n\nUse `--json` rather than the text form, since it costs fewer tokens. Nested rows carry absolute main-timeline `absStart` and `absEnd`, plus the owning `file`. That `file` field answers your question directly, so you don't need to open `index.html` or every sub-composition file.\n\n**2. Filter for rows active at 14 s**\n\nI can't run anything here, and I haven't confirmed the exact JSON nesting. This filter walks the whole output and doesn't depend on the top-level shape:\n\n```bash\nnpx hyperframes timeline --json \\\n  | jq '[.. | objects | select(has(\"absStart\") and .absStart <= 14 and .absEnd > 14)]'\n```\n\nUse a half-open interval (`absStart <= 14 < absEnd`). A clip that ends exactly at 14 is not visible at 14.\n\n**3. Pick the visible clip and read its `file`**\n\nIf more than one row matches, they overlap on different tracks. The visible one is the topmost, meaning the higher track or z-order, and it is not occluded by something opaque above it. A row for the mounted scene itself (starting at 12) will also match. You want the inner clip row, whose `absStart` is 14, and its `file` is the owner.\n\n**4. Confirm visually (optional)**\n\n```bash\nnpx hyperframes snapshot --at 14\n```\n\nThis captures the actual frame at 14 s, so you can check that the clip you identified is the one on screen.\n\nIf `jq` returns nothing, the clip's span may not cover 14. Check that `absStart`/`absEnd` match your 12 + 2 expectation, and that the scene is mounted via `data-composition-src` where you think it is.",
    "5aefff1b7077923b5129777d6b9e2275c93cf4e36eb390ccd081f6e48d6b8a41": "At main time 14 s, the visible clip is whichever one covers **local time 4 s** inside the nested scene.\n\n**The time mapping**\n\n- The nested scene is mounted at main 12 s, and its local start is 2 s. So main 12 s shows local 2 s.\n- Main 14 s is 2 s past the mount point (14 − 12 = 2).\n- Local time = local start + offset = 2 + 2 = **4 s**.\n\nIn general, `local = main − mount_time + local_start`.\n\n**How to inspect it with the CLI**\n\nYou didn't tell me which CLI or project format you're using, so I can't give exact command names. The steps are the same for any timeline tool:\n\n1. **Dump the timeline structure.** Use the tool's inspect, info, list or export-JSON command to find the nested scene (sometimes called a compound clip, sub-sequence or nested composition). Confirm its mount time (12 s) and local start (2 s), and check for any trim, speed change or time-remap on the mount, because those change the arithmetic.\n2. **Query the nested scene at local time 4 s.** If the CLI can query by time, pass it 4 s and the nested scene's ID. If not, list the nested scene's clips with their local start and duration, and pick the one where `clip.start <= 4 < clip.start + clip.duration`.\n3. **Resolve overlaps.** If several clips cover local 4 s, the visible one is normally the one on the highest track, or the highest z-order, that isn't muted, hidden or fully transparent. Check track order and opacity or enabled flags.\n4. **Read the clip's source path.** The clip entry should reference a media or asset ID, or a file path directly. If it's an ID, look it up in the asset or media table to get the file. That file owns the visible clip.\n5. **Cross-check from the main side.** If the CLI has a \"what's visible at time T\" query, run it with T = 14 on the main timeline. It should report the same clip and file. If it doesn't, the mismatch usually means a missed offset, a speed change, or a higher track covering the clip.\n\n**Pitfalls**\n\n- The mount may have its own in-point or trim, which shifts the local time.\n- Boundaries are half-open. A clip ending exactly at local 4 s isn't visible at 4 s, but one starting at 4 s is.\n- A nested scene inside another nested scene needs the same mapping applied once per level.\n\nIf you tell me the CLI name or paste its inspect output, I can give the exact commands or identify the file.",
    "546cf5fd658ff72f9e344ddb8dd2276085d1df32bd57caef352aaa2c965ece17": "## Time mapping\n\nThe nested scene's local time 2s sits at main time 12s, so:\n\n```\nlocal_time = main_time - mount_time + local_start\n           = 14 - 12 + 2\n           = 4 s\n```\n\nMain time 14 is local time **4s** inside the nested scene. Look up the clip there, not at 14s or 2s.\n\n## How to inspect it with the CLI\n\nYou didn't name the CLI or give its command set, so I can't give exact commands or flags without inventing them. The approach is the same in any tool:\n\n1. **Dump the main timeline** (usually a `list`, `show`, `inspect`, or `dump` subcommand, ideally with JSON output). Find the track item at main time 14 that is the nested scene, which may be called a nested sequence, compound clip, sub-scene, or precomp. Confirm its mount time is 12s and its local start is 2s.\n2. **Dump the nested scene's own timeline** and find the clip whose local range contains 4s (start ≤ 4 < end). If several tracks overlap at 4s, the visible one is normally the topmost enabled track. Check for muted or disabled tracks, opacity of 0, and any mattes or blend modes that hide a clip.\n3. **Read the clip's source reference**, which is typically a field like `source`, `media`, `path`, or `asset_id`. That is the file that owns the visible clip.\n4. **If the reference is an asset ID rather than a path**, resolve it through the project's media or asset table.\n5. **If the clip is itself another nested scene**, repeat the mapping with that scene's mount time and local start until you reach a clip that points to a media file.\n\n## Pitfalls to check\n\n- **Time ranges:** Boundaries are usually start-inclusive and end-exclusive, so a clip ending exactly at 4s is not the visible one.\n- **Speed changes or retiming:** These alter the mapping, so the clip's source time may differ from 4s. That affects which frame is shown, not which file owns the clip.\n- **Trims:** A clip's own trim offset affects where in the file it plays, not which file it is.\n\nIf you tell me the CLI's name, or paste its timeline output, I can point to the exact fields and commands.",
    "df39985a3de09e0d0a057bbe6016b45a2325e431e8e12e8f7f308700d575a49c": "At main time 14s, the nested scene is at local time **4s**.\n\n**Time mapping**\n\n- The scene is mounted at main 12s, so 14s is 2s into the mount (14 − 12).\n- The local start is 2s, so local time = 2 + 2 = **4s**.\n- I'm assuming \"local start 2s\" means the scene's local timeline reads 2s at the mount point. If it instead means the scene's content is delayed by 2s, the answer would be 0s, so check this against your tool's docs.\n\n**How to inspect it**\n\nI don't know which CLI you're using or its exact flags, so the commands below are placeholders. Substitute your tool's equivalents.\n\n1. **Dump the main timeline at t=14.** Use something like `tool inspect --time 14` or `tool timeline --at 14`. Look for the entry that covers 14s, which is the nested scene mounted at 12s. Check the mount's duration so that 14s is inside it, treating the end as exclusive.\n2. **Check what is visible on top.** If several tracks or layers overlap at 14s, the visible clip is the topmost one that is enabled, unmuted, and has non-zero opacity. A clip in the nested scene can be hidden by something above it in the main timeline, so check the main-level layers first.\n3. **Descend into the nested scene at local t=4.** Run something like `tool inspect --scene <scene-id> --time 4`. Apply the same visibility rules to the scene's tracks and find the topmost clip covering 4s.\n4. **Repeat if the clip is another nested scene.** Add that scene's mount offset and local start each time, until you reach a leaf clip that references media.\n5. **Read the clip's source reference.** That asset path or ID is the file that owns the visible clip. Also note the clip's trim or in-point, which determines the position within that file. This is usually `source_in + (local_t − clip_start)`.\n\n**Pitfalls**\n\n- Boundaries: a clip ending exactly at 4s does not cover 4s if intervals are half-open.\n- Speed or time-remap effects on the mount or clip change the arithmetic above.\n- A file can be referenced by several clips, so identify the owner by the specific clip instance, not just by filename.\n\nIf you tell me the CLI name or paste its inspect output, I can give exact commands and confirm the result.",
    "31795961d16956b5d861c2fe2a13d80af5901329659dd40b4f87ad8b2b80b857": "**Time mapping**\n\nThe nested scene is mounted at main time 12 s, and its local timeline starts at 2 s. So main time 14 s is 2 s into the mount, which gives:\n\nlocal time = (14 − 12) + 2 = **4 s** in the nested scene's own timeline.\n\nThe common mistake is to look up main time 14 inside the nested scene, or to forget the local-start offset and look up 2 s.\n\n**How to inspect it with the CLI**\n\nYou haven't said which CLI or project format this is, and I can't run anything here, so I can't give exact commands. The workflow should map onto whatever your tool offers:\n\n1. **Dump the main timeline** (a `show`, `inspect`, `dump`, or `list-clips` style command, ideally with JSON output). Find the item at main time 12 s that references the nested scene. Note its scene or sequence ID and its mount offset.\n2. **Confirm the mapping fields.** Check that the mount's start is 12 and the nested scene's local start is 2. If the tool reports a trim, in-point, or source offset on the mount, include it in the formula, because it shifts the result.\n3. **Dump the nested scene** and query it at local time 4 s. Many CLIs have a \"clip at time\" or \"query at\" option. Otherwise list its clips with start and end times and find the one where `start <= 4 < end`.\n4. **Check for overlaps.** If several clips cover 4 s on different tracks, \"visible\" means the topmost enabled one. Look at track order or z-index, and at mute, hidden, or disabled flags. A higher track can hide a lower clip.\n5. **Resolve ownership.** Follow the visible clip's source or asset reference to its file path. If that clip is itself another nested scene, repeat the mapping from step 1 with the new offsets, and continue until you reach a leaf media clip. The file that clip references is the owner.\n6. **Check the edges.** If the result lands exactly on a clip boundary, such as a clip ending at 4 s and the next starting at 4 s, ranges are normally start-inclusive and end-exclusive, so the later clip is the visible one. Confirm that against your tool's documentation.\n\nIf you tell me the CLI name or paste a sample of its dump output, I can give exact commands and read the result with you.",
    "5d94a08e5e52ee304a769716bfb5460fc7518f48866e7eb45c597929318e227e": "The render finished, but \"output exists\" is not \"output is correct.\" `screenshot` mode with `software gpu` on Linux is the slow path, and it's also the combination where GPU-dependent pixels (WebGL, shaders, canvas) can differ from what a real GPU would produce. Nothing has been verified visually yet, so here is what I'd do next.\n\n**1. Confirm the file is real**\n- Check that the output file is non-empty (`test -s out.mp4`).\n- Run `ffprobe -v error -show_format -show_streams out.mp4`. Compare the duration to the root `data-duration`, and compare fps and resolution if the brief set them. Confirm the audio stream is present if the composition has audio.\n\n**2. Read the render summary's second line**\n- Note the mode (`screenshot` rather than `beginframe`), the GPU state (`software`), and the stage timings. This tells you whether the slow path was a one-off or something to flag.\n\n**3. Inspect decoded output frames, not just the preview**\n- Pull frames from the rendered file at the same timestamps you reviewed in the Studio preview. Cover the opening 30 seconds, every time `check` or earlier review flagged a problem, and at least one midpoint per mounted sub-composition.\n- View them at full resolution and zoom into text, fine geometry, and any canvas or WebGL edges. A contact sheet alone isn't enough, and a passing `check` or a successful encode doesn't certify pixels inside a canvas.\n- Look specifically for black or blank frames, flicker, wrong or stale frames, missing hero elements, unstyled or tiny content, and shader artifacts (software rendering can hide hardware-specific invalid pixels, and the reverse can also happen).\n\n**4. Decide on follow-ups based on what you find**\n- If frames match the preview: the render is verified. Report that plainly, then send the post-render feedback report (rating plus a specific comment), unless telemetry is off or you've opted out.\n- If there are visual defects: capture a reproduction packet (relative-path rerun command, expected vs. actual, exact error with absolute paths stripped, whether output completed or fell back, workaround). For a rating of 7 or below describing a visual defect, include the `COMPOSITION_STRUCTURE:` block. Use `--file-issue` only with your consent, since it publishes publicly.\n- If the problem looks software-GPU-specific, consider re-rendering with `--docker --strict` for a reproducible comparison, or on a machine with a real GPU, and compare the same frames.\n\n**5. Housekeeping**\n- If you wrote any disposable QC frames, put them in a temp directory and remove only that directory afterward. Don't delete `.hyperframes` wholesale.\n\nI haven't run any of this; these are the steps to take next.",
    "178af190beb9f6625cf6c2627688846acea69a24341db2729f4ecb45011beab7": "The render finished, but `screenshot` + `software gpu` on Linux is the slow path, and a finished encode doesn't tell you the pixels are right. Here's what to verify next, in order.\n\n**1. Confirm the file is real**\n- Check that the output exists and is non-empty: `test -s out.mp4`.\n- Run `ffprobe -v error -show_format -show_streams out.mp4`.\n- Compare the reported duration to the root `data-duration`, and compare fps if the brief set one. Also check resolution and that an audio stream is present when you expect one.\n\n**2. Re-read the render summary**\n- The second line shows the capture mode (`screenshot` here), GPU (`software`), and stage timings. This confirms what you've already seen: the slow path.\n- Software rendering can miss or hide hardware-specific problems, such as invalid pixels from shader math like unclamped `pow(1 - cosine, exponent)`. If the composition uses WebGL or Three.js shaders, a clean software result doesn't certify a GPU machine's result. If that matters, verify on affected hardware or use `--docker --strict` for a reproducible render.\n\n**3. Inspect the decoded frames, not just the encode**\n- Extract frames from `out.mp4` at the same timestamps you reviewed in the preview. That means the opening ~30 seconds, every reported problem time, and at least one midpoint per mounted sub-composition.\n- Look at them at full resolution, and zoom into text, fine geometry, and canvas/WebGL edges. A contact sheet alone isn't enough.\n- Write the extracted frames to a temp directory you own, and remove only that directory afterward.\n- Watch for black or blank frames, flicker, missing hero elements, tiny unstyled content, wrong frame at a cut, and caption or audio sync drift.\n\n**4. Make sure the gate was actually run**\n- If `npx hyperframes check` hasn't passed on this version of the project, run it. It includes lint, runtime errors, failed requests, layout, motion assertions, and contrast.\n- Per the workflow, the final Studio preview and the user's approval should come before a render being treated as final. If that approval hasn't happened, treat this output as a draft and pause for review.\n\n**5. Report honestly**\n- Say that the file exists and its probe results, but that the pixels are unverified until step 3 is done. Don't call the render verified before then.\n- If frames look wrong, capture a reproduction packet with relative paths only, then send `npx hyperframes feedback`. For a visual defect rated ≤ 7, include the `COMPOSITION_STRUCTURE:` block.\n- Once the output is verified, send one feedback report with a rating and a specific comment, unless telemetry is disabled or you've opted out.\n\nI haven't run any of these. I'm working only from the facts you gave me, and no tools were used.",
    "8b0f2f6dd7e4099d0eb1fd3ace8e8502e01a95a85872c5fd8757532046cacb4e": "The render finished, but a file existing doesn't mean the pixels are right. `screenshot` mode with a `software` GPU on Linux is the slow path, and it's also the combination most likely to hide hardware-specific problems like invalid shader pixels. Here's what to do next, in order.\n\n**1. Confirm the file is sound**\n- `test -s out.mp4` to confirm it's non-empty.\n- `ffprobe -v error -show_format -show_streams out.mp4`, then compare the duration to the root `data-duration`. If the brief set an fps, compare that too. Also confirm the audio stream is present if you expect one.\n\n**2. Read the render summary again**\n- The second line should show `screenshot` and `software gpu`, as you reported. Check the stage timings for anything anomalous, since that's the slow path and will show where the time went.\n\n**3. Inspect decoded output frames**\n- Extract frames from the rendered file, not from the preview. Use the same timestamps you used in the preview: the opening 30 seconds, each sub-composition midpoint, and any times `check` flagged.\n- View them at full resolution and zoom into text, fine geometry, and canvas/WebGL edges. Don't judge from a contact sheet alone.\n- Look for black or blank frames, flicker, wrong frames at cuts, unstyled or canvas-sized content from failed sub-composition mounts, and invalid pixels in shader areas.\n- Write these frames to a temp directory and remove only that directory afterward.\n\n**4. Compare against the preview**\n- The Studio preview is the reference. If the decoded frames differ from it at the same times, treat that as a render defect, not a preview defect.\n\n**5. Decide on the software-GPU risk**\n- If the composition uses WebGL or shaders (especially `pow` on cosine terms), software rendering can miss hardware-specific invalid pixels. Verify on an affected GPU, or re-render with `--docker --strict` for a reproducible result.\n\n**6. Report the outcome**\n- If everything checks out, say so plainly and send the feedback report (`feedback --rating ...`) unless telemetry is off or you've opted out.\n- If something is wrong, capture a reproduction packet first (relative rerun command, expected versus actual, exact error with absolute paths stripped, and whether output completed or fell back). For a visual defect rated 7 or below, include the `COMPOSITION_STRUCTURE:` block.\n\nI haven't run any of these, so nothing about the output's correctness is established yet.",
    "12f5915531439c65d3d8940ec35c82a15bec9e25db673cf607cc30fdd13b3d4f": "The render finished, but \"completed\" only tells you the pipeline ran. Nothing has confirmed the output is correct, so treat it as unverified until frames are inspected.\n\n**What the facts do and don't tell you**\n- Screenshot mode means you captured stills, not a real-time or continuous run. Animation, timing, and frame pacing are not covered.\n- Software GPU on Linux (likely a llvmpipe/SwiftShader-style rasterizer) means output can differ from real hardware in precision, antialiasing, shader behavior, and supported extensions. Passing here doesn't prove it looks right on a hardware GPU, and a failure here may not occur on one.\n- The output exists, but existence isn't correctness. Blank, black, or partially drawn frames still produce files.\n\n**Next verification steps**\n1. **Confirm the output is sane at the file level.** Check that the file or files exist, are non-zero in size, have the expected count, dimensions, and format, and open without errors.\n2. **Look at the frames.** Open at least the first, a middle, and the last one. Check for all-black or all-white images, missing geometry or textures, wrong colors, flipped orientation, clipping, or visible artifacts.\n3. **Check that the frames differ where they should.** If you expected change over time or between states, compare frames (or hash them) to rule out a stuck or duplicated capture.\n4. **Compare against a reference.** Use a known-good baseline image, or a prior run, and do a pixel diff with a sensible tolerance. Software rendering will differ slightly from hardware, so keep a baseline captured on the same software path.\n5. **Check logs for silent fallbacks.** Look for shader compile warnings, missing extension messages, or context-creation fallbacks that the \"completed\" status could hide.\n6. **Confirm the renderer actually in use.** Record the GL/Vulkan renderer string and driver version alongside the result so the evidence is attributable to the software path.\n7. **Cover the gap.** If hardware-GPU behavior matters, run the same capture on a hardware-backed machine and compare. If you need motion or timing, do a run that isn't screenshot-only.\n\nUntil steps 1 through 4 are done, the accurate status is \"render completed, output unverified.\"",
    "b3b79dc9bc578ec7632dda9f9c87ff51d0e8bcae28a8820e5255c7f41640d72d": "The render finished, but \"completed\" only means the process exited and produced output. Nothing has confirmed the output is correct. Screenshot mode with a software GPU (likely a llvmpipe/SwiftShader-style fallback on Linux) is a valid setup, but it can differ from hardware-GPU rendering. Here are the next steps, in order.\n\n**1. Confirm the output is real**\n- Check that the output files exist, are non-zero in size, and have the expected count, dimensions, and format.\n- Make sure the files are fresh (timestamps from this run, not leftovers from an earlier one).\n- Confirm the file opens and decodes without errors.\n\n**2. Inspect the frames**\n- Open at least the first, a middle, and the last frame, since a blank or partial render often appears only at the edges of a sequence.\n- Look for the common software-GPU failure signs: all-black or all-white frames, missing textures, broken shaders, absent transparency or blending, missing fonts, and wrong colors.\n- Check that frames differ from each other where the content should change. Identical frames can mean the capture ran before the scene updated.\n- In screenshot mode, check timing. The capture may fire before assets load or animations start, so verify the frame shows the final intended state.\n\n**3. Check the logs**\n- Look for GPU, WebGL/GL context, or driver warnings. Software fallback can silently disable features.\n- Look for shader compile errors, missing-asset errors, and timeouts.\n- Confirm the renderer string reports the software rasterizer you expect, so you know which path was used.\n\n**4. Compare against a baseline**\n- If a known-good render exists (a reference image or one from hardware GPU), diff against it. Use a small tolerance, because software rasterization often differs slightly in anti-aliasing and gradients.\n- If no baseline exists, treat this render as unverified and, once you've approved it visually, save it as the baseline.\n\n**5. Check reproducibility**\n- Run the render a second time and compare the outputs. Large differences point to timing or nondeterminism problems.\n\n**6. Decide what the result can support**\n- A clean software-GPU render supports claims about layout and content correctness.\n- It does not establish hardware-GPU fidelity, performance, or frame pacing. If those matter, repeat on a machine with a real GPU.\n\nUntil steps 1–3 are done, report this as \"render completed, output not yet verified.\"",
    "814b50c38af698ffd43fc86a2e69ff8812eb2c8ea8e11a70525815632357a44d": "The render completing only tells you a file was produced. Nothing about its content has been checked yet. Software GPU (likely a software rasterizer such as llvmpipe/SwiftShader) and screenshot mode both affect what the output can tell you, so verify in this order:\n\n**1. Confirm the output is real and well-formed**\n- Check that the file(s) exist, are non-zero size, and have the expected count, dimensions, and format.\n- For video or image sequences, confirm frame count, duration, and fps match what the scene was configured for. A short or single-frame result suggests screenshot mode captured only one frame rather than a sequence.\n\n**2. Inspect frames directly**\n- Open the first, a middle, and the last frame. Don't rely on one frame.\n- Look for blank/black/white frames, which are the most common failure with headless or software-GPU rendering.\n- Check for missing textures, wrong colors, absent shadows or lighting, broken transparency, and missing text or fonts.\n- Compare frames against each other to confirm they differ where animation is expected. Identical frames mean the animation clock never advanced, which is a typical screenshot-mode pitfall.\n\n**3. Check software-GPU-specific risks**\n- WebGL/shader features may be unsupported or fall back silently, causing visual differences (precision, antialiasing, missing extensions).\n- Confirm the renderer string reported by the app is the software one you expect, and that no GPU-only effects were silently skipped.\n- Expect slower rendering and possible timing-dependent artifacts, such as frames captured before assets finished loading.\n\n**4. Check timing and determinism**\n- Verify assets (images, fonts, video, data) were fully loaded before each capture.\n- Re-run once and compare outputs (hash or pixel diff). Differences point to nondeterminism or race conditions in capture.\n\n**5. Compare against a reference**\n- If you have a known-good render (from a real GPU or a previous version), run a pixel or perceptual diff and set a tolerance, since software rendering rarely matches bit-for-bit.\n\n**6. Decide on sign-off**\n- Treat the render as unverified until steps 1 and 2 pass.\n- If frames look right but the pipeline will later run on real GPUs, do one render on that target too, since software-GPU success doesn't guarantee hardware-GPU behavior.\n\nI can't say whether the output is correct. No frames have been inspected, so any claim about quality would be a guess.",
    "a78ace647167743d084ccb43c5c987f353dc1a2b736dfa3090196ef2ea7b9de0": "The render finished, but \"completed\" only means the process exited and produced output. Nothing has confirmed the output is correct, so treat it as unverified.\n\n**What the facts do and don't tell you**\n- Screenshot mode means you have captured stills, not necessarily a real-time or continuous playback path. Timing, animation smoothness, and frame pacing aren't exercised.\n- Software GPU on Linux (likely llvmpipe/SwiftShader or similar) means rasterization ran on the CPU. Output can differ from hardware GPU in precision, antialiasing, supported extensions, shader behavior, and performance.\n- No frames have been inspected, so blank, black, partially drawn, or corrupted output is still possible.\n\n**Next verification steps, in order**\n1. **Confirm the output exists and is sane.** Check the file count matches the expected number of frames or screenshots, that sizes are non-zero, and that dimensions and format match the configured resolution. Many identical tiny files often signal blank frames.\n2. **Inspect frames visually.** Open the first, a middle, and the last frame. Look for blank or black images, missing textures, wrong colors, clipped or misplaced geometry, missing text, and artifacts.\n3. **Check for nonuniform content programmatically.** Compare checksums or pixel statistics across frames to confirm they aren't all identical (unless the scene is static) and aren't a single flat color.\n4. **Review the render logs.** Look for GPU/driver warnings, fallback messages, shader compile errors, missing extension notices, or swallowed exceptions that still allowed a zero exit code.\n5. **Confirm the renderer in use.** Verify the reported GL/Vulkan renderer string really is the software one, so you know what the result represents.\n6. **Compare against a baseline.** If you have a reference from a hardware GPU or a known-good run, diff the frames with a tolerance. Expect small differences from software rendering; large structural differences are real bugs.\n7. **Check determinism.** Re-run once and compare outputs. Differences between identical runs point to timing or race issues, particularly with screenshot capture timing.\n8. **Test timing-sensitive content separately.** If the scene has animation, async loading, or transitions, verify the screenshots were taken after content settled, since screenshot mode can capture too early.\n9. **Decide what the result can claim.** A passing software-GPU check validates correctness of the render pipeline, not hardware-GPU behavior or performance. If those matter, run on a real GPU too.\n\nUntil steps 1 and 2 are done, the accurate status is \"render produced output, correctness unverified.\"",
    "5a2a298339c510bdfd64e795421d479bdae6b007905a8d895deec42d3a54c0d7": "The render finished and produced output, but nothing has been looked at yet, so \"completed\" only means the process exited cleanly. Two facts shape what to verify: it ran in screenshot mode (so likely stills or a frame-by-frame capture, not real-time playback), and it used a software GPU on Linux (so rasterization came from a CPU path like llvmpipe/SwiftShader rather than real hardware).\n\n**Next verification steps, in order:**\n\n1. **Confirm the output exists and is sane.** Check the file count or file size against what you expected: frame count × resolution, duration, format. Zero-byte or suspiciously tiny files are the most common silent failure.\n\n2. **Inspect a few frames by eye.** Look at the first, last, and a few from the middle. Blank or black frames, a uniform clear color, or missing geometry/text indicate the render path didn't draw anything.\n\n3. **Check for software-rendering artifacts.** Software GPU paths often differ from hardware in:\n   - missing or degraded WebGL/shader features (unsupported extensions, lower precision)\n   - antialiasing differences\n   - fallback fonts or missing textures\n   - slower timing, which can cause captured frames to land at the wrong moment if the render depends on wall-clock time\n\n4. **Verify frame timing and sequence.** In screenshot mode, confirm frames advance deterministically: no duplicates, no skipped indices, and the animation state matches the requested timestamp rather than the real elapsed time.\n\n5. **Compare against a reference.** If you have a known-good render (from hardware GPU or a prior run), diff a few frames, allowing a small tolerance for antialiasing differences. If not, pick one frame where you know exactly what should appear and check it.\n\n6. **Review logs for warnings.** Look for GPU or driver fallbacks, shader compile errors, context-loss messages, and missing-asset warnings, since a \"successful\" exit can still hide these.\n\n7. **Check determinism.** Re-render the same frame twice and compare. Identical output means it's reliable; differences point to timing or randomness dependence.\n\nUntil at least steps 1–2 are done, I'd report this as \"rendered, not yet verified\" rather than passing.",
    "2f80ae0f28b41ac9220ac83a9a608ac93b9f572aab90c719812cbdb3e408071b": "The render finished, but nothing has been checked yet. \"Completed\" only means the pipeline exited cleanly. It says nothing about whether the frames are correct. Screenshot mode with a software GPU (likely llvmpipe/SwiftShader) on Linux also raises specific risks: output can differ from a real GPU, and the capture may not reflect real-time playback.\n\n**Next verification steps, in order:**\n\n1. **Confirm the output exists and is sane.** Check file count, sizes, and timestamps. Look for zero-byte or suspiciously tiny files, and for gaps in the frame sequence. Confirm the resolution, frame count, and duration or frame rate match what was requested.\n\n2. **Inspect frames directly.** Open the first, a middle, and the last frame, plus any frame where a transition or animation starts or ends. Look for:\n   - Blank, black, or white frames, which often mean the capture fired before the first paint.\n   - Missing textures, fonts, images, or video elements.\n   - Wrong colors, banding, or missing gradients, shadows, and blur effects.\n   - Aliasing or rendering artifacts typical of software rasterizers.\n\n3. **Check temporal correctness.** Screenshot mode captures discrete frames, so animations depend on how time is advanced. Compare consecutive frames for duplicates (stalled animation), skipped states (time advancing too fast), or uneven motion. Confirm the clock was driven deterministically rather than by wall time.\n\n4. **Check for render-time errors.** Review the render log for WebGL or GPU fallback warnings, shader compile failures, context loss, missing asset or 404 errors, and console errors. A \"success\" exit can still hide these.\n\n5. **Verify determinism.** Render again with the same inputs and diff the outputs, by hash or pixel comparison. Differences point to timing or race problems.\n\n6. **Compare against a reference.** If you have a known-good render (a hardware-GPU render, a prior version, or a design mock), do a pixel or perceptual diff. Expect small antialiasing differences from the software GPU, and decide on a tolerance beforehand.\n\n7. **Assemble and review the final output.** If the frames are meant to become a video, encode them and watch the result end to end. Check A/V sync if audio is involved, and confirm the codec and container play correctly in the target player.\n\n8. **Record the outcome.** Note what was inspected, what passed, and what remains unchecked, such as behavior on real GPUs, so the result isn't over-claimed.\n\nUntil steps 1 and 2 are done, the accurate status is \"rendered, unverified.\"",
    "fc3d14fd250dda212f38a6cb57e92fd2645d0468fb4297e19b85307d5eee448a": "A completed render only tells you the pipeline ran. It doesn't tell you the output is correct. Screenshot mode plus software GPU on Linux raises specific risks, so here are the next steps in order.\n\n**1. Confirm the output is real**\n- Check that the output file(s) exist, are non-zero size, and have the expected format, resolution, and frame count or duration.\n- Make sure the file opens in a standard decoder or viewer and isn't truncated or corrupt.\n\n**2. Inspect actual frames**\n- Look at the first, middle, and last frames, plus any frames around transitions or animations. A render can complete with blank, black, or partially drawn frames.\n- Check that frames differ from each other where motion is expected. Identical frames suggest the capture ran before the scene updated.\n- Compute simple checks: not all pixels one color, and a reasonable histogram or per-frame hash variation.\n\n**3. Account for screenshot mode**\n- Screenshot capture is timing-sensitive. Verify that each frame was captured after the scene settled (fonts, images, shaders, and async content loaded).\n- Check for dropped or duplicated frames and frame-order or timestamp gaps, since capture can run slower than the intended frame rate.\n- Confirm that the output timing matches the intended playback speed, not the real capture speed.\n\n**4. Account for software GPU rendering**\n- Software rasterization (e.g., llvmpipe/SwiftShader) can differ from hardware output. Look for missing or degraded effects: WebGL/shader features, blur, filters, 3D transforms, antialiasing, and color or gamma differences.\n- Check for GPU-feature fallbacks or warnings in the render logs (context creation failures, unsupported extensions).\n- If the final target is hardware-rendered, compare against a known-good reference from that environment and decide whether the differences are acceptable.\n\n**5. Check logs and determinism**\n- Review stderr and logs for warnings, even though the render exited successfully.\n- Re-run the render once and compare the outputs (hash or pixel diff). Large differences point to timing or nondeterminism problems.\n\n**6. Record the result**\n- Note what was checked and what wasn't. Until frames are actually inspected, the status is \"rendered, unverified,\" not \"passing.\"\n\nIf you share the output paths and the tool used, I can suggest specific commands for these checks.",
    "87e09515a443d7a020d88099ecf0c38dd3a521e2e299ff7692ab193f24871b5e": "Since the render completed but no frames have been inspected, treat it as \"ran without error,\" not \"correct.\" Screenshot mode plus a software GPU on Linux adds specific caveats. Here are the next steps, in order.\n\n**1. Confirm the output is real**\n- Check that the output file(s) exist, are non-zero size, and have the expected count, dimensions, and format.\n- For video, check duration, frame rate, and frame count against what was requested (e.g., with ffprobe). A short or truncated file often means a silent mid-render failure.\n- Check the render log for warnings that didn't fail the run: shader compile errors, WebGL/GL context fallback messages, missing fonts or assets, and timeouts.\n\n**2. Inspect frames directly**\n- Look at the first, last, and a few middle frames, plus any frames where something transitions or animates.\n- Look for the usual software-rendering failure signs: all-black or all-white frames, missing textures, flat or wrong colors, broken transparency, missing effects (blur, shadows, 3D), and clipped or misplaced layout.\n- Check that consecutive frames differ when they should (to catch a frozen or duplicated frame) and don't flicker when they shouldn't.\n\n**3. Verify screenshot-mode specifics**\n- Screenshot mode captures frames one at a time rather than in real time, so confirm that timing-dependent content (animations, video elements, transitions) advanced to the correct state per frame rather than all frames showing the same moment.\n- Confirm that async content (images, fonts, data) had finished loading before each capture.\n\n**4. Account for the software GPU**\n- Software rasterization (e.g., llvmpipe/SwiftShader) is usually correct but can differ from hardware GPU output in antialiasing, precision, and unsupported extensions. If the final target is hardware-rendered, compare against a reference frame from that environment.\n- Note the render may be slow or hit timeouts on heavy scenes; check that no frames were skipped for that reason.\n\n**5. Establish a baseline for comparison**\n- If you have a known-good render or reference image, do a pixel or perceptual diff against it, with a small tolerance for antialiasing differences.\n- If there's no baseline, save a few verified frames now as one for future runs.\n\n**6. Make the result reproducible**\n- Record the renderer version, flags, and the software GPU backend used, so any differences can be traced later.\n\nOnly after steps 1–3 pass would I call the render verified. Until then, the accurate status is \"completed, unverified.\"",
    "56cecf192b537251740d3afd892cef0059d19f33a99cefd4a9ee3fbae01d0efe": "Here's where things stand and what to do next. Everything below is based only on the facts you gave: the render completed, it ran in screenshot mode with a software GPU on Linux, and no frames have been inspected.\n\n**What you can and can't conclude**\n- \"Completed\" only means the process exited and produced output. It says nothing about whether the content is correct.\n- Software GPU (likely a llvmpipe/SwiftShader-style rasterizer) means the output may differ from real-GPU output in anti-aliasing, precision, shader/extension support, and color or blending details. Treat it as a valid functional check but not a fidelity or performance baseline.\n- Screenshot mode implies you have stills, not a verified animation or timing. Motion, frame pacing, and transitions are untested.\n\n**Next verification steps**\n1. **Confirm the output exists and is sane.** Check file count, names, dimensions, format, and non-zero size against what you expected. Look for truncated or zero-byte files.\n2. **Inspect frames visually.** Open at least the first, a middle, and the last frame. Look for blank or uniform-color images, black frames, missing textures or text, wrong resolution or aspect ratio, and clipped content.\n3. **Check for silent failure signals.** Review the render logs for shader compile errors, fallback warnings, missing assets, or GPU/driver warnings that did not fail the run.\n4. **Run a cheap automated check.** Compare against a known-good reference (a baseline image from a prior run) using a pixel diff with a tolerance, or at minimum check that frames are not identical or all one color.\n5. **Test determinism.** Re-render the same input and compare. Differences between identical runs point to nondeterminism rather than a real regression.\n6. **Account for the software-GPU caveat.** If fidelity matters, re-render on a real GPU (or the target environment) and compare. Set diff tolerances with the software rasterizer's known differences in mind.\n7. **If motion matters, verify it separately.** Screenshot mode won't cover animation, so render a sequence or video and check timing and continuity.\n\n**Reporting**\nUntil step 2 is done, describe the result as \"rendered, not yet visually verified\" rather than \"working.\"",
    "03431ca649648bb18bc002cb6207616467acd022a06eed30037ccc586ddf3f53": "The render finished and produced output, but nobody has looked at the frames yet, so \"completed\" only means the process exited cleanly. It says nothing about correctness. Screenshot mode plus software GPU on Linux also means the result may differ from a real-GPU, real-time run.\n\n**Next verification steps, in order:**\n\n1. **Confirm the output is real.** Check that the file or files exist, are non-zero in size, and have the expected count, resolution, format, and duration or frame count. A truncated or empty file can still come from a \"completed\" run.\n\n2. **Inspect a spread of frames.** Don't stop at the first one. Open the first frame, a middle frame, the last frame, and any frames where something should change (transitions, animations, loading states). Look for black or blank frames, missing textures or fonts, clipped content, and wrong aspect ratio.\n\n3. **Check for software-rendering artifacts.** Software GPU (e.g. llvmpipe/SwiftShader) can cause:\n   - differences in anti-aliasing, gradients, shadows, or blur\n   - missing or degraded WebGL, shader, or 3D effects\n   - slower rendering that shifts timing-dependent content\n\n   Decide whether these differences are acceptable for your purpose.\n\n4. **Understand what screenshot mode implies.** Frames are captured as discrete screenshots, not from a live real-time stream. Verify that animations and timed content advanced correctly between captures, that frame timing or sequence is right, and that nothing depends on real-time playback (video, audio sync, requestAnimationFrame pacing).\n\n5. **Compare against a reference.** If you have a known-good render (from a hardware-GPU machine, a previous build, or a design spec), diff the frames, either visually or with an image-diff metric, and set a tolerance for expected software-rendering noise.\n\n6. **Review the render logs.** Look for warnings about GPU fallback, shader compile failures, missing assets, console errors, or dropped frames, even though the run exited successfully.\n\n7. **Check reproducibility.** Re-render once and compare. If the frames differ between runs, there is nondeterminism (timing, randomness, async loading) to deal with before you trust the result.\n\n8. **Record the verdict.** Note the environment (Linux, software GPU, screenshot mode), which frames you inspected, and what you found. If the final deliverable is meant for hardware-GPU or real-time use, do a confirming render in that configuration.\n\nUntil steps 1 and 2 are done, the accurate status is \"render completed, output unverified.\""
  },
  "draws": [
    {
      "id": "loop",
      "mode": "with_skill",
      "draw_index": 0,
      "generation_hash": "81d784f64acd5a39bc1bb288ba31c19a859b42ebc26e7dc48ba5a5b4b4b67c51",
      "answer_sha256": "81d784f64acd5a39bc1bb288ba31c19a859b42ebc26e7dc48ba5a5b4b4b67c51",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Searches the catalog by the desired reveal, uses the add and author workflow before validation, makes check the final gate without a lint directly before it, and previews then stops for render approval.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets catalog search by reveal, add/author before validation, and preview with render approval wait; misses the no-redundant-lint criterion because step 5 runs lint immediately before the final check gate.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets catalog search by reveal query, add/author before validation, and preview with render held for approval; misses the final-gate criterion because it runs lint at step 5 before check, despite claiming no separate lint.\"}",
        "{\n  \"score\": 1.0,\n  \"pass\": true,\n  \"reason\": \"Searches the catalog by the reveal query, installs and authors before validation, uses check --snapshots as the final gate, and stops at preview for render approval; the earlier lint is intermediate feedback, not a redundant final lint.\"\n}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets catalog search by reveal query, add/author before validation, and preview then stop for render approval; check gate is used, but the earlier step 5 lint sits uneasily with the 'no separate lint' claim.\"}"
      ]
    },
    {
      "id": "loop",
      "mode": "with_skill",
      "draw_index": 1,
      "generation_hash": "97b5a83e28a95f7e10b8ff95592e218de3d242097dc3330a07d721687d87fbb7",
      "answer_sha256": "97b5a83e28a95f7e10b8ff95592e218de3d242097dc3330a07d721687d87fbb7",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Searches the catalog by the desired reveal, applies add/author before validation, uses check as the final gate without a redundant final lint, and previews then waits for render approval.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Searches catalog by desired reveal, uses add workflow before validation, uses check --snapshots as final gate without a redundant lint, and previews then stops for render approval.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Searches the catalog by the reveal effect, uses add/author before validation, makes check the final gate without a redundant final lint, and previews then waits for render approval.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (catalog search by reveal effect), 2 (add/author workflow before validation), and 4 (preview then stops for render approval); misses 3 because it runs both lint and check, though it notes check reruns lint, so the redundant-lint point is partly undercut.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Searches the catalog by the reveal effect, uses add/author before validation, makes check --snapshots the final gate with no separate final lint, and previews then stops for render approval.\"}"
      ]
    },
    {
      "id": "loop",
      "mode": "with_skill",
      "draw_index": 2,
      "generation_hash": "b186639d4d1567b310c8e5662d6dd57c1a3e826ccce163c01ebfa5d26045a0c1",
      "answer_sha256": "b186639d4d1567b310c8e5662d6dd57c1a3e826ccce163c01ebfa5d26045a0c1",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets catalog search by desired reveal, add-before-author workflow, and check as final gate with no separate final lint, and stops for render approval; the response runs lint mid-authoring and adds a snapshot step before preview, which the rubric does not explicitly penalize but is not strictly required.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Searches the catalog by the reveal effect, uses add and author before validation, makes check the final gate with no separate final lint, and previews while stopping for render approval.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Searches the catalog by the desired reveal, runs add and author steps before validation, uses check as the final gate without a redundant final lint, and previews then stops for render approval.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Searches catalog by the desired reveal effect, uses add/author workflow before validation, uses check as final gate without separate lint, and previews while waiting for render approval.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (catalog search by reveal effect), 2 (add and author before validation), and 4 (preview, then waits for render approval); misses 3 because it runs lint before check, though it notes check reruns lint and omits a redundant final lint.\"}"
      ]
    },
    {
      "id": "loop",
      "mode": "baseline",
      "draw_index": 0,
      "generation_hash": "c30959e00cb2e509d44b8931db002a817161b894f25c610842bdf9ec7166a5a3",
      "answer_sha256": "c30959e00cb2e509d44b8931db002a817161b894f25c610842bdf9ec7166a5a3",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 2, and 4: searches the registry by reveal terms, adds before validating, and previews while stopping for render approval. Misses criterion 3 because it uses lint as the validation gate rather than check.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (searches catalog for headline reveal) and criterion 4 (previews and stops before render pending approval); misses criterion 3 because it ends with lint instead of the 'check' gate, and criterion 2 is only partially met since add comes after an inspection step and the response never explicitly states the author-workflow ordering.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets catalog search (registry search 'headline reveal'), add-before-validation, and stopping at preview pending render approval. Misses criterion 3: it uses lint as the validation gate instead of check, and does not treat check as the final gate.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (searches catalog by headline reveal) and criterion 4 (previews and stops before render pending approval); misses criterion 3 because it ends with lint instead of the `check` gate and includes redundant lint, and criterion 2 is only partially met since add comes before validation but the author workflow is generic and unverified.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1 (registry search for headline reveal), 2 (add before validation), and 4 (preview, no render, awaits approval). Missed criterion 3: it uses lint as the validation gate instead of check.\"}"
      ]
    },
    {
      "id": "loop",
      "mode": "baseline",
      "draw_index": 1,
      "generation_hash": "792100529d7a4d81d52f2993bcab3f3b23ccfdfbbb8f3dc7a38f9deec3d126b9",
      "answer_sha256": "792100529d7a4d81d52f2993bcab3f3b23ccfdfbbb8f3dc7a38f9deec3d126b9",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Criterion 1 is met: it searches by headline reveal. Criterion 2 is missed: add comes before validation, but the author workflow isn't used. Criterion 3 is missed: it ends with lint rather than check as the final gate. Criterion 4 is met: it previews and holds render for approval.\"}",
        "{\n  \"score\": 0.75,\n  \"pass\": true,\n  \"reason\": \"Meets search by reveal, add-before-validation, and preview with render held for approval; misses the rubric's use of `check` as the final gate, using `lint` instead.\"\n}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets search-by-reveal, add before validation, and preview with render held for approval; misses criterion 3 because it uses lint rather than check as the final gate.\"}",
        "{\"score\": 0.75, \"pass\": false, \"reason\": \"Meets search-by-reveal, add-before-validation, and preview-with-render-deferred criteria; misses the requirement to use check as the final gate, using lint instead.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (registry search for the reveal), 2 (add before lint), and 4 (preview, render excluded pending approval); misses 3 because it uses lint rather than check as the final gate.\"}"
      ]
    },
    {
      "id": "loop",
      "mode": "baseline",
      "draw_index": 2,
      "generation_hash": "06561072debaa713b7a688ad425cde18969913203aaa698bee8f236058a78ccc",
      "answer_sha256": "06561072debaa713b7a688ad425cde18969913203aaa698bee8f236058a78ccc",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met criterion 1 (searches catalog for headline reveal) and criterion 4 (preview with render held for approval); missed 2 because it uses add without checking the applicable workflow first, and 3 because it ends with validate and never names check as the final gate.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Met criterion 1 (searches the registry by headline reveal) and criterion 4 (previews and stops before render pending approval); missed criterion 2 by never using an explicit author workflow, and criterion 3 since it uses a placeholder 'validate' rather than 'check' as the final gate.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (searches registry for headline reveal) and criterion 4 (preview, stops before render pending approval); misses criterion 2 applicable add workflow is present but criterion 3 fails because it uses 'validate' with a lint/check hedge rather than 'check' as the final gate.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Searches the registry by headline reveal and holds render for approval, but uses 'add' before validation, and ends with 'validate' rather than 'check' as the final gate, plus a redundant-looking lint placeholder, so criteria 2 and 3 are missed.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Searches the catalog by reveal and previews with render held for approval (criteria 1 and 4), but never uses a check gate; it proposes validate/lint and omits the add/author workflow ordering the rubric requires.\"}"
      ]
    },
    {
      "id": "loop",
      "mode": "baseline",
      "draw_index": 3,
      "generation_hash": "deef99fa90c0923442df65c865401dcd285e137770b406c6a936ed34809707ad",
      "answer_sha256": "deef99fa90c0923442df65c865401dcd285e137770b406c6a936ed34809707ad",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (searches registry by headline/text reveal) and criterion 4 (preview then stops for render approval), but misses criterion 2's applicable add/author workflow clarity and criterion 3 by using a placeholder 'validate' rather than 'check' as the final gate.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (registry search for headline reveal), 2 (add before validation), and 4 (preview, then stops with no render). Misses 3: it uses a placeholder 'validate' rather than 'check' as the final gate and never names check.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (registry search for headline/text reveal), 2 (add before validation), and 4 (preview, then stop without render); misses 3 because it uses placeholder validate/lint instead of check as the final gate.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (registry search for reveal), 2 (add before validation), and 4 (preview, then stop before render), but misses 3 because it uses a placeholder 'validate' rather than 'check' as the final gate.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets catalog search for reveal blocks, add-before-validate ordering, and preview with render held for approval; misses the rubric's named `check` final gate, using a placeholder `validate` instead.\"}"
      ]
    },
    {
      "id": "timeline",
      "mode": "with_skill",
      "draw_index": 0,
      "generation_hash": "1dff5e6e4a62e3de57d9897f4eb72f05935b6dd9459ba93ae022d191b7f62bf2",
      "answer_sha256": "1dff5e6e4a62e3de57d9897f4eb72f05935b6dd9459ba93ae022d191b7f62bf2",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses `timeline --json`, separates main-timeline absStart/absEnd from local start, returns the row's `file` as the owner, and states it has not run the command, so it claims no full inspection.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends `timeline --json`, separates absolute main-timeline times (absStart/absEnd) from local times, uses the `file` field to identify the owner, and says it has not run the command.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses `timeline --json`, separates local 2s from absolute 14s using absStart/absEnd, identifies the owning `file` field, and does not claim to have inspected the whole timeline.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses `timeline --json`, separates absolute main-time (absStart/absEnd) from local start, identifies the owning `file` field, and avoids claiming the whole timeline was inspected.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses `timeline --json`, separates local 2s from absolute 14s via absStart/absEnd, uses the `file` field for ownership, and does not claim it inspected the whole timeline.\"}"
      ]
    },
    {
      "id": "timeline",
      "mode": "with_skill",
      "draw_index": 1,
      "generation_hash": "c9c109ee56460ff88507eb74e0e9ff5da752b5d3c3803eb17b690d16e4375e99",
      "answer_sha256": "c9c109ee56460ff88507eb74e0e9ff5da752b5d3c3803eb17b690d16e4375e99",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recommends `timeline --json`, distinguishes local 2s start from absolute absStart 14, uses the row's `file` field for ownership, and states nothing was run rather than claiming full inspection.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses `timeline --json`, distinguishes local 2 s from absolute 14 s via absStart/absEnd, uses the row's `file` field for ownership, and states it ran nothing, so no full-timeline inspection is claimed.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses `timeline --json`, separates local 2s from absolute absStart/absEnd times, identifies the owning `file` field, and states that nothing was run so it claims no full inspection.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"The response uses `timeline --json`, separates absolute (absStart/absEnd) from the nested local 2 s start, names the `file` field as the owner, and avoids claiming the whole timeline was inspected.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses timeline --json, separates local 2s start from absolute 14s via absStart/absEnd, uses the row's file field for ownership, and explicitly states nothing was run, so no full-timeline claim.\"}"
      ]
    },
    {
      "id": "timeline",
      "mode": "with_skill",
      "draw_index": 2,
      "generation_hash": "736c3f0808b33e9b1b45784e26c07c4483db3dbef1ef0c1d497e3484000f88c7",
      "answer_sha256": "736c3f0808b33e9b1b45784e26c07c4483db3dbef1ef0c1d497e3484000f88c7",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses `timeline --json`, distinguishes local from absolute timing (absStart = 12 + 2), relies on the row's `file` field to identify the owner, and does not claim the whole timeline was inspected.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses `timeline --json`, distinguishes absolute `absStart` (12+2=14) from sub-composition local times, relies on the row's `file` field, and claims no full timeline inspection.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses `timeline --json`, distinguishes local start from absStart (12+2=14), relies on the row's `file` field for ownership, and does not claim the whole timeline was inspected.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Uses timeline --json, separates local 2s from absolute 14s, relies on the row's file field for ownership, and states it could not confirm the JSON nesting or run anything.\"}",
        "{\n  \"score\": 1.0,\n  \"pass\": true,\n  \"reason\": \"Uses `timeline --json`, separates absolute (absStart 14) from local (2 s) timing, names the `file` field as owner, and does not claim the full timeline was inspected.\"\n}"
      ]
    },
    {
      "id": "timeline",
      "mode": "baseline",
      "draw_index": 0,
      "generation_hash": "5aefff1b7077923b5129777d6b9e2275c93cf4e36eb390ccd081f6e48d6b8a41",
      "answer_sha256": "5aefff1b7077923b5129777d6b9e2275c93cf4e36eb390ccd081f6e48d6b8a41",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 2 (absolute main 14s vs local 4s distinguished with formula), 3 (reads clip source path to identify owning file), and 4 (makes no whole-timeline claim); misses criterion 1 because it never names `timeline --json`, saying only generic inspect/export-JSON commands.\"}",
        "{\"score\": 0.75, \"pass\": false, \"reason\": \"Meets criteria 2 (absolute vs. local time distinguished), 3 (source file identified via clip path), and 4 (no claim of full inspection), but misses criterion 1 by never naming `timeline --json`, offering only generic inspect/export commands.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 2 (absolute main 14s vs local 4s with formula), 3 (clip source path and asset lookup to owning file), and 4 (no whole-timeline claim); missed 1, since it never names `timeline --json` and only gives generic inspect/export-JSON wording.\"}",
        "{\"score\": 0.75, \"pass\": false, \"reason\": \"Meets distinguishing absolute from local timing, owning-file resolution, and does not overclaim full-timeline inspection; misses the specific 'timeline --json' command, offering only generic inspect/export-JSON wording.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met absolute-versus-local timing (main 14 s vs local 4 s), owning-file resolution via source path, and made no whole-timeline claim; missed the explicit `timeline --json` command, offering only generic inspect/export-JSON wording.\"}"
      ]
    },
    {
      "id": "timeline",
      "mode": "baseline",
      "draw_index": 1,
      "generation_hash": "546cf5fd658ff72f9e344ddb8dd2276085d1df32bd57caef352aaa2c965ece17",
      "answer_sha256": "546cf5fd658ff72f9e344ddb8dd2276085d1df32bd57caef352aaa2c965ece17",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 2 (absolute vs. local time mapping to 4s), 3 (reads the clip's source reference to find the owning file), and 4 (no claim of full timeline inspection); missed 1 because it never names the `timeline --json` command, offering only generic subcommands.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 2 (distinguishes absolute main time 14 from local 4s) and criterion 3 (identifies source reference as owning file); misses criterion 1 since it never mentions `timeline --json`, and does not explicitly avoid claiming full-timeline inspection, though it scopes to clip lookup only.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 2 (absolute vs. local time mapping to 4s), 3 (reads the clip's source file reference), and 4 (no claim of full inspection). Misses 1: it never names `timeline --json`, offering generic `list`/`show`/`dump` subcommands instead.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Criterion 2 is met: it separates absolute main time from local time (4s) with a clear mapping. Criterion 3 is met: it names the source reference field that identifies the owning file. Criterion 1 is missed because it never mentions `timeline --json`, and criterion 4 is missed because it does not explicitly avoid claiming the whole timeline was inspected.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Distinguishes absolute main time 14s from local 4s and points to the owning source reference, but never mentions a timeline --json command, and it explicitly avoids naming commands while suggesting several generic subcommands; it earns only the distinction criterion, not the JSON or owning-file criteria fully.\"}"
      ]
    },
    {
      "id": "timeline",
      "mode": "baseline",
      "draw_index": 2,
      "generation_hash": "df39985a3de09e0d0a057bbe6016b45a2325e431e8e12e8f7f308700d575a49c",
      "answer_sha256": "df39985a3de09e0d0a057bbe6016b45a2325e431e8e12e8f7f308700d575a49c",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets distinguishing absolute from local timing (14s vs 4s), owning-file identification via source reference, and avoids claiming full-timeline inspection; misses the required timeline --json command, using placeholder commands instead.\"}",
        "{\"score\": 0.75, \"pass\": false, \"reason\": \"Met criteria 2 (separates main 14s from local 4s), 3 (reads the clip's source reference for the owning file), and 4 (does not claim full timeline inspection). Missed criterion 1: it uses placeholder commands and never mentions timeline --json.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Response distinguishes absolute main time 14s from local time 4s and uses owning clip/source reference, earning 0.25 for criteria 2 and 3; it never mentions 'timeline --json', and it does claim to inspect the whole timeline via placeholder commands without that scoping caveat, so criteria 1 and 4 are missed.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Criterion 2 (distinguishing absolute from local timing) is met via the 14−12=2 and 2+2=4 mapping; criterion 1 misses since no `timeline --json` is named (placeholder `tool inspect` only), criterion 3 is only partly addressed by the source-reference step, and criterion 4 is unmet since the response never avoids implying full-timeline inspection.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Criterion 2 (distinguishes absolute from local timing) is met via the 14s→4s mapping; criterion 3 (owning file) is addressed by reading the clip's source reference; criterion 1 fails since it never mentions `timeline --json` and uses placeholder commands; criterion 4 is met only loosely by the per-time inspection approach.\"}"
      ]
    },
    {
      "id": "timeline",
      "mode": "baseline",
      "draw_index": 3,
      "generation_hash": "31795961d16956b5d861c2fe2a13d80af5901329659dd40b4f87ad8b2b80b857",
      "answer_sha256": "31795961d16956b5d861c2fe2a13d80af5901329659dd40b4f87ad8b2b80b857",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets distinguishing absolute from local timing (14s main, 12s mount, 4s local), owning-file resolution, and does not claim full timeline inspection; misses the specific 'timeline --json' command, offering only generic dump/JSON suggestions.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets the absolute-versus-local distinction, owning-file resolution, and no-overclaim criteria, but never names `timeline --json`, offering only generic show/dump commands with JSON optional.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 2 (absolute 14s vs. local 4s distinguished), 3 (follows asset reference to owning file path), and 4 (no claim of full timeline inspection); misses 1 because it never names `timeline --json`, only a generic JSON suggestion.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 2 (absolute vs. local time mapping to 4 s), 3 (follows asset reference to the owning file), and 4 (makes no whole-timeline claim), but misses 1 by never naming `timeline --json`, offering only generic dump commands.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 2 (absolute vs. local time, 4 s local), 3 (follows the clip's asset reference to its file), and 4 (no claim of full-timeline inspection); misses 1 because it never names `timeline --json`.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "with_skill",
      "draw_index": 0,
      "generation_hash": "5d94a08e5e52ee304a769716bfb5460fc7518f48866e7eb45c597929318e227e",
      "answer_sha256": "5d94a08e5e52ee304a769716bfb5460fc7518f48866e7eb45c597929318e227e",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes screenshot/software-GPU as slow path without calling render failed (1); checks duration and fps against composition (2); inspects decoded frames including detailed regions like text and canvas edges (3); explicitly states encoding success doesn't certify pixels (4). Criterion 1 is arguably met but slow-path framing is partial.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes screenshot/software-GPU as slow path without calling render failed, verifies duration and fps via ffprobe, inspects decoded frames with zoom into detailed regions, and states encoding success doesn't certify canvas pixels; misses nothing substantive but criterion 1 is partially hedged with a 'slow path' framing that is fully met, so the shortfall is minimal and arguably none. Scored 0.75 because the response is strong across items but the rubric's criterion 1 wording ('without claiming a failed render') is satisfied while the response also suggests re-rendering, which some graders may treat as a deviation.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes screenshot/software-GPU as slow path without calling render failed, verifies duration/fps against composition, inspects decoded frames including detailed regions, and explicitly states encode success doesn't certify pixels; misses a clear explicit frame-rate check against composition beyond 'if the brief set them'.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes screenshot/software-GPU as the slow path without calling the render failed, verifies duration and fps against the composition, inspects frames including zoomed detail regions, and states that successful encoding does not certify pixels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes screenshot/software-GPU as the slow path without calling the render failed, checks duration and fps against the composition, inspects decoded frames including zoomed detail regions, and states that a successful encode does not certify pixels.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "with_skill",
      "draw_index": 1,
      "generation_hash": "178af190beb9f6625cf6c2627688846acea69a24341db2729f4ecb45011beab7",
      "answer_sha256": "178af190beb9f6625cf6c2627688846acea69a24341db2729f4ecb45011beab7",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the screenshot/software path as slow without calling the render failed; compares duration and fps to the composition; inspects decoded frames at full resolution including text and canvas edges; states that a finished encode doesn't prove correct pixels.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes screenshot/software-GPU slow path without calling render failed (criterion 1), verifies duration and fps against composition (2), inspects decoded frames including detailed zoomed regions (3), and states encoding success does not certify pixels (4); criterion 3 is satisfied, so all four are met, though 0.25 per criterion would total 1.0 only if every one is fully satisfied, which I judge criterion 1's framing partially hedged by 'slow path' wording.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the screenshot/software path as slow without calling the render failed, checks duration and fps against the composition, inspects decoded frames at full resolution including text and canvas edges, and states that a finished encode does not prove correct pixels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Response recognizes the screenshot/software-GPU slow path without calling the render failed, verifies duration and fps against the composition, inspects full-resolution frames including zoomed detail, and explicitly states encoding success does not confirm correct pixels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes screenshot and software GPU as the slow path without calling the render failed, verifies duration and fps against the composition, inspects decoded frames including zoomed detail regions, and states that a finished encode does not prove correct pixels.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "with_skill",
      "draw_index": 2,
      "generation_hash": "8b0f2f6dd7e4099d0eb1fd3ace8e8502e01a95a85872c5fd8757532046cacb4e",
      "answer_sha256": "8b0f2f6dd7e4099d0eb1fd3ace8e8502e01a95a85872c5fd8757532046cacb4e",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes screenshot/software-GPU as the slow path without calling the render failed, checks duration and fps against the composition, inspects full-resolution frames including text and edges, and states that a file existing does not mean the pixels are correct.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes slow software/screenshot path without claiming failure, verifies duration and fps against composition, inspects decoded frames including detailed regions, and explicitly says successful encoding doesn't establish correctness; criterion 1 is met, but it's mainly the 'does not equate encoding with pixels' point that is clearly satisfied while the frame-rate and detailed-region checks are present.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes screenshot/software-GPU as the slow path without calling the render failed, verifies duration and fps against the composition, inspects decoded frames at full resolution including detailed regions, and states that a successful encode does not establish correct pixels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes the software-GPU screenshot path as slow without calling the render failed; verifies duration and fps against the composition; inspects zoomed decoded frames; states that a file existing doesn't mean the pixels are correct.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Recognizes screenshot/software-GPU as the slow path without calling the render failed (1), checks duration and fps against composition (2), and inspects decoded frames with zoomed detail regions (3); but does not clearly state that successful encoding doesn't prove correct pixels, though it notes 'a file existing doesn't mean the pixels are right' (4 partially).\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 0,
      "generation_hash": "12f5915531439c65d3d8940ec35c82a15bec9e25db673cf607cc30fdd13b3d4f",
      "answer_sha256": "12f5915531439c65d3d8940ec35c82a15bec9e25db673cf607cc30fdd13b3d4f",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 3, and 4: it flags the screenshot/software path without claiming failure, checks frames including artifacts, and separates encoding from correct pixels. It misses criterion 2, never checking duration or frame rate against the composition.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response recognizes the software-GPU/screenshot path and says completion is unverified (criterion 4 partly), and inspects frames including sampled ones, but never checks duration/frame rate against the composition and does not clearly avoid calling the render failed; criteria 1 and 2 are weak or missed.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Only criterion 4 is clearly met: the response says output existence isn't correctness and frames must be inspected. It never addresses slow-path timing, verifying duration or frame rate against the composition, or inspecting detailed regions.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Criterion 1 is met: it notes screenshot mode and software rendering without calling the render failed. Criterion 3 is met: it says to check frames and inspect details like artifacts and colors. Criterion 2 is missed because it never tells the grader to check duration or frame rate against the composition. Criterion 4 is met: it says existence and completion do not prove correctness.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 4 (existence is not correctness) and avoids claiming failure while noting software/screenshot limits; misses duration and frame-rate verification and only loosely covers detailed-region inspection.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 1,
      "generation_hash": "b3b79dc9bc578ec7632dda9f9c87ff51d0e8bcae28a8820e5255c7f41640d72d",
      "answer_sha256": "b3b79dc9bc578ec7632dda9f9c87ff51d0e8bcae28a8820e5255c7f41640d72d",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 3, and 4: it recognizes the software-GPU path without calling the render failed, inspects frames including fonts, textures, and blending, and says exit and output do not prove correct pixels. It misses criterion 2 because it never checks duration or frame rate against the composition.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (software fallback, no failure claimed), 3 (first/middle/last frames, textures, fonts, shaders), and 4 (completion is not correctness); misses 2, with no duration or frame-rate check.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 4 (says completion does not establish correct pixels) and criterion 3 (inspects first, middle, and last frames for texture, shader, and font faults). Misses criterion 2, since duration and frame rate are never checked against the composition, and criterion 1 is only partly met because the slow software path is never named as slow.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response recognizes the software-GPU/unverified state without claiming failure and inspects decoded frames (first, middle, last, including edge issues), but never verifies duration or frame rate against the composition and does not explicitly separate encoding success from pixel correctness in a way that fully meets criterion 4, so it earns partial credit.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response meets criterion 3 (inspects first, middle, last frames and detailed fail signs like textures/shaders) and criterion 4 (says completed render is not verified), but misses criterion 2 (no check of duration or frame rate against the composition) and criterion 1 (does not explicitly recognize the slow software path, only notes it can differ from hardware).\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 2,
      "generation_hash": "814b50c38af698ffd43fc86a2e69ff8812eb2c8ea8e11a70525815632357a44d",
      "answer_sha256": "814b50c38af698ffd43fc86a2e69ff8812eb2c8ea8e11a70525815632357a44d",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes software-GPU slowness without calling the render failed, checks frame count, duration and fps against the composition, inspects first, middle and last frames for missing textures and text, and separates file production from correct pixels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Covers all four criteria: notes slow software rendering without claiming failure, checks duration and fps against the configuration, inspects first, middle, and last frames for detailed content, and states that a completed render does not prove correct pixels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Recognizes software-GPU/screenshot-mode slowness without calling the render failed; verifies frame count, duration, and fps; inspects first/middle/last frames for textures, text, and fonts; does not equate file production with correct pixels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Meets all four: notes slower software rendering without calling the render failed, checks duration and fps against the composition, inspects first, middle, and last frames for texture, text, and lighting detail, and says encoding success doesn't confirm pixels.\"}",
        "{\"score\": 1.0, \"pass\": true, \"reason\": \"Covers slower software rendering without calling the render failed, checks duration and fps against the composition, inspects first/middle/last frames for detailed features, and states that successful encoding does not confirm correct pixels.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 3,
      "generation_hash": "a78ace647167743d084ccb43c5c987f353dc1a2b736dfa3090196ef2ea7b9de0",
      "answer_sha256": "a78ace647167743d084ccb43c5c987f353dc1a2b736dfa3090196ef2ea7b9de0",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 4 (successful exit is not treated as correct pixels) and mostly criterion 3 (frame inspection), but misses criterion 2 (no duration or frame-rate check) and does not explicitly name the slow path in criterion 1.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 3 (inspects frames for artifacts and missing text) and criterion 4 (says completion does not confirm correct pixels). Misses criterion 2, since duration and frame rate are never checked against the composition, and criterion 1, since it never names the slow path.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response recognizes the software-GPU/screenshot path and warns against equating completion with correctness (criteria 1 and 4), and inspects frames in detail (criterion 3 partly). It never verifies duration or frame rate against the composition (criterion 2 missed), and it does not frame the result as a slow path without calling the render failed, leaving criterion 1 arguable.\", \"score_note\": \"scored 0.5 reflecting two satisfied criteria out of four\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 (treats software-GPU/screenshot path as unverified without claiming failure) and 4 (explicitly separates process exit from pixel correctness); misses 2 (no duration or frame-rate check) and 3 (no detailed-region inspection).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response recognizes screenshot/software-GPU limits without claiming failure and inspects frames visually and checks frame counts, but it never verifies duration or frame rate against the composition (criterion 2 missed), while criteria 1, 3, and 4 are largely met.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 4,
      "generation_hash": "5a2a298339c510bdfd64e795421d479bdae6b007905a8d895deec42d3a54c0d7",
      "answer_sha256": "5a2a298339c510bdfd64e795421d479bdae6b007905a8d895deec42d3a54c0d7",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 (recognizes the software/screenshot slow path without calling the render failed) and 4 (exit status is not treated as correct pixels); misses 2 (frame rate not checked against the composition) and 3 (no inspection of detailed regions).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 4 (says process exit is not verification) and arguably criterion 1 (software-GPU slow path, no failed-render claim). Misses 2, since frame rate is never checked against the composition, and 3, since detailed-region inspection is absent.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 (recognizes software/screenshot slow path without calling it failed) and 4 (exit status is not correct pixels). Misses 2, since frame rate is never checked against the composition, and 3, since no detailed-region inspection is specified.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response recognizes the slow path via screenshot mode and software GPU without calling the render failed (criterion 1), and inspects decoded frames including checking middle frames (criterion 3), but never verifies duration or frame rate against the composition (criterion 2 missed) and does not explicitly state that successful encoding is not proof of correct pixels (criterion 4 only partially implied).\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Response covers duration/frame-rate-adjacent checks and inspecting frames, but it never explicitly verifies duration and fps against the composition, misses the slow-path framing (it only hints at it), and inspects frames only generally without detailed regions; it does separate exit status from correct pixels (criterion 4).\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 5,
      "generation_hash": "2f80ae0f28b41ac9220ac83a9a608ac93b9f572aab90c719812cbdb3e408071b",
      "answer_sha256": "2f80ae0f28b41ac9220ac83a9a608ac93b9f572aab90c719812cbdb3e408071b",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets points 2, 3, and 4: checks duration, resolution, and frame rate; inspects first, middle, and last frames for artifacts; and states that a clean exit does not prove correct pixels. Point 1 is weak because it notes screenshot/software-GPU risk without naming a slow path.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response meets criterion 1 (notes software-GPU/screenshot slowness and 'completed' isn't verification without claiming failure) and criterion 4 (explicitly says clean exit doesn't prove correct frames), and gives frame inspection steps for criterion 3, but never checks duration/frame rate against the composition (criterion 2 missed).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Criterion 1 is met: the response says the render is unverified without calling it failed. Criterion 4 is met: it says a clean exit does not mean correct output. Criterion 2 is partly met: it checks duration and frame rate only loosely, with no explicit composition comparison. Criterion 3 is missed: it inspects frames but never calls for detailed regions.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 2 (checks frame count, duration, and frame rate), 3 (inspects first, middle, and last frames for artifacts), and 4 (says a clean exit doesn't prove correct pixels). Misses 1: it notes software-GPU risk but never identifies the slow path.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 2-4: checks frame count, duration and frame rate, inspects frames for detailed defects, and says a clean exit does not prove correct pixels. Misses criterion 1 because it never identifies the slow path.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 6,
      "generation_hash": "fc3d14fd250dda212f38a6cb57e92fd2645d0468fb4297e19b85307d5eee448a",
      "answer_sha256": "fc3d14fd250dda212f38a6cb57e92fd2645d0468fb4297e19b85307d5eee448a",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Criterion 4 is met (explicitly says a completed render does not prove correctness) and criterion 3 is largely met (inspects first/middle/last frames and pixel checks), but criterion 2 is only loosely addressed without comparing duration or frame rate to the composition, and criterion 1 (recognizing the slow path without claiming failure) is only partly met since it does not name the slow path explicitly.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 4 (completed render is not proof of correct pixels) and criterion 1 (addresses slow screenshot capture without claiming failure). Misses criterion 2, which lacks an explicit frame-rate check against the composition, and criterion 3, which omits detailed-region inspection.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1 (timing-sensitive screenshot capture, no failure claimed), 2 (duration, frame count, and intended frame rate checked), and 4 (\\\"completed render... doesn't tell you the output is correct\\\"); misses 3 because detailed-region inspection is not explicit.\"}",
        "{\n  \"score\": 0.5,\n  \"pass\": false,\n  \"reason\": \"Meets the slow-path and no-equating-encoding-with-correct-pixels criteria (points 1 and 4) but only partly checks duration and frame rate (point 2) and never inspects detailed regions of decoded frames (point 3).\"\n}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 2, and 4: recognizes screenshot/software-GPU timing risks without calling the render failed, checks duration and frame rate, and separates completion from correctness. Misses 3: no detailed-region inspection.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 7,
      "generation_hash": "87e09515a443d7a020d88099ecf0c38dd3a521e2e299ff7692ab193f24871b5e",
      "answer_sha256": "87e09515a443d7a020d88099ecf0c38dd3a521e2e299ff7692ab193f24871b5e",
      "status": "measured",
      "judge_outputs": [
        "{\n  \"score\": 0.75,\n  \"pass\": true,\n  \"reason\": \"Meets criteria 1, 2, and 4: it recognizes slow screenshot-mode capture without calling the render failed, checks duration and frame rate with ffprobe, and separates completion from correctness. It misses 3, since frame inspection never mentions zooming into detailed regions.\"\n}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Met criteria 1, 2, and 4: it treats the render as unverified, checks duration, frame rate, and frame count via ffprobe, and separates successful completion from correct pixels. Missed criterion 3: it inspects frames but never calls for examining detailed regions such as text or edges up close.\"}",
        "{\"score\": 0.75, \"pass\": true, \"reason\": \"Meets criteria 1, 2, and 4: it notes frame-by-frame screenshot mode and possible slowness without calling the render failed, checks duration and frame rate, and separates 'ran without error' from correct pixels. It misses criterion 3 because it never asks for inspection of detailed regions.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Criterion 2 is met (duration and frame rate checked via ffprobe against the request) and criterion 3 is met (frames inspected, including transitions and per-frame state). Criterion 4 is met (it explicitly says a successful run is not verification). Criterion 1 is missed: the response never frames screenshot-mode/software-GPU rendering as a slow path, and it treats the render as possibly failing rather than as merely slow.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Criterion 1 is met (treats completed render as unverified without calling it failed); criterion 2 is met (duration, frame rate, frame count checked via ffprobe); criterion 3 is met (inspects first, last, middle frames, though not explicitly 'detailed regions'); criterion 4 is met (explicitly says 'ran without error' is not 'correct'). Scoring all four would give 1.0, but on strict reading criterion 3's 'detailed regions' is only loosely addressed, so partial credit is warranted.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 8,
      "generation_hash": "56cecf192b537251740d3afd892cef0059d19f33a99cefd4a9ee3fbae01d0efe",
      "answer_sha256": "56cecf192b537251740d3afd892cef0059d19f33a99cefd4a9ee3fbae01d0efe",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Rubric 1 is missed because the response never recognizes a slow path; it only says 'rendered, not yet visually verified'. Rubric 2 is missed: no duration or frame-rate check against the composition. Rubric 3 is partly met (first, middle, last frames are named) but detailed regions are not addressed. Rubric 4 is met: it states that completion does not mean the content is correct.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Criterion 4 is met: it says completion doesn't establish correct content. Criterion 3 is missed: it lists frames to open but never asks for close inspection of detailed regions. Criteria 1 and 2 are missed: it never names a slow path and never checks duration or frame rate against the composition.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Criterion 1 (slow path without claiming failure) is met by noting software GPU and 'not yet visually verified', and criterion 4 is met by stating 'completed' does not mean correct; criterion 2 is missed since no duration or frame-rate check against the composition is mentioned, and criterion 3 is only partly met because it asks for first/middle/last frames but not detailed regions.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Criterion 2 (verify duration/frame rate against composition) is not addressed, and criterion 1 (recognize slow path without claiming failure) is only loosely covered; criteria 3 (inspect decoded frames incl. detailed regions) and 4 (encoding != correct pixels) are met.\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Meets criterion 4 by stating completion does not imply correct content, but misses duration/frame-rate verification against the composition, detailed-region frame inspection, and recognition of the slow path.\"}"
      ]
    },
    {
      "id": "render",
      "mode": "baseline",
      "draw_index": 9,
      "generation_hash": "03431ca649648bb18bc002cb6207616467acd022a06eed30037ccc586ddf3f53",
      "answer_sha256": "03431ca649648bb18bc002cb6207616467acd022a06eed30037ccc586ddf3f53",
      "status": "measured",
      "judge_outputs": [
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 and 4: it treats screenshot/software-GPU as a different path and says a clean exit doesn't prove correctness. Misses criterion 2 (no frame rate check) and criterion 3 (no detailed-region inspection).\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criteria 1 (no failed-render claim, notes screenshot/software-GPU slowness) and 4 (completed means exited cleanly, not correct pixels); misses 2 (no frame-rate check) and 3 (no detailed-region inspection).\"}",
        "{\"score\": 0.25, \"pass\": false, \"reason\": \"Criterion 1 is arguably met since it says completion only means the process exited and the render is unverified, but it never names the slow software path explicitly. Criterion 2 is missed: duration/frame rate is mentioned only as a generic check without comparing to the composition. Criterion 3 is partly met via frame sampling but lacks detailed-region inspection. Criterion 4 is met: it says a completed run doesn't mean correct output.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Response recognizes the slow path without calling the render failed and inspects frames, but never verifies duration or frame rate against the composition (criterion 2 missed), while criteria 1, 3, and 4 are met, giving 0.75 from criteria... see note.\"}",
        "{\"score\": 0.5, \"pass\": false, \"reason\": \"Meets criterion 1 (slow software/screenshot path without calling the render failed) and criterion 4 (completed run is not proof of correct pixels). Misses criterion 2 because frame rate is never checked against the composition, and criterion 3 is only partly met since detailed-region inspection is not explicit.\"}"
      ]
    }
  ]
}
