From 94b664bc85d68352f20921f2d26de9ad6fb9da2b Mon Sep 17 00:00:00 2001 From: xcs Date: Sat, 29 Aug 2026 11:28:57 +0800 Subject: [PATCH] =?UTF-8?q?docs(plan):=20=E5=8F=91=E8=BD=A6=E5=89=8D?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E4=B8=89=E6=9D=A1=E8=A3=81=E5=AE=9A=E5=85=A5?= =?UTF-8?q?=E8=AE=A1=E5=88=92(=E5=B8=AE=E6=89=8B=E7=9C=9F=E5=90=8D=20/=20f?= =?UTF-8?q?ound=5Fpn=5Fref=20=E5=8E=BB=E9=87=8D=20/=20assets=20=E5=A4=84?= =?UTF-8?q?=E7=BD=AE=E5=89=8D=E7=A7=BB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet --- .../plans/2026-08-29-act-work-05-rewrite.md | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/docs/superpowers/plans/2026-08-29-act-work-05-rewrite.md b/docs/superpowers/plans/2026-08-29-act-work-05-rewrite.md index 849effb..a3e07ab 100644 --- a/docs/superpowers/plans/2026-08-29-act-work-05-rewrite.md +++ b/docs/superpowers/plans/2026-08-29-act-work-05-rewrite.md @@ -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');