Uh oh!
There was an error while loading. Please reload this page.
fix: 孤児 VS Code IPC ソケットで devbase up --open が ECONNREFUSED になる問題を修正 - #100
Merged
Conversation
PR #97 で VSCODE_IPC_HOOK_CLI の実在確認を入れたが、ソケットの死に方には 「ファイルごと消えている」ほかに「ファイルは残っているが listen しているプロセスが 居ない」の 2 通りがある。後者は VS Code のクラッシュ・強制終了・OS 再起動で後始末 されなかった場合に $TMPDIR へ孤児として残り、os.path.exists() では弾けない。 その結果 in_vscode=True と誤判定して code を IPC 経由で起動し、 Unable to connect to VS Code server: Error in request. Error: connect ECONNREFUSED .../vscode-ipc-<uuid>.sock で失敗していた。 - _ipc_socket_alive() を connect ベースに変更 (AF_UNIX / タイムアウト 0.5 秒)。 ENOENT / ECONNREFUSED / EACCES / ENOTSOCK / パス長超過をまとめて「使えない」と扱う - AF_UNIX が無いプラットフォームでは従来どおり実在確認へフォールバック - 警告文を「存在しません」から「接続できません」に改め、ファイルが残っていても 接続を拒否する場合があることを明記 - 孤児ソケット / 通常ファイルのケースを回帰テストに追加。既存の in_vscode テストは 実際に listen する AF_UNIX ソケットを使うよう修正 - docs にソケットの死に方 2 通りを追記。tmux 追随フックの -S guard も孤児ソケットを 検出できない点を注記 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01622CAKyYfonYuZ6AqRJvDg
Uh oh!
There was an error while loading. Please reload this page.
4 tasks
takemi-ohama added a commit
that referenced
this pull request
Aug 19, 2026
PR #100 で devbase 側の判定は connect ベースにしたが、docs が配っている tmux プロンプトフックのサンプルは `test -S` のままだった。-S はファイルの種別しか見ない ため、VS Code の異常終了で残った listen していない孤児ソケットも通過してしまい、 フックが tmux show-environment からの拾い直しを早期 return でスキップする。 その結果、tmux セッション環境には生きたソケットが入っているのに、すでに動いている ペインのシェルだけが古い値を持ち続け、`devbase up --open` が毎回「手元で実行する コマンドの提示」へ degrade していた(実機で再現を確認)。 - サンプルの guard に `nc -U -w 1 <sock> </dev/null` による接続確認を追加。 macOS の nc は -z を付けると Unix ドメインソケットで誤判定するため付けない (生存ソケットで rc=1 になることを実測) - -S を前段に残し、ソケットファイルが無い一般ケースでは nc を起動しないままにする - 孤児ソケットは ls でも test -S でも見分けが付かない旨を本文に明記 - CHANGELOG に Fixed エントリを追加 Claude-Session: https://claude.ai/code/session_01622CAKyYfonYuZ6AqRJvDg Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
devbase upが次のエラーで失敗する報告を受けての修正です。#97 で
VSCODE_IPC_HOOK_CLIの実在確認を入れましたが、ソケットの死に方は 2 通りあり、実在確認では片方しか弾けていませんでした。os.path.exists()FalseTrue後者は
$TMPDIRに孤児ソケットとして溜まり、lsでは生きているものと区別が付きません。これをin_vscode=Trueと誤判定してcodeを IPC 経由で叩くため、ECONNREFUSEDで失敗していました。報告環境の実測でも、エラーに出ている
8d9a04eeはファイルとしては存在する一方で接続は拒否されており、同じ$TMPDIRに生きているソケットと孤児が混在していました。変更点
_ipc_socket_alive()を connect ベースに変更(AF_UNIX/ タイムアウト 0.5 秒)。ENOENT/ECONNREFUSED/EACCES/ENOTSOCK/ パス長超過(ValueError)をまとめて「使えない」と扱うAF_UNIXが無いプラットフォームでは従来どおり実在確認へフォールバックin_vscodeテストは通常ファイルではなく実際に listen するAF_UNIXソケットを使うよう修正docs/user/environment-variables.mdにソケットの死に方 2 通りを追記。tmux 追随フックの-Sguard も孤児ソケットを検出できない点を注記タイムアウトを 0.5 秒にしたのは、生きていれば UNIX ドメインソケットの接続は即座に完了し、
upの最後に走る処理なので体感を優先したためです。動作確認
uv run pytest— 1234 件 green(新規テスト 2 件を含む)ruff check --select=E9,F63,F7,F82 lib(CI と同じ引数)— All checks passedpython -m compileall -q lib bin(CI と同じ)— OK_ipc_socket_aliveを実行し、孤児(存在するが listen なし)→False、生存 →Trueを確認open_editorを実行し、警告が出たうえで IPC を使わない通常のcode --folder-uri起動へ落ちることを確認(ローカル端末ではlaunch、SSH 経路では従来どおりprint_commandへ degrade)回避策(このPRのマージ前)
孤児ソケットを掃除するか、変数を生きているソケットへ張り替えれば回避できます。