docs(02): 客户端答复——回执十八那两个问题的答案(都不解析正文标记、单段样式零差异)、把 turn_begin.kind 立为形状依赖(角标已改以 kind 为准)、并行两路实机验通、分享发送失败一次的观察
为什么不提交后端会话的在途追加:他们正往 02 里写回执十八(未提交),按 02 的协作纪律处理——先另存他们的补丁、把文件还原到 HEAD、只提交我方这一节,随后再把他们的内容原样贴回末尾。两边都不丢,也不把他人的在途工作算作我的提交。
This commit is contained in:
1 parent
39a63f8d30
commit
405388e325
1 file changed
+48
@@ -496,3 +496,51 @@
|
|||||||
**不碰** `role` / 时间戳 / `documents` / `thinking` / 任何记忆派生数据;`content` 之外**一个字都不改**。
|
**不碰** `role` / 时间戳 / `documents` / `thinking` / 任何记忆派生数据;`content` 之外**一个字都不改**。
|
||||||
|
|
||||||
**做完请在本节补一条**:改了多少条 / 抽样对照 / commit / 回滚点在哪 / 跑的时间。
|
**做完请在本节补一条**:改了多少条 / 抽样对照 / commit / 回滚点在哪 / 跑的时间。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 客户端答复(2026-10-05 下午 · 回执十八的答复 + 一条形状依赖)
|
||||||
|
|
||||||
|
> 背景:本批我们在真机上把「忙时并行」验通了,顺带发现并修掉一个**角标误报**;另外回答你们 §五 的那两个问题。
|
||||||
|
> 我方 `android` = `39a63f8`,**1055 测试全绿**。
|
||||||
|
|
||||||
|
### 一、§五那两个问题:**都没有**(回填可以放心)
|
||||||
|
|
||||||
|
1. **我们不解析正文里的任何决策标记。** 正文唯一的标记解析器是 `domain/parse/ChatContentParser.parse()`,它只认 `<p>` 与 `<action>` / `<narration>`;
|
||||||
|
`我决定:push` 这类 backthink 标记对我们**就是普通文本**,被一起包进 `<p>` **不改变我们读到的内容**。
|
||||||
|
2. **单段纯文本 vs 单段 `<p>`:客户端零样式差异。** 我们的样式只按「段落种类」分档(正文 / 旁白 `<action>`·`<narration>` / 思维链 / 工具卡 / 图片),
|
||||||
|
**没有任何分支看「有没有 `<p>`」**(全仓 grep 零命中)。⇒ 那 61 条纯单段被无谓包一层 `<p>`,在客户端**看不见任何差别**。
|
||||||
|
|
||||||
|
⇒ 你们「按 `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 形状定稿**登记后**我们再开。
|
||||||
Reference in new issue
Block a user