跨端: docs(引用锚): 把日期锚换成邮件 ID(pi 邮件 b1e23663:日期也是锚,写错一天下一个人找不到那封信)
pi 指出的锚错:`PushContract.ts` 里那段线上形状是 pi **09-15** 发的(邮件 `004983bb`),我写成了 09-14。 照他的推理("引用别人的工作状态时,哈希和'谁在读'一样会漂")往下再走一步: **日期本身就是会漂的锚 —— 邮件 ID 不会。** 所以不是把 09-14 改成 09-15 就完事, 而是把这一族引用改成**可检索的标识**: - `PushContract.ts`:契约来源 → `1f9ff3b4`;线上形状 → `004983bb`; - `harmony-push.test.mjs`:同上两处; - `Calendar.ts`:表头共用分叉、"今天"的调用侧 → `f60521de`; - `ALIGN-REFS.json`:参照物版本登记 → `6e14b410`;圆角策略追认 → `90372ca1`;AGC 包名实测 → `1f9ff3b4`。 共 10 处。判据不依赖这些注释文本,改完 `harmony-push` 12/12、`harmony-calendar` 10/10、`align-refs` 3/3 仍绿; `ALIGN-REFS.json` 仍是合法 JSON。 **没改的 4 处**(`NavItems.ts` 1 处、`Wallpaper.ts` 3 处):它们写于 09-14 那批往来,日期本身没被指出错, 而那几封的邮件 ID 我这边没有(跨过一次上下文压缩)——**宁可留着有争议的日期,也不编一个 ID**。
This commit is contained in:
@ -5,7 +5,7 @@ import { fileURLToPath, pathToFileURL } from 'node:url';
|
||||
import { code } from './lib/read.mjs';
|
||||
|
||||
/*
|
||||
推送客户端契约层(pi 2026-09-14)。四条不变量里**三条是纯逻辑**,所以不需要设备就能钉:
|
||||
推送客户端契约层(pi 邮件 `1f9ff3b4`)。四条不变量里**三条是纯逻辑**,所以不需要设备就能钉:
|
||||
静默失败、`enabled:false` 是正常态、按 `provider+tail` 比、通知按 `mail_id` 去重。
|
||||
*/
|
||||
|
||||
@ -73,7 +73,7 @@ test('★ 契约层必须保持"无 @ohos 依赖"(否则这些判据跑不了
|
||||
});
|
||||
|
||||
/*
|
||||
★ 线上形状(pi 2026-09-14,从 handler/push.go 读的):请求体字段名必须逐字一致
|
||||
★ 线上形状(pi 邮件 `004983bb`,从 handler/push.go 读的):请求体字段名必须逐字一致
|
||||
(**未知字段直接 400**,不是静默忽略),provider 只做形状校验、**没有白名单**,
|
||||
错误是 `{"error"}` 不是 `{"message"}`。这些都能在纯逻辑侧判。
|
||||
*/
|
||||
|
||||
@ -91,7 +91,7 @@ export function monthGrid(year: number, month: number, weekStart: number, today?
|
||||
}
|
||||
|
||||
/**
|
||||
* 星期表头 —— **必须与 `leadingBlanks` 来自同一个 `startOfWeek`**(pi 2026-09-14)。
|
||||
* 星期表头 —— **必须与 `leadingBlanks` 来自同一个 `startOfWeek`**(pi 邮件 `f60521de`)。
|
||||
*
|
||||
* 整月网格有两个地方依赖"周从哪天开始":**空格数**与**表头第一格**。
|
||||
* 如果表头在页面里硬编码成 `['日','一',…]` 或另算一次,那就是**第二个分叉点**:
|
||||
@ -121,7 +121,7 @@ function pad2(n: number): string {
|
||||
}
|
||||
|
||||
/**
|
||||
* "今天"的**调用侧**(pi 2026-09-14 §2,趁骨架之前定下来)。
|
||||
* "今天"的**调用侧**(pi 邮件 `f60521de` §2,趁骨架之前定下来)。
|
||||
*
|
||||
* 为什么单独抽出来:`today` 入参化之后,`Calendar.ts` 是纯粹的,
|
||||
* **唯一还能错的地方搬到了调用侧** —— 而它恰好是纯逻辑判据够不着的那一格。
|
||||
|
||||
@ -2,12 +2,12 @@
|
||||
* 推送客户端**契约层**(纯逻辑,无 `@ohos`)—— 与 `Wallpaper.ts`/`Calendar.ts` 同模式,
|
||||
* 所以判据能用 node 直接跑,不需要设备。
|
||||
*
|
||||
* 契约来源:pi 2026-09-14(服务端半边已实现,客户端这半边归我)。四条不变量:
|
||||
* 契约来源:pi 邮件 `1f9ff3b4`(服务端半边已实现,客户端这半边归我)。四条不变量:
|
||||
* 1. **推送是可选通道,不是依赖**:任何一步失败都**静默跳过**(不报错、不阻塞、不弹失败提示);
|
||||
* 2. **SSE 仍是主通道**,推送只是"App 不在前台时的第二通道";
|
||||
* 3. **`enabled:false` 是正常态**(自部署常态、没配凭证)⇒ 不重试、不提示失败;
|
||||
* 4. **通知 `data` 按 `mail_id` 去重** —— 服务端推送是**至多一次、无幂等键**
|
||||
* (`internal/push` 没有队列/重试/去重表),所以重复保护只能落在客户端(pi 2026-09-14 §三②)。
|
||||
* (`internal/push` 没有队列/重试/去重表),所以重复保护只能落在客户端(同一封 §三②)。
|
||||
*/
|
||||
|
||||
export const PROVIDER_HMS: string = 'hms';
|
||||
@ -151,7 +151,7 @@ export class NotificationLedger {
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────────
|
||||
// 线上形状(pi 2026-09-14,从 handler/push.go + cmd/server/main.go 读的,不是猜的)
|
||||
// 线上形状(pi 邮件 `004983bb`,从 handler/push.go + cmd/server/main.go 读的,不是猜的)
|
||||
//
|
||||
// 三条端点(POST / DELETE / GET)**都挂在 `/me/*` 组下**,同一套 Bearer 鉴权;
|
||||
// **DELETE 也是 JSON body**(不是 query、不是 path 参数);
|
||||
|
||||
Reference in New Issue
Block a user