== driver start 2026-09-12 08:05:41 +0800 prompt=/tmp/workorder_L2_render_qc.md ==
[claude-code:unrecognized_model] {"model":"glm-5.3-flash[1m]","query_source":"sdk"}
工单 L2 完成，已提交 `35bc3cb8` 到 `wt/render-qc`（基线 `b7f5fe01`，单 commit，pre-commit 四道 hook 全过）。

## 交付（恰 3 新文件，501 行）

| 文件 | 内容 |
|---|---|
| `skills/kais-blender/kais-blender-layout/scripts/render_qc.py` | 三检查器 + `qc_clip`/`qc_batch` + CLI |
| `skills/kais-blender/kais-blender-layout/tests/test_render_qc.py` | 7 用例（工单 6 组全盖），ffmpeg 现造 48f 纯黑/testsrc 件 module scope 缓存 |
| `docs/render-qc-DELIVERY.md` | 语义 + 实弹自验 + 6 条已知边界 |

## 验收实况（operator 命令原样复跑全过）

```
pytest test_render_qc.py -q                          → 7 passed
cmv4_dolly_in  --expect-frames 144 --json | tail -3  → "ok": true   (delta=0, motion [17.7, 16.6])
cmv4_static    --skip-motion --json | tail -3        → "ok": true
cmv4_static    --json | tail -3                      → "ok": false  (motion [0.30, 0.25] 判静帧)
git diff b7f5fe01..HEAD --stat                     → 恰 3 新文件，零越界
```

**超出工单的实证**：12 件 `/tmp/cm_v4/` 全量 sweep——11 个运镜件 motion 对差 13–33 全 PASS，唯一 FAIL 恰为 `cmv4_static.mp4`；静帧噪声底 ≈0.3（纯 h264 压缩噪声）vs 最弱运镜 13.5，`min_delta=2.0` 两侧各有 ~6× 判据余量。

**实现要点**：
- 运动关抽帧用 `select=eq(n,idx)` 帧级精确定位，png 落 `TemporaryDirectory` 自动清理；像素差走 PIL ImageChops 直方图法（免 numpy）。
- 容错契约：文件缺失/非媒体 → 返回 `ok:False + error` 而非抛异常，批量哨兵永不崩。
- 已知边界已写进交付文档第 5 节，头两条：**crossfade 叠化段会误报黑帧**（需人工豁免）、**static 镜头必须 skip_motion**（误跳会漏检静持变冻结帧）。

红线全守：禁 bpy ✓、ffmpeg 只读 ✓、`/tmp/cm_v4/` 未写 ✓。未 push，未碰其他 worktree。
DRIVER_EXIT_0
