From 764dab342d9ae150d18dc0b4f17f275c242438e2 Mon Sep 17 00:00:00 2001 From: xcs Date: Sun, 30 Aug 2026 12:51:14 +0800 Subject: [PATCH] =?UTF-8?q?fix(w05):=20=E4=B8=89=E4=BB=BD=E4=BB=B6?= =?UTF-8?q?=E7=9A=84=E6=9C=BA=E6=A2=B0=E6=8A=BD=E6=A0=B7=E5=BC=8F=E8=A1=A5?= =?UTF-8?q?=E9=BD=90=E7=BC=BA=E5=A4=B1=20class=20=E2=80=94=E2=80=94=20?= =?UTF-8?q?=E8=90=BD=E8=B4=A6=E4=BB=B6=E5=90=8C=E6=AC=BE=E4=BC=9A=E7=82=B8?= =?UTF-8?q?,=E6=8F=90=E5=89=8D=E6=8B=A6=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 浏览器走查实测:差异评估结论审核件里三个 撑成 946×946, 整份文档拉到 4625px 高,正文全被挤走 —— 人打开只见灰色巨块,没法逐条核四态。 根因:.zic{width:14px;height:14px} 只在 P08_CSS(数据工单那一段),而 difference-review 用的是 ACC1_CSS。ACC1_CSS / ACC2_CSS 是从目标件机械抽出来的, report.ts:538 那句既有注释早已承认漏过一批(.jc-vcell/.jc-cell/…),补了几个, 这几个漏了。 按「一次查干净」逐个核三份件用到的每个 class,补齐: · .zic —— ACC1_CSS **与 ACC2_CSS**(后者即 landing-confirm,同款会炸,走查下一步就会撞上) · .note .done / .note .need —— ACC1_CSS 与 ACC2_CSS · .kv-box —— BIND_LANDING · .risk-badge 缺基座形状(只有配色没有胶囊盒子)—— 人工核对徽标家族一致性时发现,机械扫描漏网 新增自测:三份件用到的 class 必须都能在它自己那段 CSS 里找到定义 —— 将来谁再加一个没定义的 class 就变红。变异验证:删掉 .zic 那条真红,补回真绿。 另:嵌套 data-by 的「只读态显示了并不存在的值」已坐实为渲染器侧机制 (递归合并时行内没有该字段会落回外层同名字段),加 it.fails 钉住,平台修法另议。 包版本 2.1.7。pnpm gates 退出码 0(164 文件 / 2450 测)。 Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet --- .../__tests__/activity.test.ts | 65 +++++++++++++++++++ .../src/manifest.ts | 2 +- .../src/views/report.ts | 17 ++++- .../src/views/target-style.ts | 32 +++++++++ .../interaction/__tests__/view-render.test.ts | 35 ++++++++++ 5 files changed, 149 insertions(+), 2 deletions(-) diff --git a/activities/part-substitution-assessment/__tests__/activity.test.ts b/activities/part-substitution-assessment/__tests__/activity.test.ts index 4f0b99a..bc33b67 100644 --- a/activities/part-substitution-assessment/__tests__/activity.test.ts +++ b/activities/part-substitution-assessment/__tests__/activity.test.ts @@ -40,6 +40,41 @@ const viewHtml = (name: string) => manifest.assets.viewTemplates.find((t) => t.n const ledgerOf = (address: string) => manifest.declarations.ledger.find((l) => `${l.domain}.${l.object}` === address); const colOf = (address: string, name: string) => ledgerOf(address)?.fields.find((f) => f.name === name); +/** + * 从一段 CSS 文本里摘出**选择器里提到过的所有 class token**(2026-08-30 task-12,缺陷③用)。 + * 只扫选择器,不扫规则体(`content:"…"` 这类属性值里的文字不算);`@media`/`@supports` + * 这类带嵌套一层规则体的 at-rule 会往里再走一遍(本仓三份件的 `@media(max-width:600px)` 与 + * `@media (prefers-reduced-motion: reduce)` 都嵌着真正的选择器,不能漏)。 + * 这是**存在性**扫描(选择器里出没出现过这个 class),不判断它是不是复合选择器的一部分 —— + * `.zic` 完全不存在是这份扫描要抓的那种漏(缺陷③的两个真实事故都是这一种:某个 class + * 在目标件自己的 `' + + ''; + const out = renderView(withNestedLookup, { + type_id: '5', // 页面顶层恰好有个同名字段(如 sub_eval.case.chip_type_id 铺到顶层的产物) + parts: [{ pn: 'XL2596S-5.0' /* 这一行没有 type_id 这个键 —— 该型号还没定型 */ }], + dict: [{ id: '5', name: 'DC-DC 降压稳压器' }], + }); + expect(out).not.toContain('DC-DC 降压稳压器'); + }); }); describe('data-options:下拉的选项从台账现读', () => {