Skip to content

Release v1.4.3#697

Merged
hitalin merged 3 commits into
mainfrom
develop
Jul 2, 2026
Merged

Release v1.4.3#697
hitalin merged 3 commits into
mainfrom
develop

Conversation

@hitalin

@hitalin hitalin commented Jul 2, 2026

Copy link
Copy Markdown
Collaborator

v1.4.3

Android で WebSocket ストリーミングが一度も動いていなかった真因の修正。

変更一覧

真因 (4 方向コード精査 + vendored source 裏取りで確定)

notecli の WebSocket が rustls-tls-native-roots のみで、Android では root 証明書の探索が Termux 専用パスしか見ず 0 件 → 全 wss:// 接続が TLS 段階で必ず失敗。さらに notecli の再接続ループは初回接続成功後にしか起動しないため、失敗は無音で恒久化していた。REST (reqwest = webpki-roots 同梱) は正常、デスクトップ (OS 証明書ストア) も正常 — 実機の全観測と整合。Android の WS ストリーミングは最初から一度も動いていなかった

修正

  1. notecli fix: Android で全 wss:// 接続が失敗する問題を webpki-roots で修正 notecli#28: rustls-tls-webpki-roots 併用。native certs 0 件時に Mozilla 同梱ルートへフォールバック (REST と同じ信頼モデル)。デスクトップは native 優先のまま
  2. 起動 race 除去: StreamingManager の manage を emit_accounts_early より前に移動 ("state not managed" 即死の排除)
  3. 購読の自己回復: query 購読 open() の一発死を Equal Jitter バックオフ (cap 30s) の再試行ループに。「初回失敗 = 永久沈黙」クラスを根絶

v1.4.1/v1.4.2 の修正 (visibility 復元 / リスナー再アタッチ / 復帰シグナル / backlog 補填) は「WS 確立後」の防御層として有効で、本修正により初めて機能する。

検証

  • Cargo.lock で tokio-tungstenite → webpki-roots 0.26.11 の解決を確認
  • tokio-tungstenite 0.26.2 tls.rs のフォールバック実装を直接確認
  • vitest 1135 件 / cargo check / typecheck / biome 通過

注意

🤖 Generated with Claude Code

hitalin and others added 3 commits July 2, 2026 14:28
コード精査で確定した 2 つの構造欠陥への対処:

- StreamingManager の manage が emit_accounts_early の後にあり、
  アカウント一覧を受けた JS が即 query_subscribe_* を invoke すると
  "state not managed" で即死する race があった。manage を前に移動
- query 購読の open() は一度失敗すると再試行経路がなく、WS が後で
  復活しても Rust 側に購読が存在せず replay 対象にならないため
  「WS connected 表示なのにイベント永久ゼロ」に固定されていた。
  notecli の再接続ループと同じ Equal Jitter バックオフ (cap 30s、
  dispose で中断) で成功するまで再試行する自己回復ループに変更

Android で全 wss:// が失敗する主因 (TLS ルート証明書) は notecli 側
notedeck-dev/notecli#28 で修正。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@hitalin hitalin self-assigned this Jul 2, 2026
@hitalin
hitalin merged commit 01c5c4a into main Jul 2, 2026
3 checks 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