test(mails.status): "正当"落成可判约束(只许比 archived);欠账补一条"还清即转绿"的判据
pi 2026-09-14 的三点接续。 1. **§1「正当」不能只是标注,要是可判的约束**:按文件+计数登记挡得住"新增一处", 挡不住"**已登记的那一处改变性质**"。已判出来:**任何与 m.status 的比较只允许比 'archived'**(全局属性),与 'read'/'unread' 比较 ⇒ 红(per-reader 属性必须走 mail_reads)。 第一次跑就抓到第三处:`migrate.go` 的 `WHERE m.status = 'read'` ×2 —— 它是**回填**, 职责就是读那个遗留值,所以按文件登记**窄豁免**(allowedCompareExempt,带理由), 而不是"凡是迁移都放行"。 2. **§2 欠账要有"还清即转绿"的判据**:新增 `mail_status_derived_test.go`,三态形状 (与套件探针同族)—— 欠账未清 ⇒ `t.Skip` 并写明还欠什么(**不假红也不假绿**); 还清 ⇒ 开始实跑并断言"详情路径的 status == 按读者派生的值",**转绿即可测事件**; 迁一半(只改 GetMailByID 漏 GetThread)⇒ 红。 实测当前状态:`--- SKIP ... 详情路径返回行级 status="read",而按读者派生说 "unread"`。 **没写成"现在就红"**:恒红的门 = 挂在错误相位的门(CRITERIA.md §11 已为它付过学费)。 另按他的更正把 `migrate.go` 的理由写准:不是"跑过即结束",而是 **"全新安装/空库路径必须存在"**(措辞会影响下一个人敢不敢删它)。 3. **§3 (b) 的语义契约补归属**:归属 = dsh(鸿蒙侧实现者),WebUI 侧不需改动; 落点 = 跨端对齐判据那一族(形状与"预设清单逐项一致"同构,比语义不比数值); **如实标注当前未建**及原因(鸿蒙侧还没有日历页/手势代码 ⇒ 此时"两端逐项相同"只有一端存在, 建出来就是假判据);到期前提 = P6 第 3 步出现手势代码时立即建,此前是**登记的欠账**。
This commit is contained in:
@ -127,6 +127,18 @@ WebUI 侧踩过这个坑,见 `gateway/handler/permission.go` 的 Note 传递
|
||||
**契约(改钉这张表)**:语义映射 —— 左滑 = 什么、右滑 = 什么、翻页边界是否回弹、
|
||||
"快滑"是**用户感知档**(不是毫秒数)。数值各自定,语义必须一致。
|
||||
|
||||
**语义契约的归属与落点(pi 2026-09-14 裁定 §3:跨端语义要有归属,不能只是 P6 的施工说明)**
|
||||
|
||||
- **归属**:**dsh(鸿蒙侧实现者)** —— 这张表由我维护;WebUI 侧**不需要改动**((b) 不要求数值一致)。
|
||||
- **落点**:它该进**跨端对齐判据**那一族(`cross-client-theme.test.mjs` 的邻居),形状与
|
||||
"预设清单 id/顺序逐项一致"同构,只是这里比的是**语义**而不是数值:
|
||||
**两端"左滑/右滑/边界回弹/快滑感知档"的映射逐项相同(不比毫秒与像素)**。
|
||||
- **当前状态(如实标注,不当成已完成)**:**这条判据还没建**。原因是**鸿蒙侧还没有日历页、
|
||||
也就没有任何手势代码**(全 `ets` 树无 calendar)—— 此时"两端逐项相同"只有一端存在,
|
||||
建出来就是**假判据**(与 `bg_blur` 那张"不存在的映射表"同一个错)。**到期前提**:P6 第 3 步
|
||||
(鸿蒙侧出现滑动手势代码)时立即建这条判据;在那之前它是一次**登记的欠账**(有余额、有到期),
|
||||
不是"挂在一个没有执行者的人身上"的开项。
|
||||
|
||||
**推论(写清,避免下一个人搞反)**:选了 (b) ⇒ **鸿蒙侧不得引用 WebUI 的那三个数**
|
||||
(引了就等于偷偷选了 (a),而且是"我抄的那一份"那种 (a))。鸿蒙自己定值、自己钉住,
|
||||
并在本节写明"为何与 WebUI 不同"(与 §7.12"有意差异表"同一形状)。
|
||||
|
||||
Reference in New Issue
Block a user