# EM 完整方向段规划与可视化修复:阶段 01 交接 ## 状态 完成(此前阻塞的构造调用传播已获用户明确授权扩展范围)。 ## 环境、入口与前置核验 - 执行时间:2026-08-06T20:56:08.7268822+08:00;Windows / PowerShell / .NET SDK 10.0.302。 - 入口分支与 HEAD:`trajplanner` / `57ea36b8595c621783aba844e18d9969bccea378`。 - 恢复交接祖先:`fcf7df17d54d84904278e993104e131afe8e405d`。 - 以下提交均以 `git merge-base --is-ancestor` 返回 0:`c354f113060a5f95aa3b06c6f2b0be2d0c7d5da1`、`dff223c33a439d545537c803cb3531a673c7f2a3`、`46d5f9762d3d9972daea918c9fb43562ce25ce3b`、`57ea36b8595c621783aba844e18d9969bccea378`、`fcf7df17d54d84904278e993104e131afe8e405d`。 ## 实现提交 - Task 1:`f4e89b4b4fe67f4924420ba8b3e06dea1d4ccc8b` — `feat: define full-direction EM planning scope` - Task 2:`048b4f618e2237cd0cb3d257bf6ee04a1d13670b` — `feat: select complete EM direction segments` ## 接口与实际修改 - 新增 `EmPlanningScope.RollingHorizon`、`FullDirectionSegment`;request 与 metadata 均保存不可变 scope。 - 新增 desired speed、优化结点/发布上限、终端位置/yaw 容差、复制和交叉校验;默认值为 1.0/0.5 m/s、0.20 s、0.10 m、401、5001、0.03 m、5°。 - 新增 `NoProgress`、`TerminalPoseMismatch`、`FullSegmentResourceLimitExceeded` 状态。 - `PlanningHorizonSelector.Select` 显式接收 scope;full 模式仅接受 Goal/GearSwitch,选择真实方向段末端并使用 `ExactStopAtBoundary`;rolling 分支保持原有窗口/approach/exact 行为。 - `EmPlanningService` 传递 scope,metadata 与 diagnostics 均携带 scope。 - 用户随后授权的必需构造调用传播:`TrajectoryObservationPipeline.cs` 及 EM 验证宿主中的 coordinator/executor/trajectory/observation 构造夹具;所有旧调用显式使用 `RollingHorizon`,没有改变 MovementTest 的规划行为。 实际修改文件为两个实现提交的 `git show --stat` 所列 21 个文件;Task 2 没有修改 `EmTrajectoryAssembler.cs`,因为现有 assembler 已基于 metadata 保留终端边界,完整段选择无需额外 assembly 行为。 ## 新鲜 TDD 与回归证据 ### Task 1 RED: ```powershell dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- foundation dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- em-planning-service ``` 首次失败为缺少 `EmPlanningScope`(CS0246/CS0103)。同次曾出现 `TrajectoryPlanningVisualization.dll` 瞬时写锁;单独复现后锁未持续,已按 systematic-debugging 认定为外部构建竞争,未作为功能 RED。之后完整构造调用传播获授权。 GREEN:相同两个命令均退出 0,输出:`PASS foundation`、`PASS em-planning-service`。 ### Task 2 RED: ```powershell dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-model ``` 失败为 `PlanningHorizonSelector.Select` 没有接收新增 scope 参数(CS1501),符合预期。 GREEN: ```powershell dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-model dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- em-planning-service ``` 均退出 0,输出:`PASS longitudinal-model`、`PASS em-planning-service`。测试覆盖 10 m/投影 3 m/legacy 1 m 的 full 真实末端、rolling 4 m 截断及 GearSwitch 边界;服务测试覆盖 scope metadata 和发布起止边界。 阶段回归: ```powershell dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- em-core-all ``` 退出 0,完整摘要:`PASS longitudinal-model`、`PASS longitudinal-integration`、`PASS trajectory`、`PASS em-planning-service`。首次回归时 `TrajectoryChecks` 的速度夹具受批准的硬上限变更影响,先触发加速度而非速度;夹具改为 1.10 m/s 以继续隔离速度上限,之后回归通过。 ## 脏工作区与范围保护 - `EmPlannerConfiguration.cs` 的用户 `DistanceHorizonMeters = 500d` 和两条中文注释先保存 diff、始终未暂存;提交前以 index-only staging 核验其不在两个实现提交中。 - `MovementTest.TrajectoryObservationTest.cs` 未编辑、未暂存、未提交。 - 既有大量脏修改/未跟踪项均未清理;暂存区在本交接创建前为空。 - 未使用 `git stash`、`git reset --hard`、`git checkout --`、`git add .` 或 `git add -A`。 - `git diff --check 57ea36b8595c621783aba844e18d9969bccea378..048b4f618e2237cd0cb3d257bf6ee04a1d13670b` 通过。 ## 未执行内容与阶段 02 输入 阶段 02–09 均未实现。尤其没有实现自适应 knot/T_end、静止起步、NoProgress 发布门禁、终端世界位姿门禁、MovementTest one-shot、Web 或 Painter。 阶段 02 从 `048b4f618e2237cd0cb3d257bf6ee04a1d13670b` 开始,消费本阶段的 scope/configuration。只允许总计划 Task 3 列出的 Longitudinal 文件、`EmPlanningService.cs`、`LongitudinalModelChecks.cs`、`LongitudinalIntegrationChecks.cs` 和 `phase-02.md`;不得触及静止起步、终端位姿或任何 MovementTest/UI。先运行 Task 3 RED `longitudinal-model`,再运行 `longitudinal-model` 与 `longitudinal-integration` GREEN,提交 `feat: derive adaptive full-segment ST schedule`,运行 `em-core-all`,最后单独提交 `phase-02.md`。