Skip to content

fix: WebSocket モードの subNote 購読を再接続時に replay する#27

Merged
hitalin merged 2 commits into
mainfrom
fix/subnote-replay
Jul 2, 2026
Merged

fix: WebSocket モードの subNote 購読を再接続時に replay する#27
hitalin merged 2 commits into
mainfrom
fix/subnote-replay

Conversation

@hitalin

@hitalin hitalin commented Jul 2, 2026

Copy link
Copy Markdown
Owner

概要

WebSocket モードの sub_noteWsCommand を送るだけで captured_notes に記録していなかったため、再接続(idle watchdog / ネットワークエラー / ネット断)でサーバー側の subNote 購読が失われたまま二度と復元されず、捕捉中ノートの noteUpdated(リアクション・編集等)がサイレントに止まっていた。

notedeck 側 hitalin/notedeck#506 の調査(hitalin/notedeck#640 の二次バグ)で特定されたもの。

変更

  • sub_note / unsub_note は WebSocket / polling 両モード共通で captured_notes テーブルを更新する
  • run_ws_session がチャンネル購読の replay 後に captured_notes からも subNote を再送する
  • disconnect はアカウントの captured_notes も破棄する(subscriptions と同じライフサイクル)
  • 副次効果: realtime→polling のモード切替でも捕捉が引き継がれる(従来は WS モードの捕捉がモード切替で消えていた)

検証

  • cargo check / cargo clippy --all-targets クリーン
  • cargo test 169 件全通過
  • notedeck 側で [patch] によるローカル統合ビルド確認済み

🤖 Generated with Claude Code

hitalin added 2 commits July 2, 2026 10:46
WebSocket モードの sub_note は WsCommand を送るだけで captured_notes に
記録していなかったため、再接続 (idle watchdog / ネットワークエラー) で
サーバー側の subNote 購読が失われたまま二度と復元されず、捕捉中ノートの
noteUpdated (リアクション等) がサイレントに止まっていた。

- sub_note / unsub_note は両モード共通で captured_notes を更新する
- run_ws_session がチャンネル購読の replay 後に captured_notes からも
  subNote を再送する
- disconnect はアカウントの captured_notes も破棄する (subscriptions と
  同じライフサイクル)
- 副次効果: realtime→polling のモード切替でも捕捉が引き継がれる
Misskey の subNote は refcount 式で冪等でないため、replay と切断中に
queue された SubNote コマンドが二重送信されると、unsubNote 1 回では
サーバー側購読が残ってしまう。セッション内で送信済みのノート id を
追跡し、重複送信をスキップする。
@hitalin hitalin merged commit b05e65d into main Jul 2, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant