From d9ac8a6007636718c5273deb8f3897855bc1ed9f Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Mon, 14 Sep 2026 14:13:58 +0800 Subject: [PATCH] fix(06): add D-44 lint+type quality gate to all plans --- .planning/phases/06-unit-tests/06-01-PLAN.md | 5 +++++ .planning/phases/06-unit-tests/06-02-PLAN.md | 5 +++++ .planning/phases/06-unit-tests/06-03-PLAN.md | 5 +++++ .planning/phases/06-unit-tests/06-04-PLAN.md | 5 +++++ .planning/phases/06-unit-tests/06-05-PLAN.md | 5 +++++ .planning/phases/06-unit-tests/06-06-PLAN.md | 5 +++++ .planning/phases/06-unit-tests/06-07-PLAN.md | 5 +++++ .planning/phases/06-unit-tests/06-08-PLAN.md | 5 +++++ .planning/phases/06-unit-tests/06-09-PLAN.md | 5 +++++ 9 files changed, 45 insertions(+) diff --git a/.planning/phases/06-unit-tests/06-01-PLAN.md b/.planning/phases/06-unit-tests/06-01-PLAN.md index 623bbc1..e0e38d7 100644 --- a/.planning/phases/06-unit-tests/06-01-PLAN.md +++ b/.planning/phases/06-unit-tests/06-01-PLAN.md @@ -31,6 +31,7 @@ must_haves: - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" - "阶段化(D-43):计划按 构件→组合→完整 三阶段组织,每阶段跑绿后进入下一阶段;阻断性 bug 暂停等确认。" + - "质量门禁(D-44):每个计划执行后、提交前,改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误(全局既有无关错误不在范围);`pnpm test:ci` 全绿;任一不通过不得提交。" artifacts: - path: packages-user/data-system/src/combat/context.test.ts provides: EnemyContext 全接口、光环流水线、效果阶段顺序与生命周期覆盖 @@ -102,6 +103,7 @@ Output: 4 个同目录 `*.test.ts` 与 `06-COVERAGE-MAP.md`(表头 + 06-01 行 - `06-COVERAGE-MAP.md` 为共享 create-or-append 文件(幂等、顺序无关):写入前先检查表头(`| code | 模块 | 用例 | 计划 |`)是否存在,不存在则先创建,再只追加/更新本计划小节,绝不重写他节。其它计划使用同一协议,故执行顺序不影响结果。 - **执行协议(D-33):执行本计划前必须先向用户确认;执行完成后暂停,用中文分条简要汇报本计划验证结果;详细结果写入共用的 `06-TEST-FINDINGS.md`。** - **阶段门禁(D-43):本计划按 构件 → 组合/流水线 → 完整/集成 三阶段顺序执行,每阶段跑绿后才进入下一阶段;若某阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认,不得跳过或弱化。** +- **质量门禁(D-44,每个计划执行后、提交前必过)**:对改动文件运行 `eslint --fix`,并确保 `eslint <改动文件>` **0 错误**;对**本计划改动的测试文件**运行 `pnpm exec vue-tsc --noEmit`,并按输出文件路径过滤,确保这些文件路径下 **0 类型错误**(全局既有无关错误,如 `client-modules`/`legacy-plugin-data`,不在本门禁范围);`pnpm test:ci` **全绿**。任一不通过则**不得提交**(vitest 用 esbuild 剥类型,类型/格式错误不会让测试失败,故必须显式门禁)。 @@ -137,6 +139,7 @@ Output: 4 个同目录 `*.test.ts` 与 `06-COVERAGE-MAP.md`(表头 + 06-01 行 - 覆盖 `EnemyContext` 每个公开方法至少一条单元用例;三范围各自单独断言且范围外不生效;单个 aura/effect 单次施加有数值断言;`resize`/`clear`/`destroy` 生命周期有断言。 - 未修改任何生产文件;`git status` 只显示 `*.test.ts`(新增或 MODIFIED,既有测试文件允许被修改)与规划产物(`06-COVERAGE-MAP.md` / `06-TEST-FINDINGS.md`)。 - `06-COVERAGE-MAP.md` 存在且含表头与 06-01 小节(create-or-append:若表头已由其它计划建立,则直接追加/更新本小节而不再新建)。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 1(构件级)的单个方法/单个光环/单 effect 单元覆盖全部跑绿后才进入阶段 2;阶段 code 覆盖映射表骨架存在。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -167,6 +170,7 @@ Output: 4 个同目录 `*.test.ts` 与 `06-COVERAGE-MAP.md`(表头 + 06-01 行 - `context.test.ts` 零非跳过失败。 - 一层/两层嵌套 + 优先级边界、四阶段顺序 + 阶段间可见性、全量/局部两条刷新路径、全部列出警告码均有断言。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 2(组合/流水线)在阶段 1 跑绿的基础上全部跑绿后才进入阶段 3;七项检查(嵌套/优先级/四阶段/刷新/警告码)齐备。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -214,6 +218,7 @@ Output: 4 个同目录 `*.test.ts` 与 `06-COVERAGE-MAP.md`(表头 + 06-01 行 - combat.test.ts 断言 138、139、140、141 与 awaited 脚本顺序。 - 无 fake timers;`it.skip` 用例与 `06-TEST-FINDINGS.md` 的 `#06-01-N` 一一对应。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 3(完整/集成)在阶段 1/2 跑绿的基础上全部跑绿;伤害上下文/系统、地图伤害、战斗流程覆盖完成,且四阶段/联动边界与既有 `#06-01-N` 跳过用例保留。若本阶段发现阻断性 bug,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 diff --git a/.planning/phases/06-unit-tests/06-02-PLAN.md b/.planning/phases/06-unit-tests/06-02-PLAN.md index b5a9da6..4327cbf 100644 --- a/.planning/phases/06-unit-tests/06-02-PLAN.md +++ b/.planning/phases/06-unit-tests/06-02-PLAN.md @@ -31,6 +31,7 @@ must_haves: - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" - "阶段化(D-43):计划按 构件→组合→完整 三阶段组织,每阶段跑绿后进入下一阶段;阻断性 bug 暂停等确认。" + - "质量门禁(D-44):每个计划执行后、提交前,改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误(全局既有无关错误不在范围);`pnpm test:ci` 全绿;任一不通过不得提交。" artifacts: - path: packages-user/data-state/src/enemy/calculator.test.ts provides: MainDamageCalculator 与 getCriticalLimit 覆盖 @@ -100,6 +101,7 @@ Output: 6 个同目录 `*.test.ts`。 - `06-COVERAGE-MAP.md` 为共享 create-or-append 文件(幂等、顺序无关):写 06-02 小节前先检查表头(`| code | 模块 | 用例 | 计划 |`)是否存在,不存在则先创建,再只追加/更新本小节,绝不重写他节。 - **执行协议(D-33):执行前向用户确认;执行后暂停并用中文分条汇报。** - **阶段门禁(D-43):本计划按 构件 → 组合/流水线 → 完整/集成 三阶段顺序执行,每阶段跑绿后才进入下一阶段;若某阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认,不得跳过或弱化。** +- **质量门禁(D-44,每个计划执行后、提交前必过)**:对改动文件运行 `eslint --fix`,并确保 `eslint <改动文件>` **0 错误**;对**本计划改动的测试文件**运行 `pnpm exec vue-tsc --noEmit`,并按输出文件路径过滤,确保这些文件路径下 **0 类型错误**(全局既有无关错误,如 `client-modules`/`legacy-plugin-data`,不在本门禁范围);`pnpm test:ci` **全绿**。任一不通过则**不得提交**(vitest 用 esbuild 剥类型,类型/格式错误不会让测试失败,故必须显式门禁)。 @@ -139,6 +141,7 @@ Output: 6 个同目录 `*.test.ts`。 - 三个文件零非跳过失败。 - calculator.test.ts 断言每个列出分支与 warn 137;final.test.ts 与 comparer.test.ts 断言其文档分支。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 1(构件级)的伤害计算、最终效果、比较器单分支单元覆盖全部跑绿后才进入阶段 2;每分支期望值有断言。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -171,6 +174,7 @@ Output: 6 个同目录 `*.test.ts`。 - aura.test.ts 断言范围选择、buff 数学与 guard-locator 行为(各单分支)。 - special.test.ts 断言 code 0-27 各注册一次 + guard 默认值 + 名称/描述抽查。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 2(组合/流水线)的光环转换器→施加与 special 注册在阶段 1 跑绿的基础上全部跑绿后才进入阶段 3。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -205,6 +209,7 @@ Output: 6 个同目录 `*.test.ts`。 - `mapDamage.test.ts` 零非跳过失败。 - 五视图单分支、converter 的每 special 视图集合、reducer 的求和/类型/extra 合并均有断言。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 3(完整/集成)的地图伤害视图、converter、reducer 单分支完整行为在阶段 1/2 跑绿的基础上全部跑绿。若本阶段发现阻断性 bug,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。完成后以 create-or-append 方式将本计划的 code→模块→用例行(code 137 → calculator.ts)写入 `06-COVERAGE-MAP.md` 的 06-02 小节:先检查表头,不存在则先创建,再只追加本小节,不重写他节。 diff --git a/.planning/phases/06-unit-tests/06-03-PLAN.md b/.planning/phases/06-unit-tests/06-03-PLAN.md index 0beb5e1..7b04a3e 100644 --- a/.planning/phases/06-unit-tests/06-03-PLAN.md +++ b/.planning/phases/06-unit-tests/06-03-PLAN.md @@ -27,6 +27,7 @@ must_haves: - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" - "阶段化(D-43):计划按 构件→组合→完整 三阶段组织,每阶段跑绿后进入下一阶段;阻断性 bug 暂停等确认。" + - "质量门禁(D-44):每个计划执行后、提交前,改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误(全局既有无关错误不在范围);`pnpm test:ci` 全绿;任一不通过不得提交。" artifacts: - path: packages-user/data-base/src/enemy/enemy.test.ts provides: Enemy 模型覆盖 @@ -86,6 +87,7 @@ Output: 3 个同目录 `*.test.ts`。 - `06-COVERAGE-MAP.md` 为共享 create-or-append 文件(幂等、顺序无关):写 06-03 小节前先检查表头(`| code | 模块 | 用例 | 计划 |`)是否存在,不存在则先创建,再只追加/更新本小节,绝不重写他节。 - **执行协议(D-33):执行前向用户确认;执行后暂停并用中文分条汇报。** - **阶段门禁(D-43):本计划按 构件 → 组合/流水线 → 完整/集成 三阶段顺序执行,每阶段跑绿后才进入下一阶段;若某阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认,不得跳过或弱化。** +- **质量门禁(D-44,每个计划执行后、提交前必过)**:对改动文件运行 `eslint --fix`,并确保 `eslint <改动文件>` **0 错误**;对**本计划改动的测试文件**运行 `pnpm exec vue-tsc --noEmit`,并按输出文件路径过滤,确保这些文件路径下 **0 类型错误**(全局既有无关错误,如 `client-modules`/`legacy-plugin-data`,不在本门禁范围);`pnpm test:ci` **全绿**。任一不通过则**不得提交**(vitest 用 esbuild 剥类型,类型/格式错误不会让测试失败,故必须显式门禁)。 @@ -121,6 +123,7 @@ Output: 3 个同目录 `*.test.ts`。 - enemy.test.ts 断言属性单键读写与 `cloneAttributes` 非别名。 - special.test.ts 断言两个 special 类的单方法单元(除 legacy 与存读档)。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 1(构件级)的 Enemy 属性单元与 special 单方法单元覆盖全部跑绿后才进入阶段 2。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -154,6 +157,7 @@ Output: 3 个同目录 `*.test.ts`。 - enemy.test.ts 断言 special CRUD 组合与 clone/copyFrom 独立性、warn 96。 - special.test.ts 断言 clone 独立性与 `deepEqualsTo` 判定。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 2(组合/流水线)的 special CRUD 与克隆/`deepEqualsTo` 独立性在阶段 1 跑绿的基础上全部跑绿后才进入阶段 3。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -186,6 +190,7 @@ Output: 3 个同目录 `*.test.ts`。 - `manager.test.ts` 零非跳过失败。 - 断言 prefab create/get/delete/change、reuse 映射、modify、comparer 脏跟踪生命周期,以及 warn 53/117/118。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 3(完整/集成)的 EnemyManager 注册表、prefab、reuse、脏跟踪在阶段 1/2 跑绿的基础上全部跑绿。若本阶段发现阻断性 bug,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。完成后以 create-or-append 方式将本计划的 code→模块→用例行(53/96/117/118)写入 `06-COVERAGE-MAP.md` 的 06-03 小节:先检查表头,不存在则先创建,再只追加本小节,不重写他节。 diff --git a/.planning/phases/06-unit-tests/06-04-PLAN.md b/.planning/phases/06-unit-tests/06-04-PLAN.md index 453a29b..f92ac84 100644 --- a/.planning/phases/06-unit-tests/06-04-PLAN.md +++ b/.planning/phases/06-unit-tests/06-04-PLAN.md @@ -28,6 +28,7 @@ must_haves: - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" - "阶段化(D-43):计划按 构件→组合→完整 三阶段组织,每阶段跑绿后进入下一阶段;阻断性 bug 暂停等确认。" + - "质量门禁(D-44):每个计划执行后、提交前,改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误(全局既有无关错误不在范围);`pnpm test:ci` 全绿;任一不通过不得提交。" artifacts: - path: packages-user/data-common/src/replay/array.test.ts provides: ReplayArray 全操作 + 编解码覆盖 @@ -93,6 +94,7 @@ Output: 4 个同目录 `*.test.ts`。 - `06-COVERAGE-MAP.md` 为共享 create-or-append 文件(幂等、顺序无关):写 06-04 小节前先检查表头(`| code | 模块 | 用例 | 计划 |`)是否存在,不存在则先创建,再只追加/更新本小节,绝不重写他节。 - **执行协议(D-33):执行前向用户确认;执行后暂停并用中文分条汇报。** - **阶段门禁(D-43):本计划按 构件 → 组合/流水线 → 完整/集成 三阶段顺序执行,每阶段跑绿后才进入下一阶段;若某阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认,不得跳过或弱化。** +- **质量门禁(D-44,每个计划执行后、提交前必过)**:对改动文件运行 `eslint --fix`,并确保 `eslint <改动文件>` **0 错误**;对**本计划改动的测试文件**运行 `pnpm exec vue-tsc --noEmit`,并按输出文件路径过滤,确保这些文件路径下 **0 类型错误**(全局既有无关错误,如 `client-modules`/`legacy-plugin-data`,不在本门禁范围);`pnpm test:ci` **全绿**。任一不通过则**不得提交**(vitest 用 esbuild 剥类型,类型/格式错误不会让测试失败,故必须显式门禁)。 @@ -122,6 +124,7 @@ Output: 4 个同目录 `*.test.ts`。 - `add`/`insert`/`delete`/`set`/`get` 各有单次断言;boolean/整数(全位宽)/bigint/string/数组参数均至少一条读回断言。 - 断言码 148、151、152、153。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 1(构件级)的单类型编解码与单数组操作覆盖全部跑绿后才进入阶段 2。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -160,6 +163,7 @@ Output: 4 个同目录 `*.test.ts`。 - array 断言 `createReadStream`/`rebuildIndexArray`/`setReplayArray`/`getCommandArray`/`getParamArray`/`setCommandWidth` 组合与扩容,码 149/150/154/155。 - func 断言装饰器组合生命周期(begin/nested/end/detail)与码 159/160/161/162。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 2(组合/流水线)的数组操作组合/读流/扩容与安全装饰器在阶段 1 跑绿的基础上全部跑绿后才进入阶段 3。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -194,6 +198,7 @@ Output: 4 个同目录 `*.test.ts`。 - system.test.ts 断言注册、163、record+hook、沙箱创建/reset、实例独立性。 - sandbox.test.ts 断言顺序步进、失败即停、156/157/158/175、play/pause/resume/stop、setSpeed。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 3(完整/集成)的 ReplaySystem 与 ReplaySandbox 播放器在阶段 1/2 跑绿的基础上全部跑绿。若本阶段发现阻断性 bug,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。完成后以 create-or-append 方式将本计划的 code→模块→用例行(148–163、175)写入 `06-COVERAGE-MAP.md` 的 06-04 小节:先检查表头,不存在则先创建,再只追加本小节,不重写他节。 diff --git a/.planning/phases/06-unit-tests/06-05-PLAN.md b/.planning/phases/06-unit-tests/06-05-PLAN.md index bc84340..f0df0b7 100644 --- a/.planning/phases/06-unit-tests/06-05-PLAN.md +++ b/.planning/phases/06-unit-tests/06-05-PLAN.md @@ -33,6 +33,7 @@ must_haves: - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" - "阶段化(D-43):计划按 构件→组合→完整 三阶段组织,每阶段跑绿后进入下一阶段;阻断性 bug 暂停等确认。" + - "质量门禁(D-44):每个计划执行后、提交前,改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误(全局既有无关错误不在范围);`pnpm test:ci` 全绿;任一不通过不得提交。" artifacts: - path: packages-user/data-base/src/hero/attribute.test.ts provides: HeroAttribute 覆盖 @@ -116,6 +117,7 @@ Output: 10 个同目录 `*.test.ts`(阶段 1:attribute/modifier 2 文件; - `06-COVERAGE-MAP.md` 为共享 create-or-append 文件(幂等、顺序无关):写 06-05 小节前先检查表头(`| code | 模块 | 用例 | 计划 |`)是否存在,不存在则先创建,再只追加/更新本小节,绝不重写他节。 - **执行协议(D-33):执行前向用户确认;执行后暂停并用中文分条汇报。** - **阶段门禁(D-43):本计划按 构件 → 组合/流水线 → 完整/集成 三阶段顺序执行,每阶段跑绿后才进入下一阶段;若某阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认,不得跳过或弱化。** +- **质量门禁(D-44,每个计划执行后、提交前必过)**:对改动文件运行 `eslint --fix`,并确保 `eslint <改动文件>` **0 错误**;对**本计划改动的测试文件**运行 `pnpm exec vue-tsc --noEmit`,并按输出文件路径过滤,确保这些文件路径下 **0 类型错误**(全局既有无关错误,如 `client-modules`/`legacy-plugin-data`,不在本门禁范围);`pnpm test:ci` **全绿**。任一不通过则**不得提交**(vitest 用 esbuild 剥类型,类型/格式错误不会让测试失败,故必须显式门禁)。 @@ -150,6 +152,7 @@ Output: 10 个同目录 `*.test.ts`(阶段 1:attribute/modifier 2 文件; - 两个文件零非跳过失败。 - attribute 断言 base/final、优先级、存盘开关、clone/structured 与码 108/109;modifier 断言两条公式与 priority。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 1(构件级)的属性与 modifier 公式单元覆盖全部跑绿后才进入阶段 2。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -194,6 +197,7 @@ Output: 10 个同目录 `*.test.ts`(阶段 1:attribute/modifier 2 文件; - location 断言 getter/setter/钩子;state 断言装配/属性视图/码 116/changeFloor 钩子顺序;equipment 断言 equip/unequip/replace、modifier 应用、compareEquip、码 146/147;equipStore 断言实例增删计数排序;items 断言 add/use/count/路由;follower 断言 add/remove/gather/链接与码 142。 - 异步 gather 用例用真实计时器并 await;无 fake timers。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 2(组合/流水线)的 location/state 装配与 equipment/items/follower 联动在阶段 1 跑绿的基础上全部跑绿后才进入阶段 3。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -224,6 +228,7 @@ Output: 10 个同目录 `*.test.ts`(阶段 1:attribute/modifier 2 文件; - mover 断言 config 往返、Step/CannotMove/Hit、越界、enter/leave 顺序与码 144;rendering 断言 alpha + 钩子。 - 异步用例用真实计时器并 await 控制器;无 fake timers。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 3(完整/集成)的 HeroMover 与 HeroRendering 在阶段 1/2 跑绿的基础上全部跑绿。若本阶段发现阻断性 bug,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。完成后以 create-or-append 方式将本计划的 code→模块→用例行(108/109/116/142/144/146/147)写入 `06-COVERAGE-MAP.md` 的 06-05 小节:先检查表头,不存在则先创建,再只追加本小节,不重写他节。 diff --git a/.planning/phases/06-unit-tests/06-06-PLAN.md b/.planning/phases/06-unit-tests/06-06-PLAN.md index bb0735c..83c1c35 100644 --- a/.planning/phases/06-unit-tests/06-06-PLAN.md +++ b/.planning/phases/06-unit-tests/06-06-PLAN.md @@ -31,6 +31,7 @@ must_haves: - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" - "阶段化(D-43):计划按 构件→组合→完整 三阶段组织,每阶段跑绿后进入下一阶段;阻断性 bug 暂停等确认。" + - "质量门禁(D-44):每个计划执行后、提交前,改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误(全局既有无关错误不在范围);`pnpm test:ci` 全绿;任一不通过不得提交。" artifacts: - path: packages-user/data-base/src/map/mapState.test.ts provides: MapState 覆盖 @@ -107,6 +108,7 @@ Output: 8 个 `*.test.ts`(其中 `eventView.test.ts` 为既有文件扩展) - `06-COVERAGE-MAP.md` 为共享 create-or-append 文件(幂等、顺序无关):写 06-06 小节前先检查表头(`| code | 模块 | 用例 | 计划 |`)是否存在,不存在则先创建,再只追加/更新本小节,绝不重写他节。 - **执行协议(D-33):执行前向用户确认;执行后暂停并用中文分条汇报。** - **阶段门禁(D-43):本计划按 构件 → 组合/流水线 → 完整/集成 三阶段顺序执行,每阶段跑绿后才进入下一阶段;若某阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认,不得跳过或弱化。** +- **质量门禁(D-44,每个计划执行后、提交前必过)**:对改动文件运行 `eslint --fix`,并确保 `eslint <改动文件>` **0 错误**;对**本计划改动的测试文件**运行 `pnpm exec vue-tsc --noEmit`,并按输出文件路径过滤,确保这些文件路径下 **0 类型错误**(全局既有无关错误,如 `client-modules`/`legacy-plugin-data`,不在本门禁范围);`pnpm test:ci` **全绿**。任一不通过则**不得提交**(vitest 用 esbuild 剥类型,类型/格式错误不会让测试失败,故必须显式门禁)。 @@ -141,6 +143,7 @@ Output: 8 个 `*.test.ts`(其中 `eventView.test.ts` 为既有文件扩展) - 四个文件零非跳过失败。 - tile 断言默认事件恢复与点位联动;staticTile/dynamicTile 断言各自公开方法;eventView 断言视图操作与码 136。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 1(构件级)的 tile/staticTile/dynamicTile/eventView 单元覆盖全部跑绿后才进入阶段 2。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -193,6 +196,7 @@ Output: 8 个 `*.test.ts`(其中 `eventView.test.ts` 为既有文件扩展) - gameMap 断言层与别名生命周期、背景/事件层、脏、resize、compareWith 与码 84/131。 - mapLayer 断言矩阵读写、静态数组、动态转换语义、点位事件、脏/compareWith、异步门与全部列出码。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 2(组合/流水线)的地图注册/图层组合/动态转换在阶段 1 跑绿的基础上全部跑绿后才进入阶段 3。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -220,6 +224,7 @@ Output: 8 个 `*.test.ts`(其中 `eventView.test.ts` 为既有文件扩展) - mover 断言生命周期与码 126。 - 异步 mover 用例用真实计时器并 await 控制器;无 fake timers。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 3(完整/集成)的 DynamicTileMover 在阶段 1/2 跑绿的基础上全部跑绿。若本阶段发现阻断性 bug,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。完成后以 create-or-append 方式将本计划的 code→模块→用例行(8/9/46/60/61/62/63/64/80/81/84/121/123/126/127/128/129/130/131/136/143)写入 `06-COVERAGE-MAP.md` 的 06-06 小节:先检查表头,不存在则先创建,再只追加本小节,不重写他节。 diff --git a/.planning/phases/06-unit-tests/06-07-PLAN.md b/.planning/phases/06-unit-tests/06-07-PLAN.md index f0d4e45..b964a09 100644 --- a/.planning/phases/06-unit-tests/06-07-PLAN.md +++ b/.planning/phases/06-unit-tests/06-07-PLAN.md @@ -28,6 +28,7 @@ must_haves: - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" - "阶段化(D-43):计划按 构件→组合→完整 三阶段组织,每阶段跑绿后进入下一阶段;阻断性 bug 暂停等确认。" + - "质量门禁(D-44):每个计划执行后、提交前,改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误(全局既有无关错误不在范围);`pnpm test:ci` 全绿;任一不通过不得提交。" artifacts: - path: packages-user/data-state/test/enemyCombination.test.ts provides: 顶层伤害组合 + 系统层光环/效果组合覆盖 @@ -94,6 +95,7 @@ Output: 2 个 `data-state/test/` 集成测试文件。 - `06-COVERAGE-MAP.md` 为共享 create-or-append 文件(幂等、顺序无关):写 06-07 小节前先检查表头(`| code | 模块 | 用例 | 计划 |`)是否存在,不存在则先创建,再只追加/更新本小节,绝不重写他节。 - **执行协议(D-33):执行前向用户确认;执行后暂停并用中文分条汇报。** - **阶段门禁(D-43):本计划按 构件 → 组合/流水线 → 完整/集成 三阶段顺序执行,每阶段跑绿后才进入下一阶段;若某阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认,不得跳过或弱化。** +- **质量门禁(D-44,每个计划执行后、提交前必过)**:对改动文件运行 `eslint --fix`,并确保 `eslint <改动文件>` **0 错误**;对**本计划改动的测试文件**运行 `pnpm exec vue-tsc --noEmit`,并按输出文件路径过滤,确保这些文件路径下 **0 类型错误**(全局既有无关错误,如 `client-modules`/`legacy-plugin-data`,不在本门禁范围);`pnpm test:ci` **全绿**。任一不通过则**不得提交**(vitest 用 esbuild 剥类型,类型/格式错误不会让测试失败,故必须显式门禁)。 @@ -154,6 +156,7 @@ Output: 2 个 `data-state/test/` 集成测试文件。 - `enemyCombination.test.ts` 零非跳过失败。 - 断言至少一条单 special 伤害基线与一条单光环施加基线。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 1(构件级)的真实 API 单分支基线全部跑绿后才进入阶段 2。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -185,6 +188,7 @@ Output: 2 个 `data-state/test/` 集成测试文件。 - `enemyCombination.test.ts` 零非跳过失败。 - 断言至少一组多 special 伤害组合与一组系统层光环/效果组合(含阶段顺序)。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 2(组合/流水线)的顶层与系统层伤害/效果组合在阶段 1 跑绿的基础上全部跑绿后才进入阶段 3。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -221,6 +225,7 @@ Output: 2 个 `data-state/test/` 集成测试文件。 - 断言小地图场景播放完成、二次录像与原录像逐条相等(步数 + code + 各 param type/value)、二次播放完成。 - 断言 2001–2008 全部触发。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 3(完整/集成)的小地图录像播放、二次录制比对与 2001–2008 在阶段 1/2 跑绿的基础上全部跑绿。若本阶段发现阻断性 bug,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。完成后以 create-or-append 方式将本计划的 code→模块→用例行(2001–2008)写入 `06-COVERAGE-MAP.md` 的 06-07 小节:先检查表头,不存在则先创建,再只追加本小节,不重写他节。 diff --git a/.planning/phases/06-unit-tests/06-08-PLAN.md b/.planning/phases/06-unit-tests/06-08-PLAN.md index ff879d3..4b5810f 100644 --- a/.planning/phases/06-unit-tests/06-08-PLAN.md +++ b/.planning/phases/06-unit-tests/06-08-PLAN.md @@ -28,6 +28,7 @@ must_haves: - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" - "阶段化(D-43):计划按 构件→组合→完整 三阶段组织,每阶段跑绿后进入下一阶段;阻断性 bug 暂停等确认。" + - "质量门禁(D-44):每个计划执行后、提交前,改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误(全局既有无关错误不在范围);`pnpm test:ci` 全绿;任一不通过不得提交。" artifacts: - path: packages-user/data-base/src/flag/system.test.ts provides: FlagSystem 覆盖 @@ -98,6 +99,7 @@ Output: 6 个 `*.test.ts`(其中 `mover.test.ts` 为既有文件扩展)。 - `06-COVERAGE-MAP.md` 为共享 create-or-append 文件(幂等、顺序无关):写 06-08 小节前先检查表头(`| code | 模块 | 用例 | 计划 |`)是否存在,不存在则先创建,再只追加/更新本小节,绝不重写他节。 - **执行协议(D-33):执行前向用户确认;执行后暂停并用中文分条汇报。** - **阶段门禁(D-43):本计划按 构件 → 组合/流水线 → 完整/集成 三阶段顺序执行,每阶段跑绿后才进入下一阶段;若某阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认,不得跳过或弱化。** +- **质量门禁(D-44,每个计划执行后、提交前必过)**:对改动文件运行 `eslint --fix`,并确保 `eslint <改动文件>` **0 错误**;对**本计划改动的测试文件**运行 `pnpm exec vue-tsc --noEmit`,并按输出文件路径过滤,确保这些文件路径下 **0 类型错误**(全局既有无关错误,如 `client-modules`/`legacy-plugin-data`,不在本门禁范围);`pnpm test:ci` **全绿**。任一不通过则**不得提交**(vitest 用 esbuild 剥类型,类型/格式错误不会让测试失败,故必须显式门禁)。 @@ -126,6 +128,7 @@ Output: 6 个 `*.test.ts`(其中 `mover.test.ts` 为既有文件扩展)。 - 两个文件零非跳过失败。 - utils 覆盖全部方向/字符串;indexer 覆盖往返与宽度变化。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 1(构件级)的朝向工具与索引单元覆盖全部跑绿后才进入阶段 2。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -164,6 +167,7 @@ Output: 6 个 `*.test.ts`(其中 `mover.test.ts` 为既有文件扩展)。 - 三个文件零非跳过失败。 - flag 断言 D-19 列出的完整公开表面与码 111;faceManager 覆盖注册表与两个 handler 全表面;face 覆盖 RoleFaceBinder 与码 43/44。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 2(组合/流水线)的 FlagSystem、FaceManager/handlers、RoleFaceBinder 在阶段 1 跑绿的基础上全部跑绿后才进入阶段 3。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -193,6 +197,7 @@ Output: 6 个 `*.test.ts`(其中 `mover.test.ts` 为既有文件扩展)。 - `mover.test.ts` 零非跳过失败且既有覆盖保持。 - `ObjectMover` 全部列出公开方法至少一条正常用例;异步路径用真实计时器 + await。 - 每个新增 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 3(完整/集成)的 ObjectMover 公开表面在阶段 1/2 跑绿的基础上全部跑绿。若本阶段发现阻断性 bug,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。完成后以 create-or-append 方式将本计划的 code→模块→用例行(43/44/111)写入 `06-COVERAGE-MAP.md` 的 06-08 小节:先检查表头,不存在则先创建,再只追加本小节,不重写他节。 diff --git a/.planning/phases/06-unit-tests/06-09-PLAN.md b/.planning/phases/06-unit-tests/06-09-PLAN.md index 3642910..e7df069 100644 --- a/.planning/phases/06-unit-tests/06-09-PLAN.md +++ b/.planning/phases/06-unit-tests/06-09-PLAN.md @@ -35,6 +35,7 @@ must_haves: - "疑似缺陷按正确预期编写并标记 `it.skip`/`it.todo`,并按 D-06 的格式登记到共用的 `06-TEST-FINDINGS.md`(模块/接口、现象、最小复现、疑似原因、影响面、建议修复方向、关联 skip 用例、严重度)。" - "执行节奏(D-33):本计划执行前先向用户确认;执行完成后暂停,用中文分条简要汇报验证结果,详细结果写入共用的 `06-TEST-FINDINGS.md`。" - "阶段化(D-43):计划按 构件→组合→完整 三阶段组织,每阶段跑绿后进入下一阶段;阻断性 bug 暂停等确认。" + - "质量门禁(D-44):每个计划执行后、提交前,改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误(全局既有无关错误不在范围);`pnpm test:ci` 全绿;任一不通过不得提交。" artifacts: - path: packages-user/data-base/src/enemy/saveLoad.test.ts provides: Enemy/special/EnemyManager 存读档覆盖(119/120) @@ -108,6 +109,7 @@ Output: 6 个 `*.test.ts` 与 `06-SAVE-EXCLUSIONS.md`。 - `06-COVERAGE-MAP.md` 为共享 create-or-append 文件(幂等、顺序无关):写 06-09 小节前先检查表头(`| code | 模块 | 用例 | 计划 |`)是否存在,不存在则先创建,再只追加/更新本小节,绝不重写他节。 - **执行协议(D-33):执行前向用户确认;执行后暂停并用中文分条汇报。** - **阶段门禁(D-43):本计划按 构件 → 组合/流水线 → 完整/集成 三阶段顺序执行,每阶段跑绿后才进入下一阶段;若某阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认,不得跳过或弱化。** +- **质量门禁(D-44,每个计划执行后、提交前必过)**:对改动文件运行 `eslint --fix`,并确保 `eslint <改动文件>` **0 错误**;对**本计划改动的测试文件**运行 `pnpm exec vue-tsc --noEmit`,并按输出文件路径过滤,确保这些文件路径下 **0 类型错误**(全局既有无关错误,如 `client-modules`/`legacy-plugin-data`,不在本门禁范围);`pnpm test:ci` **全绿**。任一不通过则**不得提交**(vitest 用 esbuild 剥类型,类型/格式错误不会让测试失败,故必须显式门禁)。 @@ -187,6 +189,7 @@ Output: 6 个 `*.test.ts` 与 `06-SAVE-EXCLUSIONS.md`。 - 只用关键字段显式断言,无整体深度相等。 - `06-SAVE-EXCLUSIONS.md` 存在并逐类列出排除字段与依据。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 1(构件级)的 enemy/hero 存读档往返与排除清单覆盖全部跑绿后才进入阶段 2。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -226,6 +229,7 @@ Output: 6 个 `*.test.ts` 与 `06-SAVE-EXCLUSIONS.md`。 - map/replay/flag 各类同实例往返;断言码 55/122/124。 - 只用关键字段显式断言,无整体深度相等。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 2(组合/流水线)的地图/录像/flag 存读档往返在阶段 1 跑绿的基础上全部跑绿后才进入阶段 3。若本阶段发现阻断性 bug 使后续阶段无法运行,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。 @@ -258,6 +262,7 @@ Output: 6 个 `*.test.ts` 与 `06-SAVE-EXCLUSIONS.md`。 - `saveablesRoundTrip.test.ts` 零非跳过失败。 - 覆盖 4 id × 3 压缩档,显式关键字段 + 快照分离 + 未知 id null + 码 112/113。 - 每个 `it` 前有单行中文注释。 + - D-44 门禁通过:改动文件 `eslint --fix` 后 `eslint <改动文件>` 0 错误;本计划改动的测试文件在 `pnpm exec vue-tsc --noEmit` 输出中按文件路径过滤 0 类型错误;`pnpm test:ci` 全绿。 阶段 3(完整/集成)的 CoreState 顶层 saveables 往返在阶段 1/2 跑绿的基础上全部跑绿。若本阶段发现阻断性 bug,暂停并按 D-05/D-07 向用户汇报、等确认;不得跳过或弱化。完成后以 create-or-append 方式将本计划的 code→模块→用例行(55/58/59/112/113/119/120/122/124)写入 `06-COVERAGE-MAP.md` 的 06-09 小节:先检查表头,不存在则先创建,再只追加本小节,不重写他节。