Files
ParkingRobot/docs/superpowers/handoffs/em-full-direction-visualization/phase-06.md
T

145 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# EM 完整方向段可视化修复 — Phase 06 交接
## 状态
完成,2026-08-07。
启动分支为 `trajplanner`,启动 HEAD 为 `8b82467618759294c4ccf810bf0699ca804171b8`Phase 05 handoff)。已确认 `d33257c``8b82467` 均为本阶段启动 HEAD 的祖先。
本阶段实现提交:
- `05cfd673f504d5ecee000ab9b85c7346436f2076``fix: repair EM observation web charts`
本交接文件单独提交;其真实提交哈希由提交后的最终答复提供给 Phase 07。
## 目标与非目标
完成主计划 Task 8、阶段执行计划 Task 6:真实 DOM/SVG 测试与 Web 渲染修复。
未进入 Task 9+、Native Painter、跨段规划扩展或实车操作,未实现缩放。MovementTest 保持 `OBSERVE_ONLY`,本阶段未触碰任何底盘、转向、制动、电机或换挡写输出。
## 修改文件
实际修改:
- 创建:`ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom/package.json`
- 创建:`ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom/package-lock.json`
- 创建:`ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom/dashboard.dom.test.mjs`
- 修改:`ClumsyPilot/TrajectoryPlanningVisualization/Web/app.css`
- 修改:`ClumsyPilot/TrajectoryPlanningVisualization/Web/app.js`
- 修改:`ClumsyPilot/tests/TrajectoryPlanningVisualizationVerificationHost/WebAssetChecks.cs`
白名单内 `index.html` 未改动:现有四页结构已满足 Task 8,无需重做布局。
## 新增或改变的接口
- 新增测试专用 Node 包,锁定 `jsdom` 29.1.1`engines.node >= 24`,脚本为 `node --test dashboard.dom.test.mjs`
- `window.__TRAJECTORY_VISUALIZATION_TEST__ === true` 时,`app.js` 暴露冻结的 `window.__trajectoryVisualizationTestHooks`
`setBootstrap``receiveFrame``renderActiveTab``installTabs`;不暴露内部 `state`,不启动 fetch/SSE。生产路径仍调用 `boot()`
- `app.css` 使用 `main > section[hidden] { display: none !important; }` 修复分页隐藏覆盖,并增加 y 轴刻度、语义路径、车辆/边界标记和空状态类。
- `app.js` 新增 `niceDomain``formatTick`,渲染 x/y 双轴刻度及 `.axis-label-x` / `.axis-label-y`;非零常数域围绕实际值生成可读对称范围。
- 世界图层按 coarse、Local G2、方向段、previous、current 的语义顺序绘制,并渲染车辆小轮廓、细朝向线、计划起点、换向点和最终目标标记。
- 路径总览无可绘制路径时显示“未收到 Local G2 路径”,不留下无解释空白画布。
## RED / GREEN / 回归证据
RED
```powershell
npm install --package-lock-only --prefix ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom
npm test --prefix ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom
dotnet run --project ClumsyPilot/tests/TrajectoryPlanningVisualizationVerificationHost/TrajectoryPlanningVisualizationVerificationHost.csproj
```
首个有效 DOM 失败为分页隐藏:点击 `ls-st``getComputedStyle(overview).display` 仍为 `grid`,预期为 `none`;随后依次失败于 y ticks、语义路径/标记、empty-state 和测试钩子。.NET 宿主首个有效失败为 `hidden sections cannot be overridden by grid rules`
为运行 DOM 测试,lockfile 生成后补充执行了 `npm install --prefix ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom` 安装 jsdom;验证完成后删除 `node_modules`,未提交任何依赖目录。
GREEN
```powershell
npm test --prefix ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom
```
退出码 0,6 个 DOM 测试全部通过,0 失败。
```powershell
dotnet run --project ClumsyPilot/tests/TrajectoryPlanningVisualizationVerificationHost/TrajectoryPlanningVisualizationVerificationHost.csproj
```
退出码 0,输出 `PASS trajectory-planning-visualization`
```powershell
git diff --check
```
退出码 0,仅有仓库既有 LF/CRLF 提示,无新空白错误。
## 执行器审计与清理
```powershell
rg -n "SendXYThSpeed|SendMotion|DriveStop|PredefinedDriveStop|AccumulateSpeed|SetGear|SetBrake" ClumsyPilot/ParkrobTrajplanner/tarjplanner_movementtest
```
无匹配(rg 退出码 1,符合“无匹配”预期)。
```powershell
rg -n "TrajectoryPlanningVisualizationWebDom|jsdom" ClumsyPilot/TrajectoryPlanningVisualization -g "*.csproj" -g "*.cs" -g "*.html" -g "*.css" -g "*.js"
```
无匹配(rg 退出码 1),确认 npm 测试包不进入生产 Web/插件输出。
## 工作区保护
保留并未回退用户既有脏工作区与未跟踪内容,包括但不限于 `.gitignore``EmPlannerConfiguration.cs`、PathSmoothing/CoarsePath/Map 相关改动、文档和未跟踪报告。
实现提交只显式暂存本阶段白名单文件;提交后 `git diff --cached --name-only` 为空,未使用 `git reset --hard``git checkout --``git clean``git add .``git add -A`
## 已知警告与偏差
- `npm install` 输出 npm 12 升级提示,不影响依赖锁定。
- `git diff --check` 持续输出仓库既有 LF/CRLF 提示,不影响空白检查结果。
- 仓库 `.gitignore` 未忽略 `node_modules/`;本阶段临时生成的 `node_modules` 已删除,避免污染工作区与提交范围。
- `index.html` 在本次白名单内但未改动,现有四页布局未重做。
## 未运行项
- 未进入 Phase 07 或后续任何阶段。
- 未实现图表框选、滚轮缩放、重置、全屏或任何缩放功能。
- 未执行 Native Painter、跨段规划扩展、实车操作或 `em-core-all`
- 本阶段验证命令按任务要求仅执行 jsdom 测试、.NET 可视化宿主、源审计和 `git diff --check`
## Phase 07 事实
对应主计划 Task 9,阶段执行计划 Task 7:每张图独立视域缩放,不改变规划数据。
Phase 07 允许创建/修改:
- 修改:`ClumsyPilot/TrajectoryPlanningVisualization/Web/index.html`
- 修改:`ClumsyPilot/TrajectoryPlanningVisualization/Web/app.css`
- 修改:`ClumsyPilot/TrajectoryPlanningVisualization/Web/app.js`
- 修改:`ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom/dashboard.dom.test.mjs`
- 交接:`docs/superpowers/handoffs/em-full-direction-visualization/phase-07.md`
接口与验证要求:
- 产生每张图的 `chartViewports[id]`,仅包含可见 x/y 数据域。
- 产生框选放大、滚轮缩放、重置和全屏;缩放前后输入快照数组必须保持字节不变。
- SSE 新周期到达时使用仍有效的本地视域重绘,不改写原始数据,也不向规划器发送参数。
必须执行:
```powershell
npm test --prefix ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom
dotnet run --project ClumsyPilot/tests/TrajectoryPlanningVisualizationVerificationHost/TrajectoryPlanningVisualizationVerificationHost.csproj
git diff --check
```
实现提交信息:`feat: add observation chart viewport zoom`
交接文件单独提交信息:`docs: record EM full-direction phase 07 handoff`
Phase 07 退出门禁:每张图都有独立局部导航且不修改规划数据;不包含 Native Painter 改动。
Phase 07 的 Phase 06 实现提交为 `05cfd673f504d5ecee000ab9b85c7346436f2076`,上一交接文件为本文件;调用方需在最终答复中提供本交接提交的真实哈希并验证可达。