diff --git a/client/electron/test/debt-visibility.test.mjs b/client/electron/test/debt-visibility.test.mjs index 1e2dd23..005824b 100644 --- a/client/electron/test/debt-visibility.test.mjs +++ b/client/electron/test/debt-visibility.test.mjs @@ -32,9 +32,18 @@ const REGISTERED = new Map([ ['background.test.mjs', 3], // 两条反向断言的未覆盖路(route B / route C)+ 说明 ['harmony-appearance.test.mjs', 4], // bgBlur 消费侧/映射、运行期形态类边界 ['harmony-logic.test.mjs', 1], // `.ets` 状态机要跑起来才算数 - ['debt-visibility.test.mjs', 9], // 本文件:N 处是词表定义 + 报错文案(第 N+1 处即红) + ['debt-visibility.test.mjs', 12], // 本文件:N 处是词表定义 + 报错文案 + 上面那段解释(第 N+1 处即红) ['harmony-admin.test.mjs', 1], // 用户管理页:本机无设备 ⇒ 只能证明"代码里这么写" - ['harmony-imageprep.test.mjs', 4] // 图片上传:压图/选图/服务端收下,三样本机都验不了 + ['harmony-imageprep.test.mjs', 4], // 图片上传:压图/选图/服务端收下,三样本机都验不了 + /* + * `harmony-deviceprobe.test.mjs` 的 2 处:**都不是"这块没验"的边界声明**,而是 + * 对**词表本身**的断言 —— ① `unverifiedReason(VERDICT_OTHER)` 必须含「未验」; + * ② `mayAssertOn(…)` 那条的说明文字("失效方式是永远未验")。 + * 但**按次数登记、不整文件放行**(π 2026-09-15 指出的形状):整文件放行的话, + * 将来在这个文件里写一句真实的「这里没判 / 已知缺口」就**不会红** —— + * 那正是"新文件不会自动跑一遍守卫"这个洞。2 就是上限,第 3 处即红。 + */ + ['harmony-deviceprobe.test.mjs', 2] ]); const HERE = dirname(fileURLToPath(import.meta.url)); diff --git a/client/harmony/entry/src/main/ets/model/Appearance.ts b/client/harmony/entry/src/main/ets/model/Appearance.ts index ba09ca4..c06996a 100644 --- a/client/harmony/entry/src/main/ets/model/Appearance.ts +++ b/client/harmony/entry/src/main/ets/model/Appearance.ts @@ -164,45 +164,25 @@ export function localOnly(local: AppearanceSnapshot): AppearanceSync { /** * 壁纸模糊档 → **系统材质档次名**(不是像素半径)。 * - * 服务端存的是 WebUI 的 `bg_blur`(0~40 的模糊像素),而鸿蒙这边"模糊"由系统材质提供 - * (`BlurStyle`)—— 这是"用系统方案"的直接结果:同一个数字在两边含义不同, - * 所以要**显式映射**,而不是把 40 当半径塞进某个 API。 + * ── ★ 已删除(2026-09-15,pi 的裁定)── * - * 返回**档位名**(字符串)而不是 SDK 枚举数值:这一层是**纯逻辑**(零 `@ohos` 依赖 - * ⇒ 判据能用 node 直接跑它),而 `BlurStyle` 只有 `.ets` 里在作用域内。 - * 判据把返回值与 SDK 的 `declare enum BlurStyle` 成员名比对 - * ("档次必须来自系统枚举,写成自造名字会编译不过/不生效")。 + * 它曾是"`bg_blur` → `BlurStyle` 档位"的唯一映射函数。删除的理由是**消费者不存在,而且不该存在**: + * · 页面上**没有任何调用点** —— 它只被自己的判据调用; + * · 唯一的计划消费者是"导航条档位跟随 `bg_blur`",而 pi 2026-09-15 **否决了那个方案** + * (导航条是 chrome,材质固定;见 `MainPage.ets` 的 `NavBar` 注释)。 + * 所以它不是"暂时还没有消费者",是**不该有**。 + * · 这正是本仓刚立的规矩:**"有测试"不等于"有人用"**。一个只靠自己的判据活着的函数, + * 与 `Theme.navMaterial` 那个"只被不可达 `??` 分支引用"的死令牌是**同一个形状**, + * 只是换了个层级。当时我在 `harmony-appearance.test.mjs` 里诚实地标了它是"孤岛", + * 但**"孤岛"写在注释里等于没有机制** —— 注释拦不住下一个读者。 * - * ── ★ 现在**没有任何调用点**(如实登记,别把它读成活的)── + * **想法若真回来**:`git log --all -- <本文件>` 里有实现,而 (a) 那次提交(`426caf9`) + * 本身就是"它为什么不该回来"的记录。**不要为了"万一有用"把它留在代码里。** * - * 它的读者曾经有两个,两个都不在了: - * ① `MainPage.ets` 里那张 `名字 → BlurStyle` 的表,随"导航条改回固定档"删了; - * ② 文件名一度是 `navMaterialFor` 的**有下限**入口(导航条专用), - * 它存在的唯一理由是"导航条档位跟随 `bg_blur`"这个方案 —— 而 pi 2026-09-15 - * **推翻了那个方案**(导航条是 chrome,材质固定;见 `MainPage.ets` 的 `NavBar` 注释), - * 所以它连同"下限"一起删了。 - * - * 于是本函数成了**孤岛**:判据还在、行为还对,但页面里没人调它。 - * 这是**故意留着**的(它是目录里那套分档语义的唯一落点,且判据在跑), - * 不是"以为有人在用"。**如果你要用它,请先想清楚是不是又在重造方案 (b)。** - * - * ⚠️ 试金石:**"有测试"不等于"有人用"**。上一轮我刚因为同形状的事被抓过一次 - * (`Theme.navMaterial` 的"外部引用"落在一个不可达的 `??` 兜底分支上, - * 而死令牌判据照样绿)。函数名这里没有等价判据 —— 只有这段文字,所以更要写实。 + * 注意与它**不是**一回事的:壁纸层的 `.blur(px)` 用的是**像素半径** + * (服务端 `bg_blur` 原值,0~40,与 WebUI 同一个数)—— 那个是**活的**,没有删。 + * "px 半径"与"系统材质档"是两个量,别再合到一起。 */ -export function blurStyleFor(bgBlur: number): string { - const b: number = clampNumber(bgBlur, 0, 40, 4); - if (b <= 0) { - return 'NONE'; - } - if (b <= 8) { - return 'COMPONENT_THIN'; - } - if (b <= 20) { - return 'COMPONENT_REGULAR'; - } - return 'COMPONENT_THICK'; -} /** * 主题偏好 → 系统色彩模式。 diff --git a/client/harmony/entry/src/main/ets/model/Wallpaper.ts b/client/harmony/entry/src/main/ets/model/Wallpaper.ts index b5b9f4d..549e4e3 100644 --- a/client/harmony/entry/src/main/ets/model/Wallpaper.ts +++ b/client/harmony/entry/src/main/ets/model/Wallpaper.ts @@ -239,20 +239,20 @@ export class BackgroundPlan { presetSubstitutedFrom: string = ''; layers: PresetLayer[] = []; /** - * 模糊强度(**服务端给的 px 原值**,0~40;由 `model/Appearance.ts` 的 `blurStyleFor` - * 映射成系统材质档)。 + * 模糊强度:**服务端给的 px 原值**(0~40),页面拿它做 `.blur(px)` —— **像素半径**。 * - * ★ 为什么这里放的是 px 而不是"材质档字符串":这一层是**纯逻辑**(零 `@ohos` 依赖), - * 而"px → 材质档"那张表的**唯一**权威在 `Appearance.ts`(它连同边界 0/8/20 - * 一起被判据钉住)。在这里再抄一份分档,就会有两张表 —— 而两张表迟早会分叉。 - * ⇒ 计划只**搬运**这个值,页面拿它去问 `blurStyleFor`。 + * ★ 只**搬运**,不在这里分档:这一层是**纯逻辑**(零 `@ohos` 依赖), + * 分档会变成第二张表,而两张表迟早分叉。**这里也再没有"档"这回事了** —— + * 曾经的 `px → 材质档` 映射函数(`Appearance.ts` 的 `blurStyleFor`)已随 + * "导航条改回固定档"一起删除(2026-09-15):它没有、也不该有消费者。 + * ⇒ 想加"档位"请先读 `Appearance.ts` 那段碑文,那里写着为什么不该加回来。 * - * ★ 为什么现在才有人消费它:服务端那个模糊字段一直是"**只写不读**"—— - * 服务端存、两端同步、`blurStyleFor` 也写了、就是**没有任何调用点** + * ★ 为什么一度"只写不读":服务端那个模糊字段曾经**没有任何调用点**(服务端存、 + * 两端同步,页面却没人用) * (`harmony-appearance.test.mjs` 有一条判据把"消费侧出现次数为 0"钉住, - * 就是为了让"有人开始消费"这一刻**必须停下来**补映射判据而不是偷偷把 0 改成 1)。 + * 就是为了让"有人开始消费"这一刻**必须停下来**补判据而不是偷偷把 0 改成 1)。 * P4c 加背景选择器时踩到了这条线:滑杆能拖、值能存,但壁纸**一点没糊**。 - * 所以这次把映射的**调用点**补上(映射表与它的判据早就在了)。 + * 所以这次把**消费点**补上了(`.blur(this.bgPlan.blurPx)`)。 */ blurPx: number = 0; /** @@ -308,7 +308,8 @@ export function resolveBackground(bgKind: string, presetId: string, scrim: numbe * * ★ 边界 40 与 `model/Appearance.ts` 的 `clampNumber(bgBlur, 0, 40, 4)` **必须同值** —— * 两边不一致的话,服务端存 40、这边按 80 画,判定与显示就对不上了 - * (`blurStyleFor` 里面也有一次 clamp,那是它自己的防线,不是这里可以放松的理由)。 + * (曾经 `Appearance.ts` 的 `blurStyleFor` 里也有一道 clamp —— 它已删除; + * 现在这条 clamp 就是**唯一**一道,所以更不能松)。 */ export function normalizeBlur(px: number): number { if (!Number.isFinite(px)) { diff --git a/client/harmony/entry/src/main/ets/pages/MainPage.ets b/client/harmony/entry/src/main/ets/pages/MainPage.ets index 01e4606..acc13c2 100644 --- a/client/harmony/entry/src/main/ets/pages/MainPage.ets +++ b/client/harmony/entry/src/main/ets/pages/MainPage.ets @@ -1708,8 +1708,9 @@ struct MainPage { * (作用对象是它背后的内容),语义对不上。导航条那处才该用材质。 * ★ 半径直接用服务端给的那个 px 值:WebUI 就是 `blur(var(--bg-blur))`, * 两边**同一个物理量、同一个数** ⇒ 这一处不需要映射表,也不该有。 - * (`blurStyleFor` 那张表服务的是**材质档**,与这里的 px 半径不是一回事; - * 它是**纯逻辑层**的可判依据;页面侧的面板材质走 `Theme.navMaterial`,见 `NavBar`。) + * (**px 半径**与**系统材质档**是两个量,别再合到一起:这里用 px; + * 页面侧的面板材质走 `Theme.navMaterial`,见 `NavBar`。 + * 曾经那张"px → 材质档"的表连同它的函数已随固定档方案删除。) */ .blur(this.bgPlan.blurPx) // 压暗用**系统遮罩色** + 服务端给的浓度:换向(浅色洗白/深色压黑)由系统负责 diff --git a/docs/DEBTS.json b/docs/DEBTS.json index fb398fe..1abb074 100644 --- a/docs/DEBTS.json +++ b/docs/DEBTS.json @@ -105,6 +105,13 @@ "due": "本工作区能装、能点设备 —— 那时这几条静态判据里被替代掉的那些断言换成真机断言,声明随之减少", "where": "client/electron/test/harmony-admin.test.mjs、client/electron/test/harmony-imageprep.test.mjs", "kind": "scope" + }, + { + "id": "deviceprobe-fixture-timing", + "count": 1, + "due": "把两份 fixture 变成**当场采集**(跑 hdc dump 取现场)而不是人工存文件时,这条就到期", + "where": "client/electron/test/harmony-deviceprobe.test.mjs(两处提到「未验」的断言 + fixtures/aa-dump-l-*.txt)", + "kind": "scope" } ] }