From b59f8783d52fbd26501f33fe1024d7a903c43337 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Mon, 14 Sep 2026 10:01:55 +0800 Subject: [PATCH] docs(06): capture phase context --- .planning/phases/06-unit-tests/06-CONTEXT.md | 13 ++ .../phases/06-unit-tests/06-DISCUSSION-LOG.md | 148 +++++++++++++++++- 2 files changed, 160 insertions(+), 1 deletion(-) diff --git a/.planning/phases/06-unit-tests/06-CONTEXT.md b/.planning/phases/06-unit-tests/06-CONTEXT.md index 0100e7f..e7da5b1 100644 --- a/.planning/phases/06-unit-tests/06-CONTEXT.md +++ b/.planning/phases/06-unit-tests/06-CONTEXT.md @@ -58,6 +58,17 @@ - **D-19:** flag 系统接口较多但逻辑简单,覆盖其公开接口行为。 - **D-20:** `data-common/src/common` 由主要测试自然覆盖;无需单独穷举,但若主要测试未触及则补最小直接单测。 +### 战斗系统覆盖深化(仅针对 06-01,`data-system/src/combat`) +> 本节由 2026-09-14 的补充讨论得出,深化 D-15。**范围严格限定在战斗系统本身**;凡属顶层实现(`data-state` 的 `calculator` / `CommonAura` / `GuardAura` / 特殊属性语义 / 支援递归)的内容一律不纳入本讨论,由 Phase 6 其它计划负责。 + +- **D-21:** 光环集成测试形态:用**测试用 fake `IAuraConverter` / `IAuraView`** 在 `data-system` 内驱动 `EnemyContext` 的光环流水线;**手动装配**(`new EnemyContext()` + `registerAuraConverter` + `setEnemyAt`);复用 06-01 已建立的 `vi.hoisted` 全局 stub + dynamic-import harness。**不引用、不重测顶层真实实现**,明确切开系统与顶层边界。 +- **D-22:** 常规光环覆盖:`Full`(`haloRange<=0`)/ `Rect`(`haloSquare`)/ `Manhattan` 三种范围**全部覆盖**,并断言**光环范围外的怪物不被加成**。 +- **D-23:** 嵌套光环覆盖:**一层**(光环施加特殊属性)与**两层**(光环→特殊属性→再经转换器产生新光环→再施加效果)都要覆盖,并含**优先级边界**(新增光环只能影响更低优先级阶段;同/跨优先级传播)。 +- **D-24:** 优先级链与 DEV 警告码**全部覆盖**:`97`(重复 converter 匹配)、`98`(删除同级/更高优先级光环)、`99`(新增高优先级光环)、`100`(add 与 delete 同时非空)、`101`(局部刷新期间产生/移除已转换光环)。 +- **D-25:** 系统层效果组合覆盖:**光环基础效果 ↔ 常规查询效果**、**光环特殊效果 ↔ 特殊查询效果**、**final-effect 阶段顺序**、**同/跨优先级顺序**四类组合全部纳入;**显式断言四阶段顺序**(`buildupSpecials` → `buildupBase` → `buildupQuery` → `buildupFinal`)与**阶段间可见性**(前阶段修改被后阶段看到,后阶段不能反向影响前阶段)。 +- **D-26:** 「属性流水线结果 → 伤害系统」联动:`final-effect` / 光环改完属性后,验证 `DamageContext` 缓存与脏标记随之更新,`getDamageInfo` / `markDirty` / `deleteEnemy` / `with(hero)` 行为正确(注入 fake `IDamageCalculator`)。 +- **D-27:** `EnemyContext` 覆盖判据:**每个公开方法至少一个正常用例**;边界按需覆盖**警告码、未知/空输入(返回 null 或 no-op)、`resize`/`clear`/`destroy` 生命周期清空与附件解绑**;**`buildup`(全量)与 `requestRefresh`(局部)两条刷新路径都要覆盖**;上述「全接口覆盖」写入 `must_haves.truths` 作为阶段完成判据。 + ### the agent's Discretion - 各系统内部具体测哪些函数/边界用例、用例命名与文件切分,由实现者在上述约束下决定;发现接口/设计疑问时按 D-07 立即提问,不自行假设。 @@ -124,6 +135,7 @@ - 用户把本次明确定义为**数据端单测切片**,并要求「单测 / 修复」严格分两环节:先写测试验证接口能否运行,发现问题只分析、汇报,确认后才修。 - 若对系统内某些设计有疑问,**立刻提问**,不得自行假设或绕过(延续 D-02/D-17)。 - 战斗、寻路、触发器、事件是 Phase 6 成功标准点名的关键行为;本切片聚焦其中的战斗、事件、录像、地图、勇士、存读档。 +- **边界(2026-09-14 补充)**:06-01 的覆盖深化**只针对战斗系统本身**(`data-system/src/combat`)。顶层实现(`data-state` 的 calculator / CommonAura / GuardAura / 特殊属性语义 / 支援递归)与战斗系统无关,不纳入 06-01。 @@ -134,6 +146,7 @@ - 存读档的 CoreState 端到端(需要公开 save/load 入口或可注入后端)未纳入本次;如后续决定引入,需先由用户设计接口。 - Phase 5(Legacy 移植)若改动数据端接口,本阶段测试需同步调整。 - 执行过程中若出现新的接口/设计问题,按 D-07 暂停并向用户提问。 +- **顶层实现(`data-state`)的光环转换器语义、特殊属性加成、伤害计算器分支、支援/guard 递归、数据-State 现有测试的改动** —— 均不属 06-01 战斗系统深化范围,由 Phase 6 其它计划负责。 diff --git a/.planning/phases/06-unit-tests/06-DISCUSSION-LOG.md b/.planning/phases/06-unit-tests/06-DISCUSSION-LOG.md index 73c9708..bf5be1e 100644 --- a/.planning/phases/06-unit-tests/06-DISCUSSION-LOG.md +++ b/.planning/phases/06-unit-tests/06-DISCUSSION-LOG.md @@ -5,7 +5,7 @@ **Date:** 2026-09-14 **Phase:** 6-单元测试 -**Areas discussed:** 测试层级与 fixture 策略, 问题记录与门禁策略, 存读档等价判定, 怪物数据验证含义 +**Areas discussed:** 测试层级与 fixture 策略, 问题记录与门禁策略, 存读档等价判定, 怪物数据验证含义, 光环测试形态, 光环覆盖深度, 系统层效果组合, EnemyContext 覆盖判据 --- @@ -126,6 +126,151 @@ --- +## 补充讨论(2026-09-14):战斗系统覆盖深化(仅 06-01) + +> 范围严格限定在战斗系统本身(`data-system/src/combat`);顶层实现(`data-state` 的 calculator / CommonAura / GuardAura / 特殊属性语义 / 支援递归)不纳入本讨论。 + +### 光环测试形态 + +| Option | Description | Selected | +|--------|-------------|----------| +| 系统测试在 data-system,顶层实现验证在 data-state | 明确系统功能与顶层实现分工 | ✓(顶层部分经用户后续校正后移出本讨论) | +| data-system/combat 内 | 真实 EnemyContext + 真实 converter,用假 Enemy | | +| 两处分工 | 类单测留 data-state,集成放 data-system | | + +**User's choice:** 系统功能测试归 `data-system`;顶层验证归 `data-state`(顶层内容不属本次讨论) +**Notes:** 后续校正:本次仅讨论 06-01 战斗系统问题,顶层实现无关内容不纳入。 + +| Option | Description | Selected | +|--------|-------------|----------| +| 手动装配(推荐) | new EnemyContext + registerAuraConverter + setEnemyAt | ✓ | +| 经 CoreState | 集成度高但重 | | +| 两者都要 | 核心手动 + CoreState 烟雾 | | + +**User's choice:** 手动装配 + +| Option | Description | Selected | +|--------|-------------|----------| +| 保留并新增(推荐) | 类单测 + 新增集成测试,互补 | ✓ | +| 迁移合并 | 改写为集成用例 | | +| 只要嵌套集成 | | | + +**User's choice:** 保留并新增 +**Notes:** 校正后该 data-state 类单测改动不属本次讨论范围;战斗系统内沿用「保留并新增」原则。 + +| Option | Description | Selected | +|--------|-------------|----------| +| 复用 06-01 harness(推荐) | vi.hoisted 全局 stub + 动态 import 包 | ✓ | +| 真实顶层 import | 直接 import @user/data-state | | + +**User's choice:** 复用 06-01 harness + +### 光环覆盖深度 + +| Option | Description | Selected | +|--------|-------------|----------| +| 三种范围 + 范围外(推荐) | Full / Rect / Manhattan + 范围外不生效 | ✓ | +| 只覆盖一种 | | | +| 你决定 | | | + +**User's choice:** 三种范围 + 范围外 + +| Option | Description | Selected | +|--------|-------------|----------| +| 一层 + 两层(推荐) | 光环→特殊属性;光环→特殊属性→再转换出光环 | | +| 仅一层 | | | +| 两层 + 优先级边界 | | ✓ | + +**User's choice:** 两层 + 优先级边界 + +| Option | Description | Selected | +|--------|-------------|----------| +| 全部警告码(推荐) | 97/98/99/100/101 | ✓ | +| 只 98/99 | | | +| 不专门覆盖 | | | + +**User's choice:** 全部警告码 97/98/99/100/101 + +| Option | Description | Selected | +|--------|-------------|----------| +| 纳入(推荐) | 支援怪吃到位置光环加成 + 递归累加 | ✓ | +| 不纳入 | | | +| 只补交叉点 | | | + +**User's choice:** 纳入 +**Notes:** 后续校正:支援/guard 的验证归属顶层(`data-state`),不属 06-01 战斗系统,本次排除。 + +### 系统层效果组合与边界 + +| Option | Description | Selected | +|--------|-------------|----------| +| 光环↔常规查询 | query 读到光环改过的属性 | ✓ | +| 光环特殊↔特殊查询 | 同优先级链上的 add/delete/modify 相互影响 | ✓ | +| final-effect 阶段顺序 | final 最后执行、不能查询上下文 | ✓ | +| 优先级/阶段顺序 | 同优先级内顺序、跨优先级传播 | ✓ | + +**User's choice:** 四类全纳入 + +| Option | Description | Selected | +|--------|-------------|----------| +| 明确切开(推荐) | data-system 只用 fake 效果/光环驱动,不重测顶层语义 | ✓ | +| 允许少量交叉 | | | +| 你决定 | | | + +**User's choice:** 明确切开 + +| Option | Description | Selected | +|--------|-------------|----------| +| 断言顺序 + 可见性(推荐) | 四阶段顺序 + 阶段间可见性 | ✓ | +| 只断言结果 | | | +| 只断言关键顺序 | | | + +**User's choice:** 断言顺序 + 可见性 + +| Option | Description | Selected | +|--------|-------------|----------| +| 纳入系统伤害流程(推荐) | 属性→伤害联动,注入 fake 计算器 | ✓ | +| 不纳入 | | | +| 只加烟雾 | | | + +**User's choice:** 纳入系统伤害流程 + +### EnemyContext 覆盖判据 + +| Option | Description | Selected | +|--------|-------------|----------| +| 全接口 + 按需边界(推荐) | 每个公开方法≥1 正常用例 | ✓ | +| 全接口 + 全边界 | 最严 | | +| 只关键接口 | | | + +**User's choice:** 全接口 + 按需边界 + +| Option | Description | Selected | +|--------|-------------|----------| +| 警告码 | 97/98/99/100/101/110 | ✓ | +| 未知/空输入 | null 或 no-op | ✓ | +| 生命周期清空 | resize/clear/destroy | ✓ | +| 脏标记守卫 | markDirty/requestRefresh 守卫 | | + +**User's choice:** 警告码、未知/空输入、生命周期清空 + +| Option | Description | Selected | +|--------|-------------|----------| +| 写入 must_haves(推荐) | 作为阶段完成判据 | ✓ | +| 只进验收标准 | | | + +**User's choice:** 写入 must_haves + +| Option | Description | Selected | +|--------|-------------|----------| +| 两条都要(推荐) | 全量 buildup + 局部 requestRefresh | ✓ | +| 只全量 | | | +| 只局部 | | | + +**User's choice:** 两条都要 + +--- + ## the agent's Discretion - 各系统内部具体测哪些函数/边界、用例命名与文件切分。 @@ -135,3 +280,4 @@ - Phase 6 非数据端覆盖(渲染/legacy)延后。 - CoreState 端到端存读档(需公开入口或可注入后端)未纳入本次。 - Phase 5 若改动数据端接口,本阶段测试需同步调整。 +- 顶层实现(`data-state` 的 calculator / CommonAura / GuardAura / 特殊属性语义 / 支援递归)与 data-state 现有测试改动不属 06-01 战斗系统深化讨论。