跨端: feat(预设): 静默兜底留一条可观测痕迹;"只写不读"在鸿蒙侧也补上判据(照 LEGACY_BACKUP_KEY 照搬);§10 出处落地
pi 2026-09-14 的三小条。 1. **§3 静默兜底要留可观测痕迹**:`normalizePreset` 把认不出的 id 换成 aurora 这件事, 原先在真实环境里**不留任何痕迹** —— §10 的登记只防"被误报成 bug",防不住 "没人知道它正在发生"。现在 `BackgroundPlan.presetSubstitutedFrom` 带出**原来那个 id** (换过非空、没换过空串),页面据此打一行日志 ⇒ 后果从"可能发生"变成"**可数**"。 **痕迹记在返回值里而不是在这一层直接打日志**,理由写进代码:这一层是**纯逻辑** (无 `@ohos` 依赖 ⇒ 判据能用 node strip-types 直接跑它);为打一行日志引入 `@ohos.hilog`, 等于把"能真跑的行为判据"换成"只能读源码的形态判据"——不划算的交易。 **判据两条方向都钉**:替换必须留痕(且带出原 id);**没替换时必须为空** (痕迹退化成噪声就等于没有)。变异与正反例都在(5 条全绿)。 2. **§2 §10 的"谁批准"落成出处**:那一格原写"产品决定" —— 按 pi 的话这是**事后追认**。 现在写的是 **「无人类批准:这是实现时的默认行为(随 `model/Wallpaper.ts` 引入, `git log --diff-filter=A` 可查出处,2e42aac),本行是补登记」**,并把**意图**与**批准**分开写 (不拿意图冒充批准)。另两行也补了出处(`Appearance.ts:39,52,88,104,133` / `AppearanceStore.ets:142-195` / `backgroundStore.ts:200`)。 3. **§1 "可扫的字段清册"不必先造 —— 同形状已有一边是判据**:他说得对。 WebUI 的 `LEGACY_BACKUP_KEY` 早就钉着"只写不读",鸿蒙的 `bgBlur` 只有文档 ⇒ 差的是**同一个形状只有一边有判据**。已照搬:`harmony-appearance.test.mjs` 新增 **"消费侧出现次数必须为 0"**;豁免**按文件登记 + 写理由**(域模型 / 状态同步 / 线上 DTO 三处是搬运与传输,不是消费)——与 `mail_status_readers_test.go` 的豁免同一形状, 登记表本身就是清册,不必另造一张。 变异验证:让 MainPage 读一次 `bgBlur` → 判据红,红的信息写着"**停下:那时必须先补 px ↔ 材质档位的映射判据**,而不是把登记值从 0 改成 1"。 SUITE 计数同步:harmony-presets 4→5、harmony-appearance 24→25。
This commit is contained in:
@ -220,6 +220,23 @@ export class BackgroundPlan {
|
||||
/** 用的是深色那套色板吗(跟着主题走,不是"未验") */
|
||||
dark: boolean = false;
|
||||
presetId: string = '';
|
||||
/**
|
||||
* **静默兜底的痕迹**(pi 2026-09-14 裁定):服务端/WebUI 先加了新档、而这台设备是旧构建时,
|
||||
* `normalizePreset` 会把认不出的 id **静默换成 aurora** —— 用户以为选的是新档。
|
||||
* 这条缺省语义已登记在 `CRITERIA.md` §10,但登记只防"被误报成 bug",
|
||||
* **防不住"没人知道它正在发生"**(真实环境里不会留下任何痕迹)。
|
||||
*
|
||||
* 所以把"发生过替换"记在这里:换过就是**原来那个 id**(非空),没换过就是空串。
|
||||
* 页面拿到非空值时**打一行日志**(`hilog`/`console.info` 皆可)——
|
||||
* 于是这个后果从"可能发生"变成"**可数**":出问题时能立刻确认是版本偏移,而不是猜。
|
||||
*
|
||||
* ⚠️ 为什么痕迹记在**返回值**里、而不在这一层直接打日志:这一层是**纯逻辑**
|
||||
* (无 `@ohos` 依赖 ⇒ 判据能用 node `--experimental-strip-types` 直接跑它,
|
||||
* 见 `harmony-presets.test.mjs`)。为了打一行日志而引入 `@ohos.hilog`,
|
||||
* 会把"能真跑的行为判据"换成"只能读源码的形态判据" —— 那是不划算的交易。
|
||||
* 记事实在这一层(可判),打日志在页面层(可观测)。
|
||||
*/
|
||||
presetSubstitutedFrom: string = '';
|
||||
layers: PresetLayer[] = [];
|
||||
/**
|
||||
* 遮盖浓度(0~1):**两档都用**(预设档也压),用系统遮罩色刷一层。
|
||||
@ -251,6 +268,8 @@ export function resolveBackground(bgKind: string, presetId: string, scrim: numbe
|
||||
if (bgKind === 'preset') {
|
||||
plan.kind = 'preset';
|
||||
plan.presetId = normalizePreset(presetId);
|
||||
// 留痕:认不出的 id 被静默替换时,把**原来那个 id**带出去(页面据此打一行日志)
|
||||
plan.presetSubstitutedFrom = plan.presetId === presetId ? '' : presetId;
|
||||
plan.layers = layersFor(plan.presetId, dark);
|
||||
// 预设档**也**套遮罩:与 WebUI 的 `--bg-dim` 一致(它不区分档位),服务的是可读性
|
||||
plan.scrim = scrim;
|
||||
|
||||
Reference in New Issue
Block a user