# EM 完整方向段可视化修复 - Phase 09 交接

## 状态

自动验收完成但实车待验（2026-08-07）。本窗口完成了主计划 Task 11 和分阶段执行计划 Task 9 的文档、全量自动化与本地确定性 smoke；受监督实车清单未执行，`phase-09-vehicle.md` 未创建，整体验收不能视为完成。

## 目标与非目标

- 更新 MovementTest、EMPlanner、Web 三份 README，记录 full/rolling 开关、`s_end/T_end` 来源、速度与终端容差、图表语义、缩放、停止清理和 `OBSERVE_ONLY` 边界。
- 提交三份 README 后运行 Node DOM、可视化宿主、`trajectory-observation`、`em-all`、完整 build、执行器审计、`git diff --check` 和 60 秒本地 smoke。
- 未修改 Web/Painter 实现，未扩展规划功能，未进入 Phase 08 之前实现，未派生子智能体，未重新 brainstorming。
- 未执行实车观察；未把自动化或合成 smoke 证据写成实车验收。

## 入口事实

- 分支：`trajplanner`
- 入口 HEAD：`26b6246360dd2ac7e3d54ba57207a753b9bc70a7`
- 上一阶段实现提交：`37c27bdb1b41502ad23783a041a42512b3a49648`
- 上一阶段交接提交：`26b6246360dd2ac7e3d54ba57207a753b9bc70a7`
- 祖先检查：`37c27bd` 与 `26b6246` 均为入口 HEAD 的可追溯祖先
- 本阶段文档实现提交：`88a66b8b2a1a4b548d5733d21e94f2fad73df1fe`（`docs: explain full-direction EM observation`）

## 修改文件

- `ClumsyPilot/ParkrobTrajplanner/tarjplanner_movementtest/README.md`
- `ClumsyPilot/ParkrobTrajplanner/EMPlanner/README.md`
- `ClumsyPilot/TrajectoryPlanningVisualization/README.md`

## 文档事实

- `UseFullDirectionSegmentPlanning=true` 是 MovementTest 默认值，映射到 `EmPlanningScope.FullDirectionSegment`；每个活动方向段只发起一次冻结优化，随后重复发布同一轨迹与新鲜观察状态。
- `DistanceHorizonMeters` 与 `TimeHorizonSeconds` 只用于 `RollingHorizon` 截断；full 模式保留兼容字段但不使用它们截断。
- `s_end` 来自实际 Local G2 `PathS`；`T_end` 由可行加速度、巡航、jerk 限速停止和零速 hold 推导。
- 前进期望/硬上限为 `1.0 m/s`，倒车期望/硬上限为 `0.5 m/s`。
- 真实边界成功需要终端停止、世界位置误差不超过 `0.03 m`、归一化 yaw 误差不超过 `5 deg`（`5 * PI / 180 rad`）。
- Web 是主观察界面；Native Painter 仅作为可选正确性/审计输出。
- README 记录了各图轴/单位、jerk `N-1` 规则、语义图层、边界标记和视口缩放；缩放只改变浏览器本地视口，不修改快照或向规划器发送参数。
- 关闭或断开浏览器不会停止观察；MovementTest 停止会回收 HTTP/SSE、端口和可选 Painter。
- MovementTest 不写底盘、转向、制动、电机或挡位命令，全程保持 `OBSERVE_ONLY`。

## 自动化证据

| 命令 | 结果 |
| --- | --- |
| `npm test --prefix ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom` | 11/11 通过 |
| `dotnet run --project ClumsyPilot/tests/TrajectoryPlanningVisualizationVerificationHost/...` | `PASS trajectory-planning-visualization` |
| `dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/... -- trajectory-observation` | `PASS trajectory-observation`，仅两个既有 obsolete 警告 |
| `dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/... -- em-all` | 20 个组件全部 `PASS` |
| `dotnet build ClumsyPilot/ClumsyPilot.csproj -p:ExcludeLegacyAutoAvoidance=true` | 0 警告、0 错误 |
| `rg -n "SendXYThSpeed\|SendMotion\|DriveStop\|PredefinedDriveStop\|AccumulateSpeed\|SetGear\|SetBrake" ClumsyPilot/ParkrobTrajplanner/tarjplanner_movementtest` | 无匹配，退出码 1 |
| `git diff --check` | 退出码 0，无新空白错误；仅仓库既有 LF/CRLF 提示 |
| 本地 smoke `--smoke-seconds 60` | 退出码 0，输出带 token 的 `http://127.0.0.1:1403/...`；结束后 `1403` 无监听 |

测试依赖 `jsdom` 使用 `npm ci` 按锁文件安装，运行后已删除生成的 `node_modules`；`package.json` 与 `package-lock.json` 未改动。

## 警告与已知偏差

- MovementTest UI 字段 `EnableNativePainterVisualization` 当前默认值为 `true`，而 `TrajectoryObservationSettings` 契约默认值为 `false`。文档已如实记录，并要求受监督车辆清单在实车会话前显式设为 `false`，除非另行审查。
- MovementTest UI 字段 `TimeHorizonSeconds` 当前默认值为 `20.0`，而设置契约默认值为 `2.0`；full 模式推导 `T_end`，该值仅保留为滚动兼容输入。
- 未进行人工浏览器截图或真实 Painter 窗口检查；自动化证据来自 DOM 测试、C# 契约宿主和确定性 smoke 宿主。
- `trajectory-observation` 保留两个既有 obsolete 警告（`Lidar2dDetect2LegTray.LegWidth`、`MultiWheelChassis.GetSteerWheels()`），非本阶段引入。

## 保留的脏工作区与暂存内容

入口时已有的 `.gitignore`、`ClumsyPilot.csproj`、`EmPlannerConfiguration.cs`、PathSmoothing/CoarsePath 相关修改或删除、未跟踪目录及报告等全部保留，未回退或覆盖。本阶段未修改这些内容；提交 README 后暂存区为空。除本次 `phase-09.md` 外没有新增应跟踪文件。

## 未运行项与原因

- 受监督实车清单未运行：当前无可确认的受监督安全车辆环境。
- `phase-09-vehicle.md` 未创建：设计明确禁止用自动化或合成证据替代实车验收。
- 未进行人工浏览器/截图检查：smoke 仅作为确定性本机宿主证据。

## Phase 09 实车续验事实

下一窗口是 Phase 09 的实车续验窗口，不是新阶段：

- 仓库根目录：`D:\Users\Desktop\项目\prakrobot\ParkingRobot`
- 期望分支：`trajplanner`
- 启动时核对 `88a66b8b2a1a4b548d5733d21e94f2fad73df1fe` 与 Phase 09 handoff 提交均为祖先。
- 必读：本 handoff、主计划 Task 11 Step 4-6、分阶段执行计划 Task 9 Step 5-6；如相关代码在 handoff 后变化，先重跑受影响的自动化。
- 只允许创建 `docs/superpowers/handoffs/em-full-direction-visualization/phase-09-vehicle.md`，不得修改规划、Web、Painter、MovementTest 或 README。
- 按主计划八项清单执行；MovementTest 必须保持 `OBSERVE_ONLY`，不得通过操作真实底盘促成观察条件。
- 全部通过时状态写“完成”，提交消息 `docs: record EM visualization vehicle acceptance`；出现真实回归时状态写“阻塞”，提交消息 `docs: record blocked EM visualization vehicle acceptance`，并只输出同阶段恢复提示词。
