docs(w05): 立 Task 7b —— 「新建芯片类型」是 spec 与用户都点名的能力,不能只活在一条顾虑里

Task 7 交付的件让人从下拉挑已有类型(主路通),但 spec :37 / :261 与用户原话都
明写还要能「新建一个类型 + 它的核心参数字段」。这一半没做。

做不了的原因已核实属实:ViewContainer.addRow 靠克隆最后一行,零行时返回 false,
而 mine:parts.chip_type 每单开局零行。顺带发现平台自相矛盾 —— desk.ts:843 那条
空表闸在教人「先在件上加一行」,而 UI 做不到。

三条候选路各记了代价:①件上摆字面量空白行(零平台改动,但复合主键的跨行自增键
联动待查)②平台补原型行(小改,但动两个共享面要全量回归)③配方种骨架(已否:
人改挑已有类型时那行空骨架会一直卡着闸)。

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 18:38:20 +08:00
co-authored by Claude Opus 5
parent c60a2adf43
commit fdcd1f88a7
@@ -1758,6 +1758,51 @@ EOF
---
### Task 7b: 件① 补上「新建芯片类型」—— 空表加行这条路要先通
> **这一条是 2026-08-29 从 Task 7 的顾虑里立出来的**(控制端裁定)。Task 7 交付的件让人**从下拉里挑**
> 一个已有类型(`data-options` 现读),这条主路是通的;但 spec 明写的另一半 —— **人在这张件上新建一个类型
> 并定下它的核心参数字段** —— 没做。它不是可选的:
>
> - spec `:37`:「人**选定/新建类型**后按一次保存,系统按该类型的字段清单把参数值的行铺出来」
> - spec `:261`:提交时 `chip_type` / `type_param` / `profile` / `parameter` **四张一起**进正式表
> - 用户原话里也点了名:「选择芯片类型(**或创建一个新类型 + 它的核心参数字段,每个带描述与软硬约束**)」
>
> **为什么 Task 7 做不了**(诊断已由控制端核实,属实):
> `ViewContainer.addRow`(`packages/ui-kit/src/ViewContainer.tsx:303-306`)靠
> `host.querySelector('tr:last-of-type')` 克隆最后一行,**零行时返回 `false`**;
> 而 `mine:parts.chip_type` / `mine:parts.type_param` 每单开局都是零行 —— 加行按钮到不了岸。
> 顺带:平台在这件事上自相矛盾 —— `apps/api/src/app/routes/desk.ts:843` 那条空表闸的话是
> 「**先在件上加一行**填好再提交」,教人做一件 UI 做不到的事。
**三条候选路,开工前先定哪一条**(各自的代价已初勘,但**都要自己复核**):
① **件上摆字面量空白行**(不走 `data-rows`,直接写 `data-edit` + `data-col` 的行)——
零平台改动。已核实两条支撑机制存在:**空行不写**(`desk.ts:270` 一带,`filled.length > 0` 才落)、
**`auto` 主键由基座续号**(`type_id` 声明 `auto`,不进表单)。
**未解的坎**:`parts.type_param` 是复合主键(`type_id` + `param_name`),而新类型的 `type_id`
要等 `chip_type` 那一行写下去才铸得出来 —— **跨行的自增键联动**基座目前是逐行铸的。先查这条通不通。
② **平台补「原型行」**:渲染器对零行的 `data-rows` 留一行隐藏原型(`<tr hidden data-row-proto>`),
`addRow` 找不到 `tr:last-of-type` 时回落到克隆它。改动小,但动的是 `view-render.ts` 与
`ViewContainer.tsx` **两个共享面** —— E04 / I01 都在用,**照规矩要全量回归**。
顺带能把 `desk.ts:843` 那句自相矛盾的话变成真的。
③ **配方先种一行骨架**:S1 在某颗料没有 `chip_type_id` 时投一行空 `parts.chip_type`。
零平台改动,但人若改从下拉挑了已有类型,那行空骨架会让 `_missing > 0` **一直卡着闸**,
得他自己删掉才行 —— 摩擦大且不明显。**列在这里是为了记下它被否过,别再想一遍。**
**Files:** 待定(取决于选哪条路)
**Interfaces:** 消费 Task 7 的 `input-supplement` 件与 S1 配方的 `gateLedgers`
- [ ] **Step 1: 定路线** —— 先查①的跨行自增键联动通不通(`autoKeys` 在 `desk.ts:392` 一带);
通就走①(零平台改动最省),不通就走②(并按「改共享面全量回归」办)。**把结论写进报告。**
- [ ] **Step 2: 照选定的路实现,并补测试**
- [ ] **Step 3: 变异验证** —— 拿掉这条能力,证明测试变红
- [ ] **Step 4: `pnpm gates`(看真实退出码)→ 提交**
---
### Task 8: 件② `difference-review` —— 差异评估结论审核(验收工单)
**Files:**