diff --git a/docs/superpowers/plans/2026-08-05-em-longitudinal-rolling-four-phase-roadmap.md b/docs/superpowers/plans/2026-08-05-em-longitudinal-rolling-four-phase-roadmap.md new file mode 100644 index 0000000..0f044ed --- /dev/null +++ b/docs/superpowers/plans/2026-08-05-em-longitudinal-rolling-four-phase-roadmap.md @@ -0,0 +1,213 @@ +# EM 纵向滚动规划四阶段执行路线图 + +日期:2026-08-05 + +## 目标 + +把原有的 10 个实现任务拆成 4 个可以在不同 Codex 窗口中依次完成的阶段。每个阶段必须独立验证、记录实际结果,并根据真实代码状态生成下一阶段的精细提示词。 + +本路线图只负责阶段划分和跨窗口交接。技术设计与逐步实现细节仍以下列文件为准: + +- 设计规格:`docs/superpowers/specs/2026-08-05-em-longitudinal-rolling-planning-design.md` +- 十任务实施计划:`docs/superpowers/plans/2026-08-05-em-longitudinal-rolling-planning.md` + +如三份文档发生冲突,设计规格决定行为语义,十任务实施计划决定具体实现步骤,本路线图决定阶段边界和停止位置。 + +## 不可破坏的全局约束 + +- `DistanceHorizonMeters` 是 LS 空间前视范围,不是车辆在一个 ST 周期内必须走完的距离。 +- `TimeHorizonSeconds` 是单次 ST 优化覆盖的未来时间,不是观察循环周期。 +- 只有真实 `Goal` 或 `GearSwitchApproach` 边界允许触发精确停车。 +- `RollingContinuation` 和 `ApproachStopBoundary` 不得被强制设置末速度为零。 +- `ExactStopAtBoundary` 必须在 QP 时间范围结束前达到 `S=S_end、U=0、A=0`,并在 QP 内至少保留一个完整 `OutputTimeStepSeconds` 的静止稳定区间。 +- 不通过放宽速度、加速度、jerk、QP 残差或轨迹发布验证阈值掩盖逻辑错误。 +- `OBSERVE_ONLY` 必须保持不变。本路线图不授权增加底盘命令、轨迹跟踪器或超时看门狗。 +- 工作树内已有且与本任务无关的修改全部视为用户资产。禁止清理、回退或提交这些修改。 +- 每次只实施当前阶段;完成交接文件后立即停止,不得提前执行下一阶段。 + +## 阶段总览 + +| 阶段 | 原计划任务 | 核心结果 | 阶段验收 | +|---|---:|---|---| +| 1. 纵向基础与窗口语义 | 1–2 | jerk 受限停车数学、三种纵向模式、空间窗口与真实停车边界分离、输入与配置验证 | `foundation`、`longitudinal-model` | +| 2. ST 优化核心 | 3–5 | 模式化速度包络、条件化 QP 终端约束、独立解验证、按模式生成初始解 | `longitudinal-model`、`longitudinal-integration` | +| 3. 发布与跨周期连续性 | 6–7 | 条件化轨迹采样、停车锚点和稳定尾段、发布验证、上一周期轨迹软参考 | `trajectory`、`em-planning-service`、`coordinator`、`executor` | +| 4. 端到端集成与诊断 | 8–10 | 模式流转、多周期 Goal/GearSwitch 回归、MovementTest 诊断、全量回归和目标机 OSQP 验证 | `em-core-all`、观察测试、构建、目标机探针 | + +## 阶段一:纵向基础与窗口语义 + +对应十任务计划中的 Task 1 和 Task 2。 + +### 实施范围 + +- 新建完整 jerk 受限停车数学,统一停车距离、停车时间、末速度和末加速度语义。 +- 新建 `EmLongitudinalMode`: + - `RollingContinuation` + - `ApproachStopBoundary` + - `ExactStopAtBoundary` +- 新建 `LongitudinalTerminalSchedule`,计算精确停车稳定尾段的起始 knot。 +- 让 `PlanningHorizonSelector` 分离: + - LS 空间窗口末端; + - 真实 Goal/GearSwitch 停车边界; + - 当前纵向模式。 +- 扩展 `LongitudinalPlanningInput` 和请求验证,拒绝不一致的模式、边界和稳定时间配置。 + +### 允许修改的主要文件 + +- `ClumsyPilot/ParkrobTrajplanner/EMPlanner/Contracts/EmLongitudinalMode.cs` +- `ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/JerkLimitedStoppingMath.cs` +- `ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/LongitudinalTerminalSchedule.cs` +- `ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/PathSpeedLimitBuilder.cs` +- `ClumsyPilot/ParkrobTrajplanner/EMPlanner/Segmentation/PlanningHorizonSelector.cs` +- `ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/LongitudinalPlanningInput.cs` +- `ClumsyPilot/ParkrobTrajplanner/EMPlanner/Validation/EmPlanningRequestValidator.cs` +- `ClumsyPilot/ParkrobTrajplanner/EMPlanner/Facade/EmPlanningService.cs` +- `ClumsyPilot/tests/EMPlannerVerificationHost/LongitudinalModelChecks.cs` +- `ClumsyPilot/tests/EMPlannerVerificationHost/FoundationChecks.cs` + +若编译修复必须触及直接调用者,可以进行最小兼容修改,但必须在阶段交接中逐项解释。 + +### 完成条件 + +```powershell +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- foundation +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-model +``` + +两项均须输出 `PASS`。阶段内按原十任务计划保留 Task 1、Task 2 两个独立提交。 + +## 阶段二:ST 优化核心 + +对应十任务计划中的 Task 3、Task 4 和 Task 5。 + +### 实施范围 + +- 按纵向模式构造 PathS 速度包络。 +- Rolling 模式的局部路径末端不再出现人为零速边界。 +- 仅为 `ExactStopAtBoundary` 添加停车位置、速度、加速度以及稳定尾段硬约束。 +- 让 QP 行数、上下界和验证器随模式与稳定尾段 knot 数量变化。 +- 使用与 QP 相同的恒 jerk 离散动力学做精确停车可达性验证。 +- 为 Rolling、ApproachStop 和 ExactStop 构造各自合理的初始解和外层迭代行为。 + +### 阶段输入 + +- 阶段一完成后的提交。 +- `docs/superpowers/handoffs/2026-08-05-em-longitudinal-rolling-phase-1.md`。 +- 阶段一生成的阶段二精细提示词。 + +### 完成条件 + +```powershell +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-model +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-integration +``` + +两项均须输出 `PASS`,并保留 Task 3、Task 4、Task 5 的独立提交边界。 + +## 阶段三:轨迹发布与跨周期连续性 + +对应十任务计划中的 Task 6 和 Task 7。 + +### 实施范围 + +- 在轨迹元数据中保存纵向模式和真实停车边界身份。 +- Rolling 和 ApproachStop 只发布时间范围内的运动轨迹,不追加虚假零速保持点。 +- ExactStop 发布 QP 内部静止稳定段,并按配置追加外部零速保持点。 +- 轨迹验证器按模式检查终端状态,同时保持普通运动学、碰撞和边界验证。 +- 将上一条已发布轨迹按绝对时间重采样,并映射到新路径的 PathS,作为软参考而不是硬约束。 + +### 阶段输入 + +- 阶段二完成后的提交和交接文档。 +- 阶段二根据实际结果生成的阶段三精细提示词。 + +### 完成条件 + +至少运行并通过: + +```powershell +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- trajectory +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- em-planning-service +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- coordinator +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- executor +``` + +保留 Task 6 和 Task 7 的独立提交边界。 + +## 阶段四:端到端集成与实测诊断 + +对应十任务计划中的 Task 8、Task 9 和 Task 10。 + +### 实施范围 + +- 完成 `RollingContinuation → ApproachStopBoundary → ExactStopAtBoundary` 的服务流转。 +- 覆盖真实 Goal、GearSwitchApproach、多周期滚动和停车稳定尾段。 +- 完善 MovementTest 终端/UI 诊断,但继续保持 `OBSERVE_ONLY`。 +- 更新 EMPlanner 文档。 +- 完成全量回归、构建和目标运行环境中的 OSQP 探针。 + +### 阶段输入 + +- 阶段三完成后的提交和交接文档。 +- 阶段三根据实际结果生成的阶段四精细提示词。 + +### 完成条件 + +严格执行十任务计划 Task 10 中列出的全部验证命令。至少包含: + +```powershell +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- em-core-all +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- coordinator +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- executor +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- trajectory-observation +dotnet build ClumsyPilot/ClumsyPilot.csproj +``` + +目标机 OSQP 验证必须在实际部署/测试机器上运行;若当前窗口不在目标机,只能明确记录为“待目标机验证”,不得声称已通过。 + +## 跨窗口交接协议 + +### 每个阶段开始时 + +1. 阅读设计规格、十任务计划、本路线图、上一阶段交接文件和当前阶段提示词。 +2. 运行 `git status --short` 和 `git log -8 --oneline`,记录阶段开始基线。 +3. 确认上一阶段要求的提交存在;若不存在或测试不通过,先停止并报告,不得假设已完成。 +4. 只执行当前阶段对应的原计划任务。 + +### 每个阶段结束时 + +1. 重新运行本阶段全部验收命令,不能只引用较早的结果。 +2. 检查每个提交只包含当前任务文件,不得使用 `git add .` 或 `git add -A`。 +3. 创建交接文件: + + `docs/superpowers/handoffs/2026-08-05-em-longitudinal-rolling-phase-N.md` + +4. 交接文件必须记录: + + - 阶段开始和结束提交; + - 每个任务的提交号; + - 实际修改和新增的文件; + - 新增或改变的公开/内部接口; + - 每条验证命令、退出码和关键输出; + - 未解决问题、目标机限制和与计划的偏差; + - 下一阶段必须继承的具体事实。 + +5. 根据交接文件和当前仓库状态创建下一阶段提示词: + + `docs/superpowers/prompts/2026-08-05-em-longitudinal-rolling-phase-(N+1).md` + +6. 下一阶段提示词不得只写“继续原计划”,必须包含实际提交号、实际接口、准确任务边界、允许修改文件、测试命令、提交边界和完成后的交接要求。 +7. 提交交接文件与下一阶段提示词,然后停止,不执行下一阶段代码。 + +阶段四没有下一阶段提示词,改为生成最终验收报告: + +`docs/superpowers/handoffs/2026-08-05-em-longitudinal-rolling-final.md` + +## 阶段状态 + +- [ ] 阶段一:纵向基础与窗口语义 +- [ ] 阶段二:ST 优化核心 +- [ ] 阶段三:轨迹发布与跨周期连续性 +- [ ] 阶段四:端到端集成与实测诊断 + +当前入口提示词:`docs/superpowers/prompts/2026-08-05-em-longitudinal-rolling-phase-1.md` diff --git a/docs/superpowers/prompts/2026-08-05-em-longitudinal-rolling-phase-1.md b/docs/superpowers/prompts/2026-08-05-em-longitudinal-rolling-phase-1.md new file mode 100644 index 0000000..3e6d9ce --- /dev/null +++ b/docs/superpowers/prompts/2026-08-05-em-longitudinal-rolling-phase-1.md @@ -0,0 +1,235 @@ +# 新窗口执行提示词:EM 纵向滚动规划阶段一 + +请在一个新的 Codex 窗口中完整粘贴本文件内容,或明确要求 Codex 读取并执行本文件。 + +--- + +你现在要在仓库 `D:\Users\Desktop\项目\prakrobot\ParkingRobot` 中执行 EM 纵向滚动轨迹规划修复的**阶段一:纵向基础与窗口语义**。 + +这是一项代码实施任务,不是重新讨论方案。设计已经确认。本窗口只能完成阶段一,对应原十任务计划中的 Task 1 和 Task 2;完成阶段验收、交接文件和阶段二提示词后必须停止,不得继续实现 Task 3。 + +## 必须使用的工作方法 + +1. 首先使用 `executing-plans` skill 执行现有计划。 +2. 实现每个 bugfix/feature 时使用 `test-driven-development`:先写失败测试、运行确认失败原因正确,再做最小实现、重新运行确认通过。 +3. 遇到非预期编译错误、测试失败或行为不一致时,先使用 `systematic-debugging` 查明根因,不得盲目放宽阈值。 +4. 声称阶段完成前必须使用 `verification-before-completion`,重新运行全部阶段验收命令。 +5. 不需要重新 brainstorming;已经批准的设计规格是行为依据。 + +## 必读文件 + +开始实施前完整阅读: + +- `docs/superpowers/specs/2026-08-05-em-longitudinal-rolling-planning-design.md` +- `docs/superpowers/plans/2026-08-05-em-longitudinal-rolling-planning.md` +- `docs/superpowers/plans/2026-08-05-em-longitudinal-rolling-four-phase-roadmap.md` + +在十任务计划中,本窗口只能执行: + +- Task 1:完整 jerk 受限停车数学 +- Task 2:纵向模式、空间窗口和输入契约 + +计划中的代码片段是实施基线,但在应用前必须与当前仓库接口核对;若代码已发生变化,应做保持设计语义的最小适配,并在交接文件中记录差异。 + +## 开始前基线检查 + +依次执行并记录结果: + +```powershell +git branch --show-current +git status --short +git log -8 --oneline +git show --stat --oneline e0ccc0c +git show --stat --oneline e608299 +``` + +预期当前分支为 `trajplanner`,并且至少能找到: + +- `e0ccc0c docs: plan EM longitudinal rolling implementation` +- `e608299 docs: require stabilized EM stop terminals` + +仓库当前存在大量与本任务无关的用户修改。必须遵守: + +- 不运行 `git reset --hard`、`git checkout -- .`、`git clean` 或任何等价清理命令。 +- 不回退、不格式化、不移动与阶段一无关的文件。 +- 不使用 `git add .` 或 `git add -A`。 +- 提交前使用 `git diff --cached --name-only` 核对暂存区。 +- 如果阶段一目标文件本身已有未提交修改,先检查并保留用户内容,在其基础上最小集成;不能直接覆盖。 + +## 不可改变的行为语义 + +- `DistanceHorizonMeters` 只决定 LS 可以查看的空间长度。 +- `TimeHorizonSeconds` 只决定一次 ST 优化的未来时间范围。 +- 局部空间窗口末端不是停车点。 +- 只有真实 `Goal` 或 `GearSwitchApproach` 才是停车边界。 +- 纵向模式必须显式区分: + - `RollingContinuation` + - `ApproachStopBoundary` + - `ExactStopAtBoundary` +- 精确停车最终要支持在 QP 内达到 `S=S_end、U=0、A=0`,并至少保留一个完整 `OutputTimeStepSeconds` 的静止稳定区间。 +- `ZeroSpeedHoldSeconds` 是 QP 时间范围之后的发布保持段,不能从 `TimeHorizonSeconds` 中扣除。 +- 不得通过放宽 jerk、加速度、求解残差或轨迹验证阈值规避问题。 +- 保持 `OBSERVE_ONLY`;不得增加任何底盘控制下发。 + +## Task 1:完整 jerk 受限停车数学 + +严格按照十任务计划 Task 1 的 TDD 步骤实施。 + +### 文件范围 + +- 新建:`ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/JerkLimitedStoppingMath.cs` +- 修改:`ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/PathSpeedLimitBuilder.cs` +- 测试:`ClumsyPilot/tests/EMPlannerVerificationHost/LongitudinalModelChecks.cs` + +### 必须产生的接口 + +- `JerkLimitedStoppingMath.TryCalculate(double, double, double, double, out JerkLimitedStoppingProfile, out string)` +- `JerkLimitedStoppingMath.MaximumInitialSpeedForDistance(double, double, double, double, double)` +- `JerkLimitedStoppingMath.CalculateMaximumStoppedDistance(double, double, double, double, double, double, double)` +- `JerkLimitedStoppingProfile`,至少表达停车距离、持续时间、末速度和末加速度。 + +停车数学必须使用与 ST QP 一致的恒 jerk 离散/分段动力学,能够覆盖初始正加速度、初始负加速度、三角形和梯形减速度轮廓,最终同时释放到零速度和零加速度。 + +### 红灯和绿灯命令 + +```powershell +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-model +``` + +先证明新增测试因缺少新能力而失败;实现后必须得到 `PASS longitudinal-model`。 + +### Task 1 提交 + +只暂存 Task 1 文件,核对暂存区后提交: + +```powershell +git add -- ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/JerkLimitedStoppingMath.cs ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/PathSpeedLimitBuilder.cs ClumsyPilot/tests/EMPlannerVerificationHost/LongitudinalModelChecks.cs +git diff --cached --name-only +git commit -m "feat: add complete jerk-limited stopping math" +``` + +## Task 2:纵向模式、空间窗口和输入契约 + +Task 1 提交并通过测试后,严格按照十任务计划 Task 2 的 TDD 步骤实施。 + +### 文件范围 + +- 新建:`ClumsyPilot/ParkrobTrajplanner/EMPlanner/Contracts/EmLongitudinalMode.cs` +- 新建:`ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/LongitudinalTerminalSchedule.cs` +- 修改:`ClumsyPilot/ParkrobTrajplanner/EMPlanner/Segmentation/PlanningHorizonSelector.cs` +- 修改:`ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/LongitudinalPlanningInput.cs` +- 修改:`ClumsyPilot/ParkrobTrajplanner/EMPlanner/Validation/EmPlanningRequestValidator.cs` +- 修改:`ClumsyPilot/ParkrobTrajplanner/EMPlanner/Facade/EmPlanningService.cs` +- 测试:`ClumsyPilot/tests/EMPlannerVerificationHost/LongitudinalModelChecks.cs` +- 测试:`ClumsyPilot/tests/EMPlannerVerificationHost/FoundationChecks.cs` + +### 必须产生的接口和行为 + +- `EmLongitudinalMode` 三种模式。 +- `LongitudinalTerminalSchedule.GetStabilizationStartIndex(IReadOnlyList, double)`。 +- `PlanningHorizonSelection` 显式保存: + - `WindowEndReferenceS` + - `WindowEndBoundaryType` + - `LongitudinalMode` + - `StopBoundaryReferenceS` + - `HasStopBoundary` +- `LongitudinalPlanningInput` 分离路径上界、真实停车边界和纵向模式。 +- 选择顺序必须是: + 1. 识别当前方向段的真实边界; + 2. 用 Task 1 的完整 jerk 模型检查最小停车距离; + 3. 只用 `DistanceHorizonMeters` 截取 LS 空间窗口; + 4. 真实边界不在窗口内时选择 `RollingContinuation`; + 5. 边界已在窗口内但本次时间范围无法形成稳定停车时选择 `ApproachStopBoundary`; + 6. 能在时间范围内停车并留出内部稳定区间时选择 `ExactStopAtBoundary`。 +- `EmPlanningRequestValidator` 必须检查前视停车余量、时间步、时间范围和内部稳定区间组合,不允许无效配置进入求解器。 + +### 红灯和绿灯命令 + +```powershell +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-model +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- foundation +``` + +先证明模式/属性/行为测试失败;实现并更新所有直接构造调用后,必须得到: + +```text +PASS foundation +PASS longitudinal-model +``` + +### Task 2 提交 + +只暂存 Task 2 文件,核对暂存区后提交: + +```powershell +git add -- ClumsyPilot/ParkrobTrajplanner/EMPlanner/Contracts/EmLongitudinalMode.cs ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/LongitudinalTerminalSchedule.cs ClumsyPilot/ParkrobTrajplanner/EMPlanner/Segmentation/PlanningHorizonSelector.cs ClumsyPilot/ParkrobTrajplanner/EMPlanner/Longitudinal/LongitudinalPlanningInput.cs ClumsyPilot/ParkrobTrajplanner/EMPlanner/Validation/EmPlanningRequestValidator.cs ClumsyPilot/ParkrobTrajplanner/EMPlanner/Facade/EmPlanningService.cs ClumsyPilot/tests/EMPlannerVerificationHost/LongitudinalModelChecks.cs ClumsyPilot/tests/EMPlannerVerificationHost/FoundationChecks.cs +git diff --cached --name-only +git commit -m "feat: separate rolling horizons from stop boundaries" +``` + +若为修复编译必须改动直接调用者,使用明确路径单独加入,并在提交前解释原因;仍然禁止把其他脏文件带入提交。 + +## 阶段一最终验收 + +Task 1 和 Task 2 完成后,从当前代码状态重新运行,不得引用之前的测试输出: + +```powershell +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- foundation +dotnet run --project ClumsyPilot/tests/EMPlannerVerificationHost/EMPlannerVerificationHost.csproj -- longitudinal-model +git diff --check +git log -5 --oneline +git status --short +``` + +验收时同时人工确认: + +- 普通 5 m 局部窗口不会因为 `TimeHorizonSeconds=2s` 而被解释为必须在两秒内走完 5 m。 +- Rolling 局部窗口末端不再具有“停车边界”身份。 +- Goal/GearSwitch 边界进入窗口但暂时无法稳定停车时是 `ApproachStopBoundary`,不是失败,也不是强制零速。 +- 精确停车模式为至少一个 QP 内部静止时间步保留了明确的调度信息。 + +## 阶段结束交接——必须执行 + +验收通过后使用 `writing-plans`,根据**实际提交和实际接口**完成以下两份文件: + +1. 阶段一交接: + + `docs/superpowers/handoffs/2026-08-05-em-longitudinal-rolling-phase-1.md` + +2. 阶段二精细提示词: + + `docs/superpowers/prompts/2026-08-05-em-longitudinal-rolling-phase-2.md` + +阶段一交接必须包含: + +- 开始基线提交和结束提交; +- Task 1、Task 2 各自的提交号; +- 实际修改/新增文件; +- 最终接口签名和与原计划不同之处; +- 全部验证命令、退出码和关键 PASS 输出; +- 遗留问题、未验证内容和目标机限制; +- 阶段二可依赖的明确事实。 + +阶段二提示词必须: + +- 引用阶段一真实提交号和交接文件; +- 只覆盖原计划 Task 3~5; +- 明确速度包络、QP 条件终端约束、解验证、初始解和外层迭代的文件范围; +- 要求 TDD,并列出 `longitudinal-model` 与 `longitudinal-integration` 验收命令; +- 保留 Task 3、Task 4、Task 5 的独立提交边界; +- 要求阶段二结束后生成阶段二交接和阶段三提示词; +- 重复工作树保护、全局行为语义和 `OBSERVE_ONLY` 限制。 + +只暂存这两份交接文档,并提交: + +```powershell +git add -- docs/superpowers/handoffs/2026-08-05-em-longitudinal-rolling-phase-1.md docs/superpowers/prompts/2026-08-05-em-longitudinal-rolling-phase-2.md +git diff --cached --name-only +git commit -m "docs: hand off EM rolling planning phase one" +``` + +提交后输出一个简短阶段报告,包含两个功能提交、交接提交和两项验收结果,然后**立即停止**。不要开始 Task 3,也不要在本窗口实施阶段二。 + +--- + +以上内容是本窗口的完整授权范围。