fix(02-pathfinding): revise plans based on checker feedback

This commit is contained in:
unanmed 2026-09-09 15:06:21 +08:00
parent d5fcc65cec
commit 1ad8176f68
3 changed files with 15 additions and 11 deletions

View File

@ -13,6 +13,8 @@ files_modified:
- packages-user/data-system/src/pathfinding/index.ts
- packages-user/data-system/src/pathfinding/graph.test.ts
- packages-user/data-system/src/pathfinding/system.test.ts
- packages-user/data-system/src/index.ts
- packages/common/src/logger.json
autonomous: true
requirements: [PATH-01, PATH-02]
estimate:
@ -38,6 +40,8 @@ must_haves:
- "packages-user/data-system/src/pathfinding/index.ts"
- "packages-user/data-system/src/pathfinding/graph.test.ts"
- "packages-user/data-system/src/pathfinding/system.test.ts"
- "packages-user/data-system/src/index.ts"
- "packages/common/src/logger.json"
key_links:
- "graph.ts 消费注入的通行性谓词而非 import L3谓词复刻 moverImpl canPass 的掩码语义(事件层恒参与,其余层仅 onlyEvents 参与)"
- "system.ts 的损失/回退/谓词槽位由 02-03 的 L3 接线注入"

View File

@ -9,13 +9,12 @@ files_modified:
- packages-user/data-state/src/pathfinding/heroPathfinding.test.ts
- packages-user/data-state/src/core.ts
- packages-user/data-state/src/index.ts
- packages-user/data-system/src/index.ts
- packages/common/src/logger.json
autonomous: true
requirements: [PATH-01, PATH-02]
estimate:
tokens: 80000
raw_tokens: 80000
tokens: 75000
raw_tokens: 75000
tasks: 3
confidence: low
must_haves:
@ -31,7 +30,6 @@ must_haves:
- "packages-user/data-state/src/pathfinding/heroPathfinding.test.ts"
- "packages-user/data-state/src/core.ts"
- "packages-user/data-state/src/index.ts"
- "packages-user/data-system/src/index.ts"
- "packages/common/src/logger.json"
key_links:
- "heroPathfinding.ts 注入 02-02 的损失/回退/谓词槽位并绑定 hero moverL3 → L2 合法方向,反向即循环依赖)"
@ -85,9 +83,9 @@ Output: heroPathfinding.ts + 接线与测试;更新 core.ts、双 barrel、log
<task type="tracer">
<name>Task 1: 逐步自动寻路端到端接线CoreState + 路径翻译 + hero mover 执行)</name>
<files>packages-user/data-state/src/pathfinding/heroPathfinding.ts, packages-user/data-state/src/pathfinding/heroPathfinding.test.ts, packages-user/data-state/src/core.ts, packages-user/data-state/src/index.ts, packages-user/data-system/src/index.ts</files>
<files>packages-user/data-state/src/pathfinding/heroPathfinding.ts, packages-user/data-state/src/pathfinding/heroPathfinding.test.ts, packages-user/data-state/src/core.ts, packages-user/data-state/src/index.ts</files>
<read_first>.planning/phases/02-pathfinding/02-INTERFACE-DRAFT.md, packages-user/data-state/src/hero/moverImpl.ts, packages-user/data-state/src/core.ts, packages-user/data-base/src/hero/mover.ts, packages-user/data-common/src/common/mover.ts, packages-user/data-system/src/event/eventDispatch.test.ts, dev.md</read_first>
<action>创建 L3 `HeroPathfinding`imports 骨架照 moverImpl.ts:1-32`@user/data-system` 引入 L2 寻路系统——此方向合法)。职责:构造时绑定 `IObjectMovable`hero mover`IMapLayer`event 层)到 02-02 的 `PathfindingSystem` 注入槽位D-03注入默认通行性谓词复刻 `DefaultHeroMoveTopImpl` canPass 语义)与回退策略槽位。实现逐步执行:调用寻路系统取得最小损失路径后,将路径翻译为 `ObjectMoveType.Dir` 步骤队列(相邻坐标增量 → `FaceDirection`,每次一步保证 canPass 逐格判定per RESEARCH Code Examples 语义),经 mover `push` + `start` 启动D-09。core.ts 在 `//#endregion 勇士顶层初始化` region 内、`useTopImplementation` 之后新增寻路接线(照 core.ts:235-237 模式data-state/src/index.ts 在 `export * from './hero';` 之后追加寻路导出data-system/src/index.ts 追加 pathfinding 导出dev.md不转发导出。heroPathfinding.test.ts 用 eventDispatch.test.ts:105-179 fixture 模式:勇士在 fixture 地图上自动寻路走两步断言终点坐标、leave/enter 事件按 Phase 1 source-aware 顺序触发、途经带事件的图块事件被执行。签名与命名以拍板草案为唯一事实源D-07</action>
<action>创建 L3 `HeroPathfinding`imports 骨架照 moverImpl.ts:1-32`@user/data-system` 引入 L2 寻路系统——此方向合法)。职责:构造时绑定 `IObjectMovable`hero mover`IMapLayer`event 层)到 02-02 的 `PathfindingSystem` 注入槽位D-03注入默认通行性谓词复刻 `DefaultHeroMoveTopImpl` canPass 语义)与回退策略槽位。实现逐步执行:调用寻路系统取得最小损失路径后,将路径翻译为 `ObjectMoveType.Dir` 步骤队列(相邻坐标增量 → `FaceDirection`,每次一步保证 canPass 逐格判定per RESEARCH Code Examples 语义),经 mover `push` + `start` 启动D-09。core.ts 在 `//#endregion 勇士顶层初始化` region 内、`useTopImplementation` 之后新增寻路接线(照 core.ts:235-237 模式data-state/src/index.ts 在 `export * from './hero';` 之后追加寻路导出dev.md不转发导出。data-system/src/index.ts 的 pathfinding 导出已由 02-02 Task 3 落地(该文件的唯一归属任务),本任务只验证其存在且可被 `@user/data-system` 引入,不重复写入该行。heroPathfinding.test.ts 用 eventDispatch.test.ts:105-179 fixture 模式:勇士在 fixture 地图上自动寻路走两步断言终点坐标、leave/enter 事件按 Phase 1 source-aware 顺序触发、途经带事件的图块事件被执行。签名与命名以拍板草案为唯一事实源D-07</action>
<verify>
<automated>pnpm exec vitest run "packages-user/data-state/src/pathfinding/heroPathfinding.test.ts"</automated>
<fails_when>vitest 输出出现 "failed" 字样或非零退出码——勇士未到达目标、事件未按序触发或翻译步骤数与路径不符</fails_when>
@ -144,7 +142,7 @@ Output: heroPathfinding.ts + 接线与测试;更新 core.ts、双 barrel、log
- 类:`HeroPathfinding`L3 接线类,`packages-user/data-state/src/pathfinding/heroPathfinding.ts`
- 方法:路径→`ObjectMoveType.Dir` 步骤翻译、逐步执行(复用 `DefaultHeroMoveTopImpl` 事件链D-09、瞬移执行D-04、默认回退策略「路径上存在事件即回退」D-05、D-08 情形 1 相邻格 + OnTouch + 面朝、打断接管入口D-10
- 修改:`packages-user/data-state/src/core.ts`CoreState 寻路接线)、`packages-user/data-state/src/index.ts``packages-user/data-system/src/index.ts`barrel、`packages/common/src/logger.json`(集中登记码位)
- 修改:`packages-user/data-state/src/core.ts`CoreState 寻路接线)、`packages-user/data-state/src/index.ts`barrel、`packages/common/src/logger.json`(集中登记码位)`packages-user/data-system/src/index.ts` 的 pathfinding 导出已由 02-02 Task 3 落地(该文件唯一归属在 02-02本计划仅验证不修改
- 测试:`heroPathfinding.test.ts`(端到端逐步/瞬移/回退/D-08 双语义/打断)
## Trust Boundaries

View File

@ -550,16 +550,18 @@ await executor.execute<void>([{ id, env }], { custom: {} });
## Open Questions
1. **D-08 OnTouch 派发路径**
> **解决机制(已制度化闭环)**:以下全部待决问题经 **02-01 Task 3 的 `checkpoint:human-verify`D-07 用户拍板关卡)** 解决——AI 起草接口草案并列出各选项,用户逐项拍板,结论记录于 `02-INTERFACE-DRAFT.md` 末尾「拍板记录」节。未经拍板不得实现D-07
1. **D-08 OnTouch 派发路径** — RESOLVED-BY: D-07 拍板关卡02-01 Task 3方案 A 直派 executor / 方案 B 撞击步已在草案并列,附 P2 结论「方案 B 对 inPass=0 目标不生效」)
- What we know: mover 的 Hit 链对 `inPass=0` 真墙格不生效cannotEnter 为空实现)
- What's unclear: 用户期望的 OnTouch 派发语义(直派 executor vs 改 hit 语义)
- Recommendation: 接口草案中两方案并列用户拍板D-07 关卡内解决)
2. **L0 `&&` 缺陷修复**
2. **L0 `&&` 缺陷修复** — RESOLVED-BY: D-07 拍板关卡02-01 Task 1 铺设 skip 回归测试、Task 3 关卡内 go/no-go02-02 Task 1 按拍板结果执行修复并翻绿)
- What we know: 逐字引用与推理链完整Pitfall 1
- What's unclear: 是否属有意设计;是否允许本阶段修 L0
- Recommendation: planner 首个任务设 `checkpoint:human-verify`,用户确认后修 + 回归测试
3. **打断时序**stop 后 await 兑现再起新寻路,还是 onEnd 回调驱动——接口草案定夺
4. **斜向Dir8寻路**`FaceDirection` 含 4 斜向且 canPass 对斜向直接放行moverImpl.ts:67-75但 PassBit 只有 4 位。图是否含斜向边(默认建议:仅 4 正交向,与 PassBit 掩码语义一致)——接口草案定夺
3. **打断时序** — RESOLVED-BY: D-07 拍板关卡02-01 草案选项 1/2 并列、Task 3 拍板02-03 Task 3 按拍板时序实现)——stop 后 await 兑现再起新寻路,还是 onEnd 回调驱动
4. **斜向Dir8寻路** — RESOLVED-BY: D-07 拍板关卡02-01 草案第 (6) 节并列 4 向/8 向、Task 3 拍板)——`FaceDirection` 含 4 斜向且 canPass 对斜向直接放行moverImpl.ts:67-75但 PassBit 只有 4 位。图是否含斜向边(默认建议:仅 4 正交向,与 PassBit 掩码语义一致)
## Environment Availability