From 8d66bc4ae26b59c21d9cc6ceaf0c32780ac10f77 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 15 Sep 2026 16:10:58 +0800 Subject: [PATCH] fix(07): revise plans based on checker feedback --- .planning/phases/07-data-fixes/07-04-PLAN.md | 6 +- .planning/phases/07-data-fixes/07-05-PLAN.md | 68 ++++++++++---------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/.planning/phases/07-data-fixes/07-04-PLAN.md b/.planning/phases/07-data-fixes/07-04-PLAN.md index b3c0288..d43ae8d 100644 --- a/.planning/phases/07-data-fixes/07-04-PLAN.md +++ b/.planning/phases/07-data-fixes/07-04-PLAN.md @@ -18,7 +18,7 @@ requirements: estimate: tokens: 52000 raw_tokens: 52000 - tasks: 7 + tasks: 6 confidence: low must_haves: truths: @@ -57,7 +57,7 @@ must_haves: Purpose: 装备加成、存档快照独立性与属性 final 同步直接决定勇士数值正确性与存读档可靠性;`#06-09-1` 是 20 条中唯一登记为「高」严重度的一条。 -Output: 3 个生产文件的最小修复 + 9 条 skip 取消 + 1 条 skip 保留且加注释 + WINDOWS.md id 25/26 结清 + 已知语义缺口登记。 +Output: 3 个生产文件的最小修复 + 8 条 skip 取消 + 1 条 skip 保留(`equipment.test.ts` 码 147 用例,D-06)且加注释 + WINDOWS.md id 25/26 结清 + 已知语义缺口登记。 执行序:本计划在 07-03(replay)之后串行执行;`depends_on` 表示 D-09 逐步用户确认与 D-12c 全量门禁的串行约束,源码层面与本系统无耦合。 @@ -326,7 +326,7 @@ Output: 3 个生产文件的最小修复 + 9 条 skip 取消 + 1 条 skip 保留 -1. `#06-09-1`(高)、`#06-09-2`、`#06-05-1`、`#06-05-2` 对应 9 条正确预期用例取消 skip 并转绿 +1. `#06-09-1`(高)、`#06-09-2`、`#06-05-1`、`#06-05-2` 对应 8 条正确预期用例取消 skip 并转绿(`saveLoad.test.ts` 6 条 + `attribute.test.ts` 1 条 + `equipment.test.ts` 1 条);`equipment.test.ts` 的码 147 用例(`warns code 147 when no equipment slot is available`,`:306-315`)属 D-06 保留,**不计入**取消数 2. `#06-05-3` 严格按 D-06 处置:生产代码零改动、skip 保留、注释说明就位 3. 按缺陷 4 个原子提交 + 1 个注释/门禁收尾提交 4. 数字槽语义缺口在 SUMMARY 登记,未被静默忽略 diff --git a/.planning/phases/07-data-fixes/07-05-PLAN.md b/.planning/phases/07-data-fixes/07-05-PLAN.md index 2fbb17e..467bb57 100644 --- a/.planning/phases/07-data-fixes/07-05-PLAN.md +++ b/.planning/phases/07-data-fixes/07-05-PLAN.md @@ -45,7 +45,7 @@ must_haves: --- -修复地图数据模型(`@user/data-base` L1)的 2 条登记缺陷:`#06-06-1` 越图 `transferToDynamic` 发错诊断码 131(应为 128,对齐两个 `transferToStatic*` 兄弟分支,D-04)、`#06-09-3` `DynamicTile.loadState` 不恢复 `num`。 +修复地图数据模型(`@user/data-base` L1)的 2 条登记缺陷:`#06-09-3` `DynamicTile.loadState` 不恢复 `num`(中)、`#06-06-1` 越图 `transferToDynamic` 发错诊断码 131(应为 128,对齐两个 `transferToStatic*` 兄弟分支,D-04)。 Purpose: 诊断码是排障与回放校验的事实源,语义错位会误导定位;动态图块数字未恢复会让读档后的地图层与存档不一致(仅图层路径因先 `createDynamic(num)` 而掩盖该缺陷)。 @@ -136,37 +136,7 @@ Output: 2 个生产文件的最小修复 + 2 条 skip 取消 + 码 131 全仓断 - Task 1: 修复 #06-06-1 —— 越图 transferToDynamic 改发码 128 - packages-user/data-base/src/map/mapLayer.ts, packages-user/data-base/src/map/mapLayer.test.ts - - - packages-user/data-base/src/map/mapLayer.ts(:435-496) - - packages-user/data-base/src/map/mapLayer.test.ts(:397-437) - - packages-user/data-base/src/map/gameMap.test.ts(:173-192 码 131 的唯一既有断言) - - packages/common/src/logger.json(码 128 与 131 文案) - - -把 `mapLayer.ts:441` 的 `logger.warn(131, x.toString(), y.toString())` 改为 `logger.warn(128, x.toString(), y.toString())`,参数个数与形态与两个兄弟分支保持一致。`if (!this.inMap(x, y))` 守卫、`return null`、其后的 `num === 0` 分支(告警 127)与其余控制流一律不动。若 Task 0 用户选择补齐占位符,则按用户指示同时修改三个越界分支的参数(否则严格只改这一处)。 - -按 D-10 取消 `mapLayer.test.ts:419-427`(`warns code 128 for an out-of-map transferToDynamic`)的 skip,断言一字不改,同步 it 前的中文注释。修复前先确认 `:408-416` 的既有绿用例(只断言 `null`)与 `gameMap.test.ts:185` 的码 131 断言均不含 131 → 128 的隐式依赖。 - -不做的事:不改 `gameMap.ts` 的 `setEventLayer` 写入点;不改 `transferToStatic*`(除非 Task 0 选择了补齐占位符);不改 `num === 0` 分支;不改 `mapLayer.test.ts:397-406`(告警 127)与 `:429-437`;不新增用例。 - -验证:`pnpm exec vitest run packages-user/data-base/src/map/mapLayer.test.ts packages-user/data-base/src/map/gameMap.test.ts` 全绿(覆盖码 131 唯一断言)→ D-44 门禁三步。提交信息:`fix(07-05): #06-06-1 warn code 128 for an out-of-map dynamic transfer`。 - - - pnpm exec vitest run packages-user/data-base/src/map/mapLayer.test.ts packages-user/data-base/src/map/gameMap.test.ts - 非零退出,或摘要行出现 "1 failed" / "failed"(诊断码不符,或码 131 的既有断言回归),或输出出现 "no tests found" - - - - `mapLayer.ts` 的 `transferToDynamic` 越界分支发 `logger.warn(128, ...)`,且文件内不再存在 `logger.warn(131` - - `mapLayer.test.ts` 的 `warns code 128 for an out-of-map transferToDynamic` 已取消 skip - - `pnpm exec vitest run packages-user/data-base/src/map/mapLayer.test.ts packages-user/data-base/src/map/gameMap.test.ts` 全绿 - - 越界诊断码与兄弟分支一致、目标用例取消 skip 且码 131 路径不回归;已一个原子提交入库 - - - - Task 2: 修复 #06-09-3 —— DynamicTile.loadState 恢复图块数字 + Task 1: 修复 #06-09-3 —— DynamicTile.loadState 恢复图块数字 packages-user/data-base/src/map/dynamicTile.ts, packages-user/data-base/src/map/saveLoad.test.ts - packages-user/data-base/src/map/dynamicTile.ts(:50-128) @@ -196,6 +166,36 @@ Output: 2 个生产文件的最小修复 + 2 条 skip 取消 + 码 131 全仓断 读档恢复 num 且事件语义不变、目标用例取消 skip 并转绿;已一个原子提交入库 + + Task 2: 修复 #06-06-1 —— 越图 transferToDynamic 改发码 128 + packages-user/data-base/src/map/mapLayer.ts, packages-user/data-base/src/map/mapLayer.test.ts + + - packages-user/data-base/src/map/mapLayer.ts(:435-496) + - packages-user/data-base/src/map/mapLayer.test.ts(:397-437) + - packages-user/data-base/src/map/gameMap.test.ts(:173-192 码 131 的唯一既有断言) + - packages/common/src/logger.json(码 128 与 131 文案) + + +把 `mapLayer.ts:441` 的 `logger.warn(131, x.toString(), y.toString())` 改为 `logger.warn(128, x.toString(), y.toString())`,参数个数与形态与两个兄弟分支保持一致。`if (!this.inMap(x, y))` 守卫、`return null`、其后的 `num === 0` 分支(告警 127)与其余控制流一律不动。若 Task 0 用户选择补齐占位符,则按用户指示同时修改三个越界分支的参数(否则严格只改这一处)。 + +按 D-10 取消 `mapLayer.test.ts:419-427`(`warns code 128 for an out-of-map transferToDynamic`)的 skip,断言一字不改,同步 it 前的中文注释。修复前先确认 `:408-416` 的既有绿用例(只断言 `null`)与 `gameMap.test.ts:185` 的码 131 断言均不含 131 → 128 的隐式依赖。 + +不做的事:不改 `gameMap.ts` 的 `setEventLayer` 写入点;不改 `transferToStatic*`(除非 Task 0 选择了补齐占位符);不改 `num === 0` 分支;不改 `mapLayer.test.ts:397-406`(告警 127)与 `:429-437`;不新增用例。 + +验证:`pnpm exec vitest run packages-user/data-base/src/map/mapLayer.test.ts packages-user/data-base/src/map/gameMap.test.ts` 全绿(覆盖码 131 唯一断言)→ D-44 门禁三步。提交信息:`fix(07-05): #06-06-1 warn code 128 for an out-of-map dynamic transfer`。 + + + pnpm exec vitest run packages-user/data-base/src/map/mapLayer.test.ts packages-user/data-base/src/map/gameMap.test.ts + 非零退出,或摘要行出现 "1 failed" / "failed"(诊断码不符,或码 131 的既有断言回归),或输出出现 "no tests found" + + + - `mapLayer.ts` 的 `transferToDynamic` 越界分支发 `logger.warn(128, ...)`,且文件内不再存在 `logger.warn(131` + - `mapLayer.test.ts` 的 `warns code 128 for an out-of-map transferToDynamic` 已取消 skip + - `pnpm exec vitest run packages-user/data-base/src/map/mapLayer.test.ts packages-user/data-base/src/map/gameMap.test.ts` 全绿 + + 越界诊断码与兄弟分支一致、目标用例取消 skip 且码 131 路径不回归;已一个原子提交入库 + + Task 3: D-44 门禁、全量套件与未登记缺口登记 packages-user/data-base/src/map/mapLayer.ts, packages-user/data-base/src/map/dynamicTile.ts, packages-user/data-base/src/map/mapLayer.test.ts, packages-user/data-base/src/map/saveLoad.test.ts @@ -237,8 +237,8 @@ Output: 2 个生产文件的最小修复 + 2 条 skip 取消 + 码 131 全仓断 | Threat ID | Category | Component | Severity | Disposition | Mitigation Plan | |-----------|----------|-----------|----------|-------------|-----------------| -| T-7-03 | Tampering | `mapLayer.ts` `transferToDynamic` | low | mitigate | Task 1 使越界转换发码 128(越界语义),恢复诊断码的可解释性与唯一性 | -| T-7-11 | Tampering | `dynamicTile.ts` `loadState` | medium | mitigate | Task 2 补齐 `num` 恢复,避免读档后图块数字与存档不一致(静默数据损失) | +| T-7-03 | Tampering | `mapLayer.ts` `transferToDynamic` | low | mitigate | Task 2 使越界转换发码 128(越界语义),恢复诊断码的可解释性与唯一性 | +| T-7-11 | Tampering | `dynamicTile.ts` `loadState` | medium | mitigate | Task 1 补齐 `num` 恢复,避免读档后图块数字与存档不一致(静默数据损失) | | T-7-SC | Tampering | npm/pip/cargo 安装 | high | accept | 本阶段不安装任何包(`package.json`/`pnpm-lock.yaml` 不变);若执行中出现安装需求,立即停止并汇报 |