Files
Agent-System-Documents/docs/proposals/2026-10-15-fast-slow-r2-nonblocking.md
T
weichenandCursor 1d57adddf9 Revise the fast-slow r2 proposal for the second review
Why: Second review kept stages 1-4 at "needs revision": narrow-screen placement
conflicted, unread and current/history rules were inconsistent, idempotency and
quote authorization scope were open, NB12 lacked acceptance for closing a
satisfied choice, and the light-notice assumption had no decidable walkthrough.
Evidence: SELF only. Consistency script PASS (NB01-NB24 and text structure);
real model, browser walkthrough and make test are NOT_RUN.
Impact: Documents only, r2-draft.3. Stage conclusions stay unreviewed; no
business code is authorized.
Refs: Dev task feature/fast-slow-r2-nonblocking

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 06:38:37 +00:00

42 KiB
Raw Blame History

title, date, revision, status, owner, execution, parent
title date revision status owner execution parent
快慢通道 r2 非阻塞对话与任务卡 2026-10-15 r2-draft.3 pending-review weichen design-only 2026-10-12-fast-slow-channel-display.md@r1.1

快慢通道 r2:非阻塞对话与任务卡

状态:阶段 1–4 已按第二轮评审意见修订(r2-draft.3),结论仍为未评审。 本稿是已批准方案 r1.1 的增补候选。评审通过前,r1.1 仍是有效方案; 下文「拟取代」条款在阶段 4 批准后才生效。业务代码、模型试验、推送、PR、合入与部署均未授权。

授权依据:2026-10-15 用户确认独立兄弟分支,并确认本轮只产出阶段 1–5 文档、逐阶段评审。 Dev 任务分支 feature/fast-slow-r2-nonblocking。任务启动 R0 63e70d8b91ccb1691ce9b78a373e4e8bc9da24a2。修订前已 task-sync,同步基线 692735e91d6a9ab07ddd3686feb60a56b270728a(包含 7a0f934)。 实施计划见 r2 实施计划。

1. 需求拆解

1.1 目标

保留现有视觉风格。中栏是一条连续对话,右栏是持续更新的任务卡。后台结果写回自己的卡片, 默认只给轻提示。用途选择留在任务卡里,用户可以继续聊天、稍后决定,或用一句话直接交代下一步。 右栏关闭、切到文件或窄屏时,同一张卡的阅读和操作改由中栏内联展开承担,不另开抽屉。

1.2 用户场景

以下时间是验收走查的预期,不是已发生的运行结果。

  1. 11:04 上传说明书。中栏给出简短收件反馈。右栏立即出现一张材料整理卡。
  2. 后台开始整理。同一张卡更新阶段和已经形成的要点。用户可以继续发消息。
  3. 11:05 整理完成。右栏出现内容概览、完整整理结果、来源和可选下一步。中栏保持原有对话顺序。
  4. 用户说「总结一下这份材料」。系统把要求关联到该材料。已有同范围请求时复用并显示进展;没有时才启动一次摘要任务。右栏显示它的进展。
  5. 用户转而讨论别的问题。中栏继续当前话题。摘要完成后更新自己的卡片,并显示未读提示。
  6. 用户查看摘要。在右栏读要点、展开全文或打开文件。需要追问时,可以把结果引用到对话后再提问;不引用也可以问,但回答不得声称看过未带入的版本。

若第 3 步出现的用途区选择「先不选择」,用途区收起,材料整理结果仍可查,会话里没有挂起的前台回合。 之后可以点「暂不处理 · 可随时继续」重新展开原选择区。

1.3 子需求

主题 用户可观察到的结果
栏职责 发言在中栏。右栏「工作」可见时,后台进度、阶段成果和完整结果在同一张右栏任务卡,中栏只留关联入口。右栏关闭、切到文件或窄屏时,中栏内联展开同一张卡和操作(窄屏同样内联,不使用抽屉)
一张卡 一项后台工作从开始到结束保持同一身份、同一来源消息和同一材料
阅读层级 概览、工作详情、执行记录对应 r1.1 的 L0–L3。可展开的是已保存且有权查看的公开摘要、工具名、授权参数和输出
进展 同一段流式文字更新原位置;阶段变化才新增阶段记录。工具开始和结束只进入活动行和执行记录
完成正文 展示可读要点和完整结果;没有可靠短摘要时说明结果已生成并给出入口
到达 原卡更新、轻提示一次;此前没有未读版本的任务才使未读数加一;对话历史、焦点和滚动位置保持不动。只有用户针对该结果版本的主动动作才算已读,布局自动展开、刷新、重挂载和出现在视口都不算(状态表见 §4.5)
引用 引用保证该结果版本进入下一回合。未引用时助手只可按权限查询,且不得声称看过未带入的内容
选择 用途选项、补充要求和「先不选择」都在任务卡内,不占住会话。暂不处理可以重新展开
直接交代 语义清楚的材料用途指令绑定该材料,复用已有同范围请求;没有时才启动工作。无论复用还是新启,被该指令满足的选择都转为「已选」,原待选区关闭(验收见 NB12)
汇合 选择按钮和聊天消息进入同一个任务请求;重复提交看到已有进展。请求键限定在认证账号、项目和来源会话内,复用前必须归属一致且请求者仍有权限(验收见 NB13)
滚动 两栏各自滚动;只有点击关联入口才定位和高亮
时间 消息时间固定;卡片分别标创建、更新、完成;选择和阶段带事件时间。完整时间戳不只有悬停

1.4 边界与非目标

纳入:信息归属、任务卡投影、进展去重、完成正文、到达通知、已读与再次更新、用途选择、 暂不处理的重新展开、任务请求幂等、滚动、时间戳、存量事件的读取规则、安全展示边界, 以及这些行为的测试计划。

不纳入:

  • 新的模型质量试验、提示词效果对照和供应商切换。触及提示词与终轮门禁的真实模型对照 在实施时按交付规范标注;本轮把它标为 NOT_RUN,不把它当作交互修复的前置条件。
  • 视觉风格重做、新的颜色字号和第四栏。
  • 在跑任务的动态改写。改变范围或要求重新生成时,建立新的结果版本。
  • 部署、线上修复,以及 U3 质量线 feature/fast-slow-u2-u3-plan 的传输与工具流工作。
  • 前台消息跨刷新、跨会话的 outbox 可靠性。作者私有草稿、服务端持久化、恢复鉴权和删除语义另立需求。

1.5 待澄清(不阻塞本稿结构)

项 本稿采取的写法 需要评审时裁定
「语义十分清楚」由谁判定 先用确定性规则:卡片输入、显式任务引用、或与待选材料及用途词同时出现的指令 是否以后增加模型判断
存量 160 字摘要 历史卡保留已保存正文,并提供完整结果入口;新完成卡按本节规则生成 是否离线回填旧卡
引用是否为读取结果的前提 引用保证该结果版本进入本轮。未引用时只允许受权限约束的查询,并禁止声称看过未带入的内容 是否改为「不引用就不能读」

2. 需求评估

2.1 价值与现状

2026-10-15 对一次真实会话的只读核对,已经把现象对应到固定组合里的实现。 修订文稿前又在 task-sync 之后重验行号。来源为 SELF:只读源码,没有改业务代码,没有调用模型。

核对对象:Dev 同步基线 692735e91d6a9ab07ddd3686feb60a56b270728a 物化后的组件 Backend 80bb123c874cd9eb0e25f12ccd41e888f727a7e1、 Frontend 5ab81432d10291e1885256293192bc96038fa061、 Core 5773e74086791731059730bd3726dc8c9cd1381f、 UI e295caeef377a0e9588a3057d280864b2a011b71、 Documents 0f06abd57c7bfa9e88dfea22e2a46719a7bfc5bf(已含 Documents origin/main d668a3e0ac345dc80a72d15469f25918c4535ee6)。 原稿记录的 Backend 0a57853154e331cdb02a6a74ec2e13033b843e63 已被本次同步取代。 行号属于这次检出,后续提交移动后以当时文件为准。

现象 当前实现 符合度
协作进展重复 runtime/sub_loop.go 每个 text_delta 发布累计文本前 80 字(约 210 行);live.ts runEventsToTimeline(约 244 行)把每条追加成「协作进展」 需调整后符合。事件可以留,展示要按任务归并
右栏看不到完整结果 runmgr.go 约 2241 行在摘要为空或为「完成」时 truncate(fullText, 160)。全文已在 payload.Text 和落库消息里 需调整后符合。读取已有全文即可,不必先提高模型质量
整理结束后出现新回复和选择卡 deliverNotices(约 2536 行)经 startNoticeRun(约 2602 行)占住会话;约 2634 行要求汇报并立即 confirm_choice;verify.go 约 43 行对弱模型再强制一次 需调整后符合。这是行为变更,批准前不能动
已处理仍写「可自由输入」 AskHITL 约 805 行只把一句 Markdown 放进投影,没有输入控件,处理后也不替换 需调整后符合
两栏滚动位置奇怪 Conversation.tsx 约 659 行用 scrollsync.ts 的滚动百分比带动右栏 需调整后符合
同一摘要像处理了两遍 material.go materialKey(约 44 行)只用文件名和解析字数,没有「材料内容 + 用途 + 请求版本」这一任务请求身份 需调整后符合

项目定位仍然是对话推进工作、服务端权威、通用基座。r2 不把文档审签或业务风险等级写进基座。

2.2 可行性、成本与风险

项 判断
可行性 完整结果、事件和任务卡已经存在。P0 改完成通知、选择状态、已读和请求幂等。P1 改进展归并、滚动、时间和面板整理
成本 跨 Core、Backend、Frontend、UI 与 Dev gitlink。Documents 只承载方案。无新模型调用预算。不新增 outbox 服务端存储
依赖 既有 ActivityCard、HITL、事件 seq、工件预览。内容身份沿用 r1.1 §8.3:内容 hash 与解析版本
在途重叠 Dev feature/fast-slow-u2-u3-plan 及 Documents 同名远端分支在做 U3 r0.1–r0.6,会碰到 runmgr.go、store.ts、live.ts。本任务是兄弟分支,不堆叠、不暂停对方。合入前各自 task-sync,冲突按语义核验
信息架构 原稿把中栏写成始终只留入口,与 DESIGN.md「右栏关闭或切到文件时中栏承担完整卡片与操作」以及 r1.1 R11 冲突。修订后两种可见性共用同一 taskId
范围 原稿把前台排队的跨刷新恢复放进核心闭环。那会带出作者私有草稿、服务端持久化、恢复鉴权和删除语义。本轮拿掉,只保留后台任务和普通待选不占聊天队列
风险 取消自动汇报会改变用户已经习惯的「做完会在对话里说一声」。轻提示和未读必须真实可达,否则结果会被漏看。右栏关闭时若中栏没有完整操作,R11 会退步
行为面 P0 会改 startNoticeRun 提示和终轮兜底。交付规范要求真实模型前后对照。用户已说明该对照不是这些交互修复的前置条件,故计划中标 NOT_RUN 并写补救,不用「预期改善」代替证据

2.3 与 r1.1 的拟取代条款

下列条款在本稿阶段 4 获得人工批准后,由 r2 取代。批准前 r1.1 原文保持有效。

r1.1 r2 拟采用
§9.1 多任务相继完成时,原卡先显示结果,父会话空闲后再合并汇报 只更新原卡,加未读和一次轻提示。不启动前台汇报回合
§9.4 前台忙时沿用输入排队 前台正在生成时可以短暂排队。后台运行和普通待选卡不占聊天队列。跨刷新、跨会话恢复排队消息不在本轮
§5 右栏顺序「需要你处理 → 当前查看 → 其他进行中 → 新结果 → 已收纳」 收敛为「当前工作」和「工作历史」。新任务在上,历史按完成或处理时间倒序并默认折叠
R10 完成后把结论回投到对话 右栏更新。引用把结果版本带入下一回合;不引用时不得声称已读该版本。右栏不可见时,中栏展示同一张卡
§6.1「后台结束」默认在快通道给结论 快通道保持用户正在进行的对话。结果留在原任务卡;右栏不可见时由中栏展示这张卡

r1.1 的其余已批准内容继续有效:四层阅读里 L3 执行记录仍保留、失败与成功分开、来源不编造、 更新不抢占正在阅读的文件、材料内容身份不用文件名加字数冒充、成果不是思维链、 右栏关闭与窄屏时主要能力完整(R11)。

3. 需求表

项目符合度依据第 2 节源码核对。处理结论在阶段 3 评审前均为待定;下表给出建议结论,供评审确认。 「纳入本增量」指 r2 实施计划中的增量,不表示现在可以写业务代码。 层级:P0 是核心非阻塞闭环;P1 是时间、归并和面板整理;「约束」必须保持,不单独排期。

ID 描述 符合度 层级 可判定验收 依赖 建议结论
NB01 中栏按发送顺序展示用户发言和助手对当前问题的回复。右栏「工作」可见时,后台进度、阶段成果和完整结果不复制进中栏,只留关联入口。右栏关闭、切到文件或窄屏时,中栏展开同一任务的完整卡片与操作 需调整后符合 P0 右栏展开时,材料整理的子任务日志不进入第一轮快速回复。右栏关闭时,不打开右栏即可读摘要和依据、处理用途选择、打开文件,且与右栏是同一任务 ID 既有消息与 run 事件 纳入增量 1
NB02 一项后台工作从开始到结束只维护一张任务卡,身份和触发消息、材料保持不变 需调整后符合;r1.1 R02 已有方向,完成通知目前会另起回合 P0 走查场景 1–3 步始终是同一张材料卡;刷新后仍是同一 ID 任务登记 纳入增量 1
NB03 概览、工作详情、执行记录三层可读,并映射 r1.1 L0–L3。可展开的是已保存、且当前用户有权查看的公开工作摘要、工具名、已授权参数和输出 需调整后符合 P1 默认见名称、材料、状态、时间和当前事项;展开可见完整结果与执行记录。折叠不删除已保存的公开事件 既有事件回放 纳入增量 2
NB04 同一段流式文字更新原位置。只有阶段变化才新增阶段记录。工具开始和工具结束只更新活动行并进入执行记录 需调整后符合 P1 用一段重复开头的进度事件回放,时间线里该段只占一行。工具起止不增加阶段行。原始事件仍在详细记录中可查 agent.progress 纳入增量 2
NB05 完成卡读取后台最终结果。没有可靠短摘要时显示「整理结果已生成,查看完整结果」 需调整后符合 P0 完成卡正文能打开全文。开头是标题或表格时,概览不把截断标题当成摘要 已落库的子代理消息 纳入增量 1
NB06 运行中的「当前发现」只收已经形成的实质结果。检索开场和工具调用只进入活动行或执行记录 需调整后符合 P1 「我来检索」「正在调用工具」不出现在「已整理的要点」 阶段与工具事件 纳入增量 2
NB07 后台完成时更新原卡、标记新结果版本,并给出一次轻提示。此前没有未读版本的任务才使工作入口未读数加一,同一任务再来新版本不重复加一 需调整后符合;当前会 claimConversation 后启动通知回合 P0 完成时中栏消息条数不变,滚动位置不变,输入焦点不变。提示含材料名,例如「《说明书》的材料整理已完成」。同一任务连续完成两个版本,未读数只增加 1,两次轻提示不叠加成两条未读 卡片与未读 纳入增量 1
NB08 用户可以把结果引用到当前输入。引用可移除。发送后才成为新回合,并带上被引用的结果版本。引用保证该版本进入本轮;未引用时不得声称看过未带入的内容 符合度待核实:输入区尚无此引用标签 P0 引用后提问出现在对话末尾,时间是发送时间,回答可以使用该结果版本而不再跑一遍同一摘要。未引用的提问不把该版本写成已经读过,除非权限内查询实际读到并加以说明。引用在发送时和组装模型上下文时各重新鉴权一次:权限被撤销后,该版本内容不注入上下文,提示与回答也不透露该资源是否存在,表现与引用不存在的资源一致 任务结果版本 纳入增量 1
NB09 用途选择放在所属任务卡底部,含单选或多选、补充输入、「按此处理」和「先不选择」。右栏不可见时,同一选择出现在中栏的同一张卡上 需调整后符合 P0 选择出现时用户仍能发送无关消息并得到回复。推荐项有标识,且不会自动执行 HITL 投影 纳入增量 1
NB10 自由输入是卡片里的真实控件。处理后展示实际选择和补充要求,并与后续生成的完成状态分开 需调整后符合 P0 处理后可见「已选择:简明摘要;重点:使用流程和技术参数」,同时后续任务仍显示自己的进行中或完成。失效的「可自由输入」不再出现 AskHITL 投影 纳入增量 1
NB11 「先不选择」收起选择区,留下「暂不处理 · 可随时继续」,不催问、不自动重开。点该提示重新展开原选择区并回到待选,不新建请求 需调整后符合 P0 收起后没有挂起的前台回合;刷新后仍是收起状态。点提示后选项恢复,任务请求数不变 选择状态持久化 纳入增量 1
NB12 明确回答当前材料用途的发言,绑定该材料并复用已有同范围请求;没有时才启动一次工作。其他问题按新话题处理,原选择保留。直接交代后,被该指令满足的选择转为「已选」并关闭待选区 需调整后符合 P0 第二次说「总结一下这份材料的摘要」不新开摘要任务,只显示已有进展。同时讨论无关问题时,原选择仍在。直接说「帮我做简明摘要」后,无论复用已有请求还是新启一次,所属任务卡的选择状态都变为已选(记录选项、来源为聊天指令和时间),不再留下待选区,也不留下「先不选择」的收起提示;重复说同一指令不产生第二条选择记录。多选卡只关闭被指令满足的选项,其余选项仍可选 确定性绑定规则 纳入增量 1
NB13 选择按钮和聊天消息汇合到同一任务请求。已有工作只显示进展。明确要求重新生成或改变范围时才建立新结果版本 需调整后符合 P0 两个入口几乎同时提交,只产生一个摘要任务和一组结果文件。再次要求「重新生成」才出现新版本。请求键限定在认证账号、项目、来源会话,再加材料内容 hash、解析版本、用途和请求版本;只有归属一致且请求者仍有权限时才复用。换账号、换项目或换会话提交相同内容不命中既有请求,也看不到其进展;权限撤销后重复提交不返回既有任务,表现与没有既有请求一致 内容 hash、用途、请求版本 纳入增量 1
NB14 需要授权的操作继续等待授权,并且只阻止依赖该授权的工作。自由输入和「先不选择」不算同意 符合;危险确认已经独立。需保持 约束 授权卡未处理时,无关对话仍可发送。两种放弃动作不会让被授权动作执行 既有 HITL 随增量 1 保持,不单独排期
NB15 取消按滚动百分比联动。关联只在用户点击「查看关联任务」或「定位发起消息」时定位并高亮 需调整后符合 P1 滚动中栏时右栏位置不变。点击入口后目标高亮。用户正在看旧卡时,新结果只显示「有 1 项更新」 scrollsync.ts 纳入增量 2
NB16 右栏分当前工作与工作历史。当前工作含进行中、确实等待输入的任务、新到未查看的结果,新任务在上。历史默认折叠。当前工作与工作历史互斥,一张卡同一时刻只在其一 需调整后符合 P1 用途选择和选择历史留在所属任务卡内,不另堆「已处理」卡。阅读旧卡时卡片不因更新而自动排序、展开或跳转;正在阅读的历史卡收到更新时暂留原位并显示「有 1 项更新」,用户离开该卡后再按未读状态迁入当前工作 卡片排序 纳入增量 2
NB17 消息常驻显示时刻,跨天显示日期。完整时间戳除悬停外,键盘聚焦、触屏点按和屏幕阅读器也能得到(time 的 datetime 与含完整本地时间的可访问名称)。卡片分别标创建、更新、完成。选择记录带提交时间 需调整后符合 P1 键盘、触屏和读屏得到的完整时间与悬停一致。后台更新不改变已有消息的时间。选择时间与后续任务的开始、完成时间彼此可区分 消息 createdAt、卡片时间 纳入增量 2
NB18 右栏「工作」可见时中栏只留入口。右栏关闭、切到文件或窄屏时,中栏内联展开同一 taskId 的完整卡片与操作。窄屏只保留这一种落位,不使用抽屉 需调整后符合;ConversationWork 已有收起摘要,需改成同一面板,并在中栏补齐操作 P0 收起、窄屏、文件入口和右栏展开打开的是同一任务 ID。窄屏下点击入口在中栏内联展开该卡,不出现抽屉或遮罩,输入焦点不移动,已读只按 NB24 判定。右栏关闭时可以读摘要和依据、处理确认或用途选择、打开文件 现有右栏 纳入增量 1
NB19 后台运行和普通待选卡不使聊天一直排队。前台生成中可以短暂排队。跨刷新、跨会话恢复不在本需求 需调整后符合;当前完成后通知回合会占住会话 P0 材料整理进行中直接发送的新消息进入对话,而不是一直停在本地队列。刷新之后排队消息是否还在,不作为本需求的验收 会话占用 纳入增量 1
NB20 升级后仍能阅读旧会话。重复进展按新规则折叠展示,原始事件还在。旧完成卡若只有 160 字摘要,概览标明这是当时保存的开头,并尽量链到已存全文 需调整后符合 P1 打开含 80 次重复进展的历史会话,默认时间线没有 80 行相同开头;详细记录仍能按事件查看 旧事件只读 纳入增量 2
NB21 后台失败时原卡进入失败状态,保留已保存的部分结果和原因,不启动汇报回合。未读与轻提示仍发生一次。对应 r1.1 R08、R17 需调整后符合;失败目前可能随通知回合出现 P0 失败卡不显示成功完成。中栏消息条数不因失败汇报增加。已保存的部分结果仍可打开 原任务卡与 run 终态 纳入增量 1
NB22 选择已过期或已处理时,界面刷新成服务端状态,旧选项不能再次提交。对应 r1.1 R07 需调整后符合;r1.1 已有方向,r2 选择改到卡内后须保持 P0 服务端返回已处理或版本过期后,原选项不可提交,中栏与右栏状态一致 选择版本 纳入增量 1
NB23 展开不得展示隐藏思维链、系统或开发者提示、凭据、原始请求载荷、未授权工具数据。展开不提升权限。成果不是思维链(r1.1 §7.3) 需保持;r1.1 §7.3 已批准 约束 夹具含上述类别时,任务卡、中栏入口和引用标签都不可见这些内容 现有权限 随增量 1 保持,不单独排期
NB24 已读、再次未读、当前/历史分组和暂不处理按 §4.5 的互斥状态表转换。只有用户针对具体结果版本主动展开、打开全文、激活「有 1 项更新」或显式标记,才算已读;布局切换、刷新、组件重挂载和仅出现在视口不算。新的成功或失败终态版本使任务未读,仅启动重试不触发。未读数增加的是此前没有未读版本的任务,不是每个结果事件 符合度待核实:未读与暂不处理尚无这一状态机 P0 右栏关闭后因布局切换自动展开该卡,未读仍在;刷新和重挂载后未读不变;用户手动展开该版本后未读消失。同一任务已有未读时再完成新版本,未读数不变;已读后再完成才加一。失败终态使任务未读,启动重试不使其未读。正在阅读的历史卡收到更新时暂留原位显示「有 1 项更新」,用户离开后迁入当前工作;激活该提示才把新版本标为已读。点「暂不处理 · 可随时继续」回到待选且不新建请求 结果版本与选择状态 纳入增量 1

4. 方案设计

4.1 方案选择

方案 结果 结论
A. 只改样式和截断长度 重复行、自动回合和滚动联动还在 不采用
B. 完成后仍自动追加一轮短回复 对话顺序仍会被后台打断 不采用
C. 完成后完全无提示 容易漏看结果 不采用
D. 右栏持续更新同一张卡,加未读和一次轻提示;选择留在卡内;对话只在用户引用或主动提问时继续;右栏不可见时中栏承担同一张卡 对齐第 1 节场景,并保持 R11 推荐

4.2 职责

右栏「工作」可见时
  中栏:用户与助手发言;前台回合的折叠过程;「已启动材料整理」→ 打开该任务;文件打开入口
  右栏:当前工作(新在上);同一任务卡;选择与选择历史;工作历史

右栏关闭、切到「文件」或窄屏时
  中栏:除上述发言外,展开同一 taskId 的完整卡片与操作(摘要、依据、选择、打开文件)
  文件入口:仍只做列表和预览

异步状态只有一个所有者:服务端任务快照。前端按事件 seq 更新,过期事件丢弃。 中栏入口、中栏展开卡和右栏卡片读取同一任务 ID,不各算一份摘要。

4.3 任务卡与 r1.1 四层阅读

r2 卡片层 r1.1 默认展示
概览 L0 一行汇总加 L1 工作摘要 任务名称、关联材料、状态、创建/更新/完成时间,以及当前在做什么或已经得到什么
工作详情 L2 阶段与依据 内容要点、完整结果、依据、范围、文件、选择与补充要求
执行记录 L3 执行记录 已保存且当前用户有权查看的公开过程、工具名、已授权参数和输出,默认折叠

不在任何一层展示:隐藏思维链、系统或开发者提示、凭据、原始请求载荷、未授权工具数据。 展开不提升权限。这是 r1.1 §7.3「成果不是思维链」在 r2 的保持项(NB23)。

运行时活动行使用真实阶段,例如「已提取文档文字」「正在整理内容结构」。 「已整理的要点」只接收已经形成的实质结果。工具名和「我来检索」留在活动行或执行记录,不进入要点。

完成时概览切到「整理结果」。正文来自后台最终消息的结构化要点;要点缺失时显示 「整理结果已生成,查看完整结果」,并链到已保存全文。实现上停止把全文开头 160 字写入用户可见摘要。

4.4 进展归并

agent.progress 继续可以高频产生,原始事件不删。展示层为每个子任务维护一条「当前文字」: 同一文本流的后续累计内容替换这一条。阶段变化才新增阶段记录。 工具开始和工具结束只更新活动行,并记入执行记录,不新增阶段记录。 回放与实时使用同一归并规则,避免刷新后再次刷出重复行。

4.5 到达、已读与引用

未读、已读和分组共用一套互斥状态。状态属于「任务 × 结果版本」,由服务端持有,前端只投影。

1. 已读判定(唯一入口)

只有用户针对具体结果版本做出下列主动动作之一,该版本才算已读:

  • 主动展开该版本的工作详情;
  • 主动打开该版本的完整结果或全文;
  • 激活该卡上的「有 1 项更新」;
  • 显式点「标记已读」。

下列情形一律不算已读:布局切换(右栏关闭、切到文件、窄屏)带来的自动展开、页面刷新、 组件重挂载、卡片仅出现在视口、轻提示出现或消失。已读按版本记录;已读旧版本不使新版本已读。

2. 未读转换与计数

事件 该任务未读 未读数
新的成功终态版本 置为未读 此前该任务没有未读版本才加 1
新的失败终态版本(含失败后的新尝试以失败结束) 置为未读 同上
仅启动重试或重新生成(尚无终态) 不变 不变
已有未读版本时又来新终态版本 仍为未读,未读版本集合增加 不变
用户对最新未读版本做出 §1 动作 清除该任务未读(仍有更旧未读版本时一并清除,已读按「用户看到最新版」计) 减 1

未读数 = 仍有未读版本的任务数,不按结果事件条数计。轻提示每次终态版本到达发一次, 多任务同时完成可合并成一条计数提示;轻提示不影响未读数。

3. 当前工作与工作历史互斥

卡片状态 所在分组
进行中、等待输入、有未读版本 当前工作
已读、无待选、无进行中的终态卡 工作历史(默认折叠)
正在被用户阅读的历史卡收到新终态版本 暂留工作历史原位,卡上显示「有 1 项更新」,不改变排序、展开状态和滚动位置;用户离开该卡后,按其未读状态迁入当前工作
阅读中的历史卡,用户激活「有 1 项更新」 新版本标为已读,卡片留在原位

一张卡同一时刻只属于一个分组。「正在阅读」指用户已主动展开该卡且仍停留在其中; 离开指展开态被用户收起或焦点和展开目标切到其他卡。

4. 与选择状态的关系

选择状态(待选 / 已选 / 暂不处理)与未读相互独立,各自转换。「暂不处理」写入 deferred 并收起选择区。点「暂不处理 · 可随时继续」回到待选并展开原选项,不新建请求,也不改变未读。 选择已过期时改为刷新服务端状态,不恢复旧选项。

5. 引用

引用保证被引用的结果版本进入下一条用户消息的上下文。它不是助手读取结果的唯一前提。 引用动作本身不算已读。

后台完成时:

  • 原任务卡写入结果版本,标记「新结果」。
  • 按 §2 更新未读,按 §3 决定分组。
  • 轻提示一次,带材料名。
  • 不插入历史消息,不追加助手长回复,不移动焦点,不改变滚动位置。

「引用结果到对话」在输入区放一个可移除标签。用户发出下一条消息时,该消息成为普通回合, 并记录被引用的任务和结果版本。助手回答相关问题时可以读取这个已经完成的版本。

没有引用时,助手只可通过当前用户已有权限的任务结果查询读取。回答不得写成「我已看过该版本」, 除非这次查询实际读到了它,并说明读到的是哪一版。

多个任务同时完成时,每张卡各自更新,未读按任务计数,轻提示可以合并成一条计数, 仍然不启动汇报回合。

4.6 选择

卡片底部:

接下来想怎样处理?
这一步可以稍后决定,你可以继续对话。

○ 看一份简明摘要
○ 提取参数与重点
○ 检查缺项和不一致

补充要求
[例如:先关注使用流程和技术参数……]

[按此处理]       [先不选择]
  • 互斥方案用单选。可以组合的事项用多选,并写明「可多选」。
  • 推荐标记只是标识。
  • 「先不选择」写入选择状态 deferred,选择区收起为「暂不处理 · 可随时继续」。
  • 点该提示重新展开原选择区,状态回到待选,不新建任务请求。
  • 选择历史保留选项、补充要求、提交时间和后续工作结果。
  • 「已选择」与「生成完成」是两条状态。

需要授权的操作仍使用现有确认卡,只阻塞依赖该授权的工作。自由输入和「先不选择」的存储值 不得被执行器解释为同意。

4.7 直接消息与任务请求

绑定到待选任务的入口只有三个:卡片内输入、消息里明确引用该任务、确定性规则判定为在回答 该材料的用途。规则至少同时识别材料指向和用途动作。无法同时满足时,只澄清关联,不静默绑定。

任务请求键由两部分组成:授权作用域(认证账号、项目、来源会话)和现有内容字段 (材料内容 hash、解析版本、用途、请求版本)。选择按钮与聊天消息使用同一键。 复用既有请求须同时满足:作用域三项与既有请求一致,且请求者此刻仍有权限访问该项目、会话和材料。 任一不满足时不命中既有请求:不返回其进展,也不提示存在相同请求,按没有既有请求处理。 已有未完成或已完成且范围相同的请求时,展示其进展,不另起一份。重复的明确指令也走这条规则, 不再次启动工作。用户明确要求重新生成或改变范围时,请求版本递增,保留旧结果。

直接交代的收尾:确定性规则命中并绑定后,无论复用已有请求还是新启一次,都把所属任务卡的 选择状态写为「已选」,记录选项、来源(聊天指令)和提交时间,并关闭待选区;不留下待选区, 也不留下「暂不处理」收起提示。指令只满足多选卡中的部分选项时,只关闭这些选项。 重复的同一指令不新增选择记录。规则未命中或有歧义时,选择状态保持不变。

materialKey 继续可以存在于受控元数据,供旧客户端识别;用户默认卡身不展示内部键。 内容身份以 hash 和解析版本为准,与 r1.1 §8.3 一致。

4.8 右栏、滚动与时间

当前工作:进行中、确实等待输入、新到未查看。新任务在上。 工作历史:按完成或处理时间倒序,默认折叠成紧凑行。

删除中栏滚动百分比到右栏的写入。flashElement 只在用户点击定位后使用。 用户停留在某张历史卡时,新结果不改变排序、展开状态和滚动位置,只显示「有 1 项更新」。

消息时间来自消息创建时间,后台卡更新不回写它。跨天显示日期。 完整时间戳有四条路径:指针悬停、键盘聚焦、触屏点按、屏幕阅读器。 实现使用 time 元素的 datetime,可访问名称包含完整本地时间。 具体控件在阶段 5 确认,只用 @ui 已有原语,不新增私有样式。 卡片显示「创建」「更新」「完成」。选择记录显示「11:09 已选择:简明摘要」。 阶段和执行记录显示事件时间。正文流式输出不逐段显示时间。

右栏「工作」可见时,中栏只留短入口。右栏关闭、切到文件或窄屏时,中栏展开同一任务的完整卡片与操作。 窄屏只有一种落位:中栏内联展开同一 taskId 的卡,不打开抽屉或遮罩。内联展开不移动输入焦点, 不改写两栏滚动位置,也不因展开本身标记已读(见 §4.5)。收起提示打开的同样是这一任务面板。

4.9 失败与存量

情况 表现 需求
后台失败 原卡进入失败状态,保留已保存的部分结果和原因。不启动汇报回合。未读与轻提示仍发生一次 NB21
选择已过期或已处理 刷新成服务端状态。过期选项不能再次提交 NB22
重复点击 同一请求键只执行一次,按钮进入已提交 NB13
刷新与断线 卡片、选择状态和未读从服务端恢复。连接提示不改写业务终态。前台排队消息的跨刷新恢复不在本轮 NB19 的排除项
旧的重复进展 默认按 4.4 折叠;详细记录按原始 seq 查阅 NB20
旧的 160 字摘要 概览标明这是当时保存的开头,并链到已存全文。不把旧摘要改写成新的模型结果 NB20
无全文可链 显示「当时只保存了开头,完整结果不可用」 NB20

4.10 数据与权限

新增或收紧的状态:任务请求键、选择状态(待选 / 已选 / 暂不处理)、结果未读、输入区引用。 它们归属会话和项目的现有权限。未读是展示状态,不改变 run 终态。 引用只携带当前用户已经能阅读的任务结果版本,并在两个时点重新鉴权:发送消息时,和组装模型上下文时。 任一时点权限已撤销:不注入该版本内容;用户可见提示和助手回答不得区分「无权」与「不存在」, 不泄露资源是否存在、标题或大小。任务请求键的授权作用域见 §4.7;复用前同样按请求者当前权限判定。

不新增跨项目读取。执行记录的可见性保持现有权限,展开不提升权限。 公开投影排除隐藏思维链、系统或开发者提示、凭据、原始请求载荷和未授权工具数据。

不新增前台 outbox 的服务端记录,也不定义作者私有草稿的保存、恢复和删除。

4.11 待验证假设

假设 验证 若失败
最终消息里能够稳定抽出要点 增量 1 用已保存子代理消息做投影测试 没有要点就用诚实占位,不回退到截断开头
确定性绑定能覆盖「总结一下这份材料」这类句子,同时不误绑无关消息 增量 1 的语句样本,含无关话题、含糊句和重复的明确指令 含糊句只澄清。重复明确指令复用已有请求。不在未批准时改成模型判断
去掉自动汇报后,轻提示足够让用户找到结果;右栏关闭时中栏卡片同样可达 阶段 7 的浏览器走查,按下方 §4.11.1 逐项记录 调整提示位置或中栏展开,仍不恢复自动长回复

4.11.1 轻提示可达性走查

前置:右栏关闭;中栏输入框有焦点且含未发送文字;两栏均已滚动到非初始位置并记录像素位置; 材料整理在后台完成并留下一个待选的用途选择。

步骤 通过判据
1 完成到达 轻提示出现并含材料名;中栏消息条数不变;输入焦点、输入文字和两栏滚动位置与前置记录一致
2 一步定位 只点一次轻提示或未读入口,同一 taskId 的卡在中栏内联展开并可见,无需先打开右栏
3 完成一次选择 在该卡内选一个用途并提交,卡内显示实际选择;其间不要求打开右栏
4 状态不被污染 全过程输入焦点和输入文字不变,两栏滚动位置在展开前后一致(卡片自身展开导致的高度变化不得牵动另一栏);未读只在步骤 2 的主动展开后减少,步骤 1 结束时仍为未读

执行与记录:由非作者执行并按步骤逐项记录通过或失败、浏览器与视口、对象 SHA、时间、执行人; 作者本人的走查只能标 SELF,不替代这份记录。窄屏视口重复一遍,并确认全程没有抽屉或遮罩出现。 任一步失败,本假设按「若失败」处理。该走查在阶段 7 前保持 NOT_RUN。

5. 验收场景

主场景即 1.2。边界同时覆盖:多个任务同时完成、右栏关闭、切到文件、刷新、重复点击、 重复的明确指令、直接交代后选择关闭、旧选择过期、后台失败、暂不处理后再展开、未读与再次更新、 布局自动展开不算已读、跨账号或权限撤销后的请求复用和引用、窄屏内联展开。

判据:进展不刷重复行;完整结果能读到;选择不锁住无关对话;同一摘要只执行一次; 结果到达不改变消息顺序;历史记录的是用户实际决定;右栏不可见时中栏能完成阅读、选择和打开文件; 排除项不会出现在展开内容里。

这些场景在本稿阶段是计划,状态 NOT_RUN。设计文档的保存不表示场景已通过。

6. 评审记录

阶段 对象 结论 评审人 时间 依据
1 需求拆解 本稿 §1 @ r2-draft.3 未评审 — — 待人工确认与原始意图一致
2 需求评估 本稿 §2 @ r2-draft.3 未评审 — — 待人工确认取舍与 U3 并行方式
3 需求表确认 本稿 §3 NB01–NB24 未评审 — — 待人工确认范围与验收条件
4 方案设计 本稿 §4 @ r2-draft.3 未评审 — — 待人工批准后,拟取代条款才生效
5 实施计划 实施计划 未评审 — — 待阶段 1–4 通过后单独评审;未授权写业务代码

6.1 修订记录

项 内容
对象 Dev 7b87e03、Documents 3a43ce6 上的 r2-draft
意见 阶段 1–4 建议「需修改」,不是拒绝。阶段 5 未评审
来源 SELF。智能体评审不能替代人工阶段批准
本稿 r2-draft.2。阶段结论保持未评审
裁定 引用是保证上下文,不是读取结果的唯一前提。已读以展开详情、完整结果或显式标记为准,视口曝光不算。这两项仍可在人工评审时改
同步 修订前 task-sync 到 Dev 692735e。该提交包含评审提到的 7a0f934。Documents origin/main 为 d668a3e。§2.1 行号已按 Backend 80bb123 重验

第二轮(r2-draft.2 → r2-draft.3)

项 内容
对象 Dev 13d2315、Documents a672adb 上的 r2-draft.2
意见 阶段 1、3、4 建议「需修改」,阶段 2 内容可接受但随阶段 1 保持未评审,阶段 5 未评审。不是拒绝,未发现不可行项
来源 SELF。智能体复审不能代签人工批准;阶段 1–4 仍为未评审
本稿 r2-draft.3。仅改文稿,未改业务代码
1 窄屏落位 只保留中栏内联展开同一 taskId,删除窄屏抽屉表述(§1.1、§1.3、NB18、§4.8)
2 状态机 新增 §4.5 互斥状态:已读判定唯一入口、未读转换与计数、当前/历史分组互斥、与选择状态的关系;NB07、NB16、NB24、§1.3 同步
3 授权边界 §4.7 请求键限定认证账号、项目、来源会话,复用须归属一致且仍有权限;§4.10 引用在发送与组装上下文时重新鉴权,撤销后不注入也不泄露存在性;NB08、NB13 验收补充
4 直接交代 NB12 验收与 §4.7 写入「直接交代后关闭已满足的选择」,含多选部分满足与重复指令
5 可达走查 新增 §4.11.1:右栏关闭时一步定位并完成一次选择,焦点与两栏滚动不变,由非作者逐项记录;§5 边界同步
待澄清项 按评审建议保留 §1.5 当前写法:确定性绑定、不离线回填旧摘要、引用不是读取的唯一前提
同步 修订前 task-sync 到 Dev ff3a562(相对 692735e 只新增任务卡闭合提交,未推进业务组件)
现场 任务卡相对 13d2315 曾有 114 行未提交删除(主要是两段 SELF 收据);经用户确认后先另存补丁到源码外 /tmp,再还原,随后启动检查 READY
未执行 真实模型、浏览器走查和 make test:NOT_RUN

源码核对:SELF,2026-10-15,对象见 §2.1。真实模型、浏览器和部署:NOT_RUN。