mirror of
https://github.com/motajs/template.git
synced 2026-09-13 02:08:50 +08:00
fix(02-pathfinding): revise plans based on checker feedback
This commit is contained in:
parent
d5fcc65cec
commit
1ad8176f68
@ -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 接线注入"
|
||||
|
||||
@ -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 mover(L3 → 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
|
||||
|
||||
@ -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-go;02-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
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user