基线 origin/main 0c9b459。publishUp 抛出的不是协议 APIError 时,代码会换新 rid 并清掉 inflight,然后 return。没有调用 drainSendQueue。连接若没有因此断开、hello 也不会再走一遍,send() 的 Promise 一直不结束。rate_limited 路径会 schedule 再泵,传输错误这条没有。
origin/main
0c9b459
publishUp
APIError
rid
return
drainSendQueue
send()
rate_limited
schedule
sdk/js/src/client.ts
!(e instanceof APIError)
schedule(() => void this.drainSendQueue(), wait)
doHello
传输失败且未 stopReconnect 时,换新 rid 后安排 drainSendQueue(可立即或按现有退避)。stopReconnect 时结束这次 send 并返回错误。不要只 return。
stopReconnect
send
补测试:假传输 publishUp 失败一次后,队列会再次发送,且 rid 已变、id / body / send_at_ms 保留。
id
body
send_at_ms
只改 sdk/js/。不要改 Go / Python / Java。不要对同一段等待再乘一次抖动。偏差节 ### 复审修复 R3-05。
sdk/js/
### 复审修复 R3-05
??:feat/fix-r3-69-js-sdk HEAD:7f308001927e9437b5497daa2c8562b1fcc6a920
feat/fix-r3-69-js-sdk
7f308001927e9437b5497daa2c8562b1fcc6a920
finishSendErr
docs/DEVIATIONS.md
? sdk/js ? npm test:4 files / 49 tests ?????
sdk/js
npm test
???,??? main?
main
已合入 main:08c08de (#69);当前 origin/main HEAD 2d1dfd7。
08c08de
2d1dfd7
No dependencies set.
The note is not visible to the blocked user.
现象
基线
origin/main0c9b459。publishUp抛出的不是协议APIError时,代码会换新rid并清掉 inflight,然后return。没有调用drainSendQueue。连接若没有因此断开、hello 也不会再走一遍,send()的 Promise 一直不结束。rate_limited路径会schedule再泵,传输错误这条没有。位置
sdk/js/src/client.ts:发送 catch 里!(e instanceof APIError)的分支rate_limited分支的schedule(() => void this.drainSendQueue(), wait),以及doHello里的唤醒方案
传输失败且未
stopReconnect时,换新rid后安排drainSendQueue(可立即或按现有退避)。stopReconnect时结束这次send并返回错误。不要只return。补测试:假传输
publishUp失败一次后,队列会再次发送,且rid已变、id/body/send_at_ms保留。约束
只改
sdk/js/。不要改 Go / Python / Java。不要对同一段等待再乘一次抖动。偏差节### 复审修复 R3-05。R3-05 ????
??:
feat/fix-r3-69-js-sdkHEAD:
7f308001927e9437b5497daa2c8562b1fcc6a920??
sdk/js/src/client.ts:publishUp?????APIError??stopReconnect?,??rid???drainSendQueue;?stopReconnect?finishSendErr?rid??,id/??/send_at_ms???docs/DEVIATIONS.md??????? R3-05????
?
sdk/js?npm test:4 files / 49 tests ????????,???
main?已合入 main:
08c08de(#69);当前 origin/main HEAD2d1dfd7。