Archived
docs(w05): Task 10 修计划缺陷 —— 退役清单漏四个文件,断言写在不存在的字段上
Files 清单漏了 container.ts(容器里那行 handler 覆盖)、tools-w05.ts(两枚工具的 契约定义整份)、seed-activities.ts 与 seed-mvp.ts(它的两个消费方)。只改点名的 五个文件,工具会在一处退役、在另几处照常注册。 Step 2 的断言 registry.find(t => t.name...).enabled 三处都不成立:该文件里没有 registry;FIRST_PARTY_TOOLS 是 [name, handler] 元组数组,元素上没有 .name,取它 得 undefined 再 .includes() 当场抛;本仓工具也没有 enabled 这个概念。改成断言 「不在注册表里」,同样拦得住手滑重新注册。 Step 1 的预期由「零命中」改成实测的那几处,并写明冒出清单之外的命中要停下来报。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
@@ -1925,9 +1925,18 @@ Run 红:`pnpm exec vitest run activities/part-substitution-assessment/__tests__/
|
||||
|
||||
### Task 10: 退役 —— 两枚工具、两张判定表、技能戳
|
||||
|
||||
**Files:**
|
||||
- Modify: `apps/api/src/app/tools/first-party.ts`(两枚工具停用 + 墓志铭)
|
||||
- Modify: `apps/api/src/app/__tests__/first-party-substitution.test.ts`
|
||||
**Files:**(2026-08-29 控制端实地核过,**原清单漏了四个文件**,见下方 Step 1 的实测结果)
|
||||
- Modify: `apps/api/src/app/tools/first-party.ts` —— 摘掉 `FIRST_PARTY_TOOLS` 里那两行(`:680-681`),
|
||||
连同只服务于它们的实现:`compareParameters`(`:650`)· `recommend`(`:656`)· `compareParametersWith`(`:592`)·
|
||||
`ParameterLedger` 类型(`:515`);`parseParamValue`(`:393`)/ `describeParsed`(`:415`)**先查还有没有别的调用方**,
|
||||
没有才一并摘。留墓志铭。
|
||||
- Modify: `apps/api/src/app/container.ts` —— `parameterLedger`(`:424-431`)与那一行 handler 覆盖(`:434`)一并撤,
|
||||
连 `ParameterLedger` 的 import。**这一处原清单没有,不撤则工具在容器里照常注册。**
|
||||
- Delete: `apps/api/src/app/tools-w05.ts` —— 整份就是这两枚工具的契约定义(`W05_TOOLS` / `W05_TOOL_SAMPLE`),
|
||||
没有第三个消费方。**原清单没有。**
|
||||
- Modify: `apps/api/src/app/seed-activities.ts`(`:19` import)与 `apps/api/src/app/seed-mvp.ts`(`:15` import)
|
||||
—— `tools-w05.ts` 的两个消费方,随它一并清。**原清单没有。**
|
||||
- Modify: `apps/api/src/app/__tests__/first-party-substitution.test.ts`(见 Step 2 —— 改成退役断言,不是删文件)
|
||||
- Delete: `activities/part-substitution-assessment/src/skills.ts`
|
||||
- Modify: `.../src/manifest.ts`(`assets.skills` 清空、`assets.businessModel.dmn` 去掉 D01/D02)
|
||||
- Modify: `.../src/constants.ts`
|
||||
@@ -1942,22 +1951,41 @@ Run 红:`pnpm exec vitest run activities/part-substitution-assessment/__tests__/
|
||||
|
||||
Run:
|
||||
```bash
|
||||
grep -rn "compare-parameters\|recommend" activities apps/api/src --include='*.ts' | grep -v __tests__ | grep -v first-party
|
||||
grep -rn "compare-parameters\|part-substitution-assessment\.recommend" activities apps packages --include='*.ts' \
|
||||
| grep -v "app/tools/first-party.ts" | grep -v "activities/part-substitution-assessment"
|
||||
```
|
||||
Expected: **零命中**(除 `first-party.ts` 自身)。有命中就先处理它,别硬拆。
|
||||
|
||||
**Expected(2026-08-29 控制端实地跑过,不是零命中)**:恰好这几处,全部在上面的 Files 清单里 ——
|
||||
`container.ts:434` · `tools-w05.ts:21,64` · `seed-activities.ts:19` · `seed-mvp.ts:15` ·
|
||||
`__tests__/first-party-substitution.test.ts` 若干。
|
||||
|
||||
**冒出清单之外的命中就停下来报上来,别硬拆。**
|
||||
|
||||
- [ ] **Step 2: 改测试(先描述目标)**
|
||||
|
||||
把 `first-party-substitution.test.ts` 里断言这两枚工具**可用**的用例,改成断言它们**已停用且留了墓志铭**:
|
||||
|
||||
> **⚠️ 计划原先在这里写错了(2026-08-29 控制端核出并改正)。** 原稿写的是
|
||||
> `registry.find((t) => t.name.includes(...))?.enabled).toBe(false)` —— **三处都不成立**:
|
||||
> 该文件里没有 `registry` 这个名字;`FIRST_PARTY_TOOLS`(`first-party.ts:669`)是
|
||||
> `ReadonlyArray<readonly [string, ToolHandler]>` —— **元组数组,元素上没有 `.name`**,取它得 `undefined`、
|
||||
> 再 `.includes()` 当场抛 TypeError;而且**本仓的工具压根没有 `enabled` 这个概念**,退役的既有做法是
|
||||
> **摘掉注册 + 留墓志铭**(见 quote-archive / quote-intake 的 declarations 头注)。
|
||||
>
|
||||
> 断言改成**「不在注册表里」** —— 它同样拦得住「哪天有人手滑又把它注册回来」:
|
||||
|
||||
```ts
|
||||
it('两枚工具已退役 —— W05 重写之后没有消费方,规则活在配方里', () => {
|
||||
expect(registry.find((t) => t.name.includes('compare-parameters'))?.enabled).toBe(false);
|
||||
expect(registry.find((t) => t.name.includes('recommend'))?.enabled).toBe(false);
|
||||
it('两枚工具已退役 —— 规则活在 S2 的配方里,不再有第二处真源', () => {
|
||||
const names = FIRST_PARTY_TOOLS.map(([n]) => n);
|
||||
expect(names).not.toContain('part-substitution-assessment.compare-parameters');
|
||||
expect(names).not.toContain('part-substitution-assessment.recommend');
|
||||
});
|
||||
```
|
||||
|
||||
(`registry` 用该文件里既有的取注册表的方式;名字与形状**照文件里真有的**写。)
|
||||
**这个文件其余的用例怎么办**:它们逐条测的是 `compare-parameters` 的比对行为,而那段代码这一步就删了 ——
|
||||
**测试跟着它测的东西一起走**,这不是「删测试让门禁变绿」(本仓禁止的是后者)。
|
||||
把整份文件缩成上面这一条退役断言,文件头注改写成墓志铭:说清这两枚工具做过什么、
|
||||
规则现在活在哪儿(`case-model.ts` 的 `S2_assess.auto`)、以及为什么不留第二份。
|
||||
|
||||
- [ ] **Step 3: 停用并留墓志铭**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user