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

7.1 KiB
Raw Blame History

EM 完整方向段可视化修复 — Phase 06 交接

状态

完成,2026-08-07。

启动分支为 trajplanner,启动 HEAD 为 8b82467618759294c4ccf810bf0699ca804171b8Phase 05 handoff)。已确认 d33257c8b82467 均为本阶段启动 HEAD 的祖先。

本阶段实现提交:

  • 05cfd673f504d5ecee000ab9b85c7346436f2076fix: 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.1engines.node >= 24,脚本为 node --test dashboard.dom.test.mjs
  • window.__TRAJECTORY_VISUALIZATION_TEST__ === true 时,app.js 暴露冻结的 window.__trajectoryVisualizationTestHooks setBootstrapreceiveFramerenderActiveTabinstallTabs;不暴露内部 state,不启动 fetch/SSE。生产路径仍调用 boot()
  • app.css 使用 main > section[hidden] { display: none !important; } 修复分页隐藏覆盖,并增加 y 轴刻度、语义路径、车辆/边界标记和空状态类。
  • app.js 新增 niceDomainformatTick,渲染 x/y 双轴刻度及 .axis-label-x / .axis-label-y;非零常数域围绕实际值生成可读对称范围。
  • 世界图层按 coarse、Local G2、方向段、previous、current 的语义顺序绘制,并渲染车辆小轮廓、细朝向线、计划起点、换向点和最终目标标记。
  • 路径总览无可绘制路径时显示“未收到 Local G2 路径”,不留下无解释空白画布。

RED / GREEN / 回归证据

RED

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-stgetComputedStyle(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

npm test --prefix ClumsyPilot/tests/TrajectoryPlanningVisualizationWebDom

退出码 0,6 个 DOM 测试全部通过,0 失败。

dotnet run --project ClumsyPilot/tests/TrajectoryPlanningVisualizationVerificationHost/TrajectoryPlanningVisualizationVerificationHost.csproj

退出码 0,输出 PASS trajectory-planning-visualization

git diff --check

退出码 0,仅有仓库既有 LF/CRLF 提示,无新空白错误。

执行器审计与清理

rg -n "SendXYThSpeed|SendMotion|DriveStop|PredefinedDriveStop|AccumulateSpeed|SetGear|SetBrake" ClumsyPilot/ParkrobTrajplanner/tarjplanner_movementtest

无匹配(rg 退出码 1,符合“无匹配”预期)。

rg -n "TrajectoryPlanningVisualizationWebDom|jsdom" ClumsyPilot/TrajectoryPlanningVisualization -g "*.csproj" -g "*.cs" -g "*.html" -g "*.css" -g "*.js"

无匹配(rg 退出码 1),确认 npm 测试包不进入生产 Web/插件输出。

工作区保护

保留并未回退用户既有脏工作区与未跟踪内容,包括但不限于 .gitignoreEmPlannerConfiguration.cs、PathSmoothing/CoarsePath/Map 相关改动、文档和未跟踪报告。

实现提交只显式暂存本阶段白名单文件;提交后 git diff --cached --name-only 为空,未使用 git reset --hardgit checkout --git cleangit 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 新周期到达时使用仍有效的本地视域重绘,不改写原始数据,也不向规划器发送参数。

必须执行:

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,上一交接文件为本文件;调用方需在最终答复中提供本交接提交的真实哈希并验证可达。