From 85a922c01bb68e040a96da5a1f5f8bff3fb6d22d Mon Sep 17 00:00:00 2001 From: AskaEth Date: Sun, 4 Oct 2026 22:40:07 +0800 Subject: [PATCH] =?UTF-8?q?docs(ws):=20=E6=9B=B4=E6=AD=A3=20SessionInterru?= =?UTF-8?q?pted.dropped=20=E7=9A=84=E8=BF=87=E6=97=B6=20KDoc=EF=BC=88?= =?UTF-8?q?=E6=9C=AC=E7=AB=AF=E5=85=A8=E9=83=A8=E8=B7=AF=E5=BE=84=E4=B8=8B?= =?UTF-8?q?=E5=AE=83=E6=81=92=E4=B8=BA=200=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 原来的注释写「当前任务取消、pending 清空,dropped 为丢弃条数」——那是 `interrupt` 只有一种形状 (等价于今天的 `scope:"all"`)时的口径。契约 v0.56 起 `scope:"current"` 只取消在跑回合、**保留** 待处理队列,该档 `dropped` 恒为 0。 而本端「追加队列」档一个 interrupt 都不发、「打断」档发的是 `current`(见 feats/W25,cfdc094), 所以 `dropped` 在客户端的全部现实路径里恒为 0 —— 「已打断,丢弃 N 条」那句话在本端根本不可达。 注释里写明这一点,免得后来人照着一句不可达的文档去实现一个用不上的计数。 只改注释,无行为变化。 --- app/src/main/kotlin/top/yeij/cyrene/data/ws/WsEvent.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/top/yeij/cyrene/data/ws/WsEvent.kt b/app/src/main/kotlin/top/yeij/cyrene/data/ws/WsEvent.kt index ff5b766..7486246 100644 --- a/app/src/main/kotlin/top/yeij/cyrene/data/ws/WsEvent.kt +++ b/app/src/main/kotlin/top/yeij/cyrene/data/ws/WsEvent.kt @@ -269,7 +269,15 @@ sealed class WsEvent { override val type: String get() = "session_idle" } - /** 用户打断:当前任务取消、pending 清空,`dropped` 为丢弃条数。 */ + /** + * 用户打断:当前任务取消。 + * + * [dropped] **只在我们发了 `scope:"all"` 时才可能非零**(那档会清空待处理队列,`dropped` = 被清掉的 + * 条数,且 [mode] 为 `idle`);**本端从不发 `all`** —— 「追加队列」档一个 `interrupt` 都不发, + * 「打断」档发的是 `scope:"current"`(只取消在跑回合、**保留**待处理队列)⇒ 在客户端的全部现实路径里 + * [dropped] **恒为 0**(契约 v0.56 明文)。所以「已打断,丢弃 N 条」那句话在本端是**不可达**的, + * 别照着它去实现一个用不上的计数(见 `devdocs/03` §4 的同一条更正)。 + */ data class SessionInterrupted( override val sessionId: String, val mode: String,