Repository navigation
feat(computer-use): #500 S5-c-2 PR-3 Explorer の実ファイル名をフォルダのパスと前方一致の列挙で取る - #818
Conversation
ShellItemPathByName は view の項目の走査をやめ、フォルダのパスを 1 回取り、自分のプロセスの FindFirstFileExW(表示名*) で候補を集め、portable の MatchShellDisplayName で実パスを決める (隠れる拡張子・.lnk の衝突・8.3 名・同名は判定なし)。動作不変。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
🗺️ PR Walkthrough Note Explorer の表示名から実ファイル名を特定する処理を、フォルダを一度列挙して候補だけを照合する方式に変更。リンク先や desktop.ini の影響を確認し、安全性や期限を判断できない場合は判定なしにします。 Changed files (6)
Reviewed by vibe-editor-reviewer — head |
There was a problem hiding this comment.
🧭 Code review
Warning
3 actionable finding(s) — review recommended
| Critical | Warning | Nitpick | Info |
|---|---|---|---|
| 🔴 0 | 🟡 3 | 💬 0 | 💡 0 |
確認内容
- ✅ 変更箇所と関連するコード経路を確認
- ✅ 独立した差分レビュー(Claude)を確認
- ✅ リードが指定した重点ファイルの精査(Claude)を確認
レビュー所感
固定 HEAD を確認し、表示名照合、取消し・期限、実パスが分類へ渡る経路を静的に追跡しました。Explorer のローカライズされた表示名とフォルダの拡張子処理に、従来取得できた実パスを失う回帰があります。実行検証は行っていません。
🔍 Verification: 全 3 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外
Reviewed by vibe-editor-reviewer — head c302e98
Review coverage & tooling
- Files: 5 reviewed (+349 / -63)
- Full file bodies included: 0 / 5
- Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6.1-sol), claude_peer (claude-opus-5-5, fixed-diff only, partial), claude_specialist (claude-opus-5-5, fixed-diff only, partial)
- Verification: 全 3 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外
…・取消し可能な lookup) - 照合を規則から、候補ごとにシェルが出す表示名の比較へ(拡張子・ローカライズ・フォルダ名のドット) - 入口で外す: 空の ID リスト、ISSLOW、UNC/リモート/光学ドライブ、Desktop/PublicDesktop、[LocalizedFileNames] のある desktop.ini - フォルダを 1 回列挙し、前方一致と読み取り専用/system ディレクトリだけシェル名を取る - 待ち切れの lookup に放棄と CancelSynchronousIo を送る Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🧭 Code review
Warning
1 actionable finding(s) — review recommended
| Critical | Warning | Nitpick | Info |
|---|---|---|---|
| 🔴 0 | 🟡 1 | 💬 0 | 💡 0 |
確認内容
- ✅ 変更箇所と関連するコード経路を確認
- ✅ 独立した差分レビュー(Claude)を確認
- ✅ リードが指定した重点ファイルの精査(Claude)を確認
レビュー所感
固定 HEAD を確認し、表示名照合、呼び出し元の分類処理、取消しと単一実行枠の寿命を確認しました。放棄済みの lookup が新しい同期 I/O を開始し、後続の lookup を止める経路があるため修正が必要です。実行検証は行っていません。
🔍 Verification: 全 1 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外
Reviewed by vibe-editor-reviewer — head b0ce45c
Review coverage & tooling
- Files: 5 reviewed (+586 / -66)
- Full file bodies included: 0 / 5
- Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6.1-sol), claude_peer (claude-opus-5-5, fixed-diff only, partial), claude_specialist (claude-opus-5-5, fixed-diff only, partial)
- Verification: 全 1 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外
…の停止確認・リンク/ボリューム判定・純粋関数化) - 解決先は SIGDN_FILESYSPATH の末尾が候補名と一致するときだけ採る(末尾ドット/空白は採らない) - ListItem が SHELLDLL_DefView / UIItemsView の中にあるときだけ shell に尋ねる - 新しい I/O の直前ごとに取消しと期限を確認、KF_FLAG_DONT_VERIFY、GetVolumePathNameW と symlink/mount point の除外 - lookup スレッドを try/catch と RAII で包む - 候補の選び方・desktop.ini 判定・解決名の判定を portable の純粋関数にして harness で固定 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rer-enum # Conflicts: # apps/desktop/computer-use-native/computer_use_protocol_fuzz.cc
There was a problem hiding this comment.
🧭 Code review
Warning
2 actionable finding(s) — review recommended
| Critical | Warning | Nitpick | Info |
|---|---|---|---|
| 🔴 0 | 🟡 2 | 💬 0 | 💡 0 |
確認内容
- ✅ 変更箇所と関連するコード経路を確認
- ✅ 独立した差分レビュー(Claude)を確認
- ✅ リードが指定した重点ファイルの精査(Claude)を確認
レビュー所感
指定 HEAD を確認し、表示名照合、実パス取得、取消しとスレッド終了処理を静的に追跡しました。desktop.ini の読み取りには、ローカル限定の検査を迂回してネットワークへアクセスできる経路があり、修正が必要です。実行検証は行っていません。
🔍 Verification: 全 1 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外
⏳ 過去のレビューで指摘済み・未解決のスレッド 1 件(🟡 1)が open のままです。対応済みであればスレッドを resolve してください(verdict に反映されます)。
Reviewed by vibe-editor-reviewer — head c11f156
Review coverage & tooling
- Files: 6 reviewed (+938 / -91)
- Full file bodies included: 0 / 6
- Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6.1-sol), claude_peer (claude-opus-5-5, fixed-diff only, partial), claude_specialist (claude-opus-5-5, fixed-diff only, partial)
- Verification: 全 1 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外
…扱い・I/O 前の停止確認・ドライブ判定の 2 段階化) - desktop.ini は読み取り専用/system のフォルダでだけ読み、desktop.ini 自体が reparse point なら読まずに「あり」とする - symlink / mount point の候補は表示名を取らず unknown にする - GetDriveTypeW(先頭 3 文字) を I/O なしで先に判定し、その後に GetVolumePathNameW - ShellFolderMayBeListed / ShellPathHasLink / desktop.ini の各 I/O の前に取消しと期限を確認 - 候補上限・TOCTOU・マウントルートのコメント、列挙ループを ShellLookupMustStop に統一 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ Code review
Tip
LGTM — actionable issues were not found.
確認内容
- ✅ 変更箇所と関連するコード経路を確認
- ✅ 独立した差分レビュー(Claude)を確認
- ✅ リードが指定した重点ファイルの精査(Claude)を確認
レビュー所感
固定 HEAD の一致を確認し、表示名から実パスへの照合、リンク・desktop.ini の扱い、非同期 lookup の停止と既存呼び出し側を確認しました。静的に追跡した範囲では、本 PR が導入する重大な再現可能欠陥は確定しませんでした。実行時検証は行っていません。
🛡️ blockingな指摘はありません。bot側の安全設定により、merge-relevantなAPPROVEではなくCOMMENTとして投稿します。
Review coverage & tooling
- Files: 6 reviewed (+1146 / -95)
- Full file bodies included: 0 / 6
- Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6.1-sol), claude_peer (claude-opus-5-5, fixed-diff only, partial), claude_specialist (claude-opus-5-5, fixed-diff only, partial)
Reviewed by vibe-editor-reviewer — head dca9240
…ディレクトリの desktop.ini・リンクの緩和と順序) - desktop.ini は CreateFileW(FILE_FLAG_OPEN_REPARSE_POINT) で 1 回だけ開き、同じハンドルで reparse 判定・64 KB 上限・読み取りを行い、自前のパーサ (UTF-16/ANSI) で判定する - 読み取り専用/system の候補ディレクトリは、シェルに尋ねる前にその desktop.ini を読み、UNC/非ローカルのリソース参照や CLSID があれば unknown にする - パスのリンク確認をドライブのルートから先に行い、その後に GetVolumePathNameW。ローカルを指すジャンクションは通す - リンクは IsReparseTagNameSurrogate (bit 29) で判定、リンクの候補は matcher で一致させず、見つけた時点で全体を判定なしにする - フォルダに対するシェル呼び出しの前にも取消しと期限を確認、kAbsent と kNoShellMatch の対応のコメント Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🧭 Code review
Caution
未検証の指摘候補 3 件 — 根拠の確認が必要です
| Critical | Warning | Nitpick | Info |
|---|---|---|---|
| 🔴 2 | 🟡 1 | 💬 0 | 💡 0 |
確認内容
- ✅ 変更箇所と関連するコード経路を確認
- ✅ 独立した差分レビュー(Claude)を確認
- ✅ リードが指定した重点ファイルの精査(Claude)を確認
レビュー所感
全差分と関連呼び出しを静的に確認し、表示名の照合、リンク・desktop.ini、キャンセル境界を重点的に追いました。junction の検査を迂回してネットワークへ到達する経路があり、修正が必要です。実行検証は行っていません。
🔍 Verification: 3 件は 未検証の指摘候補(必要な判定・コード根拠の照合が未完了です)。検証による除外や重要度の引き下げは行っていません。
指摘の正しさは未確定です。見逃し防止のため候補と現在の判定を保持しています。
根拠の確認は該当スレッドに返信してください。PR全体の再レビューは /reviewer full review、検証設定の確認は /reviewer config で行えます。既存スレッドは再レビューで自動解決されません。
Reviewed by vibe-editor-reviewer — head 0f30d81
Review coverage & tooling
- Files: 6 reviewed (+1860 / -95)
- Full file bodies included: 0 / 6
- Diff coverage: ✅ complete; reviewed in 2 chunks
- Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6-astra), claude_peer (claude-opus-5-5, fixed-diff only, partial), claude_specialist (claude-opus-5-5, fixed-diff only, partial)
- Verification: 3 件は 未検証の指摘候補(必要な判定・コード根拠の照合が未完了です)。検証による除外や重要度の引き下げは行っていません。
…ni の許可リスト・ドライブルート) - ジャンクションの行き先のパスも、ドライブのルートから要素ごとにリンクを確認する(深さ 1、再帰しない) - desktop.ini の値は拒否リストをやめ許可リストにする(両方の引用符を外し、プレーンテキストか既知の環境変数で始まるパスだけ。X:\ の絶対パスは外す) - ドライブのルートで directory の区切りが二重になり全候補が unknown になる不具合を ShellDirectoryWithSeparator で修正 - 実行されない is_link の continue を削除、古いコメントを修正、ADR を更新 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…クを実装に合わせる Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
✅ Code review
Tip
LGTM — actionable issues were not found.
確認内容
- ✅ 変更箇所と関連するコード経路を確認
- ✅ 独立した差分レビュー(Claude)を確認
- ✅ リードが指定した重点ファイルの精査(Claude)を確認
レビュー所感
全7差分と関連する呼び出し元を確認し、名前照合、desktop.ini・リンクの信頼境界、取消しとスレッド寿命を重点的に調査しました。重大な新規不具合を裏付ける証拠はなく、取得不能時に判定なしへ戻る経路も確認しました。実行検証は行っていません。
🛡️ blockingな指摘はありません。bot側の安全設定により、merge-relevantなAPPROVEではなくCOMMENTとして投稿します。
Review coverage & tooling
- Files: 6 reviewed (+1951 / -95)
- Full file bodies included: 0 / 6
- Diff coverage: ✅ complete; reviewed in 2 chunks
- Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6-astra), claude_peer (claude-opus-5-5, fixed-diff only, partial), claude_specialist (claude-opus-5-5, fixed-diff only, partial)
Reviewed by vibe-editor-reviewer — head fa9f4a6
概要
#500 S5-c-2 の PR-3 です。Explorer の項目の実ファイル名を、フォルダのパスを 1 回だけ取り、自分のプロセスで前方一致の列挙をして照合する方式に変えます。
#777 の実測では、旧方式が全項目を走査して名前が一意かを確かめていたため、項目が約 100 を超えるフォルダでは内側の予算 60 ms を超えていました。その結果、そうしたフォルダでは常に「判定なし」になり、E1 が効きませんでした。拒否はまだ有効にしていません(PR-5 で有効にします)。
変更
computer_use_windows_shell_name_match.h(portable)MatchShellDisplayName(display, candidates, extensions_shown, equals)を置きました。.+ 拡張子 1 つ」のうち、Explorer が隠しうるもの。拡張子を隠す設定ではどの拡張子でも候補にし、表示する設定では lnk / url / pif / scf / shb / appref-ms / library-ms だけを候補にします。CompareStringOrdinal)。長い名前で比べるので、8.3 名だけで一致したものは外れます。computer_use_windows_uia_source.hのShellItemPathByNameSHGetIDListFromObjectとSHGetPathFromIDListEx)。検索、ライブラリ、PC など、ファイルシステムでない場所は kAbsent です。FindFirstFileExW(folder\display*, FindExInfoBasic, FIND_FIRST_EX_LARGE_FETCH)を呼びます。項目ごとに still_valid と期限を確かめます。SSF_SHOWEXTENSIONSで読みます。フォルダかどうかはFILE_ATTRIBUTE_DIRECTORYで判断します。IFolderView2::Itemの走査とkShellLookupMaxItemsは廃止しました。CheckWindowsShellNameMatchを足しました。検証
computer-use-windowsとcomputer-use-native)は 313 件が通りました。tsc と prettier も通り、host.cc は警告なくビルドできました。run.bat、フォルダ、dup.pdfとdup.pdf.exeが並ぶ場合(完全一致 1 件)は、いずれも正しく取れました。存在しない名前は kAbsent です。留意点
.lnkは、実機では試していません(開発機の設定を変えないため)。harness の表で確かめています。Refs #500
🤖 Generated with Claude Code