diff --git a/client/electron/test/background.test.mjs b/client/electron/test/background.test.mjs index b278dab..7066ee3 100644 --- a/client/electron/test/background.test.mjs +++ b/client/electron/test/background.test.mjs @@ -340,18 +340,38 @@ check('新组件未使用未映射色族', unmapped.length === 0, unmapped.join( * 整体的模糊是由壁纸那一层模糊确定的」)。导航浮在壁纸上,背后是**已经模糊过** * 的壁纸,再 backdrop-filter 一次只会更脏更掉帧。所以断言是反向的:壁纸层有模糊, * 而壁纸模式下的 .nav-rail 没有。 + * + * ★★ 2026-09-14 **标签缩回断言的真实范围**(pi 指出,我逐条变异确认)★★ + * + * 我原先把这两条的名字写成了"导航**不得**变暗 / 不得自叠模糊",但它们各自只扫了 + * **一条路**。我用 pi 预测的三条逃逸路各注了一次变异,**三条全部逃掉**(导航变黑/变模糊, + * 而两条判据照样全绿): + * + * | 逃逸路 | 变异注入 | 结果 | + * | --- | --- | --- | + * | A 选择器作用域 | `.dark .nav-rail { background-color: #0f172a }` | **绿**(`/\.dark\s*\{/` 匹配不到它) | + * | B 组件的 dark: 变体 | `className="nav-item dark:bg-slate-900 …"` | **绿**(Tailwind 产的也不是 `.dark{--nav-}`) | + * | C 组件的工具类模糊 | `className="nav-item backdrop-blur-lg …"` | **绿**(不在那条选择器下) | + * + * ⇒ 选择 (a) **把标签缩回它真正断言的东西**,并把它没守的路写在名字里之外的地方(本注释): + * **标签比断言宽的判据,会在它没测的那条路上被回滚时给绿,而人信的是标签。** + * (为什么不选 (b)「扩到扫全部 JSX 类名 + CSS 选择器」:成本高,且极易变成一刀切误红 —— + * `bg-chrome-600` plain 档徽标就是先例。) + * + * **未覆盖的路(各自另立判据时才补,不是"已经安全")**:A/B 两条深色来源、 + * C 这条模糊来源。真要堵时按文件窄豁免写,别写成"导航目录不许出现 dark:"。 */ const darkBodies = [...css.matchAll(/\.dark\s*\{([^}]*)\}/g)].map(m => m[1]); check( - '没有深色主题之前,.dark 不单独给导航换色', + '导航深色来源之一已堵:.dark 令牌块里不许出现 --nav-*(另两条路见上方注释,未覆盖)', darkBodies.length >= 1 && darkBodies.every(b => !/--nav-/.test(b)), - '.dark 里出现了 --nav-* 令牌 —— 要让导航变暗,必须同时给组件补 dark: 变体' + '.dark 令牌块里出现了 --nav-* —— 这条只堵这一条路(`.dark .nav-rail{}` 作用域与组件 dark: 变体都没堵,见上方注释)' ); check( - '模糊只由壁纸层负责(壁纸模式下的导航不再自叠一层)', + '导航自叠模糊之一已堵:壁纸模式下 .nav-rail 规则里不许写 backdrop-filter(元素级工具类那条路未覆盖)', /\.app-backdrop \{[\s\S]*?filter: blur\(/.test(css) && !/html\[data-bg='on'\] \.nav-rail[^{]*\{[^}]*backdrop-filter/.test(css), - '导航自己 backdrop-filter 会把已经模糊过的壁纸再糊一次' + '壁纸模式下 .nav-rail 自己 backdrop-filter 会把已经模糊过的壁纸再糊一次(元素级 backdrop-blur-* 工具类不在本判据范围内)' ); check('内层面板自带圆角(不靠裁剪,否则与滚动冲突)', /\.comm-pane > \*:not\(\[data-testid='comm-tabs'\]\) \{[\s\S]{0,80}border-radius: var\(--radius-card\)/.test(css)); diff --git a/docs/DEBTS.json b/docs/DEBTS.json index 01e820f..8f56664 100644 --- a/docs/DEBTS.json +++ b/docs/DEBTS.json @@ -36,6 +36,12 @@ "count": 1, "due": "有人对上表那格**追认或驳回**「未知 id 显示 aurora 而不是空白」这个方向时(我作为实现者不能自己追认自己)", "where": "client/electron/test/CRITERIA.md §10 的『未知的预设 id』行(现为『无人类批准』)" + }, + { + "id": "overlay-follows-app-theme", + "count": 1, + "due": "上设备后**翻转一次 colorMode**(应用深色 / 系统浅色),断言**解析出的遮罩值跟着「应用」主题变、而不是跟「系统」**;真机若证伪,正确修法是「遮罩从应用主题派生」,不是回到双常量", + "where": "client/harmony/entry/src/main/ets/common/Theme.ets:58-79 的注释(机制依据:AppearanceStore.applyTheme → app.setColorMode)——**注释不是判据,所以进余额**" } ] }