From 8153d4f4193a8243b05074d7f18af4080e60a032 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Sun, 4 Oct 2026 22:17:01 +0800 Subject: [PATCH] docs(08-03): record enemy/flag alignment summary and plan progress --- .planning/ROADMAP.md | 4 +- .../08-test-refactor-alignment/08-03-PLAN.md | 8 ++++ .../08-03-SUMMARY.md | 44 +++++++++++++++++++ 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 .planning/phases/08-test-refactor-alignment/08-03-SUMMARY.md diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index d7675a6..bf0d434 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -456,7 +456,7 @@ Plans: - [ ] 08-01-PLAN.md — 全量目录迁移到 `__test__/`(Rule A/B 分流改相对导入 + `script/test-data-node.ts:67,122` 硬编码路径;门禁=文件数守恒 66/6、零配置/零生产改动) - [x] 08-02-PLAN.md — data-common 对齐(`utils.test.ts` 退役、`DirectionMapper` 删除、`addHook().load()` 移除、158/175→72;含经确认的 sandbox 首步预读生产修复) -- [ ] 08-03-PLAN.md — data-base enemy+flag 对齐(`EnemyManager` 单参构造、legacy bridge 类型) +- [x] 08-03-PLAN.md — data-base enemy+flag 对齐(真实 `TileStore` + 注册图块、删 legacy bridge、`getPrefab` 签名 `number|string` 类型修正、flag 读档重建语义对齐) - [ ] 08-04-PLAN.md — data-base hero 对齐(录像桩 `route`→`array`、`getItem`→`addItem`、`setFloor(IGameMap)`) - [ ] 08-05-PLAN.md — data-base map 对齐(`addLayer(alias)`、`MapState(state)`;陈旧码 62/63/64/84/130/125 裁决) - [ ] 08-06-PLAN.md — data-system combat+event 对齐(`CombatFlow` 构造、`.load()` 移除、DEV 守卫码) @@ -483,4 +483,4 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 | 5. Legacy 移植 | 0/TBD | Not started | - | | 6. 单元测试 | 18/18 | In Progress| | | 7. 数据端缺陷修复 | 15/16 | Complete(07-16 superseded) | - | -| 8. 测试重构与接口对齐 | 1/11 | In Progress | - | +| 8. 测试重构与接口对齐 | 2/11 | In Progress | - | diff --git a/.planning/phases/08-test-refactor-alignment/08-03-PLAN.md b/.planning/phases/08-test-refactor-alignment/08-03-PLAN.md index b406ce5..7e25326 100644 --- a/.planning/phases/08-test-refactor-alignment/08-03-PLAN.md +++ b/.planning/phases/08-test-refactor-alignment/08-03-PLAN.md @@ -87,6 +87,14 @@ Output: 6 个既有测试文件的对齐改动;零生产改动、零新增依 - **Q2**:`IEnemyLegacyBridge` 若已从 `data-base/src/enemy/types.ts` 删除,测试中作为协作对象的假桥接应删除还是改为新形状;若类型仍在,是否需要改。 - **Q3**:flag 子系统是否有超出「连带」的独立失效(以执行当日聚焦运行结果为准);若有,是否仍在本计划 test-only 范围内。 + + **裁决日期:** 2026-10-04(用户「可以执行」) + - **Q1:** 真实 `TileStore` 或 stub 均可;采用「真实 `TileStore`,仅必要处用 stub」。 + - **Q2:** 删除测试中的假 legacy bridge / `IEnemyLegacyBridge` 引用;**Legacy 内容不进行测试**。 + - **Q3:** flag 若存在独立失效,在本计划 test-only 范围内对齐。 + - **Q4(发现 A):** 批准将 `IEnemyManager.getPrefab` 签名由 `token: number` 改为 `token: number | string`(纯类型修正,与 jsDoc/实现一致)。 + - **Q5(发现 B):** `addPrefab` 按实现对齐(**仅 code 去重**),其 jsDoc 的「id 或 code」视为过期,仅对齐测试。 + RESEARCH A3 明确 enemy/flag 的失败判定为「连带」,置信度 MEDIUM,需执行期以编译/运行结果为准。D-05 禁止新增接口;D-10 默认零生产改动。 diff --git a/.planning/phases/08-test-refactor-alignment/08-03-SUMMARY.md b/.planning/phases/08-test-refactor-alignment/08-03-SUMMARY.md new file mode 100644 index 0000000..8597dd2 --- /dev/null +++ b/.planning/phases/08-test-refactor-alignment/08-03-SUMMARY.md @@ -0,0 +1,44 @@ +# 08-03 SUMMARY — data-base enemy + flag 对齐 + +**执行日期:** 2026-10-04 +**计划:** `08-03-PLAN.md` +**状态:** 完成(聚焦 60/60 通过;eslint 0;已提交) + +## Task 0 裁决(用户) + +- **Q1:** 真实 `TileStore` 或 stub 均可 → 采用「真实 `TileStore` + 注册图块」。 +- **Q2:** 删除假 legacy bridge / `IEnemyLegacyBridge` 引用;Legacy 不测试。 +- **Q3:** flag 独立失效在本计划 test-only 内对齐。 +- **Q4:** 批准 `IEnemyManager.getPrefab` 签名由 `token: number` → `token: number | string`(纯类型修正)。 +- **Q5:** `addPrefab` 按实现对齐(**仅 code 去重**),其 jsDoc 的「id 或 code」视为过期。 + +## 生产改动(唯一,经用户确认) + +- `packages-user/data-base/src/enemy/types.ts`:`IEnemyManager.getPrefab(token: number)` → `token: number | string`(与 jsDoc「怪物图块数字或id」及实现 `manager.ts:84` 一致;无运行时变化)。 + +## 测试对齐改动 + +| 文件 | 旧 → 新 | +|------|---------| +| `enemy/__test__/manager.test.ts` | 夹具改用真实 `TileStore`(`createManager([[num,id]...])` + `createRawTile` 注册 id↔num);构造器实参删除假 bridge;`getPrefabById(id)`→`getPrefab(id)`、`createEnemyById(id)`→`createEnemy(id)`;`reusePrefab(source, reuse, id)`(3 参)→ `reusePrefab(source, reuse)`(2 参,id 解析走 TileStore);`addPrefab` 用例改为「仅 code 去重」 | +| `enemy/__test__/saveLoad.test.ts` | 同上(构造器改真实 `TileStore`、删假 bridge;`fromLegacyEnemy` 的特殊属性配置字段保留) | +| `flag/__test__/system.test.ts` | `same-reference load (#06-17-5)` → `load semantics`:按 shipped「`loadState` 重建字段实例 + 按存档值恢复」重写 4 条用例(断言由 `toBe(同实例)` 改为 `not.toBe` + 值恢复) | +| `flag/__test__/saveLoad.test.ts` | `keeps field objects on loadState` → `rebuilds field objects on loadState`;首条用例标题/注释同步为「读档后恢复」 | + +未改动:`enemy/__test__/enemy.test.ts`、`special.test.ts`(原本即通过)。 + +## 期望值改写台账 + +- `manager.test.ts`:`addPrefab` 由「id 或 code 去重」→「仅 code 去重」;`reusePrefab` 3 参 → 2 参;`getPrefab`/`createEnemy` 取代 `*ById`。 +- `flag/*`:`loadState` 由「同引用保留」→「重建字段实例」(依据用户后续提交 `d74cc35 feat: Adding should replay flag`,`flag/system.ts:68-75` 明确 `clear()` + 新建;原 `#06-17-5` 语义已被该提交覆盖)。 + +## 门禁证据 + +- `pnpm exec vitest run packages-user/data-base/src/{enemy,flag}/__test__` → **6 passed / 60 passed**。 +- `pnpm exec eslint --fix` 后 `eslint` 对改动文件 **0 报错**。 +- 非测试生产改动仅 `enemy/types.ts`(Q4 批准);其余全为 `__test__/` 测试文件。 +- 仓库级 skipped 仍为 1。 + +## 并发保护(D-08) + +- 未触碰、未暂存、未提交任何用户并发改动。