# log-58 斷流與時間軸診斷
## 已知結果
本次產物為 App `f325435`、HaishinKit `7ce4304b`。2026-10-20 15:54:45 因心跳等待 5 秒無回應而主動斷線;後續四次重連皆卡在 S0S1。第五次重連期間使用者停止,不能將其視為獨立的伺服器拒絕證據。
斷線時擷取與混音仍持續。現有日誌無法區分伺服器未回應、網路中斷或客戶端接收異常,需對照 SRS 同日 15:54:35~15:56:10 的日誌或封包。
## 新增診斷
底層每次心跳探測入列及逾時記錄:
- `probe`、`pendingAgeSeconds`、`pongSupported`:探測編號、等待時間與曾觀測到的 pong 能力。
- `inboundAtProbe`、`inboundNow`:接收監控計數,用來檢查等待期間是否有資料增加。
- `inboundIdleSeconds`:距離最近一次監控觀測到接收量增加的秒數;未知保持 unknown。
- `generation`、`socketGeneration`:連線世代,跨世代不可直接相減。
- `queuedBytes`、`completedBytes`、`failedBatchBytes` 與批次數:整條 socket 的傳輸快照。
`probe queued` 只表示探測交給輸出路徑;完成量不能證明該 ping 已送出,更不代表伺服器已收到。後續已改為接收進展即清除連續失敗;曾回 pong 的對端需連續 3 次探測無回應才判死。維持每 20 秒探測、每次等待 5 秒;尚未新增逐 ping 的傳送完成追蹤。
主 App 將重試中與等待新發布輸出分開顯示;停止或舊工作回呼不再變更本次發布狀態。恢復發布後等待新的 throughput 摘要才重新標示已發布,仍不代表伺服器解碼確認。
## 時間軸問題仍待修正
15:51:46 的影片診斷已有 `maxGap=3.466433`、`clamps=1`,來源經過時間比產生時間多約 3.438 秒;音訊沒有同樣偏移。新增測試重現並確認診斷可揭露縮短,沒有將目前截限演算法認定為正確,也未證明此問題造成心跳斷線。
## 驗收
- 本機已執行 8 組純 Foundation 心跳案例(含接收刷新與連續失敗)及 Swift 語法檢查。
- 使用者於 2026-10-20 確認底層測試通過;主 App ScreenCaptureKit 型別檢查與重連實測仍待接入後 CI/實機驗證。
- 主 App 兩份套件鎖定已接入底層 `99348ac48e8bed6709e2d04775d28adb5d220db9`,包含心跳策略與編譯警告修正。