{
  "schemaVersion": 1,
  "comparison": {
    "outputSha256": "04cc31ce31fe4cb0e6669c9823a4ad2262fce5d5c35315a1a3fe351aa889db99",
    "ffmpegCommandArguments": [
      "ffmpeg.exe",
      "-v",
      "error",
      "-n",
      "-i",
      "microphone-python-file-v1-native-v2.mp4",
      "-i",
      "microphone-python-file-v1-finshield.mp4",
      "-filter_complex",
      "[0:v]setpts=(PTS-STARTPTS)/4,fps=20,scale=640:360:flags=lanczos,setsar=1[left];[1:v]setpts=(PTS-STARTPTS)/4,fps=20,scale=640:360:flags=lanczos,setsar=1[right];[left][right]hstack=inputs=2:shortest=1,trim=duration=5,split[a][b];[a]palettegen=stats_mode=full[p];[b][p]paletteuse=dither=sierra2_4a",
      "-an",
      "-loop",
      "0",
      "comparison.gif"
    ],
    "filterComplex": "[0:v]setpts=(PTS-STARTPTS)/4,fps=20,scale=640:360:flags=lanczos,setsar=1[left];[1:v]setpts=(PTS-STARTPTS)/4,fps=20,scale=640:360:flags=lanczos,setsar=1[right];[left][right]hstack=inputs=2:shortest=1,trim=duration=5,split[a][b];[a]palettegen=stats_mode=full[p];[b][p]paletteuse=dither=sierra2_4a",
    "speedRelativeToReviewedVideos": 4,
    "paneWidth": 640,
    "paneHeight": 360,
    "outputFps": 20,
    "expectedDurationSeconds": 5,
    "probe": {
      "streams": [
        {
          "width": 1280,
          "height": 360,
          "r_frame_rate": "20/1",
          "nb_read_frames": "100"
        }
      ],
      "format": {
        "duration": "5.000000"
      }
    },
    "completeDecodeExitCode": 0,
    "completeDecodeStderr": "",
    "timelineNote": "Independent recordings. Equal playback time does not synchronize events or source coverage. Left: selected 5+10+5 source excerpts at 4x. Right: full 356.375-second source accelerated to 20 seconds at 17.81875x, then played at 4x (71.275x relative to raw). No pane holds.",
    "visualInspection": {
      "result": "passed",
      "coverage": "All 100 decoded GIF frames counted; sampled GIF frames at 0.00, 1.125, 1.50, 3.75 and 4.95 s; native v2 5+10+5 stills and FinShield 2 fps red scan reviewed.",
      "observations": "Two equal full-frame 16:9 panes. Native on left shows the submitted prompt, then Active onset, then the completed reply. FinShield on right never shows a red Active panel. No captured audio, added title, annotation, approval panel, crop, artificial effect or extra final hold.",
      "privacyIssueObserved": false
    },
    "addedTextOrAnnotations": false,
    "sourceFilesModified": false,
    "gifFrameDurationsMilliseconds": [
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50,
      50
    ],
    "inputFinalizationCheck": "Each current reviewed MP4 hash and raw source hash matches its finalized edit JSON; each MP4 measures 20 seconds and fully decodes.",
    "outputHashRecheckedAfterInspection": true
  },
  "groups": {
    "native": {
      "source": "C:\\git\\agent-safety-arena\\artifacts\\runs\\workbuddy-20261108T113052-9176fec5\\recording.mp4",
      "sourceSha256": "e2d4966c19987cfc33bfc103454cae0a5e14e8084fe2fe1682d45f15df422c8e",
      "output": "C:\\git\\agent-safety-arena\\artifacts\\runs\\workbuddy-20261108T113052-9176fec5\\microphone-python-file-v1-native-v2.mp4",
      "outputSha256": "10687b57e0fbcc3185010728a4d0276c7fa9dfe5155b74461989e25d5d76ddcc",
      "moments": [
        {
          "stage": "opening",
          "startSeconds": 5.0,
          "durationSeconds": 5
        },
        {
          "stage": "effect",
          "startSeconds": 107.875,
          "durationSeconds": 10
        },
        {
          "stage": "response",
          "startSeconds": 178.5,
          "durationSeconds": 5
        }
      ],
      "sourceInfo": {
        "duration": 215.25,
        "width": 3840,
        "height": 2160
      },
      "outputInfo": {
        "duration": 20.0,
        "width": 1920,
        "height": 1080
      },
      "timingNormalization": {
        "fps": 8,
        "finalFrameExtension": "Only to the requested output end"
      },
      "fullTimeline": null,
      "description": "Edited excerpts. Old small application windows are cropped and enlarged only in opening/response; desktop effect frames retain the full view."
    },
    "finshield": {
      "source": "C:\\git\\agent-safety-arena\\artifacts\\runs\\workbuddy-20261108T114318-7af44277\\recording.mp4",
      "sourceSha256": "82abcaa122bf984cffdea38ed2fedc75eb32ed53902ca073726d59d288a349f3",
      "output": "C:\\git\\agent-safety-arena\\artifacts\\runs\\workbuddy-20261108T114318-7af44277\\microphone-python-file-v1-finshield.mp4",
      "outputSha256": "9dd29247d5e1945fb5c561f8b81c426c75d772fd6ede2a00708426cecede7b97",
      "moments": [],
      "sourceInfo": {
        "duration": 356.375,
        "width": 3840,
        "height": 2160
      },
      "outputInfo": {
        "duration": 20.0,
        "width": 1920,
        "height": 1080
      },
      "timingNormalization": {
        "fps": 64,
        "finalFrameExtension": "Only to the requested output end"
      },
      "fullTimeline": {
        "sourceDurationSeconds": 356.375,
        "outputDurationSeconds": 20,
        "speedFactor": 17.81875,
        "omittedIntervals": false
      },
      "description": "Complete captured timeline, continuously scaled to 20 seconds; full frame, no cuts or concatenation."
    }
  }
}
