{
 "status": "ready-with-notes",
 "user_story": "【画学校/住宅背景的漫画作者】在【Layout Tweaks 双预览（生产站）】用【拖 Simple 2D 平面 → FULL 3D 实时同步 + 重叠自动收成 Ensuite + 中文/EN/日本語】完成了【拖一下卫生间进主卧，三维户型当场跟着变成主卧带卫，并三语即切】",
 "before_after": "Before: editing a 2D room plan meant rebuilding in a separate 3D tool, and overlapping rooms were a conflict, in one UI language. With Layout Tweaks dual preview: drag in 2D, the 3D follows live, the overlap becomes an Ensuite automatically, and the UI + 3D labels switch 中文/EN/日本語.",
 "funnel_url": "https://layout-tweaks-dual-rec.pages.dev/",
 "funnel_checks": [
  {
   "url": "https://layout-tweaks-dual-rec.pages.dev/",
   "status": 200
  },
  {
   "url": "https://layout-tweaks-dual-rec.pages.dev/demo.gif",
   "status": 200
  },
  {
   "url": "https://layout-tweaks-dual-rec.pages.dev/demo.mp4",
   "status": 200
  },
  {
   "url": "https://layout-tweaks-dual-rec.pages.dev/handoff.json",
   "status": 200
  },
  {
   "url": "https://layout-tweaks-dual-rec.pages.dev/cues.json",
   "status": 200
  },
  {
   "url": "https://layout-tweaks-dual-rec.pages.dev/poster.jpg",
   "status": 200
  }
 ],
 "gif": "https://layout-tweaks-dual-rec.pages.dev/demo.gif",
 "mp4": "https://layout-tweaks-dual-rec.pages.dev/demo.mp4",
 "poster": "https://layout-tweaks-dual-rec.pages.dev/poster.jpg",
 "cues": "https://layout-tweaks-dual-rec.pages.dev/cues.json",
 "commit": "af6c5068efabfbf9159a400cf2dd6acdf075475f",
 "branch": "feat/layout-tweaks-dual-rec",
 "pr": null,
 "repo": "liush2yuxjtu/showcases",
 "folder": "layout-tweaks-dual-rec/",
 "story_hitl": {
  "status": "approved",
  "approved_by": "approved_by_main_grok",
  "quote": "录视频，发推特，老一套",
  "chosen": "A spine + B/C beats (D)",
  "suggested": "A"
 },
 "story_scores": [
  {
   "candidate": "A 2D→3D sync",
   "R1": 5,
   "R2": 5,
   "R3": 4,
   "R4": 4,
   "R5": 4,
   "R6": 5,
   "R7": 5,
   "total": 90
  },
  {
   "candidate": "B overlap→Ensuite",
   "R1": 3,
   "R2": 5,
   "R3": 5,
   "R4": 5,
   "R5": 4,
   "R6": 4,
   "R7": 4,
   "total": 86
  },
  {
   "candidate": "C 3 languages",
   "R1": 4,
   "R2": 4,
   "R3": 3,
   "R4": 4,
   "R5": 4,
   "R6": 4,
   "R7": 4,
   "total": 76
  },
  {
   "candidate": "D combined",
   "R1": 4,
   "R2": 3,
   "R3": 5,
   "R4": 4,
   "R5": 5,
   "R6": 4,
   "R7": 3,
   "total": 83
  }
 ],
 "winner": "A (score leader) as spine, shot with B+C payoff beats = D structure, because the brief requires all four capabilities",
 "shot_list": [
  {
   "id": "S1",
   "t_start": 0.0,
   "t_end": 1.68,
   "t_raw_start": 0.8,
   "beat": "B0 establish",
   "framing": "full",
   "zoom": 1.0,
   "crop_css": [
    0,
    0,
    1920,
    1080
   ],
   "roi_css": [
    0,
    0,
    1920,
    1080
   ],
   "roi_center_offset_pct": [
    0.0,
    0.0
   ],
   "roi_in_frame": true,
   "focus": "Residence demo: Simple 2D plan | FULL 3D | Tweaks",
   "pointer": "idle",
   "text_expected": [
    "Simple",
    "FULL",
    "Living room",
    "Master bedroom",
    "Bathroom"
   ],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "cut (first shot)",
   "ease": "cosine, log-zoom",
   "hold_s": 1.68,
   "purpose": "Before state: Bathroom sits outside the bedroom; 2D and 3D side by side."
  },
  {
   "id": "S2",
   "t_start": 2.28,
   "t_end": 3.47,
   "t_raw_start": 3.083,
   "beat": "B1 full 3D",
   "framing": "medium",
   "zoom": 1.55,
   "crop_css": [
    621,
    252,
    1239,
    697
   ],
   "roi_css": [
    785,
    118,
    830,
    949
   ],
   "roi_center_offset_pct": [
    -3.3,
    -1.1
   ],
   "roi_in_frame": false,
   "focus": "FULL · 3D plan · drag to orbit",
   "pointer": "real drag orbits 3D pane",
   "text_expected": [
    "Living room",
    "Corridor",
    "Master bedroom"
   ],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 1.19,
   "purpose": "Prove the 3D view is a real orbitable model."
  },
  {
   "id": "T",
   "t_start": 4.17,
   "t_end": 5.05,
   "t_raw_start": 4.973,
   "beat": "transition",
   "framing": "medium",
   "zoom": 1.25,
   "crop_css": [
    132,
    128,
    1536,
    864
   ],
   "roi_css": [
    13,
    118,
    758,
    949
   ],
   "roi_center_offset_pct": [
    -33.1,
    3.8
   ],
   "roi_in_frame": false,
   "focus": "Simple pane",
   "pointer": "glide to Bathroom",
   "text_expected": [],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 0.88,
   "purpose": "Pointer travels to the block."
  },
  {
   "id": "S3",
   "t_start": 5.65,
   "t_end": 7.45,
   "t_raw_start": 6.453,
   "beat": "B2 action",
   "framing": "close",
   "zoom": 3.4,
   "crop_css": [
    318,
    431,
    565,
    318
   ],
   "roi_css": [
    540,
    553,
    115,
    85
   ],
   "roi_center_offset_pct": [
    -0.5,
    1.7
   ],
   "roi_in_frame": true,
   "focus": "Simple > Bathroom block",
   "pointer": "pointerdown + drag up on Bathroom",
   "text_expected": [
    "Bathroom",
    "Master bedroom",
    "Corridor"
   ],
   "legibility": "control_bathroom",
   "legibility_px": {
    "metric": "x_height",
    "measured": 13,
    "threshold": 9,
    "pass": true
   },
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 1.8,
   "purpose": "The one action: grab the Bathroom block."
  },
  {
   "id": "S4",
   "t_start": 8.05,
   "t_end": 13.55,
   "t_raw_start": 8.853,
   "beat": "B2 action / sync",
   "framing": "medium",
   "zoom": 1.4,
   "crop_css": [
    314,
    154,
    1371,
    771
   ],
   "roi_css": [
    450,
    390,
    1180,
    330
   ],
   "roi_center_offset_pct": [
    3.0,
    2.0
   ],
   "roi_in_frame": true,
   "focus": "Simple Bathroom block + FULL 3D",
   "pointer": "dragging Bathroom into bedroom corner",
   "text_expected": [
    "Bathroom",
    "Master bedroom"
   ],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 5.5,
   "purpose": "3D follows the 2D drag live, both panes in frame."
  },
  {
   "id": "S5",
   "t_start": 13.95,
   "t_end": 16.4,
   "t_raw_start": 14.754,
   "beat": "B3 result",
   "framing": "close",
   "zoom": 3.7,
   "crop_css": [
    701,
    788,
    519,
    292
   ],
   "roi_css": [
    849,
    1017,
    221,
    38
   ],
   "roi_center_offset_pct": [
    -0.2,
    34.9
   ],
   "roi_in_frame": true,
   "focus": "toast",
   "pointer": "parked",
   "text_expected": [
    "Bathroom + Bedroom → Ensuite"
   ],
   "legibility": "hero_toast",
   "legibility_px": {
    "metric": "cap_height",
    "measured": 17,
    "threshold": 16,
    "pass": true
   },
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 2.45,
   "purpose": "Overlap is not an error: it auto-resolves into an ensuite."
  },
  {
   "id": "S6",
   "t_start": 16.8,
   "t_end": 16.95,
   "t_raw_start": 17.604,
   "beat": "B3 result",
   "framing": "medium",
   "zoom": 1.45,
   "crop_css": [
    368,
    168,
    1324,
    745
   ],
   "roi_css": [
    450,
    390,
    1180,
    330
   ],
   "roi_center_offset_pct": [
    0.8,
    1.9
   ],
   "roi_in_frame": true,
   "focus": "2D + 3D ensuite",
   "pointer": "glide to 中文",
   "text_expected": [
    "Bathroom",
    "Master bedroom"
   ],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 0.15,
   "purpose": "Result visible in both panes."
  },
  {
   "id": "S7",
   "t_start": 17.4,
   "t_end": 18.24,
   "t_raw_start": 18.203,
   "beat": "B4 language",
   "framing": "close",
   "zoom": 3.6,
   "crop_css": [
    1290,
    0,
    533,
    300
   ],
   "roi_css": [
    1495,
    19,
    125,
    28
   ],
   "roi_center_offset_pct": [
    0.2,
    -39.0
   ],
   "roi_in_frame": true,
   "focus": "中文 / EN / 日本語",
   "pointer": "click 中文 lower-right, then park below-right",
   "text_expected": [
    "中文",
    "EN",
    "日本語"
   ],
   "legibility": "control_lang",
   "legibility_px": {
    "metric": "glyph_height (CJK/EN, manual ink-row)",
    "measured": 17,
    "threshold": 9,
    "pass": true
   },
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 0.84,
   "purpose": "Language control legible at click."
  },
  {
   "id": "S8",
   "t_start": 18.84,
   "t_end": 20.88,
   "t_raw_start": 19.643,
   "beat": "B4 payoff",
   "framing": "medium",
   "zoom": 1.45,
   "crop_css": [
    368,
    168,
    1324,
    745
   ],
   "roi_css": [
    450,
    390,
    1180,
    330
   ],
   "roi_center_offset_pct": [
    0.8,
    1.9
   ],
   "roi_in_frame": true,
   "focus": "2D + 3D labels in Chinese",
   "pointer": "idle",
   "text_expected": [
    "卫生间",
    "主卧",
    "客厅",
    "走廊"
   ],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 2.04,
   "purpose": "Same layout, Chinese UI and 3D labels."
  },
  {
   "id": "S9",
   "t_start": 21.28,
   "t_end": 21.78,
   "t_raw_start": 22.081,
   "beat": "B4 language",
   "framing": "close",
   "zoom": 3.6,
   "crop_css": [
    1290,
    0,
    533,
    300
   ],
   "roi_css": [
    1495,
    19,
    125,
    28
   ],
   "roi_center_offset_pct": [
    0.2,
    -39.0
   ],
   "roi_in_frame": true,
   "focus": "中文 / EN / 日本語",
   "pointer": "click 日本語, then park",
   "text_expected": [
    "日本語"
   ],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 0.5,
   "purpose": "Switch to Japanese."
  },
  {
   "id": "S10",
   "t_start": 22.38,
   "t_end": 24.57,
   "t_raw_start": 23.181,
   "beat": "B4 payoff",
   "framing": "medium",
   "zoom": 1.45,
   "crop_css": [
    368,
    168,
    1324,
    745
   ],
   "roi_css": [
    450,
    390,
    1180,
    330
   ],
   "roi_center_offset_pct": [
    0.8,
    1.9
   ],
   "roi_in_frame": true,
   "focus": "2D + 3D labels in Japanese",
   "pointer": "idle",
   "text_expected": [
    "浴室",
    "リビング",
    "廊下"
   ],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 2.19,
   "purpose": "Same layout in Japanese (reference author's audience)."
  },
  {
   "id": "S11",
   "t_start": 24.97,
   "t_end": 25.51,
   "t_raw_start": 25.767,
   "beat": "B4 language",
   "framing": "close",
   "zoom": 3.6,
   "crop_css": [
    1290,
    0,
    533,
    300
   ],
   "roi_css": [
    1495,
    19,
    125,
    28
   ],
   "roi_center_offset_pct": [
    0.2,
    -39.0
   ],
   "roi_in_frame": true,
   "focus": "中文 / EN / 日本語",
   "pointer": "click EN, then park",
   "text_expected": [
    "EN"
   ],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 0.54,
   "purpose": "Back to English."
  },
  {
   "id": "S12",
   "t_start": 26.04,
   "t_end": 28.08,
   "t_raw_start": 26.837,
   "beat": "B5 payoff/loop",
   "framing": "full",
   "zoom": 1.0,
   "crop_css": [
    0,
    0,
    1920,
    1080
   ],
   "roi_css": [
    0,
    0,
    1920,
    1080
   ],
   "roi_center_offset_pct": [
    0.0,
    0.0
   ],
   "roi_in_frame": true,
   "focus": "full window",
   "pointer": "idle",
   "text_expected": [
    "Simple",
    "FULL",
    "Tweaks"
   ],
   "legibility": null,
   "legibility_px": null,
   "transition_in": "eased push/pull <=0.6 s",
   "ease": "cosine, log-zoom",
   "hold_s": 2.05,
   "purpose": "Pull back to full window for the loop; ensuite stays visible."
  }
 ],
 "legibility": {
  "verdict": "pass",
  "file": "runs/take1/verify/legibility.json",
  "checks": [
   {
    "id": "control_bathroom",
    "metric": "x_height",
    "measured_px": 13,
    "threshold_px": 9,
    "ocr": true,
    "pass": true
   },
   {
    "id": "hero_toast",
    "metric": "cap_height",
    "measured_px": 17,
    "threshold_px": 16,
    "ocr": true,
    "pass": true
   },
   {
    "id": "control_lang",
    "metric": "glyph_height",
    "measured_px": 17,
    "threshold_px": 9,
    "ocr": true,
    "pass": true
   }
  ],
  "readable_result_s": 2.6,
  "centering_pass": false,
  "story_test": {
   "independent": false,
   "pass": true,
   "answer": "(producer self-read, PROVISIONAL) A floor-plan tool: someone drags the 'Bathroom' block in a 2D plan into the master bedroom; the 3D house model next to it updates live; a toast says 'Bathroom + Bedroom → Ensuite'; then the whole UI and 3D labels switch to Chinese and Japanese and back to English. For people sketching room layouts (e.g., manga backgrounds)."
  }
 },
 "qa": {
  "verdict": "pass-with-notes",
  "hold_s": 2.6,
  "cjk_frames": "~89 GIF frames (17.8–25.2 s) — intentional zh/ja language beat requested by the user; 0 unintended",
  "notes": "Per-frame QA done on take strips + GIF beat frames. Notes: (1) toast result px-legible 2.6 s (<3 s gate; app toast lifetime ~3 s) though the Ensuite result stays visible in 2D+3D to the end; (2) toast and language-switch ROIs sit at viewport edges, crop clamped → centering dy 35–39% on S5/S7/S9/S11; (3) cold-viewer test is producer self-read = provisional, needs fresh-context read; (4) FULL canvas flashes blank 0.4 s after 中文 and 0.23 s after EN in headless swiftshader, visible only in the top sliver of the close lang shot; (5) 3D drag preview uses the app's own lower-detail preview camera while dragging (real behavior)."
 },
 "deviations": [
  "Recorded on the box (headless Chromium/Playwright, swiftshader WebGL, CDP screencast 1920x1080 DPR1) per user instruction, not on Mac mini; no recording lock (box, not ChatCut).",
  "SKILL hard rule 'English UI only / CJK post-check fails take' overridden by the user brief: the film intentionally shows 中文 and 日本語; it starts and ends in EN.",
  "'Automatic de-overlap' on production = overlap auto-resolved into a structure via the semantics table (Bathroom + Bedroom → Ensuite); it does not push rooms apart. Shown as-is.",
  "Headless has no OS cursor: a cosmetic pointer overlay (pointer-events:none, follows real pointer events) was injected; window.__layoutFull.frame() (the app's own render hook) was pumped after language clicks to avoid blank swiftshader frames. No UI or data was altered.",
  "Screencast is variable-rate (frames on change); converted to CFR 30 fps by timestamp (raw/<take>/gt.mp4). Drag runs at real speed (~7 s, swiftshader-bound); no speed-up, no cuts.",
  "Delivered 28.1 s MP4 + full-length 960x540 12 fps GIF (10.9 MB, under X 15 MB GIF limit) instead of the 8 s 520 px GIF default; legibility gate measured at 960 px.",
  "Stock-footage / test-cutout gate not applicable (no stock footage); feature.json clip_test_cutout = n/a.",
  "HITL: story treated as approved by main Grok Bot relay (no SendToAgent, no 55-min timer), per instruction.",
  "No jpn tesseract data on box: Japanese OCR via chi_sim (浴室 found); 中文 chip glyph measured by ink rows manually.",
  "No PR opened (not requested); pushed feature branch only."
 ],
 "artifacts": [
  "layout-tweaks-dual-rec/outputs/demo.mp4",
  "layout-tweaks-dual-rec/outputs/demo.gif",
  "layout-tweaks-dual-rec/outputs/cues.json",
  "layout-tweaks-dual-rec/outputs/poster.jpg",
  "layout-tweaks-dual-rec/runs/take1/handoff.json",
  "layout-tweaks-dual-rec/runs/take1/shotlist.json",
  "layout-tweaks-dual-rec/runs/take1/verify/",
  "layout-tweaks-dual-rec/story/",
  "layout-tweaks-dual-rec/scripts/"
 ],
 "known_weaknesses": [
  "toast result <3 s px-legible",
  "edge-clamped ROIs for toast and language switch",
  "cold-viewer not independent yet",
  "capture DPR1 → 3.4–3.7x close-ups are slightly soft",
  "brief blank 3D flash after 中文/EN in close shot top sliver"
 ],
 "issues_for": {},
 "next": [
  {
   "option": "Parent runs fresh-context cold-viewer read on runs/take1/verify/cold-viewer-contact-sheet.png",
   "effect": "upgrades story_test to independent"
  },
  {
   "option": "Post demo.mp4 to X (needs user approval of post text)",
   "effect": "publish"
  }
 ]
}