# 桌面与全部模块（卡片实例）评审

日期：2026-10-21。评审员：独立评审子代理（没有参与设计）。对象：本目录下的 [设计.md](设计.md)、[原型/](原型/index.html)、[说明页 index.html](index.html)、[包首页 README.md](README.md)。说明页正在收紧版式，本文只看它的内容能否让白晨做决定。

评审期间评审对象仍在修改。本文以 05:13 时的版本为准：设计文档最后修改于 04:51，原型 05:07，说明页 05:01（快照在仓库外 `/tmp/desk-review/snap2/`）。文中 `设计.md:行号` 指这个版本的行号。

用词：

- **卡片实例**：桌面上的一张卡，有自己的尺寸、内容和位置；同一个模块可以有好几张。
- **内容种类**：同一档尺寸下这张卡画什么，例如会议小卡的「下一场」「今日概览」。
- **模块页**：「全部模块」里选中一个模块后，按尺寸列出各个预览的那一页。
- **阻断**：不改就不宜交白晨确认。**重要**：白晨确认前最好改掉，或者会让开发猜错。**建议**：可以在第二轮再处理。

## 结论

这套设计抓住了三件事的共同核心：桌面上放的东西从「模块」改成「卡片实例」。设计还查清了一点：后端本来就是一张卡一行，「一个模块只放一张」只是应用层的一条 409 检查，数据库没有约束。因此改动面比看上去小，旧布局不用转数据。

三件事的本意都回应到了：

- 任务三删掉了白晨点名的四样东西，同一个模块可以再放一张。
- 任务二做成了由模块清单驱动的「同一档多种内容」机制。
- 任务四在「全部模块」里按真实宽度列出每档、每种内容，每个预览配一句作用。

多张卡不增加腾讯会议调用这一条也有规则、有原型演示。原型三条主线都能点通，动效在跑，1440 与 390 两宽没有横向溢出。

**可以进入白晨确认，前提是先改掉 2 条阻断**：

1. 第 1 条待定（全部模块怎么看各尺寸）的选项不完整，把「模块页要上下翻」说成了两种版式都躲不开的代价。其实有一种做法既按真实大小、又不用上下翻：一次看一档、按尺寸切换，也就是 iOS 小组件库的做法，白晨在任务二里正是拿 iOS 作参照。应当把它作为第三个选项给白晨。
2. 待办小卡新增「下一件」被放进了「替你定了的」，默认「加」，说明页只有一行字。它给另一个模块加了新能力，又和待办设计的两条规则冲突，而待办设计本身还没认可。白晨不表态就会照做，应当移到「要你选的」，或者交给待办设计一起定。

另有 11 条重要问题，建议白晨看之前一并改，主要是三类：

- 几处「白晨已定」的出处写错，影响了默认值，例如「1120 宽」「不滚动」都不是白晨定的。
- A 版式丢了白晨 10-20 定的说明与演示缩略图。
- 原型有一处报错，还有一处文案与设计文档不一致。

其余是第二轮写契约前要补的漏项与细节。

## 一、任务二：同尺寸多种内容

### 做到了什么

- 把「内容种类」定义成同一档尺寸下的不同职能，并写明「只是多几行、少几行的不算两种内容，那是尺寸的事」（`设计.md:254`）。这抓住了白晨「同一个大小下可能有两种不同的能力」的本意，没有把尺寸差异冒充成内容种类。
- 做成了机制，不是会议的个例：各模块在清单 `CardInfo.contents` 里登记每档的内容，前端只读清单，后端按清单校验（`设计.md:163`、`:166-175`）。
- 选内容的地方有两处：添加时在预览里选，之后在编辑桌面的浮条上换（`设计.md:257`、`:260-264`）。会议设计第 6 节只写了「由用户在编辑桌面时选定」（`docs/modules/会议/设计.md:216`），桌面设计补上了「添加时就能选」，与任务四一致。
- 改尺寸时内容的去留有一条明确规则：由后端执行，前端照算（`设计.md:205`），代价也写明了。
- 原型里，编辑态浮条上的内容名、弹出的内容菜单、交叉淡化都能点通。实测切换时，卡片内容在做 120 毫秒的淡化，旁边的卡在做 220 毫秒的让位（从浏览器正在运行的动画列表里读到）。

### 问题

1. **（阻断）待办「下一件」是给待办模块加新能力，却放在「替你定了的」里**（`设计.md:496`，默认「加」；说明页 `index.html:191` 只有一行字，不放画面）。
   - 它和待办设计的两条规则冲突。第一，待办小卡现在没有勾选，「点卡打开列表层」（`docs/modules/待办/设计.md` 第 6 节）。第二，待办设计里今天勾掉的事沉底，「下一件」却是勾掉后立即换成下一件。
   - 待办设计整篇还在待认可（`docs/decisions/未决问题.md:202`，第 101 号）。
   - 这一条超出了桌面外壳的范围。默认值的规则是「不表态就照做」，白晨在一张表里一扫而过，它就会被做出来。
2. **（重要）原型的一句作用与设计文档不一致**。原型里待办中、大、整行的一句作用写了件数：「未完成的最多 6 件」「最多 12 件」「分两栏，最多 12 件」（`原型/data.js:38-40`）。设计文档却明确「一句作用不写件数」，件数要等待办设计第 12 节第 2 条定（`设计.md:290-294`）。技能要求原型逐字取用设计文档的文案，这里两边各说各的，白晨在原型里看到的件数其实还没定。
3. **（建议）只有一种内容的档也起了内容名**，并显示在预览下面（`设计.md:332`，原型 `app.js` 的 `previewFig`）：
   - 会议：中「今天的会」、大「时间轴」、整行「横排」。
   - 待办「列表」，日程「日视图」等。

   四份模块文档里都没有这些名字，模块负责人没认过。它们和真正可以选的「下一场／今日概览」排在同一个位置，容易让人以为还有别的能选。
4. **（建议）选内容时看不到卡**。
   - 电脑上，内容菜单弹在卡的上方，盖住了卡的大半（截图 `mk-1440-DK-11.png`）。
   - 手机上，小卡的浮条排成三行，占了小卡的下半部分（截图 `390-DK-11-pop.png`）。

   用户换内容时只能读文字说明，要关掉菜单才看得到换完的样子。

### 建议

- 待办「下一件」移到「要你选的」，或者交给待办设计第 12 节一起定；本包默认不加。理由见第六节第 2 条。
- 原型 `data.js` 的一句作用，逐字改成 `设计.md` 6.4 节的句子。
- 只有一种内容的档不显示内容名。`key` 照留，改尺寸时靠它保留内容。如果要显示，请四个模块的负责人各自认一遍名字。
- 内容菜单放到卡的侧边，或者在菜单项里放一张小缩略图。手机上可以考虑把浮条放到卡的下面，不压在卡上。

## 二、任务三：可重复添加

### 做到了什么

- 白晨点名要删的四样都删掉了：格子上的「在桌面上」，按钮「已在桌面上」「改成X卡」，以及「从桌面移走」（`设计.md:48`，第 9 节 P-50、P-51、P-53）。也没有留下「已有 N 张」之类的变相标记（`设计.md:94`：「不影响『全部模块』」）。原型的格子与名单里确实只剩连接状态。
- 查清了「一个模块只放一张」只是应用层的 409 检查，数据库没有唯一约束（`设计.md:126`；`apps/api/app/desk/service.py:71-72`）。卡片表本来就是一卡一行，所以不用转数据，只需放开检查、加一列。我逐行核对过，属实。
- 列出了 17 处按模块找卡的代码（`设计.md:42-62`），并定了「按模块找卡」的三条规则（`设计.md:220-226`）。设计文档里约 60 处「路径:行号」引用都复查过，没有不属实的，只有 3 处行号偏了几行。
- 多张卡不增加外部调用：会议同步只在「打开桌面」和「点刷新」时发生，按模块算，与卡片张数无关；预览不同步（第 8 节）。原型的状态说明栏能数到腾讯会议的调用次数：DK-18 刷新一次加 2 次调用，30 秒内再点不加。
- 移走只在编辑桌面里做。提示条分两种：还有同模块的卡时说「还剩几张」；移走最后一张时沿用白晨 10-19 的原句。放回去时按移走前的邻居回到原位（`设计.md:196-199`）。原型 DK-14～DK-17 都能点通。

### 问题

1. **（重要）「按模块找卡」第 2 条可能把人带到一张没用的卡上**。规则是「桌面顺序里的第一张」（`设计.md:223`），用于简报里的「全部…」。如果第一张恰好是「待办（小 · 计数）」，点「全部待办」只会滚到两个数字上，看不到列表。
2. **（重要）描圈的那张卡和命中行的那张卡，可能不是同一张**。现有 `goDesk`（`apps/web/src/features/desk/locate.ts:29-31`）在所有同模块卡里找行，描圈却调 `highlightCard(module)`，只圈第一张。日程引用会描圈（`apps/web/src/features/capsule/deskGo.ts:42-43`）。行在第二张日程卡里时，圈会画在第一张上。设计 0.4 第 4、5 条没有点名这一处。
3. **（重要）「生成完成」提示条改成桌面上没有会议卡也弹**（`设计.md:246`），这是新行为。现在只在会议卡挂着时才弹；改成挂在桌面一级、没卡也弹，桌面一级就要读会议列表。这超出了三件事的范围，至少应列进「替你定了的」，让白晨知道。
4. **（建议）一模一样的两张卡，叫法完全相同**。DK-07 再放一张「会议（中）」后，桌面上两张都叫「会议（中）」，提示条和读屏都分不出来。这可以接受，iOS 也一样，但 7.4 节应写明。
5. **（建议）移走最后一张时的原句，在新模型下有一点别扭**：「已从桌面移走『{卡片叫法}』，它还在『全部模块』里照常运行」（`设计.md:386`）。卡片成了实例以后，「它」指的那张卡已经不在了，照常运行的是模块。原句是白晨 10-19 定的，改不改应由白晨点头；不改也说得通。

### 建议

- 第 2 条改成：优先桌面顺序里第一张「画出列表」的卡（中、大、整行），一张都没有就打开详情层。
- 描圈的目标改成「命中行所在的那张卡」，写进 0.4 第 4 条。
- 7.4 节补一句：完全相同的两张卡叫法相同，只在重名时给读屏另加「第几张」。
- 「生成完成」的新行为写进 12.1 节的「替你定了的」。

## 三、任务四：预览各尺寸

### 做到了什么

- 每档、每种内容都按当前窗口下的真实宽度画。1440 宽时，小卡 331，中卡与大卡 679，都是 1:1；整行放不下时等比缩小，并注明比例（`设计.md:338`）。实测 D 版式的整行按 61% 显示，A 版式的模块页按 78% 显示，节标题旁都写了比例。
- 每个预览下面有一句「能做什么、适合什么时候放」和一个「放上桌面」，直接回应了白晨「他必须能看到才能选合适大小的组件」。
- 预览用什么数据想清楚了（`设计.md:346-348`）：
  - 能用你的数据就用你的。
  - 画出来是未连接态或空态时，换成示例数据，标「示例」，页顶一句说明原因。
  - 示例数据不会带上桌面。

  原型 DK-02（腾讯会议未连接）、DK-04（没有待办）都标了示例，说明条的文案与 7.2 节一致。
- 中等窗口（761～1100）和手机（390）各有自己的节标题与排法，390 宽实测没有横向溢出。
- 与白晨 10-20「右侧不用上下翻」的冲突如实列了出来（`设计.md:334`），没有藏。

### 问题

1. **（阻断）第 1 条的选项不完整，把「要上下翻」说成了躲不开的代价**。
   - **现状**：两种版式进了模块页，都是把所有档列在一页上的长页。实测 1440×900 下，模块页的可视高度是 805，内容高度分别是：会议 1961（D 版式）／2031（A 版式），待办 2232，日程 1743，随手记 1666，即两到三屏。设计里写的「约 1400」（`设计.md:334`）偏低。
   - **问题在哪**：设计据此说「两种版式进了模块页都要翻」，说明页也这样写（`index.html:170`）。但这是「把所有档列成一页长页」这种呈现方式带来的，不是任务四本身的要求。
   - **另一种做法**：白晨在任务二里拿来作参照的 iOS 小组件库，就是一次只看一档、左右切换，下面一句说明和一个「添加」。放在 D 版式右边约 840 宽的地方，可以这样排：
     - 顶上一排尺寸分段：「小 · 2 种」「中」「大」「整行」；
     - 下面按 1:1 并排画当前这一档的各种内容。

     最高的大卡约 495，加上模块头约 250，放得进 805，**不用上下翻**。它就是现有实现「卡片尺寸」分段（`apps/web/src/features/desk/AllModulesPanel.tsx:184-189`）的放大版，开发改动最小。
   - **代价**：不能一眼对比四档，要点分段。
   - **结论**：这应当作为第三个选项交给白晨，让他在「一眼看全、但要翻」和「不用翻、但要点」之间选。
2. **（重要）没有交代现有那套为什么不够**。
   - 现有实现本来就有「卡片尺寸」分段和随尺寸变化的迷你预览（`AllModulesPanel.tsx:184-197`），白晨仍说「这在原来的设计上是缺失的」。
   - 设计第 0 节列了这个事实（`设计.md:27`），没有分析它为什么不够。我的推断有四条：
     - 迷你卡被压在 420 宽右栏的两列小网格里，看不出真实大小；
     - 每档没有「能做什么」的说明；
     - 同一档的几种内容没处放；
     - 要一档一档点，不能对比。
   - 这几条决定了哪种版式能最省事地补上缺口，应当写进 0.2 节，作为白晨选版式的依据。
3. **（重要）A 版式的第一层丢了 10-20 定的东西**。
   - A 的右栏只放预览、「看全部尺寸」「打开」「按默认尺寸放上桌面」（`设计.md:328`；原型 `app.js` 的 `colHtml`）。
   - 白晨 10-20 第三轮定的几样东西都挪进了模块页，要多点一次才看得到（`docs/reports/acceptance/2026-10-20-使用指引第三轮.md:13`）：「需要：…」一句、收起的「详细说明」、会议的一行演示缩略图。
   - 这和 A「保留 10-20 现状」的定位矛盾。
4. **（建议）A 第一层的预览是缩小的**：默认尺寸缩进 420 宽，中卡约为 57%（截图 `03-A-col-meetings.png`）。设计否掉方案 C 的理由正是「中卡缩到 57%……看不清，等于没预览」（`设计.md:330`）。A 的这一层只是示意，说明页应当讲明。
5. **（建议）数据很少时，「用你的数据」看不出各档的差别**。规则只在空态时换示例（`设计.md:347`）。如果今天只有一场会，中、大、整行三张预览几乎一样。每个预览下的一句作用能补一部分，可以接受，但应当写进风险。
6. **（建议）示例会议数据与页面时刻对不上**。示例写「即将开始：产品周会，11:00 开始，距开始 10 分钟」，时间轴上「现在 10:50」（`原型/cards.js:56`），而原型停在 09:45。

### 建议

- 第 1 条加选项 E：D 的两栏，模块页里按尺寸分段，当前档 1:1。评审推荐 E，理由见第六节第 1 条。
- 0.2 节补一段「现有尺寸分段为什么不够」，作为选版式的依据。
- A 版式的右栏保留 10-20 的「需要：…」、详细说明与演示缩略图，「看全部尺寸」放在它们下面。
- 示例数据的时刻改成与 09:45 一致，或者示例卡上不画「现在」那条线。

## 四、跨任务的问题

### 1. 已定事项的出处与默认值（重要）

技能第 8 步的规则是：白晨定过的，默认沿用；没定过的，默认取新方案。下面几处出处写错了，直接影响默认值和分类。

- **问题 17 A 的归因错了**（`设计.md:39`、`:488`）。
  - 问题 17「一并按提案做」只覆盖 9 处提案：P-09、P-23、P-26、P-28、P-32、P-40、P-49、P-54 和第四节（`docs/specs/2026-10-18-V1重做能力清单/03-配置与桌面定制.md:264`），不含 P-50、P-51。
  - P-51「要做」一栏写的是「照原型」（`03-配置与桌面定制.md:136`），属于白晨 10-19 对整份清单的认可。
- **第 2 条（新卡出现）默认 C 的依据不成立**。
  - P-51 只写了「放上后提示『已放上桌面：X』，新卡排在最后」，没有定「不滚动」；不滚动是现有实现的做法。说明页也写了「现在就是不滚动」。
  - 照技能规则，这一条白晨没定过，默认应当是新方案 A，可以移到「替你定了的」。
  - 第 10 条「放上后面板关上」（`设计.md:501`）的出处同样写的是 P-51，可 P-51 原文没有写关面板，那是评审改版原型和现有实现的做法。结论不变，但出处要写准。
- **「1120 宽」「420 宽」不是白晨定的**（`设计.md:25`、`:514`、`:548`；说明页 `index.html:170` 写「你 10-20 定了右栏常驻、420 宽」）。
  - 白晨 10-20 只说了「全部模块的窗口再大一点，右侧不用上下翻」（收口档案 `:18`）。宽 1120、右栏 420 是实现时的改法（收口档案 `:21`）。
  - 另外，`设计.md:334` 引的「收口档案:23」应为 `:18`。
- **D 的说法前后矛盾**。`设计.md:329` 同一句里，先说 D「推翻 10-20 已定」，又说 D「和白晨 10-20 定『右栏常驻』是同一个意思」。
  - 应当写清：D 推翻的是「格子＋420 右栏」这种形态，不推翻「右栏常驻」。
  - 默认 A 本身站得住，因为右栏常驻确实是白晨 10-20 定的（收口档案 `:13`）。

### 2. 改成卡片实例以后，0.4 清单之外还有这些地方

| 位置 | 现在 | 多张同模块卡时的问题 |
| --- | --- | --- |
| `apps/web/src/features/desk/CardFrame.tsx:137` | 卡片的读屏名 `aria-label` 是模块名 | 设计 5.1 节说读屏改用卡片叫法（`设计.md:237`）。一改，端到端测试按名字找卡就会失效：`testing/e2e/e2e/steps/编辑桌面.steps.ts:21` 精确匹配「会议」等名字；`testing/e2e/e2e/steps/会前提醒.steps.ts:50` 在多张会议卡时会同时命中好几张。改读屏名之前，要先定测试怎么找卡 |
| `apps/web/src/features/desk/locate.ts:29-31` | 描圈只圈第一张 | 见任务三问题 2 |
| `apps/web/src/lib/errorText.ts:33` | `module_on_desk` 的中文「这个模块已经在桌面上了」 | 0.4 第 2 条只列了 `openapi.json`，漏了这条文案，也漏了生成物 `apps/web/src/lib/api/generated/sdk.gen.ts:297` |
| `apps/api/app/desk/tests/test_service.py:76`、`:100`；`apps/api/tests/integration/test_t14_desk_http.py:130` | 三条测试断言同模块返回 409 | 要改或删。后两条其实是借 409 验证「文档模块的别名先归一化再查重」，删掉 409 后要另找办法覆盖别名归一化，否则这段逻辑就没有测试了 |
| `apps/web/src/features/meetings/actions.ts:75-93` | 每张挂上的会议卡都跑「生成完成」检查，**包括「全部模块」里的预览卡** | 0.4 第 14 条只说预览不同步，没说预览也不该跑这个检查 |
| `apps/web/src/features/meetings/MeetingCard.tsx:84`（`useGuide`） | 每张会议卡各有一个使用指引问号 | 多张会议卡时，是每张都出问号，还是只在第一张出，没有写。10-20 定的是「只给有演示的模块画」（收口档案 `:9`） |
| 随手记设计 `docs/modules/随手记/设计.md:313`；能力清单 `docs/specs/2026-10-18-V1重做能力清单/05-日程.md:75`（C-20） | 随手记拆出待办时「小签飞进待办卡那一行」；把待办拖进日程卡 | 多张待办卡、多张日程卡时，小签飞向哪一张、拖放时哪一张亮，没有写。按 4.6 节第 1 条能推出「第一张画出这一行的卡」，但拖放的目标要单独说（日程的小卡、中卡不接受拖放） |
| `apps/api/app/share/service.py:48-49`；`apps/api/app/cards/schemas.py:95-106` | 分享导出时每张卡各出一份定义；可导出的字段里没有 `content` | 多张会议卡会导出多份「会议」，对方导入时按模块去重，第二张起全部跳过；内容种类也会丢。入口虽然关了，接口还在。「另行处理」第 1 条只写了导入，应补上导出 |
| `apps/web/src/features/devshell/DeskSample.tsx:68`、`:81` | 开发样张页按模块高亮，按模块作 `key` | 与 0.4 第 16 条同类，一起改 |
| `testing/e2e/support/handoff.ts:26` | 桌面上已有待办卡就不再补 | 依赖「最多一张」，随实现改 |

另外，0.4 第 17 条把 `apps/web/src/test/v1.ts:29` 说成「复刻 409 与去重」，实际它只是列出桌面上的模块名，不复刻 409。

### 3. 被取代的旧条目登记不全（第 9 节）

- 下面三处都建立在「全部模块里能移走」上，第 9 节只列了 P-53：
  - 能力清单 03 第一节「全部模块（打开、放上桌面、移走）」（`03-配置与桌面定制.md:25`）；
  - 问题 16 本身（`:171`、`:259-262`）；
  - 第五节验收第 5 点「全部模块里打开、放上桌面、移走」（`:285`）。
- P-29「断开前写清哪些卡会变成未连接」（`:88`）被改写成「会议（2 张）」（`设计.md:56`），第 9 节没有列。
- 现有实现里，插件已连接时还有一个「管理连接」（`AllModulesPanel.tsx:277`）。原型的插件页没有它，设计也没说去留。
- 本包依赖的待办、随手记、日程三份设计都还待认可（`docs/decisions/未决问题.md:202-204`，第 101～103 号），会议的 10-21 修订待白晨看（`:205`，第 104 号）。设计没有引用这四条。本包自己也还没有登记进未决问题，包首页把它列为主控要做的事。

### 4. 接口与实现：第二轮写契约前要补的细节（重要）

- **只改内容时记不记「改过尺寸」**：PATCH 只给 `content` 时，`size_chosen` 记不记，没有写。现在改尺寸会记（`apps/api/app/desk/service.py:110`），待办卡靠它决定列几件。
- **存的是空值时怎么判断**：「新尺寸里有同一个 `key` 就保留」（`设计.md:172`）。存的是空值时，按存的值判断，还是按换算后的默认值判断，要写明。建议按换算后的值。
- **新卡是否写明确的 `key`**：现在的提案是只存「你明确选过的」（`设计.md:173`），其余为空。以后某个模块调整了清单里内容的先后，存空值的卡会悄悄换样子。建议新卡一律写明确的 `key`，只有旧卡为空。
- **改尺寸接口要跟着改**：`resize_native` 的签名要允许 `size` 为空，`apps/api/app/desk/clock_exempt.py` 里对它的登记也随之改；「都不给返回 422」需要新测试。
- **「正在放上…」最长等 80 秒**：要等到通用请求超时 80 秒（`apps/web/src/lib/limits.ts:16`）才失败。有终点，「不无限转圈」成立；但对一次本地写库来说 80 秒偏长。建议桌面的写操作用更短的时限，或者在设计里写明是 80 秒。
- **风险最大的地方**：去掉 409 以后，风险最大的不是后端，而是前端几处「按模块找卡」，以及端到端测试找卡的写法（见上表第 1 行）。建议实现计划把这两件排在最前面，各自先写会失败的测试。

### 5. 原型

能点通三件任务：任务二（编辑桌面里换内容）、任务三（再放一张、移走、放回去）、任务四（在模块页按真实大小看各档）都能从控制带进入。22 个分支编号逐个打开过，画面都由规则引擎按状态推出，没有手画的状态。动效在跑。1440 与 390 两宽都看过，390 宽下页面没有横向溢出；控制带里那几行本来就允许横向滚动，不算。原型 README 的地址参数表在 05:07 已改成与 `app.js` 一致。

问题：

- **（重要）编辑态里放上插件卡会报错**。
  - 路径：自由操作 → 编辑桌面 → 全部模块 → 腾讯会议（插件）→ 放上桌面。
  - 现象：控制台报 `TypeError: Cannot read properties of null (reading 'contents')`，插件卡画不出来。在 05:13 的版本上复现过。
  - 原因：浮条要按模块清单取允许的尺寸（`原型/engine.js:8` 的 `DK.allowed`，由 `原型/app.js:126` 的 `editBar` 调用），插件卡没有模块清单。
  - 不在编辑态放上、之后再进编辑态，同样会触发。
- **（建议）DK-18 叫「两张会议卡」，桌面上实际是三张**：中、小 · 下一场、小 · 今日概览（`原型/data.js` 的 `PRESETS.t2`）。
- **（建议）30 秒内再点刷新，仍弹「已同步」**（`原型/app.js` 的 `doRefresh`）。会议设计写的是「同步后没有变化才出『已同步』」（`docs/modules/会议/设计.md:451`）；30 秒内并没有同步，不该说「已同步」。
- **（建议）页头小字里的「示例数据」容易与「示例」标签混淆**。页头写「本原型只画 09:45 这一刻（示例数据）」（`原型/index.html:32`），预览上的「示例」标签则专指「这张预览用的不是你的数据」。同一个词两种意思，评审时容易混。建议页头改成「虚构数据」。
- **（建议）A 版式第一层没有直达的分支**。DK-01、DK-09 等分支直接落在 A 版式的模块页，跳过了 A 的第一层（格子＋右栏），A 第一层只能从「自由操作」手动点进去。建议加一个直达 A 第一层的分支。

### 6. 说明页（只看能否让白晨做决定）

**能让白晨看懂的部分**：

- 页头三张卡把白晨的三句原话和「去哪里看」对应起来。
- 四个场景都由原型画出，每帧带时刻和一句说明：再放一张小卡、没连腾讯会议、移走一张、两张卡只同步一次。
- 「待你决定」先列了这一版的 6 处变化，再给两条有并排画面、推荐与默认的选择题，最后是一张「我替你定了的」表。
- 全页 18 个画面，都是 `iframe` 嵌原型，没有贴图。

**影响做决定的地方**：

- **（阻断，同任务四问题 1）第 1 条写成了两选一**：「模块页摆四档要往下翻，两种做法都一样」（`index.html:170`），还沿用了「你 10-20 定了……420 宽」的说法。补上选项 E 后，要加一组 E 的画面。
- **（阻断，同任务二问题 1）待办「下一件」只在「我替你定了的」表里占一行**（`index.html:191`），没有画面。白晨看不到它在小卡上长什么样、勾掉以后发生什么。
- **（重要，同第四节第 1 部分）第 2 条的默认依据**：写成「你 10-19 定的」，后半句又说「现在就是不滚动」，白晨读不出「不滚动」到底是不是他定的。
- **（建议）「它长什么样」的画面只露出小卡一档**：中、大、整行要在框里滚动才看得到，页面上没有提示。在手机宽度下，说明文字写「下面是 1200 宽窗口里的样子」（`index.html:104`），画面却是手机排法。

## 五、问题清单

| 编号 | 严重程度 | 位置 | 问题 | 建议改法 |
| --- | --- | --- | --- | --- |
| 1 | 阻断 | `设计.md:326-334`、`:487`；`index.html:170` | 第 1 条（全部模块怎么看各尺寸）只有 A、D 两个选项，并说两种都一定要上下翻；漏了「一次看一档、按尺寸切换」这个不用翻、又按真实大小的做法。另外，实测模块页高度为 1666～2232，比文中的「约 1400」高 | 加选项 E：D 的两栏，模块页顶部按尺寸分段，当前档的各种内容 1:1 并排；说明页补 E 的画面；改正高度数字 |
| 2 | 阻断 | `设计.md:496`、`:289`、`:296`；`index.html:191` | 待办「下一件」是给待办模块加新能力，与待办设计「小卡点开列表、没有勾选」「今天勾掉的沉底」冲突，待办设计也还没认可，却放在「替你定了的」里，默认「加」 | 移到「要你选的」并给画面，或者交给待办设计第 12 节一起定；本包默认不加 |
| 3 | 重要 | `设计.md:39`、`:488`、`:501`、`:25`、`:514`、`:548`、`:329`、`:334`；`index.html:170` | 出处写错：问题 17 不含 P-50、P-51；「不滚动」「关面板」不是 P-51 定的；「1120 宽」「420 宽」不是白晨定的；D 是否「推翻 10-20」前后矛盾；「收口档案:23」应为 `:18` | 改正出处；第 2 条默认改为 A，移到「替你定了的」；说明页同步改 |
| 4 | 重要 | `设计.md:27`（0.2 节） | 没有交代现有「卡片尺寸」分段为什么不够，白晨无法判断大改版式是否必要 | 0.2 节补上现有做法的缺口：看不出真实大小、没有作用说明、同一档多种内容没处放、不能对比 |
| 5 | 重要 | `设计.md:328`；原型 `app.js` 的 `colHtml` | A 版式第一层丢了 10-20 定的「需要：…」、详细说明与会议演示缩略图 | A 的右栏保留这三样，「看全部尺寸」放在它们下面 |
| 6 | 重要 | `原型/data.js:38-40` 对照 `设计.md:290-294` | 原型里待办的一句作用写了件数，设计文档明确不写，件数也还没定 | 原型逐字照抄 `设计.md` 6.4 节 |
| 7 | 重要 | `原型/engine.js:8`、`原型/app.js:126` | 编辑态放上插件卡时报 `TypeError`，插件卡画不出来 | 浮条遇到插件卡时按插件的允许尺寸画，或者不画尺寸按钮 |
| 8 | 重要 | `设计.md:42-62`（0.4 节）；`CardFrame.tsx:137`；`testing/e2e/e2e/steps/编辑桌面.steps.ts:21`、`会前提醒.steps.ts:50` | 读屏名改成卡片叫法后，端到端测试按名字找卡会全部失效，0.4 节没有列 | 0.4 节加一行；先定测试的找卡方式（例如按卡片键），再改读屏名 |
| 9 | 重要 | 0.4 节；`errorText.ts:33`、`sdk.gen.ts:297`、`test_service.py:76`、`:100`、`test_t14_desk_http.py:130`、`actions.ts:75-93`、`MeetingCard.tsx:84`、`share/service.py:48-49`、`cards/schemas.py:95-106`、`DeskSample.tsx:68`、`:81`、`handoff.ts:26` | 0.4 清单之外还有 10 处「一个模块一张」的假设或副作用，包括别名归一化测试会失去覆盖、预览卡会跑「生成完成」检查 | 逐条补进 0.4 节，写清改法；第 17 条对 `v1.ts:29` 的描述改准 |
| 10 | 重要 | `设计.md:223`；`locate.ts:29-31`；随手记设计 `:313`；能力清单 05 C-20 | 「按模块找卡」第 2 条可能落到不显示列表的小卡上；描圈圈错卡；随手记小签与日程拖放在多张卡时的目标没写 | 第 2 条改成优先「画出列表」的卡；描圈圈命中行所在的卡；补上小签与拖放的目标规则 |
| 11 | 重要 | `设计.md:246` | 「生成完成」提示条在桌面上没有会议卡时也弹，这是三件事范围外的新行为，没有让白晨知道 | 列进 12.1 节的「替你定了的」 |
| 12 | 重要 | 第 9 节 | 被取代的旧条目漏列：03 第一节「移走」、问题 16、第五节验收第 5 点、P-29 的断开确认文案；插件页「管理连接」的去留没写；没引用未决问题第 101～104 号 | 补进第 9 节；在依据里引用这四条未决问题 |
| 13 | 重要 | 4.1.1 节（`设计.md:166-176`） | 接口细节会让开发猜：只改内容时 `size_chosen` 记不记；存的是空值时按什么判断去留；新卡写不写明确的 `key`；`resize_native` 的签名 | 第二轮契约里逐条写明；建议新卡一律写明确的 `key`，去留按换算后的值判断 |
| 14 | 建议 | `设计.md:332`；原型 `previewFig` | 只有一种内容的档也显示内容名（「今天的会」「时间轴」「横排」等），没人认过，还容易让人以为有得选 | 只有一种内容的档不显示内容名，`key` 照留 |
| 15 | 建议 | 原型内容菜单、手机浮条 | 选内容时，菜单或浮条盖住了卡，看不到换完的样子 | 菜单放到卡的侧边或带缩略图；手机上浮条放到卡的下面 |
| 16 | 建议 | `设计.md:396`（7.4 节） | 一模一样的两张卡叫法相同，提示条与读屏无法区分 | 写明这种情况；只在重名时给读屏加「第几张」 |
| 17 | 建议 | `设计.md:386` | 移走最后一张时的原句「它还在『全部模块』里照常运行」，在卡片实例模型下指代不清 | 请白晨看一眼：保留原句，或者把「它」改成模块名 |
| 18 | 建议 | `设计.md:330` 对照 A 第一层 | A 第一层的预览缩到约 57%，正是设计否掉方案 C 的理由 | 说明页讲明 A 第一层只是示意 |
| 19 | 建议 | `设计.md:347` | 数据很少时，「用你的数据」看不出各档差别 | 写进风险；保持规则简单，不另加判断 |
| 20 | 建议 | `原型/cards.js:56`；原型 DK-18；`doRefresh`；`原型/index.html:32` | 示例会议的时刻（10:50）与 09:45 不一致；DK-18 名为两张、实际三张；30 秒内的刷新仍弹「已同步」；页头「示例数据」与「示例」标签同词不同义 | 分别改正 |
| 21 | 建议 | 原型分支 | 没有直达 A 版式第一层的分支 | 加一个分支 |
| 22 | 建议 | `apps/web/src/lib/limits.ts:16` | 「正在放上…」最长要等 80 秒才失败 | 桌面写操作用更短的时限，或者在设计里写明 |
| 23 | 建议 | `index.html:104` 与「它长什么样」画面 | 画面只露出小卡一档，要在框里滚动；手机宽下写「1200 宽窗口」，画面却是手机排法 | 加一句「在框里往下滚看其余各档」，或者改用切换；手机宽下改写说明 |

## 六、需要白晨定的事

评审认为应当由白晨拍板的有三条，另有一条请他点头。其余「替你定了的」评审都同意，包括：同款可以放两张、每张卡自己的设置本期不做、预览能用你的数据就用、换内容的入口放在浮条上、换内容用交叉淡化、平时不加「⋯」菜单、放上后关面板。

### 1. 「全部模块」里怎么看一个模块的各档尺寸（设计 12.1 第 1 条，评审建议加选项 E）

- **问题**：任务四要按真实大小看每档。现在的 420 宽右栏放不下中卡（679 宽），版式必须改。白晨 10-20 定了「右栏常驻」，也说过「右侧不用上下翻」。
- **A 保留格子与 420 右栏，点「看全部尺寸」进一页长的模块页**：
  - 利：第一层不变，改动最小。
  - 弊：多点一次才看到各档；模块页要翻两到三屏；第一层的预览是缩小的。
- **D 左边名单，右边是一页长的模块页**：
  - 利：选中就看到全部，四档可以上下对比；两栏位置固定。
  - 弊：要翻两到三屏，违背「右侧不用上下翻」；格子换成了名单。
- **E 左边名单；右边模块页的顶上按尺寸分段（「小 · 2 种」「中」「大」「整行」），只画当前这一档的各种内容，1:1（评审补充）**：
  - 利：一屏放得下，不用翻；真实大小；与 iOS 小组件库的做法一致；是现有「卡片尺寸」分段的放大版，开发改动最小。
  - 弊：不能一眼对比四档，要点分段。
- **评审推荐 E**：它是唯一同时满足「真实大小」「右栏常驻」「右侧不用上下翻」三句话的做法。白晨不表态时，按技能规则仍默认 A。

### 2. 待办小卡要不要加第二种内容「下一件」（设计 12.1 第 5 条，评审建议从「替你定了的」移到「要你选的」）

- **问题**：任务二的机制本期只有会议小卡一个真实的例子。设计提议给待办小卡加「下一件」：显示排第一的一件，可以直接勾掉，勾掉后换成下一件。
- **本期加**：
  - 利：任务二多一个例子，小卡也能办事。
  - 弊：改了待办设计的规则（小卡现在不能勾选），和「今天勾掉的沉底」是两套逻辑，待办设计也还没认可；还要多做勾选、撤销、动效。
- **本期不加，留到待办设计确认时一起定**：
  - 利：本期只上线白晨定过的会议小卡两种内容，范围不扩大；机制照样做好，以后加内容只改清单。
  - 弊：本期待办小卡只有计数一种。
- **评审推荐**：本期不加，交给待办设计第 12 节一起定。

### 3. 新卡放上桌面后要不要滚过去（设计 12.1 第 2 条，评审认为可以不问）

- **问题**：新卡排在桌面最后，常在屏幕外。设计的默认 C（不滚动）以为是白晨 10-19 定的，其实 P-51 只定了「提示、排在最后」，没有定滚不滚。
- **C 不滚动**：
  - 利：最安静，与现有实现一样。
  - 弊：卡多时看不到新卡在哪；提示条里又没有「查看」。
- **A 滚过去并亮一下**：
  - 利：一眼看到放在哪。
  - 弊：页面会动一下。
- **评审推荐 A**，按技能规则可以直接作为默认，移到「替你定了的」，不必占白晨一道选择题。

### 4. 请白晨点头：移走最后一张时的提示条原句要不要改（低优先级）

- **问题**：原句「已从桌面移走『会议（中）』，它还在『全部模块』里照常运行」是白晨 10-19 定的。卡片成了实例以后，「它」指的那张卡已经不在了，照常运行的是模块。
- **保留原句**：
  - 利：不改白晨定过的句子。
  - 弊：指代略有出入。
- **改成「会议还在『全部模块』里照常运行」**：
  - 利：说得准。
  - 弊：要改白晨定过的句子。
- **评审推荐**：改。白晨不表态就保留原句。

## 七、评审依据

**读了什么**

- 仓库 `AGENTS.md`、`docs/README.md`；技能 `.claude/skills/designing-module-loops/SKILL.md`、`checklist.md`。
- 能力清单：`docs/specs/2026-10-18-V1重做能力清单/03-配置与桌面定制.md` 与 `03-附录/`，以及 `04-待办.md`、`05-日程.md`、`06-会议.md` 中与桌面卡有关的条目。
- 决定与档案：`docs/decisions/未决问题.md`；`docs/reports/acceptance/2026-10-20-使用指引第三轮.md`。
- 四个模块设计：`docs/modules/{会议,待办,日程,随手记}/设计.md` 的第 6 节，以及相关的第 1、4.6、8、12、13 节。
- 前端代码：
  - `apps/web/src/features/desk/`：`AllModulesPanel.tsx`、`CardFrame.tsx`、`DeskGrid.tsx`、`useDesk.ts`、`locate.ts`、`highlight.ts`、`modules.css`、`card.css`；
  - `apps/web/src/features/` 下的 `meetings/`、`capsule/`、`onboarding/`、`today/`、`guide/`；
  - `apps/web/src/lib/`。
- 后端代码：`apps/api/app/desk/`、`cards/`、`share/`、`onboarding/`。
- 测试：`testing/e2e/` 的步骤定义。
- 核对分工：
  - 设计文档 0.2、0.4、3.1、4.1.1、4.5、7.3、7.4 节约 60 处「路径:行号」，由一个只读子代理逐条打开核对。
  - 另一个只读子代理比对了四份模块设计与能力清单 03。
  - 其中这几处由我本人再打开核对：问题 17 的归因、1120 宽的出处、`errorText.ts:33`、`CardFrame.tsx:137`、端到端测试的找卡写法、`locate.ts:29-31`、会议设计 `:216` 与 `:225`、`AllModulesPanel.tsx` 的右栏与插件预览。

**点了什么**（Playwright CLI；在 `docs/modules/` 下起 8935 端口的静态服务，评审结束已关闭，8931 没动）

- **1440×900**：
  - 任务四入口（A 版式模块页）；
  - 自由操作 → 编辑桌面 → 全部模块（A 第一层）→ 会议 → 看全部尺寸 → 滚到整行 → 「今日概览」放上桌面（默认方案 C，新卡在屏幕外、不滚动）；
  - DK-01～DK-22 逐个打开，记下提示条、卡片叫法和状态说明；
  - DK-11 换内容时读取正在运行的动画；
  - 编辑态放上腾讯会议插件卡，复现报错；
  - 测量 D 版式下会议、待办、日程、随手记四个模块页的内容高度。
- **390×844**：任务四、DK-21、DK-11（内容菜单）、任务二、DK-14，逐个检查横向溢出。
- **说明页**：1440 宽逐屏看完，共 8 屏，控制台没有报错；390 宽看了「它长什么样」与「待你决定」，没有横向溢出。

**截图**：放在仓库外 `/tmp/desk-review/`，不进仓库。主要几张：

- `03-A-col-meetings.png`：A 第一层；
- `04-A-page-bottom.png`：模块页里缩小的整行；
- `06-added-C.png`：默认方案 C 放上后不滚动；
- `mk-1440-DK-02.png`：示例数据；
- `mk-1440-DK-09.png`：达到上限；
- `mk-1440-DK-11.png`：内容菜单；
- `mk-1440-DK-21.png`：D 版式；
- `390-DK-11-pop.png`：手机上的浮条与菜单；
- `07-plugin-in-edit.png`：插件卡报错之后；
- `sc-1440-00.png`～`sc-1440-07.png`：说明页逐屏；
- `sc-390-*.png`：说明页手机宽度。

## 设计者回应

2026-10-21，设计者按主控的处理意见逐条改完后写。上面的评审正文没有改动。行号指改后的 [设计.md](设计.md)。

### 阻断与重要（第 1～13 条）：全部采纳

| 编号 | 怎么处理的 |
| --- | --- |
| 1 | 加了选项 E（左边名单，右边模块页顶上按尺寸切换，一次看一档），原型已实现（`opt=1:E`，DK-01）。主控定为默认、也是推荐：它不推翻白晨定过的事，同时满足「右栏常驻」与「右侧不用上下翻」。仍放在「要你选的」，A、D、E 三个画面并排，E 的画面循环演示换档。高度改用实测值：A、D 的模块页 1666～2232；E 在 1440×900 下各模块各档 805～899，最多下翻 94 像素（待办大卡）。见 6.6.1、12.1 第 1 条 |
| 2 | 待办小卡「下一件」移出本包，只在「另行处理」第 5 条登记「建议在待办设计确认时一起考虑」。6.4 节的待办小卡照待办设计第 6 节，只有「计数」一种；原型里删掉了它，说明页只在表下用一句话说明移出了 |
| 3 | 出处已改正。问题 17 不含 P-50、P-51，这两条属于「照原型」（0.3）；P-51 没有定「不滚动」「关面板」，新卡出现改成默认 A，移到「替你定了的」第 3 条，第 10 条的出处改成现有实现与评审改版原型；1120 宽、420 宽注明是实现的改法（0.2、12.2）；D 与 E 推翻的是「格子＋420 右栏」这一形态，不是「右栏常驻」（6.6.1）；「收口档案:23」改为 `:18` |
| 4 | 0.2 节补了一段「现有『卡片尺寸』分段为什么不够」，列四条：看不出真实大小、没有作用说明、同一档多种内容没处放、它是给「已在桌面上／改成X卡」服务的。并写明 E 补上前三条，保留了「不能一眼对比」这个代价 |
| 5 | A 的右栏恢复「需要：…」、收起的详细说明与演示缩略图，「看全部尺寸」放在它们下面（原型 DK-23） |
| 6 | 原型里待办的一句作用去掉了件数，与 6.4 逐字一致 |
| 7 | 已修：插件卡在编辑态的浮条按四档画、没有内容按钮；移走、放回去也补了插件卡的分支（放回去时连同插件与视图一起放回）。复查：编辑态放上、改尺寸、移走、放回去，控制台 0 报错 |
| 8 | 0.4 加第 18 条：先把端到端测试的找卡写法改成按卡片键或「模块＋第几张」，再改读屏名；风险最大的两件排在实现计划最前 |
| 9 | 0.4 补到第 24 条：错误文案与生成的 SDK、三条 409 测试（后两条改成断言别名归一化）、预览卡不跑「生成完成」检查、使用指引问号每张都画、开发样张页、端到端的 `handoff.ts`（实际行号是 `:24`）、请求超时 80 秒；第 17 条对 `v1.ts:29` 的描述改准；分享导出并进第 13 条 |
| 10 | 4.6 第 2 条改成「第一张画出列表的卡」；加第 4 条「描圈圈命中行所在的那张」、第 5 条指向 0.4 第 22 条（小签飞向第一张画出这一行的待办卡；拖放时每张接受拖放的日程卡都亮） |
| 11 | 改成只在桌面上有会议卡时弹，照现状，不新增行为（5.2）；为让白晨知道，列进「替你定了的」第 12 条 |
| 12 | 第 9 节补了 03 第一节「做」、问题 16、第五节验收第 5 点、P-29 的写法；插件页「管理连接」写明保留，原型的插件页也补上了；第 14 节引用未决问题第 101～104 号 |
| 13 | 4.1.1 节写明：只改内容不动 `size_chosen`；去留按换算后的 `key` 判断；新卡一律写明确的 `key`，只有旧卡为空；`resize_native` 的签名与 `apps/api/app/clock_exempt.py:23` 的登记随之改；「都不给返回 422」要新测试 |

### 建议（第 14～23 条）

| 编号 | 采纳吗 | 处理或理由 |
| --- | --- | --- |
| 14 | 采纳 | 一档只有一种内容时，内容名只在内部用，预览下面不写（6.1 末条、6.6.1；原型 `previewFig`） |
| 15 | 电脑上采纳，手机上不采纳 | 电脑上内容菜单放在卡的旁边，右边放不下放左边，不盖住这张卡（13.3）。手机上不改：卡与浮条都是整宽，旁边没有地方；把浮条挪到卡的下面，会改动白晨 10-19 定的浮条位置（P-36、P-44），超出本包范围 |
| 16 | 采纳 | 7.4 节写明：完全相同的两张叫法相同；只在重名时给读屏加「，第 N 张」 |
| 17 | 采纳 | 列进「替你定了的」第 13 条：默认照原句，推荐把「它」改成模块名，请白晨点头 |
| 18 | 采纳 | 6.6.1 节与说明页都写明：A 第一层的预览是缩小的示意（中卡约 57%） |
| 19 | 采纳 | 6.6.3 节写进风险，规则不另加判断；说明页「替你定了的」第 6 条也提了一句 |
| 20 | 采纳 | 示例会议的时刻改成与 09:45 一致；DK-18 改名「三张会议卡」；30 秒内的刷新不再提示「已同步」；原型页头的「示例数据」改为「虚构数据」 |
| 21 | 采纳 | 新增 DK-23，直达 A 第一层 |
| 22 | 部分采纳 | 设计里写明最长 80 秒（4.2、0.4 第 24 条）。不在本包缩短时限：超时是通用请求层的设置（`apps/web/src/lib/limits.ts:16`），改它会影响所有请求，应当单独定 |
| 23 | 采纳 | 「它长什么样」按真实大小逐张画、不用在框里滚动；手机宽下说明换成手机排法的说法 |

### 评审第六节「需要白晨定的事」

- 第 1 条：照评审意见加了 E，并由主控定为默认与推荐（评审写的「按技能规则仍默认 A」不成立：E 不推翻白晨定过的规则，按技能第 8 步默认取新方案）。
- 第 2 条：没有放进「要你选的」，而是移出本包，交给待办设计确认时一起考虑。
- 第 3 条：照评审意见移到「替你定了的」，默认 A。
- 第 4 条：照评审意见请白晨点头，放在「替你定了的」第 13 条。

## 复核

2026-10-21，评审员复核。对象是主控「已冻结」后的版本：设计文档 06:23，原型 06:27，说明页 06:25，包首页 06:28。正文和「设计者回应」都没有改。复核时亲自点了 E 版式，以及编辑态下放上、改尺寸、移走、放回插件卡这一组。本地服务照旧在 8935 起，用完已关闭，8931 没动。截图在仓库外 `/tmp/desk-review/r2/`。

### 阻断与重要问题

| 编号 | 结论 | 核对了什么 |
| --- | --- | --- |
| 1 选项不完整 | 已解决 | 加了选项 E。原型默认就是 E：左边名单，右边模块页顶上一排「小 · 2 种」「中」「大」「整行」，一次画一档，1:1。换档时预览在做 320 毫秒的上浮淡入。我逐档实测了会议、日程、待办、随手记，内容高度只有三处超过可视高度 805：会议大卡 854、待办中卡 817、待办大卡 899，与设计 6.6.1 的表一致。设计写的是「基本是：最多下翻 94 像素」，没有夸大。A、D 两种版式也还能切换，高度改用了实测值 |
| 2 待办「下一件」 | 已解决 | 移出本包，登记在「另行处理」第 5 条。6.4 节的待办小卡只剩「计数」，原型 `data.js` 里也删掉了。说明页在「替你定了的」表下用一句话说明移出了。编号跳过、不重排，并写明了原因 |
| 3 出处与默认值 | 部分解决 | 已改正的有：问题 17、P-51、1120 与 420 宽、「收口档案:18」，第 3 条「新卡出现」也已改为默认 A。还没站住的是第 1 条的默认依据，见下文「新发现」第 1 条 |
| 4 现有分段为什么不够 | 已解决 | 0.2 节补了四条原因，并写明 E 只补上前三条，保留了「不能一眼对比四档」这个代价 |
| 5 A 第一层 | 已解决 | DK-23 能直达 A 第一层。右栏有用途、「需要：…」、详细说明和演示缩略图，下面是一张缩小的示意预览，按钮写「看全部尺寸（4 档，共 5 种）」 |
| 6 原型文案 | 已解决 | 待办三档的一句作用已与 6.4 节逐字一致，不再写件数 |
| 7 插件卡报错 | 已解决 | 实测两条路径，控制台都是 0 报错。第一条：在编辑态里放上腾讯会议插件卡，浮条是「上移、下移、小、中、大、整行、×」，没有内容按钮；改成整行，移走后提示条带「放回去」，放回去后回到原位、仍是整行，卡片键换新。第二条：放上飞书日历插件卡，退出编辑再进，浮条正常 |
| 8 读屏名与端到端 | 已解决（文档层面） | 0.4 第 18 条写明先改测试的找卡写法、再改读屏名，并在实现计划里排在最前 |
| 9 0.4 漏项 | 已解决（文档层面） | 第 19～24 条补齐。新行号我抽查了 `test_service.py:70-77`、`:92-101`、`test_t14_desk_http.py:122-131`、`testing/e2e/e2e/support/handoff.ts:24`、`apps/api/app/clock_exempt.py:23`，都属实。别名归一化改为「新放上的 `documents` 卡与旧 `docs` 卡读出来是同一个模块」来测，覆盖保住了。评审原文有两处写错，设计者已按实际改正：`handoff.ts` 的路径和行号，`clock_exempt.py` 的路径 |
| 10 找卡与描圈 | 已解决（文档层面） | 4.6 第 2 条改成「第一张画出列表的卡」，并加了描圈规则，以及小签飞向、拖放目标两条规则。原型 DK-20 照常可用 |
| 11 生成完成提示 | 已解决 | 改回照现状：只在桌面上有会议卡时弹，预览卡不检查。没有新增行为，并列进「替你定了的」第 12 条，让白晨知道 |
| 12 旧条目登记 | 已解决 | 第 9 节补了 03 第一节、问题 16、验收第 5 点、P-29；写明「管理连接」保留，原型的插件页也有了；依据里引用了未决问题第 101～104 号 |
| 13 接口细节 | 已解决 | 4.1.1 节写明了几件事：只换内容不动 `size_chosen`；去留按换算后的 `key` 判断；新卡一律写明确的 `key`；改卡函数与 `clock_exempt.py` 的登记要跟着改；「都不给返回 422」要新测试 |

### 建议的处理与不采纳的理由

- **第 14、16～21、23 条**：已采纳，核对属实。
  - 第 14 条：一档只有一种内容时，预览下面不再写内容名。
  - 第 20 条：示例会议改成 09:45 时刻；DK-18 改名「三张会议卡」，30 秒内再点刷新不调用、也不提示；原型页头的「示例数据」改为「虚构数据」。
  - 第 23 条：说明页「它长什么样」改成按真实大小逐张画，不用在框里滚动。
- **第 15 条**：电脑上采纳，内容菜单改放在卡的旁边，不再盖住要换的那张卡。手机上不采纳，**理由站得住**：手机上卡和浮条都是整宽，旁边没有地方；把浮条挪到卡的下面，会改动白晨 10-19 定的浮条位置（P-36、P-44）。
- **第 22 条**：只在设计里写明最长等 80 秒，不缩短时限。**理由站得住**：超时是通用请求层的一个常量，改它会影响所有请求，应当单独定。

### 「需要白晨定的事」第 1 条：不表态时默认 E，理由不完全成立

设计者的理由是：E 改掉的「格子＋420 右栏」只是原型与实现的形态，不是白晨单独定过的规则，所以默认取新方案 E（`设计.md:368`）。说明页对白晨的说法是「它没有推翻你定过的事……那是之前做原型和开发时的做法，不是你定的」（`index.html:197`）。

这一说法有两处与本包自己的口径不一致：

1. **格子是白晨认可过的**。格子来自 P-50，「要做」一栏是「照原型对数值」。设计 0.3 节自己说，「照原型」的条目属于白晨 10-19 对整份清单的认可。白晨 10-21 改写 P-50，只删了「在桌面上」这个标记，没有改格子。
2. **选中框滑动也在白晨已定的清单里**。10-20 收口档案把「全部模块面板」整条列在「白晨已定（10-20 第二、三轮）」之下，内容包括右栏常驻、选中框滑动、右栏淡出淡入（`docs/reports/acceptance/2026-10-20-使用指引第三轮.md:7`、`:13`）。现有代码的注释也写「选中框（白晨 10-20 第三轮）」（`apps/web/src/features/desk/modules.css:21`）。E 把格子换成了名单，这个选中框也就没有了。

420 宽确实不是白晨定的，这一点设计者说得对。但「格子＋选中框」是白晨认可过的，所以 E 推翻了他定过的东西。照技能第 8 步，不表态时的默认应当是 A，E 作为推荐。

这一条仍放在「要你选的」里，三个画面并排、带循环演示，白晨一定会看到。所以它不构成阻断。但说明页那句「它没有推翻你定过的事」对白晨陈述有误，必须改。二选一：

- 默认改回 A，推荐仍是 E；
- 保留默认 E，但把说明页那句改成「它改掉了你认可过的格子与选中框（10-19、10-20）」，让白晨知道自己是在推翻旧决定。

### 新发现的问题

1. **（重要）** 第 1 条的默认依据，以及说明页「它没有推翻你定过的事」的说法，见上一节。位置：`设计.md:368`、`:531`，`index.html:197`。
2. **（建议）E 版式里有三档的「放上桌面」落在可视区外**：会议大卡、待办中卡、待办大卡。实测按钮底边分别在 901、864、946，面板底边是 884，要往下翻才点得到这一页的主操作。可以压缩模块页的头部，或者把一句作用和「放上桌面」放在预览的右侧。
3. **（建议）待办预览的件数与放上后的样子不一致**。原型里待办中卡预览列 6 件并写「还有 2 件」，大卡列 8 件。按设计 6.4 节的现行默认（10-19 问题 3 A，从「全部模块」放上记为改过尺寸），放上后中卡列 3 件、大卡和整行列 6 件。这与「放上去就是这个样子」的前提不符。件数虽然还要等待办设计定，原型应当先按现行默认画，或者在预览上注明件数待定。
4. **（建议）A 第一层的演示缩略图画成了三个空白框**（DK-23），像图片没有加载出来。建议在框里写「演示缩略图」，或者在评审注里说明原型不画。

两宽检查：390×844 下，E 版式的模块页、DK-23、DK-11 都没有横向溢出。说明页在 1440 宽逐屏看完，共 8 屏，控制台 0 报错；三种版式的画面都在，E 的画面在循环换档。

### 最终结论

两条阻断都已解决，11 条重要问题里 10 条已解决。剩下的是第 3 条的一部分，也就是上面「新发现」第 1 条：第 1 条待定的默认依据不成立，说明页那句话对白晨陈述有误。

**可以交白晨确认**。交之前请改掉说明页 `index.html:197` 那句话，并同步 `设计.md:368`、`:531`：要么默认改回 A，要么明说 E 推翻了格子与选中框。另外 3 条建议可以在第二轮处理。

## 10-21 对齐编辑桌面重做

> 设计者 2026-10-21 晚补记（之后白晨又拍板三件事：同一模块可以放多张、面板里只有「放上桌面」；每张卡的设置本期不做；手机卡的大小；并要求面板「一次看到多个档位」，已按下文处理）。评审与复核做在编辑桌面重做定稿合入之前；之后白晨又定了两件事：编辑桌面重做第二版定稿（[原型 README](../../prototypes/2026-10-21-编辑桌面重做/README.md)、[收口档案](../../reports/acceptance/2026-10-21-编辑桌面重做.md)、提交 `023f7125`），以及同档等大、行高 292（`.claude/skills/designing-module-loops/card-sizes.md`）。本节逐条写本包怎么跟着改，以及评审、复核里哪些意见因此作废。这一轮改动没有再请新的评审者看。

### 编辑桌面定稿带来的改动

| 定稿里的事 | 本包原来 | 现在（设计文档位置） |
| --- | --- | --- |
| 顶栏不再有「全部模块」，面板从岛上「＋」与「添加模块」格打开，标题「添加到桌面」 | 编辑态顶栏「全部模块」、「添加模块」格两个入口，标题分两种 | 只剩两个入口，标题一律「添加到桌面」（4.2、7.1） |
| 编辑态是草稿：撤销、取消、完成；「完成」才保存 | 放上、换内容、移走、放回去都当场发请求，各有失败提示 | 编辑桌面里放上、换内容、改尺寸、移走都进草稿，岛上写结果、不弹提示条；失败只在「完成」时，或桌面空着时当场放上（4.2、4.5、7.3）；原 DK-10、DK-12、DK-16、DK-17 改成保存失败、撤销、撤销移走、取消，新增 DK-26「完成」 |
| 卡左上角圆钮移走，移走靠撤销，不再「放回去」 | 浮条上的 ×，提示条带「放回去」，分「还剩几张」「最后一张」两种 | 圆钮；岛上「已移走「X」 · 可撤销」；第 14 条 B 时副句写还剩几张（4.3、7.3）；原 12.1 第 11、13 条不再有 |
| 右下角拖弧改尺寸、松手吸附四档 | 浮条上四档按钮 | 拖弧；新增 DK-27（4.4） |
| 卡底浮条去掉 | 换内容入口是「浮条上的内容名」（12.1 第 7 条推荐） | 改成卡右上角的内容小牌（与圆钮同一套样子），第 7 条仍在「替你定了的」，理由改写（6.2） |
| 编辑桌面时卡间距 30 | 没写 | 宽随之变窄、行高不变（大卡 614），列为 12.1 第 16 条 |
| 新卡从「添加模块」那一格长出来，在屏幕外就滚过去；面板先关、隔 0.14 秒再改草稿 | 12.1 第 3 条（新卡怎么出现，A 滚到并亮一下）、第 10 条（面板关不关）待定 | 两条已由定稿定掉，挪到 12.2；`opt=3` 从原型去掉 |
| 「添加到桌面」面板照旧，编辑态里「放上桌面」「改成X卡」「从桌面移走」进草稿 | 照任务三默认删掉这几项、可重复放 | 与任务三冲突，先按主控更正列为待定（12.1 第 14 条）；白晨 10-21 随后拍板以任务三为准：同一模块可以放多张，面板里每个预览只有「放上桌面」，「已在桌面上」「改成X卡」「从桌面移走」都去掉（「改成X卡」是第二次拍板），记进 12.2 |
| 面板的格子、选中框滑动、右栏常驻照旧 | 12.1 第 1 条默认 A、推荐 E | 白晨 10-21 A、E 都没选，要「一次看到多个档位」；新设计版式 F「四档对照」作为默认：格子照旧，右栏加宽成对照板，四档按桌面网格摆在一起、同一个比例缩放、点一张放大看（6.6.1）；A、E、D 留在原型里对照 |

### 同档等大带来的改动

- 第 6 节重写：6.0 尺寸表（1440、1000、390 三栏，另写 360 与编辑桌面），6.4 每个模块每档每种内容一张表（放什么、每块最多几行、放不下时、各种状态），6.5 其他模块，6.6.2 预览与桌面同档一样大；第二版「预览高度随内容、最低一行 156」作废（第 9 节登记）。
- 原型：网格固定行高、卡身不撑高；列表放不下写「还有 N 件／场／条」，时间轴、日视图、会议整行横排声明 `data-scroll`；会议同步时刻从卡底挪到卡头；手机上列几条按轨道宽现算（`DK.fitPhone`）。机检结果见包首页。
- 待办「没改过尺寸全列」、日程「手机整天摊开」随 `card-sizes.md` 推翻，第 9 节登记，要各模块负责人改的地方见包首页。
- 评审复核「新发现」第 2 条（E 版式三档「放上桌面」在可视区外）与第 3 条（待办预览件数与放上后不一致）随固定尺寸消失：一档只有一种内容时按钮在卡右边；预览与放上后同样大、同样件数。会议大卡 602 高，E 版式下半截仍要往下翻一点，已写进 6.6.1 的表。

### 没有跟着改、留给白晨或主控的

- 版式 F 本身要白晨看说明页「请你看的」第 1 条认可；它在 1440 × 900 下缩到约 62%，低于技能说明页「每帧缩放不小于 0.75」的可读性要求，靠放大看补，这一点要他点头。
- 白晨定了同一模块可以放多张，0.4 那 24 处除第 10、12 条外都要改。
- 手机上拖弧拖不出整行（3.2 V-4，推断）：手机上整行与中同样大，影响不大，但从手机改不出电脑上的整行卡。
- 编辑态的尺寸：`card-sizes.md` 说说明页与原型只画非编辑态，本包的场景大多在编辑桌面里，画了编辑态（列距 30），机检按同一公式算。

## 10-21 跟随各模块原型

主控核对第三版后两处要改（白晨 10-21 经主控转达）：

| 主控意见 | 处理 |
| --- | --- |
| 说明页页头「任务三」卡还写「改成X卡」要确认、见第 17 条 | 改成已定的说法（白晨 10-21 定了去掉）；全包搜「改成X卡」「第 17 条」「还要你确认」，设计文档 12.1 开头那句也改了。剩下的「改成X卡」都是「已去掉」的说法；评审里的「0.4 第 17 条」是另一件事（`v1.ts:29`），不动 |
| 各模块的卡以各模块自己的原型为准，不另画、不要求别的模块改 | 说明页「它长什么样」改嵌各模块原型；本包原型里会议、待办、日程、随手记的卡（桌面、编辑桌面、对照板、放大看、A／E／D 预览）全部改嵌各模块原型的 `frame=` 帧，`cards.js` 删掉这四个模块的画法和对应的条数表、示例数据；设计文档 6.4 改成「看各模块第 6 节」，删掉上一版要会议、待办、日程、随手记改的各条（同步时刻挪卡头、授权失效短句、各档列几件等）；嵌入时发现的 6 处冲突列在包首页「与各模块的关系」，没有改别的模块 |

白晨随后看了「四档对照」那一帧：「好像有点挤，很多字都是省略号，能不能优化一下」。主控核对 1440 × 900 截图，问题在卡下一行塞了四样被截成省略号、左边两列大格子占约 280 宽、像素尺寸没用还占位。处理：左边改成单列名单（宽 200、一行 42）；卡下改两行（档名＋「放上桌面」／一句作用整句显示，最多折两行）；去掉像素尺寸（只在放大看里写）；页头压成一行，比例、详细说明、打开放右上；作用句改短（设计文档 7.5）；面板离顶 6、高窗口高 − 12、宽最多 1600。1440 × 900 下会议从 62% 到 70%，卡在高度这一维（宽度够 81%）；卡里正文缩后约 9 号字，到 10 号要 77%，这个窗口高度做不到。机检加一条：三种窗口里面板没有被截断的文字。
