diff --git a/client/electron/test/build-stamp.test.mjs b/client/electron/test/build-stamp.test.mjs index 0aad669..2453f85 100644 --- a/client/electron/test/build-stamp.test.mjs +++ b/client/electron/test/build-stamp.test.mjs @@ -128,7 +128,10 @@ test('★ 产物必须自报来源:BUILD_INFO 精确比对(不是比时间 ` 重构建:cd client/electron && npm run build(注意别把它的退出码丢在管道里)`); if (now.gitRev && info.gitRev) { assert.equal(info.gitRev, now.gitRev, - `产物是在另一个提交上构建的(产物记 ${info.gitRev},当前 HEAD ${now.gitRev})—— 重构建再复核`); + `产物是在另一个提交上构建的(产物记 ${info.gitRev},当前 HEAD ${now.gitRev})—— 重构建再复核。` + + `\n**别去改 BUILD_INFO.json 里的 gitRev / srcHash 了事** —— 那是把这条判据废掉` + + `(§14 说的「最常见的错误修法」):产物自证的意义就是「产物必须来自当前源码」,` + + `改记录只会让两者不一致却看不出来。正确修法只有一个:重跑构建。`); } /* * `gitDirty` 只**展示**不判定:共享工作区常年是脏的(并发写作者的未提交改动), diff --git a/client/electron/test/packaging.test.mjs b/client/electron/test/packaging.test.mjs index 1c74324..30a11e7 100644 --- a/client/electron/test/packaging.test.mjs +++ b/client/electron/test/packaging.test.mjs @@ -87,7 +87,9 @@ test('★ 安装包里的 dist 必须与当前构建一致(否则装上去的 [], '安装包里的 dist 与当前构建不一致(前端改了但没重打包):\n' + ` 缺:${missing.join(', ')}\n` + - ' 重打:npx electron-builder --linux -c.electronDownload.isVerifyChecksum=false' + ' 重打:npx electron-builder --linux -c.electronDownload.isVerifyChecksum=false\n' + + ' **别去改这条断言、也别往包里塞一份手抄的 dist 了事** —— 那是把判据废掉\n' + + ' (§14 说的「最常见的错误修法」):包里的 dist 必须就是当前构建的产物。' ); }); diff --git a/docs/HARMONY-ALIGN-PLAN.md b/docs/HARMONY-ALIGN-PLAN.md index 4e58a91..9e18fc9 100644 --- a/docs/HARMONY-ALIGN-PLAN.md +++ b/docs/HARMONY-ALIGN-PLAN.md @@ -1043,3 +1043,18 @@ pi 的疑问:「系统那三个 `mask_*` —— light/regular/thick 是**浓 不标的多半是被 `git add -A` 卷进去的。判据在 `test/commit-hygiene.test.mjs`: 基线 = 该判据文件自己的引入提交(**历史不改**,规则管从今往后), 配分类逻辑的合成自检(否则"解析没跑起来"时会全绿)。 + +## P2a / P2b(鸿蒙侧 —— pi 2026-09-14 明确归属:**不是** WebUI 的活) + +三件事的**落地全在鸿蒙**;WebUI 那边已经是目标形态,是**参照物**不是待办: + +| 项 | 参照物(WebUI,已经是目标形态) | 鸿蒙要做的 | +| --- | --- | --- | +| **P2a** 联系人页两个视图 | `client/electron/src/components/ContactPanel.tsx` + `useContactStore.view`(列表 / 卡片) | `ContactsTab` 补**卡片视图**:承接现在鸿蒙平级「会话」tab 的东西(主题、最新一封摘要、是人还是 Agent、`PermissionChip`、`BudgetChip`)—— 它不是「多余入口」,是**放错了位置的卡片视图** | +| **P2b** 收件箱按会话折叠 | `client/electron/src/lib/mailGroups.ts` | 鸿蒙收件箱加**按会话折叠**,组头带未读 | +| **P2b** 删平级「会话」tab | WebUI **没有**平级会话入口(所以没有「删 tab」这回事) | 前两项到位后**再删**;在那之前删 = 把轮次预算、`status`、`from_agent` 从屏幕上抹掉,而「预算跑满」正是需要人介入的信号 | + +**开工顺序**:P6(日历)之后。**不以下列事情为前置条件**: + +- 「`/me/mail/inbox` 只取 50 封」被折叠伪装成「只有这么多会话」——若成立,它是 **WebUI 的现存缺陷** + (WebUI 的折叠早就在跑),**单独查一眼**即可,**不是**鸿蒙 P2a 的开工条件(pi 明确否掉了这个绑定)。