核对日期:2026-10-09。客户端实测 567ec9a22,结束分工修复实测 85fa05255;服务端代码基线
xindong/cindy-server@8a61a72c。本文区分实现、离线回归和隔离 DEV 实测;不代表线上部署或发布安装包已验收。
原有行为以 伙伴群聊 为准;普通伙伴私聊仍走
伙伴运行时,不是服务器群时间线。
| 原有能力 | 服务器版接线与本次处置 |
|---|---|
| 伙伴身份、长期私聊、记忆、Skill、模型候选与权限 | 原主任务保留;群内使用独立授权专线。非主人默认仅交流是多人群的权限设计,不应恢复成读取主人私有资料。群内工具授权及主人私聊由 #5587 处理 |
| 建群、名称、成员、负责人、回复方式、发言方式 | chatServer.createGroup/updateGroup/setMembers 已接服务器接口;混合真人/伙伴管理与手机入口由 #5613 处理;#5607 也涉及手机新增成员校验,合并时避免重复覆盖 |
| 用户发言、@伙伴、@所有人、复制、分享、回复、表情 | 发送与 Thread 已有接线;本次配套用可选 mentionsAll 保留全体语义,兼容旧 mentions 列表 |
| 自动判断分工、手动分工、修改待开始安排 | 本次恢复 @所有人的自动判断;按原规则由辅助模型判定单一可用成员是否需要分工;待开始安排优先走 revise,避免手动分工覆盖修改语义。别人的提议不触发新安排 |
| 修改安排时仍可单独 @伙伴讨论 | 本次保留。已有提议时 @所有人也是讨论,不当作修改意见 |
| 判断过程中插话、停止、点击开始/不用了/编辑 | 新消息提交成功后才取消旧判断,附件准备、上传或提交失败保留原判断。控制操作立即取消,并用同群意图代次拒绝上传/提交回执迟到后另建卡。同时取消服务端延迟兜底,并拒绝迟到安排 |
| 安排卡、开始/不用了、继续/重试/结束 | 真人署名的服务端卡恢复双端操作入口;共享 dismiss 在 waiting 时映射服务器 stop,开始前仍用 dismiss,保留暂停后结束分工语义 |
| 分工期间补充、等待时返工 | 客户端发往 plans/:id/messages;服务端 comment 与完成逻辑已接入,保留本轮内容并对同一步继续执行 |
| 分工未做/失败步骤换人 | 本次服务端恢复 waiting 时更换 pending/failed 步骤;已完成步骤仍不能换人 |
| 项目目录、Git worktree、逐步交接文件 | 现有 workDir.prepare、grant 隔离目录、changedFiles 和媒体上传接线保留;远端执行者各有本机工作目录,通过附件交接,不把一台电脑路径当另一台电脑路径 |
| 图片、文件、视频输入 | 上传、下载、历史迁移已有;#5613 处理类型/错误诊断、手机等待预算与发送回执复用。隔离 DEV 的真实图片/文本上传与伙伴读取已通过;生产对象存储故障仍需现场证据 |
| 每轮最多 40 个附件交给伙伴 | 本次将普通讨论误降为 10 的限制恢复成 40;按消息新旧选取、同一媒体去重,下载失败或超额的名字明确告诉模型。分工继续保留 40 上限;服务器提供同伙伴/授权/步骤的成功投递水位,客户端跨页查找未见附件 |
| 无补充时 NO_REPLY,不显示空发言 | 终态过滤已有;本次恢复普通讨论的 NO_REPLY 提示,分工交付不受此提示影响 |
| 历史、安排与工作目录迁移 | chatServerMigration 与 afterMessages 已有分批水位、稳定来源 ID、安排恢复和本机目录登记;保留旧数据作为迁移源,不另建可发言本地群 |
| 手机查看/发言、分工控制、待回复推送 | 继续通过被控 Desktop 的 bot-groups Remote Resource 与 onStepSettled;本次主机修复同时作用于这些入口,不增加 Mobile 原生能力或协议字段 |
| 删除群 | 多人版群主归档、成员退出是已定的新语义;不能照搬本地删除整群数据,影响其他成员 |
- 等待时换人:允许 waiting 时更换 pending/failed 步骤;删除步骤仍仅限开始前。
- 轮流上下文:顺序执行在 claim 时推进 context_seq,后继伙伴可读本圈前面的回复;自动首圈保持共同快照。
- 顺序与继续:新群按输入成员顺序入群,第二/三圈轮换起点;手动继续始终轮流。旧群相同 joined_at 无法恢复丢失的选择顺序,保留稳定 ID 兜底。
- @所有人:可选 mentionsAll 与命名列表并存,保留 mentioned 回复方式与自动首圈并行。
- 额度与失败:10 条按实际发布回复计数,领取时计入在途预约;NO_REPLY 不占回复额度。失败或租约过期不阻塞其它伙伴,不自动重跑失败者,并给出轻提示。
- 停止辅助判断:取消接口清除延迟调度、撤回尚未执行的安排并栅栏化迟到结果,保留用户原消息。
- 附件增量:领取回传成功投递水位,按伙伴、授权版本和分工步骤隔离;客户端倒序翻页,不局限最近 100 条。仅成功执行推进水位。
- 明确分工失败:planningMode 保留手动/修改意图;辅助判断失败或超时提示重试,不静默降为普通讨论。
新增字段与取消接口由 /me.capabilities.groupDiscussionParity=1 协商;旧服务器仍用旧请求形状。
先完成整个 Chat Server 集群升级,再发布使用能力位的新客户端,避免滚动期间请求落到旧副本。
迁移 008/009 均为带默认值的增量列,不改写原消息;避开并行 #836 的 007 迁移。
- 客户端接手后 Desktop 107 项定向回归、Mobile 60 项通过;手机发现等待中结束分工误用 dismiss 后,补回归并通过 parity 23/23 与 focused TypeScript。服务端 group-parity 11/11 沿用相同服务端提交,覆盖旧版非空 schema 升级、再次启动及旧写入形状。
- Review 实测:原安排判断进行时,下一条消息因无效附件返回 INVALID_ATTACHMENT,原判断继续并生成带开始/不用了入口的两步安排。标注图片重试改变文件名,仍返回同一消息回执,实际只持久化一条消息和一个媒体对象。单成员场景通过真实决策解析器回归,恢复普通讨论而不创建分工。
- 隔离 Desktop + 持久 Chat Server DEV:两位真实伙伴回复;安排开始、逐步结果回流;等待时换人后继续;不用了后直接恢复讨论;修改提议生成更新后的安排;图片与文本文件上传后两位伙伴均正确读取。
- 已重启隔离 Desktop 和服务端并读回原消息/安排;服务中断超过租约后显示没做完,用户明确重试后完成,没有静默重复执行。另用旧本地 schema 的非空夹具通过正式迁移入口保留两条历史、成员顺序、负责人、回复方式;迁移后两位真实伙伴读出旧历史识别码,双端服务重启后不重复导入。数据库旧版非空夹具经实际 migrate-cli 升级 008/009,读写、重跑及持久 PostgreSQL 重启后核对通过。
- Baguette Duo iOS 27.1 正常登录后完成手机到隔离 Desktop 的实测:群发现、旧消息/安排展示、两位伙伴文字回复、安排开始/等待/换人/继续完成、修改提议/取消、等待中结束后恢复普通讨论、含真人的伙伴移出再加入。手机相册选取真实 JPEG,经手机上传/主机取件/群媒体存储后两位伙伴识别瀑布与青苔岩石;手机取回并全屏预览成功。Desktop
85fa05255,Metro 来源为当前 worktree 的567ec9a22(后续变更仅 Desktop 和测试,Mobile 源码相同)。浅色已目检,深色未目检;证据保留在本机/tmp/cindy-parity-acceptance/runtime.md。 - DEV 媒体使用显式
--local-media的本机磁盘对象存储与真实 HTTP 字节传输;客户端只在未打包且显式隔离、服务器为固定 loopback 地址时允许 HTTP。生产 HTTPS 校验不变。 - Desktop 与 Mobile 消费同一主机服务;继承 #5613 的卡片、成员 UI、上传诊断,不重复实现;不改 #5587 的工具权限和私聊服务。服务端 #835 的 Thread 可见性、#836 的可信成员事件由各自 PR 处理,合并时保留其约束。
- 未运行无关整仓测试;受影响端实际运行验收继续完成后才能解除 PR 阻断。分别记录客户端合并、服务端合并/部署、发布包验收,任何一项不能替代其它项。