== driver start 2026-09-12 08:05:46 +0800 prompt=/tmp/workorder_L3_kmc_map.md ==
[claude-code:unrecognized_model] {"model":"glm-5.3-flash[1m]","query_source":"sdk"}
工单 L3 执行完毕，交付于 `wt/kmc-map` commit **`b9763dd1`**（基线 `b7f5fe01`），工作树干净。

## 交付物（恰 3 新文件，零越界）

| 文件 | 内容 |
|---|---|
| `scripts/storyboard_to_previs.py` | `map_camera_movement`（exact > synonym > fallback static 三级）+ `storyboard_to_shot_plan`（批量适配，`duration_sec→duration_frames`，fallback 逐 shot 进报告禁静默） |
| `tests/test_storyboard_to_previs.py` | 80 用例，终裁 = `camera_motion._validate_move`，含 12-move 完整性探针（SYNONYM_TABLE 值域 ⊆ CAMERA_MOVES + 12/12 可达） |
| `docs/storyboard-to-previs-DELIVERY.md` | 映射表全文 / 置信度语义 / 已知局限 / 下游契约复述 |

## 验证结果（operator 命令原样复跑）

- `pytest …test_storyboard_to_previs.py -q` → **80 passed**
- smoke → **SMOKE_OK** `{'total': 2, 'mapped_exact': 0, 'mapped_synonym': 1, 'fallback': 1, …}`
- `git diff b7f5fe01..HEAD --stat` → 恰好 3 个新文件，p09/p11a/camera_motion 零改动；pre-commit 钩子全过

## 实施中的两个工单纠偏

1. 工单写的 `p11a_preview.py` 不存在 → 实为 `p11a_preview_clips.py`（`_classify_motion` L204），分级风格已参考。
2. 工单指 `p09_shot_breakdown.py:1638` 是 `_CAMERA_MOVE_VIEW_MAP`；**camera_movement 枚举真源在 L2690**（21 值），映射器按此校准。

## 值得注意的实测结论

P09 21 个枚举值实测 **10 命中 / 11 fallback**（左摇/右摇/上仰/下俯/推移/变焦推/变焦拉/升降上/升降下/甩镜/航拍 落 fallback static 并进报告）。这是工单“最小集 + 已知局限文档化”的设计使然 —— 修复路径是调用方直接 extend `SYNONYM_TABLE`，映射器无需改。已连同锚点纠偏一起写入记忆，供 L1 姊妹批（`previs_timeline`，本批按红线未 import）接线时使用。
DRIVER_EXIT_0
