docs(plan): 发车前扫描三条裁定入计划(帮手真名 / found_pn_ref 去重 / assets 处置前移)

G2:Task 1 的测试帮手名是我猜的,已查实(MASTER_OBJECTS / MASTER_SAMPLE_ROWS)—— 直接写对。
G1:spec §3.3 已补 found_pn_ref,Task 2 照 spec 写就有了,Task 4 那一步改成「确认在,不在才补」。
G3:assets(dmn / skills / viewTemplates / distillHooks)的处置前移到 Task 2 ——
    不然 Task 2 到 Task 9 之间清单引着已经不存在的东西,包是不自洽的。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
xcs
2026-08-29 11:28:57 +08:00
co-authored by Claude Opus 5
parent 65a4c7a7dd
commit 94b664bc85
@@ -93,7 +93,14 @@ sed -n '140,200p' apps/api/src/app/seed-mvp-data.ts
- [ ] **Step 2: 写失败的测试**
追加到 `apps/api/src/app/__tests__/seed-mvp-data.test.ts` 末尾(用该文件既有的方式取物化清单与种子行;若它导出的名字与下面不同,**用文件里真有的**):
追加到 `apps/api/src/app/__tests__/seed-mvp-data.test.ts` 末尾。**帮手名已查实**:该文件从
`../seed-mvp-data.ts` 引 `MASTER_DOMAINS` / `MASTER_OBJECTS` / `MASTER_SAMPLE_ROWS`,先在文件里加两个局部帮手:
```ts
const tableOf = (domain: string, object: string) => MASTER_OBJECTS.find((o) => o.domain === domain && o.object === object);
const seedRowsOf = (domain: string, object: string) =>
MASTER_SAMPLE_ROWS.filter((r) => r.address.domain === domain && r.address.object === object);
```
```ts
describe('芯片类型字典(W05 重写)', () => {
@@ -465,7 +472,13 @@ Expected: FAIL(声明还是旧的七张主数据 + 三张单据)。**整份贴
- `prohibitions`:保留「UNKNOWN 是一等公民」「硬约束 MISMATCH 不得被措辞改判」「不写客户批准状态」「只答技术可替代性」四条;删掉与 N 候选、外部系统相关的两条。
- `resources`:`tools: []`、`models: ['deepseek-v4-flash']`、`roles: ['FAE/RI']`、`budget: { steps: 40, tokens: 300_000, activeMinutes: 60, humanCalls: 8 }`;`authorization.humanCallBudget: 8`。
`constants.ts` 里 `TOOL_COMPARE` / `TOOL_RECOMMEND` 两个常量删掉(它们的注册退役在 Task 10)。
`constants.ts` 里 `TOOL_COMPARE` / `TOOL_RECOMMEND` 两个常量删掉(它们在工具注册表里的退役排在 Task 10)。
**`assets` 这一段也要现在处理,否则 Task 2–Task 9 之间包是不自洽的**(清单引着已经不存在的东西):
- `assets.businessModel.dmn`:**去掉 D01 / D02 两张判定表**(四态改 AI 判、等级改规则算,§3.5 是唯一真源);
- `assets.skills`:置空;`contract.resources.skills`:置空(`skills.ts` 的删除排在 Task 10);
- `assets.viewTemplates`:**暂时只留 `activity-ledger` 一张**(三张件由 Task 7–9 各自加回);
- `assets.distillHooks`:改写成一句与四步对得上的归纳提示,或整个去掉 —— 它是给模型的,而这个活动没有 agent。
- [ ] **Step 5: 升版本号**
@@ -799,9 +812,11 @@ EOF
> **动手前先读《活动开发规范》§4.6** —— 它是配方怎么写的权威,含四条纪律。
- [ ] **Step 1: 先给 `sub_eval.part` 补一列**
- [ ] **Step 1: 确认 `sub_eval.part` 上有 `found_pn_ref`(Task 2 照 spec §3.3 应当已经写了)**
`exists_status` 不能凭空判 —— **判「在库」就必须拿得出一个基座查得到的料号**。在 `manifest.ts` 的 `sub_eval.part` 声明里,`role` 之后加:
Run: `grep -n "found_pn_ref" activities/part-substitution-assessment/src/manifest.ts`
**有就跳过这一步。** 没有(Task 2 漏了)就在 `role` 之后补上 —— `exists_status` 不能凭空判,
**判「在库」就必须拿得出一个基座查得到的料号**:
```ts
/*
@@ -819,7 +834,7 @@ EOF
}),
```
并在 Task 2 写的那条「案卷两张」用例里补一行断言:
并确认 Task 2 那条「案卷两张」用例里有这一行断言(没有就补):
```ts
expect(colOf('sub_eval.part', 'found_pn_ref')?.refersTo).toBe('parts.profile.internal_pn');