From 1fcb754b613f2f9076d16979c366dac43a85fc80 Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Mon, 14 Sep 2026 17:35:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=88=A4=E6=8D=AE):=20=E4=B8=A4=E6=9D=A1?= =?UTF-8?q?=E5=8F=8D=E5=90=91=E6=96=AD=E8=A8=80"=E6=A0=87=E7=AD=BE?= =?UTF-8?q?=E6=AF=94=E6=96=AD=E8=A8=80=E5=AE=BD"=E2=80=94=E2=80=94?= =?UTF-8?q?=E7=BC=A9=E5=9B=9E=E7=9C=9F=E5=AE=9E=E8=8C=83=E5=9B=B4=E5=B9=B6?= =?UTF-8?q?=E8=AE=B0=E4=B8=8B=E4=B8=89=E6=9D=A1=E9=80=83=E9=80=B8=E8=B7=AF?= =?UTF-8?q?=EF=BC=88=E5=90=84=E6=B3=A8=E5=8F=98=E5=BC=82=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=EF=BC=89=EF=BC=9Boverlay=20=E8=BF=90=E8=A1=8C=E6=9C=9F?= =?UTF-8?q?=E8=BE=B9=E7=95=8C=E8=BF=9B=E4=BD=99=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pi 2026-09-14:变异证明的是"我注入的那两条会被抓",不是"回滚会被抓" —— 对。 1. **标签缩回断言的真实范围**(选 pi 的 (a)):两条判据原先叫"导航不得变暗 / 不得自叠模糊", 实际各只扫了一条路。按 pi 预测的三条逃逸路各注一次变异,**三条全部逃掉**(导航变黑/变模糊, 判据照样全绿):`.dark .nav-rail{background-color}`(选择器作用域)、组件 `dark:bg-slate-900` (Tailwind 产的不是 `.dark{--nav-}`)、组件 `backdrop-blur-lg`(不在那条选择器下)。 现在名字就是它们真正断言的东西,**未覆盖的路逐条写在注释里**(含变异表), 并写明要堵时按文件窄豁免写、别一刀切。 理由:**标签比断言宽的判据,会在它没测的那条路上被回滚时给绿,而人信的是标签。** 2. **overlay 的运行期边界进余额**(`overlay-follows-app-theme`):机制依据(`applyTheme → setColorMode`、资源按应用配置解析)我认,但它是**运行期**性质、注释里的"未验"没人判 —— 按我自己刚立的纪律:只活在注释里的边界 = 没人判的边界。到期前提写死:上设备后翻转 colorMode,断言遮罩跟着「应用」主题变;证伪则改为从应用主题派生,**不是**回双常量。 --- client/electron/test/background.test.mjs | 28 ++++++++++++++++++++---- docs/DEBTS.json | 6 +++++ 2 files changed, 30 insertions(+), 4 deletions(-) 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)——**注释不是判据,所以进余额**" } ] }