# 工单 · Lane B — p06 physics 门补全（报告架 → 行动回路）

## 任务性质
实施批（半门补全）。核心：p06_blackboard L3 physics_precheck_report 落盘后，NG 项零行动（xjh-v2 实证 22 WARNING / 0 NG / 0 消费）。补「NG → fix-required 回写 → p09 消费注入」回路。

## 背景事实（实测锚点，直接采用勿重新推导）
- 仓：/data/workspace/kais-hermes-skills，worktree 已由 operator 预建（wt/reviewkit-b），基线=5c9bde93，直接 cd
- p06 L3 writer：pipeline/phases/p06_blackboard.py L3_WRITER=("physics_precheck", ...)，~L400-493 产出 physics-precheck-report 并 asset_bus_write
- QualityGateRejection：pipeline/phases/quality_gate_error.py:20 class 定义
- fix-required 写入先例：p03_script_audit.py L581/L809-840（写 fix-required → p03 消费后清槽的完整回路范本——照抄结构，勿重新设计）
- p03 消费先例：p03_script_audit.py L818 asset_bus_read("fix-required") → 注入 goal context → 消费后清槽
- p09_shot_breakdown.py 是 fix-required 的目标消费者（p09 在 p06 之后跑；若 p09 已有 fix-required 消费逻辑则只接线不新建；实读确认）
- 真实 report 形态：{value: {shot_reports: [{shot_id, feasibility: OK|WARNING|NG, checks: [{check_id, status, rule, observed, expected, fix_suggestion}]}], aggregate: {ng_count, ...}}}
- 基线 pytest 已实测绿：cd skills/kais-movie-pipeline && python3 -m pytest tests/test_p06_unit.py tests/test_p06_blackboard.py tests/test_p06_blackboard_integration.py -q 全过

## 任务
- C1 p06_blackboard.py 在 L3 report 落盘后追加 gates 段：解析 shot_reports，aggregate.ng_count>0 时组装 fix_required 条目（形态对照 p03 先例：phase_id="p06_blackboard"、rollback_to、findings=[{shot_id, check_id, rule, fix_suggestion}]，只收 feasibility=NG 且 checks 带 fix_suggestion 的项）→ asset_bus_write("fix-required", ...)；WARNING 只进 report 不拦（保持现状零行为变化）
- C2 p09_shot_breakdown.py：实读后仿 p03 L818 范本消费 fix-required——有 NG findings 时注入 delegate context（「上游 physics 门 NG，逐条按 fix_suggestion 修正」）；无 findings 时零变化。消费后清槽（照抄 p03 L837 清槽+容错形态）
- C3 mock 单测 tests/test_p06_physics_gate.py：合成 report 三态（0 NG=零写入零变化 / 2 NG=fix-required 结构断言 / NG 无 fix_suggestion=跳过该条并 WARN）；p09 消费注入断言（monkeypatch delegate 捕获 context 含 findings / 清槽后二次读为空）
- C4 交付文档 docs/physics-gate-loop.md：回路图（p06 NG → fix-required → p09 注入 → 清槽）、WARNING 语义不变声明、回滚说明（删 gates 段即回报告架）

## 红线（逐文件正面白名单）
只可修改：pipeline/phases/p06_blackboard.py（gates 段）、pipeline/phases/p09_shot_breakdown.py（消费注入段）、tests/test_p06_physics_gate.py（新增）、docs/physics-gate-loop.md（新增）。⚠ p09_shot_breakdown.py 是 2800 行大文件，改动收敛在「读 fix-required + 注入 context」最小面，禁顺手重构；非 NG 路径（含 WARNING 路径）行为逐字节不变。其余文件一律只读。禁 GPU/引擎调用。commit 只进你的分支。

## 验证命令（operator 独立复跑）
cd skills/kais-movie-pipeline && python3 -m pytest tests/test_p06_physics_gate.py tests/test_p06_unit.py tests/test_p06_blackboard.py tests/test_p06_blackboard_integration.py tests/test_p09_shot_breakdown.py -q（若 tests/ 无 test_p09_shot_breakdown.py 则 ls tests/ | grep p09 实认正确文件名后跑邻域族）；py_compile 两改动文件；零 WARNING 路径行为不变由 C3 断言锁定
