docs(05): 锚点补记九——W38 分享「等连接」缺陷已修(四态纯判据 + 只在该发时才取走内容)、W37 设备验证通过、并行误标的设备证据、以及两条测量教训
顺带登记三处未修的小账:告知文案两句叠加、deliver 对未就绪与发失败仍不分、WsState.Offline 缺少专门的措辞。
This commit is contained in:
1 parent
d8228fb315
commit
f15f0bf9bc
1 file changed
+47
-1
+47
-1
@@ -787,4 +787,50 @@ curl -s -X PATCH "$BASE/api/v1/sessions/$SID" -H "Authorization: Bearer $TOK" \
|
||||
> ⇒ 若看到的其实是**底栏那句**「正在思考… 并行 N 路」:那句来自 `ChatUiState.activeTurns > 1`(`ChatScreen.kt:863`),是**另一个信号**;服务端 `session_idle` 用 `busyPayload(…, ModeIdle, 0)` 发 0(`session_orchestrator.go:455`)⇒ 正常情况下会清掉。**若仍能看到,请告诉我,我按 activeTurns 陈旧这条线单独查。**
|
||||
>
|
||||
> ### 最新 debug APK
|
||||
> `app/build/outputs/apk/debug/app-debug.apk`(由 `a2350a6` 构建;**含 W35 分享角标 / W36 角标闸 / W37 字符串形态与告知**)。
|
||||
> `app/build/outputs/apk/debug/app-debug.apk`(**由 `d8228fb` 构建**;含 W35 分享角标 / W36 角标闸 / W37 字符串形态与告知 / **W38 分享等连接**)。
|
||||
|
||||
> ## ★★ 锚点补记九(2026-10-05 夜 · 分享「等连接」缺陷**已修**(W38)+ W37 设备验证通过 + 「并行」误标的设备证据)
|
||||
>
|
||||
> ### 状态
|
||||
> - `android` = `origin/android` = **`d8228fb`**(W38 合并提交;分支提交 `aeb3745`);主树 **1091 测试 / 0 失败 / 0 错误**。
|
||||
> - W38 worktree 已清,`git worktree list` 只剩主树。`02` 工作区仍是**后端会话的在途追加**(本次没动它)。
|
||||
>
|
||||
> ### ✅ W38:分享「等连接」缺陷已修 —— 这处是今天唯一确认的真缺陷
|
||||
> **缺陷**(实机证据链见 `02` 回执十九与补记八):分享消费点把 `withTimeoutOrNull` 的**返回值丢掉** ⇒「等 3 秒没等到」与「等到了」走**同一条下游**:
|
||||
> 照样 `take()` + `sendShared` → WS 未就绪 ⇒ `sendChat` 回 false ⇒ `rollback(localId, "发送失败,请重试")`。
|
||||
> 三个后果:**① 硬错误横幅把「一次都没发出去」说成「发送失败」;② `take()` 原子出队且无归还路径 ⇒ 内容既不在 holder 也不在库里,重试资格丢了;③ effect 键不含连接状态 ⇒ 连接后来恢复也不会补发。**
|
||||
>
|
||||
> **修法**(`aeb3745`,4 files / +277 −20):
|
||||
> - 新增 `ui/chat/ShareLanding.kt`:纯函数 `shareLanding(hasPending, connection, waitedLong, alreadyTold)` → `Nothing / KeepWaiting / TellWaiting / Send`(**返回单值动作 ⇒ 发送与告知在类型上不可能同时发生**)。
|
||||
> - 落地 effect 的键加了**连接状态**(连接一变就重跑判据,**无轮询**);**只在 `Send` 分支才 `take()`**。
|
||||
> - 等太久(3 秒)⇒ 走既有柔和通道 `showShareNotice` 说**一次**「还没连上、会等连上后自动发出」,**不是** error 横幅、**不含**「失败/重试」字样,**抖动不刷屏**。
|
||||
> - `SHARE_CONNECT_TIMEOUT_MILLIS` **改名**为 `SHARE_WAIT_NOTICE_MILLIS`:含义从「到点就照发的发送时限」变成「等多久才值得说一句」,KDoc 明写**不是发送时限**。
|
||||
> - 新增 `ShareLandingTest` 7 例(穷举 `WsState.entries` × 两个标志);**未动**普通发送路径(输入框/图片/附件)、未动 `PendingShareHolder.take()` 的原子语义。
|
||||
>
|
||||
> ⚠️ **还没做真机回归**(子代理禁碰 adb):本批只到「编译 + 单测全绿」。**要在设备上验的三条**:冷启动分享、断网分享后恢复、横幅不再是 error。
|
||||
>
|
||||
> ### ✅ W37 设备验证通过(补记八里说它「只有单测背书」)
|
||||
> 装 `a2350a6` 的包,用 `am start -a SEND_MULTIPLE -t image/png -f 0x00000001 --esa android.intent.extra.STREAM <uri1>,<uri2>`:
|
||||
> - 界面出现告知 **「有 2 个文件读不到,未发送」** ⇒ **App 真的认下了这 2 个字符串形态的流**(W37 生效),只是 adb 给不出读授权所以读不到;
|
||||
> - **App 侧不再有 `Cannot cast [Ljava.lang.String; to android.net.Uri`**(logcat 里剩下的那几条来自 **system_server 的 `ActivityCallerState`**,pid 1315,不是我们的进程)。
|
||||
>
|
||||
> 🐞 **顺带发现一处文案瑕疵(未修,登记)**:这次告知显示成**两句叠在一起** ——「有 2 个文件读不到,未发送**;**分享的内容是空的,没有可发送的内容」。
|
||||
> 前者是「认下了但读不到」,后者是「一条都没认下」,**同时出现读起来像两个不同的问题**(`ChatScreen.kt:905-911` 的拼接顺序)。
|
||||
> 建议:`failedImages/failedDocuments > 0` 时**不再追加**「内容是空的」那句。
|
||||
>
|
||||
> ### ✅ 主人问的「并行档下串行消息也变并行」——**设备证据到手,不会**
|
||||
> 步骤(可复现):设置页切**并行** → 她**空闲** → 用分享投一条普通消息 `serial gate check`,然后看两处:
|
||||
> - **后端日志新增 `parallel leg started` = 0 条**(那条消息只有一个 `turnId`:`turn-780c3aa2`);
|
||||
> - **界面助手气泡 footer 只有「发送至 安卓」,没有「并行路 N」**(含 W36 的包)。
|
||||
> ⇒ 并行档只在**她真的在忙**时才另起一路;空闲时就是串行。**主人若仍看到角标,几乎确定是旧包**(W36 之前 `leg>=2` 就挂标)。
|
||||
>
|
||||
> ### ⚠️ 一条今天的测量教训(差点又误判)
|
||||
> **`adb reverse --remove-all` 不会杀掉已经建立的连接** —— 我用它模拟「断线」,结果那条探测消息**照样落库**(`share-f7cd2374` 的 `offline share probe`)。
|
||||
> ⇒ 想真的把 App 与后端切断,要 **`adb kill-server`**(再 `start-server` + 补回 `adb reverse`)。**别拿「移除转发」当断线。**
|
||||
>
|
||||
> ### 待办(更新)
|
||||
> 1. **W38 的三条真机回归**(冷启动分享 / 断网分享后恢复 / 横幅不是 error)—— 真机或下次环境稳定时做。
|
||||
> 2. **文案瑕疵**(`failed* > 0` 时不再追加「内容是空的」)—— 小改动,与下面两条同区,建议合成一批。
|
||||
> 3. W38 子代理提的三条后续(**未做,待主人定**):① `deliver` 在 WS 未就绪时对**输入栏那条路**仍一律 `rollback(…, "发送失败,请重试")`(「未就绪」与「发失败」仍是两件事);② `WsState.Offline`(不可恢复)目前也走「等 + 连上后自动发出」,会一直等一句永不到来的「连上」,可改成「需要重新登录 / 检查服务器地址」;③ 待发内容只在进程内存里,一直连不上且进程被杀就丢(既有语义)。
|
||||
> 4. **`02` 的 §四/回执十九 仍以「修法方向」口吻描述这处缺陷** —— 下次动 `02` 时补一句「已修 `aeb3745`」(本次没动它,避免与后端会话的在途追加打架)。
|
||||
> 5. 旧账:子会话流程(主人搁置)、图片/工具卡实机验证(后端未配工具)、**相册多选→分享**(图片路径仍需真机)。
|
||||
Reference in new issue
Block a user