{
  "generated_at_utc": "2026-10-18T18:14:22.291162+00:00",
  "generator": "web-preparation-3",
  "source_qa_supplied": true,
  "source_tables_supplied": true,
  "source_decoded_counts": {
    "rgb": 3476,
    "depth": 3507,
    "normals": 3507
  },
  "preview_frame_count": 3507,
  "missing_rgb_frames": [
    586,
    595,
    601,
    620,
    631,
    642,
    662,
    668,
    678,
    695,
    714,
    721,
    732,
    819,
    826,
    837,
    856,
    871,
    877,
    885,
    892,
    898,
    917,
    936,
    947,
    955,
    963,
    980,
    998,
    1010,
    1029
  ],
  "checks": [
    {
      "name": "frame_index_contiguous",
      "pass": true,
      "detail": "3507 source frame rows in order.",
      "source": "preparation"
    },
    {
      "name": "timestamps_monotonic",
      "pass": true,
      "detail": "Source capture timestamps strictly increase.",
      "source": "preparation"
    },
    {
      "name": "source_decode_counts",
      "pass": true,
      "detail": "{'rgb': 3476, 'depth': 3507, 'normals': 3507}",
      "source": "preparation"
    },
    {
      "name": "stream_index_maps",
      "pass": true,
      "detail": "RGB 3476/3507; depth and normals 3507/3507.",
      "source": "preparation"
    },
    {
      "name": "input_frame_bounds",
      "pass": true,
      "detail": "10830 input records join within0..3506.",
      "source": "preparation"
    },
    {
      "name": "event_frame_bounds",
      "pass": true,
      "detail": "61 events; original session stop at terminal boundary3507 seeks to3506.",
      "source": "preparation"
    },
    {
      "name": "camera_values",
      "pass": true,
      "detail": "Finite recorded camera values.",
      "source": "preparation"
    },
    {
      "name": "intrinsics_positive",
      "pass": true,
      "detail": "Recorded intrinsics preserved; no calibration or reprojection audit performed.",
      "source": "preparation"
    },
    {
      "name": "rgb_missing_slots_held",
      "pass": true,
      "detail": "31 missing RGB positions hold the previous recorded RGB image in the web preview only; source availability and source indices stay unchanged.",
      "source": "preparation"
    },
    {
      "name": "rgb_preview_count",
      "pass": true,
      "detail": "3507 decoded preview frames, matching source frame positions.",
      "source": "preparation"
    },
    {
      "name": "depth_preview_count",
      "pass": true,
      "detail": "3507 decoded preview frames, matching source frame positions.",
      "source": "preparation"
    },
    {
      "name": "normals_preview_count",
      "pass": true,
      "detail": "3507 decoded preview frames, matching source frame positions.",
      "source": "preparation"
    },
    {
      "name": "mosaic_preview_count",
      "pass": true,
      "detail": "3507 decoded preview frames, matching source frame positions.",
      "source": "preparation"
    },
    {
      "name": "rgb_source_mapping_comparison",
      "pass": true,
      "detail": "All 3507 preview frames compared with their mapped source image; maximum thumbnail mean absolute luma error 6.556/255. All31 old black gap slots replaced with previous-source holds.",
      "source": "preparation"
    }
  ],
  "notes": [
    "31 RGB source frames are missing. For smooth web playback, each missing RGB position holds the previous recorded RGB image. Held images are preview-only; availability remains false, the original RGB source index remains null, and previewRgb identifies the held source frame. Depth, normals, frame numbers, events and telemetry retain their original alignment."
  ],
  "tables_note": "Original converter-produced tables supplied with the capture.",
  "session_stop_note": "The original session_stop is at source boundary3507, immediately after last rendered frame3506. The preview seeks to the final rendered frame; source event/table values are unchanged.",
  "rgb_preview_gap_policy": {
    "mode": "hold_previous",
    "scope": "web_preview_only",
    "held_frames": [
      {
        "frame": 586,
        "held_source_frame": 585,
        "held_source_index": 585
      },
      {
        "frame": 595,
        "held_source_frame": 594,
        "held_source_index": 593
      },
      {
        "frame": 601,
        "held_source_frame": 600,
        "held_source_index": 598
      },
      {
        "frame": 620,
        "held_source_frame": 619,
        "held_source_index": 616
      },
      {
        "frame": 631,
        "held_source_frame": 630,
        "held_source_index": 626
      },
      {
        "frame": 642,
        "held_source_frame": 641,
        "held_source_index": 636
      },
      {
        "frame": 662,
        "held_source_frame": 661,
        "held_source_index": 655
      },
      {
        "frame": 668,
        "held_source_frame": 667,
        "held_source_index": 660
      },
      {
        "frame": 678,
        "held_source_frame": 677,
        "held_source_index": 669
      },
      {
        "frame": 695,
        "held_source_frame": 694,
        "held_source_index": 685
      },
      {
        "frame": 714,
        "held_source_frame": 713,
        "held_source_index": 703
      },
      {
        "frame": 721,
        "held_source_frame": 720,
        "held_source_index": 709
      },
      {
        "frame": 732,
        "held_source_frame": 731,
        "held_source_index": 719
      },
      {
        "frame": 819,
        "held_source_frame": 818,
        "held_source_index": 805
      },
      {
        "frame": 826,
        "held_source_frame": 825,
        "held_source_index": 811
      },
      {
        "frame": 837,
        "held_source_frame": 836,
        "held_source_index": 821
      },
      {
        "frame": 856,
        "held_source_frame": 855,
        "held_source_index": 839
      },
      {
        "frame": 871,
        "held_source_frame": 870,
        "held_source_index": 853
      },
      {
        "frame": 877,
        "held_source_frame": 876,
        "held_source_index": 858
      },
      {
        "frame": 885,
        "held_source_frame": 884,
        "held_source_index": 865
      },
      {
        "frame": 892,
        "held_source_frame": 891,
        "held_source_index": 871
      },
      {
        "frame": 898,
        "held_source_frame": 897,
        "held_source_index": 876
      },
      {
        "frame": 917,
        "held_source_frame": 916,
        "held_source_index": 894
      },
      {
        "frame": 936,
        "held_source_frame": 935,
        "held_source_index": 912
      },
      {
        "frame": 947,
        "held_source_frame": 946,
        "held_source_index": 922
      },
      {
        "frame": 955,
        "held_source_frame": 954,
        "held_source_index": 929
      },
      {
        "frame": 963,
        "held_source_frame": 962,
        "held_source_index": 936
      },
      {
        "frame": 980,
        "held_source_frame": 979,
        "held_source_index": 952
      },
      {
        "frame": 998,
        "held_source_frame": 997,
        "held_source_index": 969
      },
      {
        "frame": 1010,
        "held_source_frame": 1009,
        "held_source_index": 980
      },
      {
        "frame": 1029,
        "held_source_frame": 1028,
        "held_source_index": 998
      }
    ],
    "original_source_unchanged": true
  }
}