{
  "status": "ready-with-notes",
  "user_story": "【Maya Chen · 平台工程师】在【生产热修演练】用【libfx durable session + wakeHandler() + Queues __libfx_wkf_workflow_session + idempotent tools】完成了【当场 Kill Function，turn 从 last step 续跑，Settled refunds 从 0→1 只退一次】",
  "funnel_url": "https://fx-showcase-film-a.pages.dev/",
  "funnel_checks": [],
  "gif": "https://fx-showcase-film-a.pages.dev/demo.gif",
  "mp4": "https://fx-showcase-film-a.pages.dev/demo.mp4",
  "mp4_mobile": "https://fx-showcase-film-a.pages.dev/demo-mobile-390.mp4",
  "poster": "https://fx-showcase-film-a.pages.dev/poster.jpg",
  "product_url": "https://fx-durable-onescreen.pages.dev/",
  "commit": "8f50bd35",
  "branch": "main",
  "pr": "https://github.com/liush2yuxjtu/showcases/pull/37",
  "story_scores": [
    {
      "candidate": "A",
      "R1": 5,
      "R2": 4,
      "R3": 5,
      "R4": 4,
      "R5": 5,
      "R6": 4,
      "R7": 3,
      "total": 90
    },
    {
      "candidate": "B",
      "R1": 4,
      "R2": 5,
      "R3": 4,
      "R4": 5,
      "R5": 4,
      "R6": 5,
      "R7": 5,
      "total": 89
    },
    {
      "candidate": "C",
      "R1": 4,
      "R2": 4,
      "R3": 5,
      "R4": 3,
      "R5": 5,
      "R6": 4,
      "R7": 3,
      "total": 83
    },
    {
      "candidate": "D",
      "R1": 5,
      "R2": 4,
      "R3": 3,
      "R4": 5,
      "R5": 4,
      "R6": 4,
      "R7": 5,
      "total": 84
    }
  ],
  "winner": "A",
  "shot_list": [
    {
      "id": "S1",
      "t_start": 0,
      "t_end": 1.2,
      "beat": "B0 establish",
      "framing": "full",
      "zoom": 1,
      "focus": "Drill + Settled refunds 0 + Simulated durable resume banner",
      "pointer": "idle",
      "text_expected": [
        "Simulated durable resume",
        "Settled refunds",
        "Start turn"
      ],
      "hold_s": 1.0,
      "purpose": "Cannot: mid-flight kill risk before capability"
    },
    {
      "id": "S2",
      "t_start": 1.2,
      "t_end": 3.0,
      "beat": "B1 start",
      "framing": "drill",
      "zoom": 1.2,
      "focus": "Start turn → Running + get_order idempotent + refund_order executionId",
      "pointer": "click Start turn",
      "text_expected": [
        "Start turn",
        "Running",
        "idempotent",
        "executionId"
      ],
      "hold_s": 0.4,
      "purpose": "Turn mid-flight, Kill armed"
    },
    {
      "id": "S3",
      "t_start": 3.0,
      "t_end": 5.0,
      "beat": "B2 kill",
      "framing": "close",
      "zoom": 1.55,
      "focus": "Kill Function + Settled refunds still 0",
      "pointer": "click Kill Function",
      "text_expected": [
        "Kill Function",
        "Killed",
        "0"
      ],
      "hold_s": 1.5,
      "purpose": "Proof refund not settled at kill"
    },
    {
      "id": "S4",
      "t_start": 5.0,
      "t_end": 8.5,
      "beat": "B3 resume result",
      "framing": "close",
      "zoom": 1.45,
      "focus": "Resume → Settled refunds 1 + resume-from-last-step + refund_once",
      "pointer": "click Resume",
      "text_expected": [
        "Resume",
        "resume-from-last-step",
        "Settled refunds",
        "1",
        "idempotent"
      ],
      "hold_s": 3.0,
      "purpose": "Can: durable resume settles once"
    },
    {
      "id": "S5",
      "t_start": 8.5,
      "t_end": 10.5,
      "beat": "B4 proof hold",
      "framing": "drill",
      "zoom": 1.2,
      "focus": "Done + Settled refunds 1 stable",
      "pointer": "idle",
      "text_expected": [
        "Done",
        "1"
      ],
      "hold_s": 2.0,
      "purpose": "Result readable ≥3s total with S4"
    }
  ],
  "qa": {
    "verdict": "pass-with-notes",
    "hold_s": 4.0,
    "cjk_frames": 0,
    "ui_language": "en",
    "refund_at_kill": 0,
    "refund_after_resume": 1,
    "markers": [
      "Simulated durable resume",
      "resume-from-last-step",
      "idempotent",
      "refund_once"
    ],
    "notes": [
      "GIF window is Killed(refund=0)→Resume→Done(refund=1); Start→Kill lives in demo.mp4 because wall-clock gap kill→resume was ~34s",
      "Cold-viewer provisional (recorder context): Resume after Kill changes Settled refunds 0→1",
      "Mobile is center crop 390×844 from desktop GT, not a second device take",
      "Long waits between beats kept in demo.mp4 for huashu to compress into 20–30s"
    ]
  },
  "deviations": [
    "record_machine=box DISPLAY :47 x11grab + computerUse (not Mac mini)",
    "clip_test_cutout N/A (no stock footage)",
    "legibility gate: OCR tokens on kill/proof frames; pixel thresholds not fully automated this take",
    "report_to remix-ship id corrected to 6bbfe2c8-eeef-4e60-8ffc-f394020b849a"
  ],
  "artifacts": [
    {
      "kind": "gt",
      "path": "/workspace/feature-recorder-runs/fx-showcase/runs/A-take1/raw/gt-display.mkv",
      "sha256_16": "d25a20af8abc93be"
    },
    {
      "kind": "mp4",
      "path": "/workspace/feature-recorder-runs/fx-showcase/publish/demo.mp4",
      "sha256_16": "ab97f5a5965b644c"
    },
    {
      "kind": "gif",
      "path": "/workspace/feature-recorder-runs/fx-showcase/publish/demo.gif",
      "sha256_16": "0db7829b568334f8"
    },
    {
      "kind": "mobile_mp4",
      "path": "/workspace/feature-recorder-runs/fx-showcase/publish/demo-mobile-390.mp4",
      "sha256_16": "e837d017ec500ca5"
    },
    {
      "kind": "poster",
      "path": "/workspace/feature-recorder-runs/fx-showcase/publish/poster.jpg",
      "sha256_16": "95915bbae31931b9"
    }
  ],
  "known_weaknesses": [
    "demo.mp4 ~105s with long holds — huashu should compress to 20–30s",
    "Hero 'fx' rarely in frame with full Drill+log; story proof is Drill panel"
  ],
  "issues_for": {
    "cb7e2914-61e0-4230-a254-e99f9cdc423e": [
      "Wrap demo.mp4 (+ optional mobile) into 20–30s launch film; keep Settled refunds 0→1 beat"
    ],
    "55f40ce8-72dc-4683-bea2-f398384c34b7": [
      "Frame-accurate SFX after huashu cut"
    ]
  },
  "next": "Hand to huashu-motion → earshot; copy MP4 into showcases fx-durable-onescreen/outputs/; Share waits user 「发」",
  "take": "A-take1",
  "film_path": "A",
  "local_paths": {
    "demo_mp4": "/workspace/feature-recorder-runs/fx-showcase/publish/demo.mp4",
    "demo_gif": "/workspace/feature-recorder-runs/fx-showcase/publish/demo.gif",
    "demo_mobile": "/workspace/feature-recorder-runs/fx-showcase/publish/demo-mobile-390.mp4",
    "gt": "/workspace/feature-recorder-runs/fx-showcase/runs/A-take1/raw/gt-display.mkv",
    "timing": "/workspace/feature-recorder-runs/fx-showcase/runs/A-take1/raw/timing.json"
  }
}
