diff --git a/devdocs/02-前后端协同事项.md b/devdocs/02-前后端协同事项.md index 939c3a1..6c5ccb0 100644 --- a/devdocs/02-前后端协同事项.md +++ b/devdocs/02-前后端协同事项.md @@ -496,3 +496,51 @@ **不碰** `role` / 时间戳 / `documents` / `thinking` / 任何记忆派生数据;`content` 之外**一个字都不改**。 **做完请在本节补一条**:改了多少条 / 抽样对照 / commit / 回滚点在哪 / 跑的时间。 + +--- + +## 客户端答复(2026-10-05 下午 · 回执十八的答复 + 一条形状依赖) + +> 背景:本批我们在真机上把「忙时并行」验通了,顺带发现并修掉一个**角标误报**;另外回答你们 §五 的那两个问题。 +> 我方 `android` = `39a63f8`,**1055 测试全绿**。 + +### 一、§五那两个问题:**都没有**(回填可以放心) + +1. **我们不解析正文里的任何决策标记。** 正文唯一的标记解析器是 `domain/parse/ChatContentParser.parse()`,它只认 `

` 与 `` / ``; + `我决定:push` 这类 backthink 标记对我们**就是普通文本**,被一起包进 `

` **不改变我们读到的内容**。 +2. **单段纯文本 vs 单段 `

`:客户端零样式差异。** 我们的样式只按「段落种类」分档(正文 / 旁白 ``·`` / 思维链 / 工具卡 / 图片), + **没有任何分支看「有没有 `

`」**(全仓 grep 零命中)。⇒ 那 61 条纯单段被无谓包一层 `

`,在客户端**看不见任何差别**。 + +⇒ 你们「按 `changed` 全集 81 行回填、不要收紧到 6 条」的技术判断**我们赞成**;而且我们看到你们已经跑完了(§补 3)。 +**方位确认**:回填后我们重新拉过一遍历史并渲染,**未见段落异常**。§补 3 说的「回滚要按 81 条精确写回、别整库替换」我们记下了 —— 无异常就不必动。 + +### 二、⚠️ 一条**形状依赖**,请把它当契约面:`turn_begin.kind` + +本批实测(证据在下一节)后,我们**把「这一路是不是并行路」的判据从 `leg` 改成了 `kind`**: + +- **`kind` 逐字等于 `"parallel"`** ⇒ 才算并行路(挂「并行路 N」小标);`"turn"` / 空 / 缺席 / 未知取值 ⇒ **一律不当并行**。 +- **`leg` 我们不再用来判并行**(只在显示序号时当数字用)。 + +原因(不是挑刺,是我们原来理解错了、现在纠正):`leg` 来自 `st.legSeq++`(`session_parallel.go:202`),**每条新路都自增、串行回合也算** +⇒ `leg=2` 只说明「本会话第 2 条路」。我们一度把它当「并行组内序号」,于是在**第二条普通消息**上也挂了「并行路 2」——**等于对用户说谎,已修**(`39a63f8`)。 + +⇒ 请把 **`kind` 的取值集合当契约面**:将来**增删任何取值**(例如加 `"steer"`)**先在这里登记**。 +⇒ 另一条**只做告知、不需要你们动作**:`kind:"turn"` 的帧里 `leg` 会一直往上涨(它是会话内第几条路)。我们不再依赖它,但如果这**不是**你们的本意,你们知道就好。 + +### 三、✅「忙时并行」两路:我们实机验通了(你们那边**不用做任何事**) + +- 后端日志 `msg="parallel leg started" session=web leg=2 active_turns=2`;库内两条 user 消息 `turnId` 不同(`turn-b618432ddb21ed42` / `turn-4743035881e410af`); + 客户端底栏显示「并行 2 路」,两路回复各自成块、未互糊。 +- 客户端形状**全部可降级**:`turnId` / `turn_begin` 缺席时行为与老版本**逐字节相同**(有逐字节测试钉住)。 +- 设置页第三档「并行」(忙时上行 `chat.parallel=true`、**绝不发 `interrupt`**)实测生效。 + +### 四、一条观察(**客户端自查中,暂不需要你们动作**) + +用系统分享(`ACTION_SEND`)投文本进 App 时,出现过一次「**发送失败,请重试**」:正文退回输入栏、**库里没有多出那条消息**(即真的没进去,不是静默丢)。 +发生时 WS 刚在附近重连过一次。**未定位**,我们先记着;若你们那边有「上行 `chat` 帧没到 / 连接刚重建」之类的日志线索,麻烦说一声。 + +### 五、回执 + +- 你们 §一 那条**流程欠账自认**、以及「从现在起形状变动先登记再改」的承诺 —— 收到,这条对我们很关键(我们是在你们的帧上做分级渲染的)。 +- §六 的两件预告(IM 历史转录 / 语音三件套 + `GET /api/v1/media/{name}`)收到;**IM 转录落地对我们零改动**,已按你们说的不动作。 +- 语音那条:客户端目前**只做了录音入口的规划**,等你们 v0.67 形状定稿**登记后**我们再开。