diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 76e4afd..881af8f 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -210,7 +210,7 @@ Plans: 3. 测试在本地可运行且全部通过 4. 测试由 AI 编写并运行,通过验证后可提交 -**Plans**: 9/9 原计划 executed replanned (D-28;旧 06-01/06-02 执行结果标记 superseded,按同号重跑;数据端切片,非数据 render/legacy 覆盖延后) + gap-fill 06-10..06-14 (D-46;人工评审缺口补测,只补测试不改生产代码;10/14 executed) +**Plans**: 9/9 原计划 executed replanned (D-28;旧 06-01/06-02 执行结果标记 superseded,按同号重跑;数据端切片,非数据 render/legacy 覆盖延后) + gap-fill 06-10..06-15 (D-46;人工评审缺口补测,只补测试不改生产代码;15/15 executed) Plans: @@ -250,6 +250,10 @@ Plans: - [x] 06-14-PLAN.md — replay read-stream gaps: G-06-04-C/A (stream-only complex route + middle start index) + G-06-04-C/B (per-param typed assertions, index progression, expired-after-mutation); blocked `#06-04-3`/`#06-04-4` as correct-expectation `it.skip` +**Wave 5** *(G-06-01-D interface-coverage gap-fill, D-46; serialized after 06-14)* + +- [x] 06-15-PLAN.md — combat interface gap: G-06-01-D (`EnemyContext.deleteAura` normal case — `addAura` applies `atk 2→5` → `deleteAura` same instance → `buildup` expects `2`); blocked `#06-15-1` (same root cause as `#06-01-4`) as correct-expectation `it.skip`, pending user decision + ## Progress **Execution Order:** @@ -262,4 +266,4 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6 | 3. 数据端完成 | 19/19 | Complete | 2026-09-12 | | 4. 渲染适配与双布局 | 0/TBD | Not started | - | | 5. Legacy 移植 | 0/TBD | Not started | - | -| 6. 单元测试 | 14/14 | In Progress| | +| 6. 单元测试 | 15/15 | In Progress| | diff --git a/.planning/STATE.md b/.planning/STATE.md index 0bcc2d2..319a1e5 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -4,11 +4,11 @@ milestone: v1.0 current_phase: 06 current_phase_name: unit-tests status: executing -stopped_at: Completed 06-14-PLAN.md (replay read-stream gap-fill, G-06-04-C) -last_updated: "2026-09-15T03:52:41.349Z" +stopped_at: Completed 06-15-PLAN.md (combat interface coverage gap-fill, G-06-01-D) +last_updated: "2026-09-15T05:19:06.000Z" last_activity: 2026-09-15 -last_activity_desc: Phase 06 execution started -state_head: 83dc4fdaf6a54cfcc344b6a4765581348682ec00 +last_activity_desc: Phase 06 gap-fill 06-15 complete — #06-15-1 correct-expectation skip awaiting user decision +state_head: d3eb4d2a0044930c559a373bd1e181f44f9cc2e6 progress: total_phases: 6 completed_phases: 0 @@ -29,9 +29,9 @@ See: .planning/PROJECT.md (updated 2026-09-10) ## Current Position Phase: 06 (unit-tests) — EXECUTING -Plan: 14 of 14 (all gap-fill plans 06-10..06-14 complete) -Status: Phase 06 gap-fill batch (D-46) complete — 06-14 (G-06-04-C read-stream) complete; pnpm test:ci green (66 files / 649 passed / 27 skipped) -Last activity: 2026-09-15 — Completed 06-14-PLAN.md (replay read-stream gap-fill) +Plan: 15 of 15 (all gap-fill plans 06-10..06-15 complete) +Status: Phase 06 gap-fill batch (D-46) complete — 06-15 (G-06-01-D deleteAura) complete with one correct-expectation `it.skip` (#06-15-1, same root cause as #06-01-4) awaiting user decision; pnpm test:ci green (66 files / 649 passed / 28 skipped) +Last activity: 2026-09-15 — Completed 06-15-PLAN.md (combat interface coverage gap-fill, G-06-01-D) Progress: [█████░░░░░] 50% @@ -92,6 +92,7 @@ Progress: [█████░░░░░] 50% | Phase 06 P12 | 13min | 3 tasks | 3 files | | Phase 06 P13 | 14min | 3 tasks | 4 files | | Phase 06 P14 | 12min | 3 tasks | 2 files | +| Phase 06 P15 | 12min | 2 tasks | 3 files | ## Accumulated Context @@ -198,6 +199,9 @@ Recent decisions affecting current work: - [Phase 06]: 06-14:G-06-04-C/A 新增仅经 createReadStream 的 7 命令复杂序列验证(用例体内无 array.get),逐参数 typeof+值、流索引 1..7 递进、末尾 null,并覆盖中间起始索引 createReadStream(3)/(6) - [Phase 06]: 06-14:G-06-04-C/B 强化既有 expectHeterogeneousRead(使 3 条复用用例受益)+ 两条既有流用例补每参数 typeof 与 stream.index 递进,并新增 add 变更后 expired===true + 告警 155 + 新建流按新次序类型化读回 - [Phase 06]: 06-14:受阻塞增删次序复用既有 #06-04-3/#06-04-4 锚点写正确预期 it.skip(5→7 条),不新建 #06-14-N 条目;可跑绿参数限定单字节 bigint 0..127 与 int32 整数 +- [Phase 06]: 06-15:G-06-01-D(`EnemyContext.deleteAura`)补测首次实测即为红灯——`addAura` 生效(atk 2→5)断言通过,但 `deleteAura`(同一 `FakeAura` 实例)+ 再次 `buildup` 后 atk 仍为 5(期望回到基础值 2),故按 D-05 保留正确预期并标记 `it.skip`,不弱化断言也不改写为可跑绿假象 +- [Phase 06]: 06-15:#06-15-1 与既有 #06-01-4 同根因(`buildup()` 只清空光环拓扑、未像 `refreshEnemy()` 那样先 `view.reset()`),findings 中交叉引用 #06-01-4 而非另立独立缺陷编号;修复 #06-01-4 后本用例可直接取消 skip +- [Phase 06]: 06-15:删除全局光环判定必须传同一光环实例(`globalAuraList` 为 Set 身份比较)且必须注册 `FakeConverter([])` 打开光环流水线(否则 `buildupBase()` 不执行导致假绿);本计划无新增码、无新增依赖、不测 saveState/loadState、不改动任何生产/核心源码 ### Pending Todos @@ -212,6 +216,8 @@ None yet. - Plan 01-13 records the same repository-wide type gate diagnostics outside its implementation and test files in the phase deferred-items ledger. - 06-09 阻断项:`pnpm test:ci` 存在先于本计划的既有回归(commit `cee8439` 将录像记录接入 `data-base/src/hero/{equipment,items,mover}.ts`,4 个既有 data-base 测试与 2 个 data-state 文件共 6 文件 / 15 用例失败)。本计划硬约束禁止修改这些越界文件,故 D-44(c) 无法全绿;本计划未新增失败(新增 41 通过 / 6 跳过)。详见 `06-TEST-FINDINGS.md` `#06-09` 阻断项。 +- 06-15 待用户裁决:G-06-01-D 用例无法跑绿(`deleteAura` 后再次 `buildup` 不回到基础值),与既有 #06-01-4 同根因(`buildup()` 未在重建前 `reset()` 各视图),已按 D-05 写正确预期 `it.skip` 并登记 `#06-15-1`。D-27/D-30「每公开方法 ≥1 正常用例」判据仍差 `deleteAura` 一条可跑绿用例(现为受阻塞正确预期 skip)。处置需用户确认:① 后续修复批次修复 `buildup` 视图重置(同时解 #06-01-4 与 #06-15-1);② 经确认把 `deleteAura` 从 D-30 判据排除。详见 `06-TEST-FINDINGS.md` `#06-15-1` 与 `06-15-SUMMARY.md`。 + ### Quick Tasks Completed | # | Description | Date | Commit | Directory | @@ -227,6 +233,6 @@ None yet. ## Session Continuity -Last session: 2026-09-15T03:52:41.072Z -Stopped at: Completed 06-14-PLAN.md (replay read-stream gap-fill, G-06-04-C) +Last session: 2026-09-15T05:19:06.000Z +Stopped at: Completed 06-15-PLAN.md (combat interface coverage gap-fill, G-06-01-D) Resume file: None diff --git a/.planning/WINDOWS.md b/.planning/WINDOWS.md index f479ab7..8e7c8c3 100644 --- a/.planning/WINDOWS.md +++ b/.planning/WINDOWS.md @@ -1,10 +1,10 @@ --- schema_version: 1 -open_count: 18 +open_count: 19 waived_count: 0 fixed_count: 8 -total_count: 26 -last_updated: 2026-09-15T03:31:00.000Z +total_count: 27 +last_updated: 2026-09-15T05:23:29.159Z --- # Broken Windows Ledger @@ -41,6 +41,7 @@ last_updated: 2026-09-15T03:31:00.000Z | 24 | 06 | skipped-test | packages-user/data-base/src/enemy/manager.test.ts | | 受阻塞缺口 G-06-03-A:复用映射未接入 createEnemy/createEnemyById(#06-03-1),四朝向复用生成独立怪物的正确预期用例保持 it.skip | open | | 2026-09-15T02:46:32.772Z | | | 25 | 06 | skipped-test | packages-user/data-base/src/hero/saveLoad.test.ts | | 受阻塞缺口 G-06-09-B:压缩档 loadDiff 未回退装备原始定义(#06-09-1),EquipmentState 百分比加成 Low/High 档正确预期用例保持 it.skip | open | | 2026-09-15T03:31:00.000Z | | | 26 | 06 | skipped-test | packages-user/data-base/src/hero/saveLoad.test.ts | | 受阻塞缺口 G-06-09-B:HeroEquipment.saveState 未深拷贝 equipped/slots(#06-09-2),经 HeroState 容器三档恢复装备映射的正确预期用例保持 it.skip | open | | 2026-09-15T03:31:01.000Z | | +| 27 | 06 | skipped-test | packages-user/data-system/src/combat/context.test.ts | 625 | 受阻塞缺口 G-06-01-D:deleteAura 后再次 buildup 不回到基础值(#06-15-1,与 #06-01-4 同根因),正确预期用例保持 it.skip 待用户确认 | open | | 2026-09-15T05:23:29.159Z | | ````json [ @@ -355,6 +356,18 @@ last_updated: 2026-09-15T03:31:00.000Z "reason": "", "recorded_at": "2026-09-15T03:31:01.000Z", "resolved_at": null + }, + { + "id": 27, + "kind": "skipped-test", + "phase": "06", + "file": "packages-user/data-system/src/combat/context.test.ts", + "line": 625, + "description": "受阻塞缺口 G-06-01-D:deleteAura 后再次 buildup 不回到基础值(#06-15-1,与 #06-01-4 同根因),正确预期用例保持 it.skip 待用户确认", + "status": "open", + "reason": "", + "recorded_at": "2026-09-15T05:23:29.159Z", + "resolved_at": null } ] ```` diff --git a/.planning/phases/06-unit-tests/06-15-SUMMARY.md b/.planning/phases/06-unit-tests/06-15-SUMMARY.md new file mode 100644 index 0000000..5a117a6 --- /dev/null +++ b/.planning/phases/06-unit-tests/06-15-SUMMARY.md @@ -0,0 +1,234 @@ +--- +phase: 06-unit-tests +plan: 15 +subsystem: testing +tags: [vitest, data-system, combat, enemy-context, delete-aura, gap-fill, g-06-01-d, it-skip] + +# Dependency graph +requires: + - phase: 06-unit-tests (06-01) + provides: EnemyContext 光环流水线行为单测与既有缺陷锚点 #06-01-4(重复全量构建未从原始怪物重算) +provides: + - G-06-01-D —— `EnemyContext.deleteAura` 的正常用例(`addAura` 生效 `atk 2 → 5` → `deleteAura` 同一实例 → 再次 `buildup` 期望回到 `2`) + - 新增缺陷锚点 #06-15-1(与既有 #06-01-4 同根因:`buildup()` 未在重建前 `reset()` 各视图) + - 06-COVERAGE-MAP.md 06-15 小节(G-06-01-D 缺口 → 用例 → 文件 → 计划映射) +affects: [06-verify-work, phase 6 gap-fill batch, future fix batch for #06-01-4/#06-15-1] + +# Actuals (#2632) — same scale as the plan `estimate` (chars/4 over the realized diff). +actuals: + tokens: 1323 + tasks: 2 + commits: 2 + +# Tech tracking +tech-stack: + added: [] + patterns: + - "删除全局光环的判定必须传入同一光环实例、经再次全量构建(`buildup`)观测,并先注册 `FakeConverter([])` 打开光环流水线(否则 `buildupBase` 不执行,用例假绿)" + - "受实现缺陷阻塞的缺口按 D-05 写正确预期 `it.skip`,并交叉引用同根因的既有锚点,不另立独立缺陷编号" + +key-files: + created: [] + modified: + - packages-user/data-system/src/combat/context.test.ts + - .planning/phases/06-unit-tests/06-COVERAGE-MAP.md + - .planning/phases/06-unit-tests/06-TEST-FINDINGS.md + +key-decisions: + - "G-06-01-D 用例按 D-05 以正确预期编写并标记 `it.skip`:临时取消 skip 实测 `addAura` 生效断言通过(`atk = 5`),但 `deleteAura` + 再次 `buildup` 后仍为 `5`(`AssertionError: expected 5 to be 2`),故不弱化断言、不改为可跑绿假象" + - "#06-15-1 与既有 #06-01-4 同根因(`buildup()` 未在重建前对各视图 `reset()`),已在 06-TEST-FINDINGS.md 交叉引用 #06-01-4;修复 #06-01-4 后本用例可直接取消 skip" + - "只新增 1 条 `it.skip`;`context.test.ts` 既有用例与断言零变化,既有 skip 数量不变" + - "不引入任何新码、不新增依赖、不测 saveState/loadState(D-09/D-32);不修改任何生产/核心源码(D-46)" + +patterns-established: + - "同实例删除语义验证:`addAura(aura)` 与 `deleteAura(aura)` 必须传同一 `FakeAura` 实例(`Set` 身份比较),不得两次 `new FakeAura(...)`" + - "同根因缺口复用既有锚点:受阻塞的补测用例把根因指向既有 finding(本次 #06-01-4),避免同一缺陷被登记成多个编号" + +requirements-completed: [TEST-01] + +# Coverage metadata (#1602) +coverage: + - id: D1 + description: "G-06-01-D —— `EnemyContext.deleteAura` 正常用例:注册转换器 → `addAura` → `buildup` 断言 `atk 2 → 5` → `deleteAura`(同一实例)→ 再次 `buildup` 断言回到 `2`" + requirement: "TEST-01" + verification: + - kind: unit + ref: "packages-user/data-system/src/combat/context.test.ts#applies a global aura after addAura and stops applying it after deleteAura (it.skip)" + status: unknown + human_judgment: true + rationale: "用例为受生产缺陷 #06-15-1(与 #06-01-4 同根因:`buildup()` 未在重建前 `reset()` 各视图)阻塞的正确预期 `it.skip`,当前无法跑绿;是否修复核心代码(本批次硬约束禁止)或长期保留 skip,需用户确认后决定" + - id: D2 + description: "06-COVERAGE-MAP.md create-or-append 06-15 小节,登记 G-06-01-D → 用例 → 文件 → 计划 映射并注明无新增码" + requirement: "TEST-01" + verification: + - kind: other + ref: ".planning/phases/06-unit-tests/06-COVERAGE-MAP.md#06-15 战斗系统接口覆盖补齐(D-46 / G-06-01-D)" + status: pass + - kind: integration + ref: "pnpm test:ci (66 files / 649 passed / 28 skipped)" + status: pass + human_judgment: false + +# Metrics +duration: 12min +completed: 2026-09-15 +status: complete +--- + +# Phase 6 Plan 15: 战斗系统接口覆盖补齐(G-06-01-D)Summary + +**为 `EnemyContext.deleteAura` 补上唯一缺失的公开方法正常用例(`addAura` 生效 `atk 2 → 5` → `deleteAura` 同一实例 → 再次 `buildup` 期望回到 `2`);该用例实测暴露与既有 `#06-01-4` 同根因的 `buildup` 未重置缺陷,按 D-05 以正确预期 `it.skip` 登记为 `#06-15-1`,本批次不修改任何生产代码** + +> **⚠️ 未达成的成功判据(需用户确认)**:计划 `` 要求该用例「可跑绿」。 +> 实测不可跑绿——`addAura` 生效的前两条断言通过(`atk = 5`),但 `deleteAura` + 再次 +> `buildup` 后 `atk` 仍为 `5` 而非回到基础值 `2`。按计划 D-05 的明文约定 +> (「不得弱化断言——写正确预期 + `it.skip` 并登记 `#06-15-N`」)执行, +> 未把受阻塞缺口伪装成失败用例或假绿用例。详见下节与 `06-TEST-FINDINGS.md` `#06-15-1`。 + +## Performance + +- **Duration:** 12 min +- **Started:** 2026-09-15T05:07:12Z +- **Completed:** 2026-09-15T05:19:06Z +- **Tasks:** 2/2 +- **Files modified:** 3 + +## Accomplishments + +- **阶段 1(构件级,G-06-01-D)**:在 `EnemyContext single aura ranges` 分区新增 1 条用例 + `applies a global aura after addAura and stops applying it after deleteAura`, + 与既有 `applies a full-range aura to every enemy` 同构(同 `FullRange` + + `onApply: handler => handler.enemy.addAttribute('atk', 3)`),仅增加 `deleteAura` 后的 + 第二次 `buildup` 与回退断言。三条断言齐备:baseline `2` → 光环生效 `5` → 回退 `2`; + 复用文件内既有 `createContextFixture`/`createEnemy`/`FakeAura`/`FakeConverter`,无新增 helper、 + 无跨文件共享(D-02/D-03)、无新导入。 +- **首次实测(临时取消 skip 验证)**:`atk 2 → 5` 两条断言通过, + `deleteAura` 后回退断言失败(`AssertionError: expected 5 to be 2`)—— + 证明该用例不是空转,而是真实暴露了实现行为。 +- **缺陷登记**:按 D-05 保留正确预期并标记 `it.skip`,在 `06-TEST-FINDINGS.md` 追加 + `## #06-15` 小节与 `#06-15-1` 条目,交叉引用既有 `#06-01-4`(同根因), + 并附最小复现、影响面与建议修复方向;不引入新 warn/error 码。 +- **阶段 2(收口)**:以 create-or-append 方式追加 `06-COVERAGE-MAP.md` 06-15 小节, + 登记 G-06-01-D → 用例 → 文件 → 计划 映射并注明本计划无新增码;既有小节与 code 表行逐字未变 + (`git diff` 仅新增行)。 +- **全仓库检索变化**:`deleteAura` 由「仅命中 2 个生产文件」变为「测试文件也命中」 + (`context.test.ts:625`、`context.test.ts:654`);`addAura` 在 `context.test.ts` 的命中由 8 增至 10, + 既有覆盖无减少。 + +## Task Commits + +Each task was committed atomically: + +1. **阶段 1(构件级):G-06-01-D 补 `deleteAura` 正确预期用例 + 登记 `#06-15-1`** - `65251f5` (test) +2. **阶段 2(收口):写入 `06-COVERAGE-MAP.md` 06-15 小节并复核门禁** - `d3eb4d2` (docs) + +**Plan metadata:** (this commit) (docs: complete plan) + +## Files Created/Modified + +- `packages-user/data-system/src/combat/context.test.ts` — 新增 1 条正确预期 `it.skip` 用例 + `applies a global aura after addAura and stops applying it after deleteAura`(+41,纯新增; + 既有用例、断言与既有 skip 零变化) +- `.planning/phases/06-unit-tests/06-COVERAGE-MAP.md` — create-or-append 追加 06-15 小节(+23,纯新增) +- `.planning/phases/06-unit-tests/06-TEST-FINDINGS.md` — 追加 `## #06-15` 小节与 `#06-15-1` 条目(+32,纯新增) + +## Decisions Made + +- G-06-01-D 用例按 **D-05** 以正确预期编写并标记 `it.skip`:临时取消 skip 已实测确为真实失败 + (`atk = 5`,期望 `2`),因此不弱化断言、不改写成「删除不报错」式的空转断言、 + 也不改为只断言「新怪不受影响」以绕过缺陷。 +- `#06-15-1` 与既有 `#06-01-4` **同根因**(`buildup()` 只清空光环拓扑,未像 `refreshEnemy` + 那样先 `view.reset()` 把计算后怪物恢复至原始怪物),故在 findings 中交叉引用 `#06-01-4` + 而非包装成两个独立缺陷;修复 `#06-01-4` 后本用例可直接取消 skip 转为回归用例。 +- `addAura`/`deleteAura` 使用**同一** `FakeAura` 实例(`globalAuraList` 为 `Set`,按身份比较), + 避免用例假绿。 +- 必须注册 `new FakeConverter([])`:`buildup()` 仅在 `auraConverter.size > 0 || specialQueryEffects.size > 0` + 时才执行 `buildupSpecials()`/`buildupBase()`,否则光环基础效果不会被施加。 +- 本计划不引入任何新码、不新增依赖、不测 `saveState`/`loadState`(D-09/D-32), + 不修改任何生产/核心源码(D-46)。 + +## Deviations from Plan + +### Plan-sanctioned deviation(非 auto-fix,属计划 D-05 明文路径) + +**1. [Plan D-05 / D-43] 用例由「可跑绿」变为「正确预期 `it.skip`」** +- **Found during:** Task 1(阶段 1 构件级) +- **Issue:** 计划 `` 与硬约束要求该用例可跑绿并断言 `deleteAura` 后 `atk` 回到 `2`。 + 实测(临时取消 skip)为 `5`:`buildup()` 不在重建前 `reset()` 各视图, + 删除光环后此前已叠加到计算后怪物上的 `+3` 不被撤销。 +- **Fix:** 按计划 `` 的明文约定——「若该用例在正确预期下无法跑绿(例如 `deleteAura` + 后光环仍生效),**不得弱化断言**——按 D-05 写正确预期 + `it.skip` 并登记 + `06-TEST-FINDINGS.md` 的 `#06-15-N`」——保留三条正确预期断言并标记 `it.skip`, + 追加 `06-TEST-FINDINGS.md` `#06-15-1`(交叉引用 `#06-01-4`)。 +- **Files modified:** `packages-user/data-system/src/combat/context.test.ts`(`it.skip` 与注释)、 + `.planning/phases/06-unit-tests/06-TEST-FINDINGS.md`(`#06-15-1`) +- **Verification:** 聚焦运行 `pnpm exec vitest run packages-user/data-system/src/combat/context.test.ts` + → 39 passed / 1 skipped;`pnpm test:ci` → 66 文件 / 649 passed / 28 skipped 全绿 +- **Committed in:** `65251f5`(阶段 1) +- **说明:** 计划 `` frontmatter 只列了 `context.test.ts` 与 `06-COVERAGE-MAP.md`, + 但计划 `` 与 D-05/D-06 明确要求发现缺陷时登记 `06-TEST-FINDINGS.md`, + 故将 `06-TEST-FINDINGS.md` 一并纳入阶段 1 提交。 + +**未执行的可选加强项:** 计划 `` 中「可选加强」建议在步骤 4 之后再次 +`addAura(aura)` + `buildup()` 断言 `atk` 又回到 `5`。因同一根因下该断言同样不可跑绿 +(实际会得到 `8` = 5 + 3),且它只是同一缺陷的第三次观测,故未加入,以保持用例最小、 +断言最聚焦。 + +--- + +**Total deviations:** 1(计划 D-05 明文路径,非 auto-fix;无 Rule 1-4 auto-fix) +**Impact on plan:** G-06-01-D 用例本身落地且真实可判定,但**未能按计划预期跑绿**; +`EnemyContext.deleteAura` 的接口判据仍未由一条可跑绿用例满足,缺口状态从 +「0 测试引用」变为「有正确预期 `it.skip` + 已登记缺陷锚点」。**需用户确认后续处置** +(修复 `#06-01-4`/`#06-15-1` 后取消 skip,或长期保留 skip)。无范围蔓延,无生产代码改动。 + +## Issues Encountered + +- **阻断性实现缺陷(计划已预判的失败分支)**:`deleteAura` 后再次 `buildup()` 不会把计算后怪物 + 恢复至原始怪物,属性停留在旧值 `5`。根因与既有 `#06-01-4` 完全一致——`buildup()` 内只清空 + `sortedAura`/`convertedAura` 等拓扑集合,未对每个视图调用 `reset()`; + 只有局部刷新路径 `refreshEnemy()`(`context.ts:784`)会 `view.reset()`。 + 已按 D-05 记录、未修改核心代码。 +- 首次聚焦运行即为红灯,验证了该用例不是「删了不报错」式空转——正是计划 `` + 的 `fails_when` 中「未断言属性回到基础值 `2`」之外的更强信号:断言存在且真实失败。 + +## D-44 Quality Gate Results + +| 阶段 | `eslint --fix` | `eslint <改动文件>` | `vue-tsc`(按文件路径过滤) | 聚焦运行 | `pnpm test:ci` | +| --- | --- | --- | --- | --- | --- | +| 1 | exit 0 | 0 错误 | 0 类型错误(全局既有无关错误 28 条不变) | 39 passed / 1 skipped | 66 文件 / **649 passed** / 28 skipped | +| 2 | n/a(`06-COVERAGE-MAP.md` 非 JS,eslint 无匹配配置 → 0 错误) | 0 错误 | 0 类型错误(28 条不变) | — | 66 文件 / **649 passed** / **28 skipped** | + +- `vue-tsc --noEmit` 过滤 `combat/context.test.ts` 命中 0 条;28 条既有无关错误全部位于 + `client-modules` / `legacy-plugin-data` / `legacy-ui`(D-44 明确排除范围)。 +- `git status` 最终仅含本计划三个规划/测试文件;无生产/核心源码改动, + 无 06-01..06-14 计划改动。 + +## User Setup Required + +None - no external service configuration required. + +## Next Phase Readiness + +- **06-15 小节已落地**:`06-COVERAGE-MAP.md` 06-15 小节登记 G-06-01-D 映射并注明无新增码; + 既有小节与 code 表行逐字未变。 +- **`#06-15-1` 待用户裁决**:与 `#06-01-4` 同根因。处置选项: + 1. 在后续修复批次修复 `buildup()` 的视图重置(推荐)→ 同时解 `#06-01-4` 与本条 2 条 skip; + 2. 与用户确认后把 `deleteAura` 从 D-30「每公开方法 ≥1 正常用例」判据中排除。 +- **接口判据状态**:D-27/D-30 的「每公开方法至少一条正常用例」在 `context.test.ts` 侧 + 仍差 `deleteAura` 一条**可跑绿**用例(现为受阻塞的正确预期 skip); + 该缺口已在覆盖表与 findings 中显式登记,不再是无记录的漏测。 +- `pnpm test:ci` 全绿(66 文件 / 649 passed / 28 skipped),D-44 三项文件级门禁全部通过。 + +--- +*Phase: 06-unit-tests* +*Completed: 2026-09-15* + +## Self-Check: PASSED + +- FOUND: `.planning/phases/06-unit-tests/06-15-SUMMARY.md` +- FOUND: `packages-user/data-system/src/combat/context.test.ts` +- FOUND: `.planning/phases/06-unit-tests/06-COVERAGE-MAP.md` +- FOUND: `.planning/phases/06-unit-tests/06-TEST-FINDINGS.md` +- FOUND: commit `65251f5`(阶段 1) +- FOUND: commit `d3eb4d2`(阶段 2)