cf01c99fe6
这条守门是为「#193 把策划选择器整段误删」设的,但它自己有两处会放行:
一、条件类进不了清单。抽取时 `.replace(/\$\{[^}]*\}/g, ' ')` 把插值整段丢掉,而两个
组件里唯一的条件类恰好长在插值里:``plan-gdd-surface${showCard ? ' …--with-card' : ''}``。
清单 25 个类里没有 `plan-gdd-surface--with-card`。它不是装饰性的:
`.game-workbench-chat .plan-gdd-surface--with-card` 的 `grid-template-rows: auto
minmax(0, 1fr)` 是审批卡内滚的边界,策划面自己是 `display: grid` + `overflow: hidden`
的外壳,删掉这条,批准后的交付行连同路径和两个按钮会被切在壳外。实测把该类的两条
规则整段删掉,改前的测试照样绿。
改成只取插值里的字符串字面量——三元的条件和变量名不是类名,不能混进清单。清单
25 → 26,新进的正是 `plan-gdd-surface--with-card`,没有杂质。
二、`styles.includes('.' + name)` 是子串匹配,`.gdd-approval-card__header` 可以冒充
`.gdd-approval-card` 的存在证据。改成要求类名后面不再跟类名字符。当前 26 个类逐一
校验都有精确 selector,所以这一处堵的是潜在放行,不是正在掩盖的缺失。
另按评审要求补一条负向钉子:单独钉住上面那条承重的行模板。存在性检查只要 `--with-card`
还剩任意一条规则就绿,而两条里只有它是承重的。
三条负向都已验证非空转:删两条规则 → 红;只删承重那条留下分隔线 → 红;把
`.gdd-approval-card__details` 改名只留派生类 → 红(改前用 includes 会绿)。
评审同时建议做 computed-style/布局断言,这里没做:appSurface 跑 jsdom,没有布局引擎,
且这套 suite 不把 styles.css 挂进 DOM。要真断言得换真实浏览器 runner,是另一件事。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>