feat(w05): 数据工单第四轮九连改 —— 笔↔软盘卡角编辑、只选不建、浅蓝题头、镜像修数字

2026-08-31 用户一次点齐九件,逐条落:
① 两行编辑闸退役 → 卡右上角笔(开当前这一面的编辑)↔ 软盘(保存)+ 叉(放弃);
  按钮就是平台的 data-edit-open/save/cancel 触发器,快照/取消机制原样,按面显隐全在样式表。
② 保存一瞬间下拉变数字 → ui-kit mirrorTwins:下拉镜像**选项文案**不镜 value,并把
  selected 属性拨到人选的那一项(守卫 CSS 与取消回显都认它)。2 测。
③ 参数输入框占位提示 → 渲染器 twinInputs 认 data-ph 落成 placeholder(平台小扩面,1 测);
  值格「规格书上的值 · 查不到留空」,说明格「补充说明 · 选填」。
④ 参数说明空着不再摆「建议」→ 什么都不摆(连兜底破折号一起收)。
⑤ 区序对调:芯片档案在前,比对基准在后。
⑥ **新建芯片类型整条路移除**(只能选已有类型):抽屉与两张编辑表(种子行/Critical-1
  修法/thead 回归网)退役,S1 配方 ②③ 自投影删除(八笔→六笔),gateLedgers 收窄到
  profile+parameter,writes 同步,gate_reason 与指导书改口「只选不建」;样例改名
  「候选缺库·建档定型」;e2e 案例 0 改走选既有 type_1(type_id=90 那套绕坑法随路退役)。
  退役面的七条钉测按仓例 it.skip 留墓志铭(钉的是已移除的路径,不是放松断言)。
⑦ 题头回浅蓝渐变(原目标件那条 120°),深色夜景只留验收两件。
⑧ 对话区执行卡不再摆「参考信息」板块(basis 数据照旧随卡走,详情/归档仍有)。
⑨ 比对基准降噪:字段收成丸(名+硬软徽+单位),说明藏进悬浮气泡指上即看;
  类型说明一行截断、悬浮展开。

测:ui-kit 33(mirror 2 新)+ 渲染器 61(ph 1 新)+ 包内 104(38 steps 重排)+ 2525 全仓
四门绿;2.10.0 装库 SQL 六探针全中(hd-light/软盘/data-ph/零表格/无 chip_type 编辑面/
gateLedgers 两张);:8787 已重启载入 data-ph 渲染器。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
xcs
2026-08-31 16:41:14 +08:00
co-authored by Claude Fable 5
parent f6c8dccb4f
commit 51914292dc
12 changed files with 259 additions and 389 deletions
+8 -49
View File
@@ -604,22 +604,9 @@ const SUITES = {
edits: [],
extraTables: [
/*
* `parts.chip_type` **没有任何 `data-edit` 绑定**(manifest.ts / case-model.ts
* 头注明写:新建类型时人在 `parts.type_param` 那张表加行,`parts.chip_type` 那
* 张字典表本身没有编辑面 —— `ViewContainer.addRow` 靠克隆末行实现「加一行」,
* 而它在任何一单里都是从零行起,没有可克隆的样子)。写的授权面是**台账声明**
* 不是「当下卡上有没有绑定」(`writesOf` 只认 `declarations.ledger`),所以这条
* 写入走得通 —— 只是脚本代脚本走 API,不是真人代替点了一个并不存在的按钮。
* 只有样例 0(候选缺库·新建类型)会喂 `edits`,其余案例这里留空、这张表不写。
* 2026-08-31「只选不建」:parts.chip_type / parts.type_param 两条随功能退役 ——
* S1 的写授权面(writes)已收窄,再喂这两张表会被 400 拒。字典只在治理侧维护。
*/
{ address: 'parts.chip_type', rowKey: 'type_id', blankCol: 'type_name', edits: [] },
{
// 复合主键 (type_id, param_name) —— 同一类型两个字段不能靠单列区分。
address: 'parts.type_param',
rowKey: ['type_id', 'param_name'],
blankCol: 'param_desc',
edits: [],
},
{
// 复合主键 (internal_pn, param_name) —— 两颗料同名参数(如都有「工作温度」)
// 不这样区分,rows.find 会永远命中第一条同名行、把不同料的值互相顶掉。
@@ -634,8 +621,8 @@ const SUITES = {
cases: [
{
sample: 0,
name: '候选缺库 · XL2596S-5.0 新建芯片类型(自增 type_id,字段清单沿用原型口径)入库,'
+ '原 PN 一并转挂新类型才够得上 distinct=1 · 审核先点名意见驳回再通过',
name: '候选缺库 · XL2596S-5.0 建档并选已有类型(type_1,2026-08-31 起本活动只选不建)'
+ '· 审核先点名意见驳回再通过',
decideSeq: ['custom:使能阈值那条 UNKNOWN 的去向请写明验证任务号与测试条件', 'approve'],
expectDecision: true,
expectPort: 'assessment-released',
@@ -660,39 +647,13 @@ const SUITES = {
* `type_id`,只是绕开这一条平台坑去验证后续链路,不代表浏览器里的真人也这样能走通。**
*/
customFill: async (taskId) => {
const typeId = '90';
// ① 新建芯片类型:显式给 type_id(见上方大注释,不走 autoKeys 续号)
/* 2026-08-31「只选不建」:两颗料都挂到既有的 type_1(DC-DC)—— 新建类型那条路
(显式 type_id=90 绕全表一致坑的那整套)随功能移除,史见 git 2.9.0 及更早。 */
const typeId = '1';
await api(`/api/desk/tasks/${taskId}/table`, {
method: 'POST',
body: JSON.stringify({
tables: {
'parts.chip_type': [
{
type_id: typeId,
type_name: 'DC-DC 降压稳压器(评估自定义)',
description: '本次评估自定义的降压转换器类型,核心参数字段清单沿用原类型口径,供原 PN 与候选料共用比对。',
},
],
},
}),
});
console.log(` 新建类型已保存,显式指定 type_id=${typeId}(绕开全表一致平台坑,已报未改)`);
// ③ 核心参数字段清单(逐字照抄 type_id=1 的字典行,见 seed-mvp-data.ts)+
// 两颗料都转挂新类型(distinct 要求同一个值)+ 候选料的参数值。
// LM2596S-5.0 的既有参数值按同名 lookup 自动带过来,不必在这里重填。
await api(`/api/desk/tasks/${taskId}/table`, {
method: 'POST',
body: JSON.stringify({
tables: {
'parts.type_param': [
{ type_id: typeId, param_name: '输入电压范围', param_desc: '芯片允许的输入直流电压区间。候选料的上限低于应用输入上限就是硬伤,烧的是芯片。', constraint_type: 'hard', param_unit: 'V' },
{ type_id: typeId, param_name: '输出电压', param_desc: '固定版给定值;可调版给可调区间,需外围反馈电阻网络设定。固定换可调要动外围。', constraint_type: 'hard', param_unit: 'V' },
{ type_id: typeId, param_name: '输出电流', param_desc: '满载持续输出能力。低于原料即降额,负载重时会掉压或过热保护。', constraint_type: 'hard', param_unit: 'A' },
{ type_id: typeId, param_name: '开关频率', param_desc: '决定外围电感与输出电容的取值。频率变了外围多半要跟着换,不是换颗料就完。', constraint_type: 'soft', param_unit: 'kHz' },
{ type_id: typeId, param_name: '静态电流', param_desc: '空载待机时自身消耗。电池供电场景敏感,市电场景通常不敏感。', constraint_type: 'soft', param_unit: 'mA' },
{ type_id: typeId, param_name: '工作温度', param_desc: '保证参数指标的环境温度区间。工业温域窄于应用要求就是硬伤。', constraint_type: 'hard', param_unit: '℃' },
{ type_id: typeId, param_name: '使能阈值', param_desc: 'ON/OFF 引脚的开关门限。上游用 MCU 电平直驱时,阈值对不上会关不掉或开不起来。', constraint_type: 'hard', param_unit: 'V' },
],
'parts.profile': [
{ internal_pn: 'LM2596S-5.0', chip_type_id: typeId },
{
@@ -768,10 +729,8 @@ const SUITES = {
await db.query("delete from ledger.validation__record where validation_internal_pn = 'XL2596S-5.0'");
await db.query("delete from ledger.parts__parameter where internal_pn = 'XL2596S-5.0'");
await db.query("delete from ledger.parts__profile where internal_pn = 'XL2596S-5.0'");
await db.query("delete from ledger.parts__type_param where type_id = '90'");
await db.query("delete from ledger.parts__chip_type where type_id = '90'");
});
console.log(' 跨案例隔离:LM2596S-5.0 已转回 type_1;这一例全新建的 XL2596S-5.0(候选料本身、评估结果、type_id=90 字典行)已整体清空');
console.log(' 跨案例隔离:XL2596S-5.0(这一例建档的候选料与它的评估结果)已整体清空;LM2596S-5.0 类型兜底归位 type_1');
},
},
{