# verify.md — 自验记录（不入 commit）

> 执行者自验留痕，operator 以 DELIVERY.md 为准独立复跑。
> 本文件按工单交付要求不提交（`git status` 中保持 untracked 即为预期）。

日期：2026-09-11 · 分支 `wt/blender-camera-motion` · 基线 `41912ed3` · Blender 4.5.0 @ /usr/local/bin/blender

## 执行轨迹（按工单任务序）

| # | 任务 | 自验动作 | 结果 |
|---|------|---------|------|
| 0 | 基线捕获 | 改动前 legacy 蓝图调 `generate_blender_script`（绕过炸掉的 CLI）存 `/tmp/kbl_baseline/legacy_baseline.py`；复现存量 bug：`generate` → `NameError: name 'os' is not defined` L249, exit 1 | ✓ bug 与工单描述一致 |
| C4a | import os | 顶层补 `import os`；CLI generate 复跑 exit 0；产物与基线 diff 零差异；全文件审计无同类缺失 | ✓ |
| C1 | camera_motion.py | 12-move × 18 变体生成块逐个 `compile()`（语法级）；时长换算断言（slow@24=144 / @30=180 / snap=12 / 显式 7 / static=0）；4 类非法输入 ValueError 拦截 | ✓ 全过 |
| C2+C3 | layout_engine | legacy 蓝图 diff：仅灯光段升级 + AgX 尾部，相机/角色/道具/时间轴逐字节不变；verify 场景含 COL_Cameras/CAM_hero_push_front/TRACK_TO/dolly_in 行；全特性场景（crane/orbit360+fstop2.8/zoom+night+雾）compile 通过；焦段建议 全24/中50/近85/俯仰35/缺省50；旧嵌套蓝图走 MainCamera 原样 | ✓ |
| — | 层级错位 | 发现引擎只读 scene.camera/scene.lighting 而文档 schema 在顶层 → 双层级兼容（嵌套优先），verify 场景相机自此生效 | ✓（记入 DELIVERY 兼容性第 5 条） |
| C4b | verify+驱动 | `verify --output` exit 0 + 打印冒烟命令；驱动 py_compile 过 | ✓ |
| C6 | 端到端 | 见 DELIVERY.md「C6 端到端证据」；另跑 12-move 方向性回归 → **抓出 dolly_out 方向反转**，修后精确命中解析解（commit 3aed36b8） | ✓ |
| C5 | SKILL.md | 三节增补 + v0.4.0；色温表 RGB 值由 `kelvin_to_rgb` 实算（1800→(1,0.496,0) 等）非手抄 | ✓ |

## 抓出并修复的问题

1. **dolly_out 方向反转**（camera_motion.py 初版）：`cam + dir*(ratio-1)*d` 推向目标；改 `tgt - dir*ratio*d`。
   方向性回归（末帧视距 2.285/6.856 = 50%/150% 解析解）确证修复。
2. **static move 时长违约**：`max(1, round(...))` 把 static 钳到 1 帧，与文档"恒 0"矛盾 → type=static 早退 return 0。
3. **SyntaxWarning**：`_safe_name` docstring `\w` 转义警告 → raw string。
4. **自测脚本自身**：首版运行时回归只查"是否动"不查方向（dolly_out 因此漏网），第二版加方向断言后抓出问题 1。

## 视觉复核记录

- f1 PNG 经 analyze_image：箱体立于地面、受光、无aliasing/z-fighting、全景构图（主体 15–20% 画面宽）✓
- f48 PNG 的 CDN URL 签名含 `/` 致 analyze_image 解析 400 → 改用像素级对比（差异 20.3%、中心主体占比 64.9%→76.2%）作为推近证据 ✓

## 红线自查

1. 提交全部在 `wt/blender-camera-motion`（6 commits），未 push，未碰 master/其他 worktree ✓
2. 改动 = kais-blender-layout 目录 + DELIVERY.md（+ 本文件不入库）✓
3. 渲染仅 WORKBENCH CPU（smoke_camera_motion.py 硬编码 engine；无 Cycles/GPU 任务）✓
4. 12-move 枚举零改动；orbit → tracking+orbit_angle ✓
5. 旧蓝图相机段逐字节兼容（基线 diff 证实）✓
6. MIT 归属：camera_motion.py 头注释 + SKILL.md「上游归属」节 + 生成代码注释 ✓

## 残留（operator 可复跑性）

- 证据 PNG 在 /tmp（跨会话不保）；复跑 DELIVERY.md 命令链即再生成
- `/tmp/kbl_moves_runtime.py`（12-move 方向性回归驱动）在 /tmp，如需入库可后续批次收编为正式测试
