diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index c23b8be..61298a1 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -210,31 +210,34 @@ Plans: 3. 测试在本地可运行且全部通过 4. 测试由 AI 编写并运行,通过验证后可提交 -**Plans**: 2/9 plans executed (data-layer slice; non-data render/legacy coverage deferred) +**Plans**: 9 plans replanned (D-28;旧 06-01/06-02 执行结果标记 superseded,按同号重跑;数据端切片,非数据 render/legacy 覆盖延后) Plans: -- [x] 06-01-PLAN.md — Combat L2 (data-system/src/combat) behavior tests + phase tracer -- [x] 06-02-PLAN.md — Combat L3 (data-state/src/enemy) calculator/aura/special/mapDamage tests -- [ ] 06-03-PLAN.md — Enemy data model (data-base/src/enemy) tests -- [ ] 06-04-PLAN.md — Replay (data-common/src/replay) tests + replay integration -- [ ] 06-05-PLAN.md — Hero core (attribute/modifier/location/state) tests -- [ ] 06-06-PLAN.md — Hero storage (equipment/equipStore/items/follower/mover) tests -- [ ] 06-07-PLAN.md — Map (gameMap/mapState/mapLayer/tile) expanded tests -- [ ] 06-08-PLAN.md — Combat closure + saveables round-trip integration tests -- [ ] 06-09-PLAN.md — Flag + common auxiliary tests +- [ ] 06-01-PLAN.md — Combat L2 (data-system/src/combat) + EnemyContext aura pipeline / effect combos / full interface & code coverage (D-21..D-27) +- [ ] 06-02-PLAN.md — enemy top-level BASIC functionality only (data-state/src/enemy;单分支,无组合,无 save/load) +- [ ] 06-03-PLAN.md — Enemy data model full public surface except legacy (data-base/src/enemy;无 save/load) +- [ ] 06-04-PLAN.md — Replay focus ReplayArray ops + encode/decode + system/sandbox/decorators (data-common/src/replay;无 save/load,完整播放→06-07) +- [ ] 06-05-PLAN.md — Hero ALL files incl. rendering + async mover (data-base/src/hero;无 save/load) +- [ ] 06-06-PLAN.md — Map ALL interfaces, emphasis static/dynamic tiles + static arrays (data-base/src/map;无 save/load) +- [ ] 06-07-PLAN.md — Top-level integration: damage combos + map+replay play + second-play re-record equality; error 2001–2008 (BLOCKED: pre-execution user confirmation) +- [ ] 06-08-PLAN.md — Flag full surface + common (utils/indexer/faceManager+face/mover) (无 save/load) +- [ ] 06-09-PLAN.md — Save/load independent system: every saveState/loadState class + CoreState top-level (BLOCKED: pre-execution user confirmation) -**Wave 1** *(all plans; independent new test files, no shared production edits)* +**Wave 1** *(independent test-writing plans; no shared production edits)* -- [x] 06-01-PLAN.md +- [ ] 06-01-PLAN.md - [ ] 06-02-PLAN.md - [ ] 06-03-PLAN.md - [ ] 06-04-PLAN.md - [ ] 06-05-PLAN.md - [ ] 06-06-PLAN.md -- [ ] 06-07-PLAN.md - [ ] 06-08-PLAN.md -- [ ] 06-09-PLAN.md + +**Wave 2** *(blocked on Wave 1 + user confirmation)* + +- [ ] 06-07-PLAN.md — depends on 06-02/06-04/06-06; requires user to wire replay recording +- [ ] 06-09-PLAN.md — depends on 06-03/06-05/06-06/06-08; requires user to adjust CoreState saveables + add public save/load entry ## Progress diff --git a/.planning/STATE.md b/.planning/STATE.md index c30314a..ab0daf3 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -6,7 +6,7 @@ current_phase: 06 current_phase_name: unit-tests status: executing stopped_at: Phase 6 context gathered (combat coverage deepening) -last_updated: "2026-09-14T02:02:01.754Z" +last_updated: "2026-09-14T03:16:45.536Z" last_activity: 2026-09-14 last_activity_desc: Phase 06 execution started progress: diff --git a/.planning/phases/06-unit-tests/06-01-PLAN.md b/.planning/phases/06-unit-tests/06-01-PLAN.md index 9a0cf62..f7455a7 100644 --- a/.planning/phases/06-unit-tests/06-01-PLAN.md +++ b/.planning/phases/06-unit-tests/06-01-PLAN.md @@ -27,6 +27,9 @@ must_haves: - "效果阶段顺序:显式断言 `buildupSpecials` → `buildupBase` → `buildupQuery` → `buildupFinal` 四阶段顺序,并验证阶段间可见性(前阶段修改被后阶段看到,后阶段不能反向影响前阶段)(D-25)。" - "属性→伤害联动:`final-effect`/光环改完属性后,`DamageContext` 缓存与脏标记随之更新,`getDamageInfo`/`markDirty`/`deleteEnemy`/`with(hero)` 行为正确(注入 fake `IDamageCalculator`)(D-26)。" - "刷新路径:`buildup`(全量)与 `requestRefresh`(局部)两条路径都覆盖;`resize`/`clear`/`destroy` 生命周期清空并解绑附件(D-27)。" + - "测试形态(D-01):采用混合测试形态中纯逻辑/数据模块一侧,直接单测(fake / 显式依赖注入,延续 Phase 3 D-03);战斗经 `CoreState` 的集成路径由 06-07 承担。" + - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" + - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" artifacts: - path: packages-user/data-system/src/combat/context.test.ts provides: EnemyContext 全接口、光环流水线、效果阶段顺序与生命周期覆盖 @@ -58,6 +61,8 @@ must_haves: Purpose: `data-system/src/combat` 是纯 Layer-2 战斗契约,无 DOM、经注入 fake 协作者驱动,是证明「Node 全局 stub + 动态 import 包 + fake 注入 + `logger.catch` + 真实计时器异步」测试骨架的最干净位置。本计划同时建立阶段级 `06-COVERAGE-MAP.md`。 Output: 4 个同目录 `*.test.ts` 与 `06-COVERAGE-MAP.md`(表头 + 06-01 行)。 + +计划结构(D-28):本计划为按 D-28 重排后的 06-01 战斗系统层(系统层,`data-system/src/combat`);原 06-01/06-02 执行结果已由 D-29 标记 superseded(SUMMARY 改名保留),本计划按同号重跑,确保「接口 + warn/error code 全覆盖」落到实处。 diff --git a/.planning/phases/06-unit-tests/06-02-PLAN.md b/.planning/phases/06-unit-tests/06-02-PLAN.md index 489bf7f..dcfeace 100644 --- a/.planning/phases/06-unit-tests/06-02-PLAN.md +++ b/.planning/phases/06-unit-tests/06-02-PLAN.md @@ -28,6 +28,8 @@ must_haves: - "`CommonAura`/`GuardAura` 各自转换器 `shouldConvert` 仅匹配对应 code,范围参数与基础/guard 加成按单分支计算。" - "`registerSpecials` 注册 code 0-27 各一次并设置 guard 属性默认值。" - "mapDamage 五视图单分支输出、converter 按 special 产生视图、reducer 求和/取最大类型/合并 extra。" + - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" + - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" artifacts: - path: packages-user/data-state/src/enemy/calculator.test.ts provides: MainDamageCalculator 与 getCriticalLimit 覆盖 diff --git a/.planning/phases/06-unit-tests/06-03-PLAN.md b/.planning/phases/06-unit-tests/06-03-PLAN.md index 1c5d7a3..58a0d22 100644 --- a/.planning/phases/06-unit-tests/06-03-PLAN.md +++ b/.planning/phases/06-unit-tests/06-03-PLAN.md @@ -24,6 +24,8 @@ must_haves: - "`Enemy` 属性增删改查、special 增删查迭代、`clone`/`cloneAttributes`/`copyFrom` 行为与文档一致且相互独立。" - "`CommonSerializableSpecial`/`NonePropertySpecial` 的 value 读写、`getSpecialName`/`getDescription`、clone 独立性、`deepEqualsTo` 判定与文档一致。" - "`EnemyManager` 注册表(special/attribute 默认值)、prefab(按 code/id 的增删改查与 clone 独立性)、reuse 映射、`modifyPrefabAttribute`、comparer/脏跟踪生命周期行为与文档一致。" + - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" + - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" artifacts: - path: packages-user/data-base/src/enemy/enemy.test.ts provides: Enemy 模型覆盖 diff --git a/.planning/phases/06-unit-tests/06-04-PLAN.md b/.planning/phases/06-unit-tests/06-04-PLAN.md index fb87b13..744841b 100644 --- a/.planning/phases/06-unit-tests/06-04-PLAN.md +++ b/.planning/phases/06-unit-tests/06-04-PLAN.md @@ -25,6 +25,8 @@ must_haves: - "`ReplayArray` 全部公开操作(含 `rebuildIndexArray`/`setReplayArray`/`getCommandArray`/`getParamArray`/`commandWidth`)行为与文档一致;数组扩容后读回仍正确。" - "`ReplaySandbox` 播放器 `step`/`play`/`pause`/`resume`/`stop` 与 `finalizeLast` 按顺序执行、失败即停,纯同步断言 + 真实计时器(无 fake timers)(D-04 / D-37)。" - "录像系统**完整播放**与**二次录制比对**、`error 2001–2008` 归 06-07,本计划不做(D-40)。" + - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" + - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" artifacts: - path: packages-user/data-common/src/replay/array.test.ts provides: ReplayArray 全操作 + 编解码覆盖 diff --git a/.planning/phases/06-unit-tests/06-05-PLAN.md b/.planning/phases/06-unit-tests/06-05-PLAN.md index 4dd3cce..4aa41a7 100644 --- a/.planning/phases/06-unit-tests/06-05-PLAN.md +++ b/.planning/phases/06-unit-tests/06-05-PLAN.md @@ -29,6 +29,9 @@ must_haves: - "code 全覆盖:本计划可达的码 108(重复 add 同一 modifier)、109(modifier 返回同引用)、116(未注册 modifier 类型)、142(follower id 无法转数字)、144(未绑定 hero move top 实现)、146(未知 uid 装备)、147(无可用装备槽)各至少一条触发断言(D-31)。" - "loadState 专属码 58/59(equipStore load)与全部 `saveState`/`loadState` 测试归 06-09,本计划不测(D-32)。" - "勇士每个子系统可正确运行:attribute(base/final/优先级/克隆)、modifier(公式)、location(位置/楼层/朝向/钩子)、state(装配/属性视图/modifier 注册/changeFloor 钩子顺序)、equipment(装备/卸下/替换/compareEquip)、equipStore(实例增删计数排序)、items(常量/消耗/装备/拾取)、follower(增删/gather 异步/链接)、mover(异步移动码)、rendering(alpha + 钩子)。" + - "测试形态(D-01):勇士各子系统属纯逻辑/数据模块,直接单测(fake / 显式依赖注入,延续 Phase 3 D-03);涉及多系统协作的经 `CoreState` 集成路径由 06-07/06-09 承担。" + - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" + - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" artifacts: - path: packages-user/data-base/src/hero/attribute.test.ts provides: HeroAttribute 覆盖 diff --git a/.planning/phases/06-unit-tests/06-06-PLAN.md b/.planning/phases/06-unit-tests/06-06-PLAN.md index 4293f87..10edd5f 100644 --- a/.planning/phases/06-unit-tests/06-06-PLAN.md +++ b/.planning/phases/06-unit-tests/06-06-PLAN.md @@ -28,6 +28,8 @@ must_haves: - "loadState 专属码 55(MapStore 缺 reference)、122(MapStore 楼层缺失)、124(MapLayer 引用缺失)与全部 `saveState`/`loadState` 测试归 06-09,本计划不测(D-32)。" - "重点覆盖:静态图块(`StaticTile` num/raw/set/shouldSave/toDynamic)、动态图块转换(`transferToDynamic`/`transferToStatic`/`transferToStaticIfSafe`/`createDynamic`/`deleteDynamic`/`updateDynamicTile`)与静态数组设置(`getMapData`/`putMapData`/`setMapRef`/`getMapRef`)行为正确。" - "地图矩阵、点事件、图层别名/背景/脏标记、`resize`/`resize2`/crop、`compareWith`、`canPass`/`shouldHit` 委托、异步门开关(openDoor/closeDoor)均有覆盖。" + - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" + - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" artifacts: - path: packages-user/data-base/src/map/mapState.test.ts provides: MapState 覆盖 diff --git a/.planning/phases/06-unit-tests/06-07-PLAN.md b/.planning/phases/06-unit-tests/06-07-PLAN.md index 5b8450a..0c0d665 100644 --- a/.planning/phases/06-unit-tests/06-07-PLAN.md +++ b/.planning/phases/06-unit-tests/06-07-PLAN.md @@ -24,6 +24,9 @@ must_haves: - "③ 二次录制比对:首次播放完毕后录像系统记录一遍录像步,断言二次录像与原录像**逐条完全相等**(步数 + 每步 code + 各 param 的 type/value),随后再次播放检验。" - "本计划允许为录像重置**最小使用**存档数据,但不测存读档本身(D-32)。" - "执行前必须先向用户确认(依赖用户先接通录像记录)(D-40)。" + - "测试形态(D-01):本计划为涉及多系统协作(战斗、录像)的经 `CoreState` 集成测试路径,与纯逻辑直测(06-01/06-05 等)共同构成混合测试形态。" + - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" + - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" artifacts: - path: packages-user/data-state/test/enemyCombination.test.ts provides: 顶层伤害组合 + 系统层光环/效果组合覆盖 diff --git a/.planning/phases/06-unit-tests/06-08-PLAN.md b/.planning/phases/06-unit-tests/06-08-PLAN.md index dce8e94..f17024e 100644 --- a/.planning/phases/06-unit-tests/06-08-PLAN.md +++ b/.planning/phases/06-unit-tests/06-08-PLAN.md @@ -25,6 +25,8 @@ must_haves: - "code 全覆盖:本计划可达的码 43(bind 未知 main)、44(bind 主朝向冲突)、111(对非数值 flag 字段 add)各至少一条触发断言(D-31)。" - "`FlagSystem` 公开接口(`occupied`/`insertField`/`getField`/`getOrInsert`/`getOrInsertComputed`/`deleteField`/`setFieldValue`/`addFieldValue`/`getFieldValue`/`getFieldValueDefaults`)行为与文档一致;`saveState`/`loadState` 归 06-09(flag `saveState()` 无压缩参数)。" - "`data-common/src/common` 工具(utils/indexer/faceManager+face/mover)行为与文档一致;D-20 要求:主要测试未触及的辅助函数才补最小直接单测。" + - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" + - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" artifacts: - path: packages-user/data-base/src/flag/system.test.ts provides: FlagSystem 覆盖 diff --git a/.planning/phases/06-unit-tests/06-09-PLAN.md b/.planning/phases/06-unit-tests/06-09-PLAN.md index 6980a57..10d76e1 100644 --- a/.planning/phases/06-unit-tests/06-09-PLAN.md +++ b/.planning/phases/06-unit-tests/06-09-PLAN.md @@ -31,6 +31,9 @@ must_haves: - "推导并写出**排除清单**(存档无关/元数据字段,如最后存档时间、dirty、缓存),落到 `06-SAVE-EXCLUSIONS.md`(D-42)。" - "CoreState 顶层验证:`getSaveableContent(id)` 对 4 个已注册 id(`@system/hero`/`flags`/`maps`/`enemy`)逐个往返(D-11),并验证 `addSaveableContent`/`bindSaveableExecuter` 守卫(112/113);若用户已新增公开 save/load 入口,则一并经该入口验证。" - "执行前必须先向用户确认(依赖用户调整 CoreState 可存档内容并新增公开 save/load 入口,例如录像存档目前未计入但应计入)(D-42)。" + - "测试形态(D-01):本计划经 `CoreState` 集成路径(`getSaveableContent`)与各类同实例往返验证存读档,属混合测试形态的跨系统集成一侧。" + - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" + - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" artifacts: - path: packages-user/data-base/src/enemy/saveLoad.test.ts provides: Enemy/special/EnemyManager 存读档覆盖(119/120) diff --git a/.planning/phases/06-unit-tests/06-CONTEXT.md b/.planning/phases/06-unit-tests/06-CONTEXT.md index 6b19aea..39d72b6 100644 --- a/.planning/phases/06-unit-tests/06-CONTEXT.md +++ b/.planning/phases/06-unit-tests/06-CONTEXT.md @@ -72,7 +72,7 @@ ### 阶段级覆盖规则与计划重构(2026-09-14 第二轮补充讨论) > 由用户对全部计划的逐条补充得出。**这些规则对 06-03..06-09 全部生效,并回溯要求 06-01/06-02 返工。** -- **D-28(计划重排):** 重排编号为: +- **D-28:** 计划重排 —— 重排编号为: - 06-01 战斗系统(系统层,`data-system/src/combat`,见 D-21..D-27) - 06-02 enemy 顶层实现(`data-state/src/enemy`,只做基本功能) - 06-03 enemy 数据模型(`data-base/src/enemy`) @@ -83,11 +83,11 @@ - 06-08 flag + common - 06-09 存档(独立系统,所有 saveState/loadState + CoreState 顶层验证) 原 06-06 合并进 06-05;原 06-08 的 saveables 往返部分移到 06-09。 -- **D-29(返工):** 已执行的 06-01、06-02 标记为 **superseded**(SUMMARY 改名保留),重规划后按同号重跑,确保「接口 + warn/error code 全覆盖」落到原计划。 -- **D-30(接口全覆盖):** 除名称含 legacy 的接口/方法(`fromLegacy`、`*LegacyBridge`、`*LegacyConverter` 等)外,**每个公开方法至少一条正常用例**。 -- **D-31(warn/error 全覆盖):** 以 `packages/common/src/logger.json` 为权威码表;范围 = 本计划模块**可达**的 code(排除其他层如渲染/音频,及 legacy 路径);每个 code 至少一条触发断言(经 `logger.catch`);产出**阶段级 `06-COVERAGE-MAP.md`**(code → 模块 → 用例)映射表。 -- **D-32(存读档集中):** 所有 `saveState`/`loadState` 测试从各计划移出,集中到 06-09。唯一例外:06-07 的录像播放所需状态重置可**最小使用**存档数据,但不测存读档本身。 -- **D-33(执行节奏):** **每个计划执行前先向用户确认**;执行完暂停,用中文**分条简要汇报**本计划验证结果;详细结果写入共用的 `06-TEST-FINDINGS.md`。 +- **D-29:** 返工 —— 已执行的 06-01、06-02 标记为 **superseded**(SUMMARY 改名保留),重规划后按同号重跑,确保「接口 + warn/error code 全覆盖」落到原计划。 +- **D-30:** 接口全覆盖 —— 除名称含 legacy 的接口/方法(`fromLegacy`、`*LegacyBridge`、`*LegacyConverter` 等)外,**每个公开方法至少一条正常用例**。 +- **D-31:** warn/error 全覆盖 —— 以 `packages/common/src/logger.json` 为权威码表;范围 = 本计划模块**可达**的 code(排除其他层如渲染/音频,及 legacy 路径);每个 code 至少一条触发断言(经 `logger.catch`);产出**阶段级 `06-COVERAGE-MAP.md`**(code → 模块 → 用例)映射表。 +- **D-32:** 存读档集中 —— 所有 `saveState`/`loadState` 测试从各计划移出,集中到 06-09。唯一例外:06-07 的录像播放所需状态重置可**最小使用**存档数据,但不测存读档本身。 +- **D-33:** 执行节奏 —— **每个计划执行前先向用户确认**;执行完暂停,用中文**分条简要汇报**本计划验证结果;详细结果写入共用的 `06-TEST-FINDINGS.md`。 ### 各计划边界 - **D-35:** 06-02 只测顶层实现**基本功能**(单分支、按预期输出);属性/加成**组合**后移至 06-07。范围:`MainDamageCalculator` / `MainEnemyFinalEffect` / `MainEnemyComparer` / `CommonAura(+Converter)` / `GuardAura(+Converter)` / `registerSpecials` / mapDamage 五视图 + converter + reducer。