7.1 KiB
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 包,锁定
jsdom29.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:
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:
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/插件输出。
工作区保护
保留并未回退用户既有脏工作区与未跟踪内容,包括但不限于 .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 新周期到达时使用仍有效的本地视域重绘,不改写原始数据,也不向规划器发送参数。
必须执行:
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,上一交接文件为本文件;调用方需在最终答复中提供本交接提交的真实哈希并验证可达。