# memory: instinct-which-returns-none-on-empty-path

shutil.which は PATH が空文字列だと os.defpath へフォールバックせず None を返す。git hook / cron から起きたプロセスがこれを踏むと、/usr/bin/bwrap が実在するのに None が返る。xreview は「bwrap が無ければレビュアーを走らせない」fail-closed だったため、実体があるのに 73 回空振りしていた。外部バイナリの存在判定は which の結果を鵜呑みにせず、既知の絶対パス候補を続けて見る。

## ポイント
- shutil.which は PATH が空文字列だと os.defpath へフォールバックせず None を返す
- git hook / cron から起きたプロセスがこれを踏むと、/usr/bin/bwrap が実在するのに None が返る
- xreview は「bwrap が無ければレビュアーを走らせない」fail-closed だったため、実体があるのに 73 回空振りしていた
- 外部バイナリの存在判定は which の結果を鵜呑みにせず、既知の絶対パス候補を続けて見る

## 関連ページ
[[[[instinct-agentd-cron-npm-global-path]]]]

## 関連概念(未作成)
`外部バイナリの存在判定` `絶対パス候補` `fail-closed`