Repository navigation
feat(computer-use): #785 T15-4w Windows の native で対象ノードの値を読む(能力は false のまま)、J12、アーカイブ済み Task の開始拒否 - #822
Conversation
…roduction で false のまま) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…残らないことを固定する Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
🗺️ PR Walkthrough Note Windows native で対象ノードの値を署名確認後に読み取る処理を追加し、アーカイブ済み Task のセッション開始を拒否します。値読み取り機能は追加されましたが、本番 capability は false のままです。 Changed files (6)
Reviewed by vibe-editor-reviewer — head |
There was a problem hiding this comment.
🧭 Code review
Warning
2 actionable finding(s) — review recommended
| Critical | Warning | Nitpick | Info |
|---|---|---|---|
| 🔴 0 | 🟡 2 | 💬 1 | 💡 0 |
確認内容
- ✅ 変更箇所と関連するコード経路を確認
- ✅ 独立した差分レビュー(Claude)を確認
- ✅ リードが指定した重点ファイルの精査(Claude)を確認
レビュー所感
Windows の読み取り境界、対象の署名検証、キャンセル処理とセッション開始条件を確認しました。対象の再探索による取り違えと、Windows 専用テストが macOS CI で必ず失敗する問題に修正が必要です。判定は固定ソースの静的追跡に基づき、実行検証は行っていません。
🔍 Verification: 全 3 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外
Reviewed by vibe-editor-reviewer — head 09b3b2a
Review coverage & tooling
- Files: 21 reviewed (+1760 / -13)
- Full file bodies included: 0 / 21
- 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 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外
…skip する Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🧭 Code review
Warning
2 actionable finding(s) — review recommended
| Critical | Warning | Nitpick | Info |
|---|---|---|---|
| 🔴 0 | 🟡 2 | 💬 1 | 💡 0 |
確認内容
- ✅ 変更箇所と関連するコード経路を確認
- ✅ 独立した差分レビュー(Claude)を確認
- ✅ リードが指定した重点ファイルの精査(Claude)を確認
レビュー所感
全指定差分と関連する呼び出し元を確認し、値読み取りの認可・機密情報・取消処理と、アーカイブ済み Task の開始拒否を重点的に追跡しました。新規の重大な欠陥は確認できませんでした。実行検証は行っておらず、Windows の時間制限と並行処理は追加精査の対象としています。
⏳ 過去のレビューで指摘済み・未解決のスレッド 3 件(🟡 2 · 💬 1)が open のままです。対応済みであればスレッドを resolve してください(verdict に反映されます)。
Reviewed by vibe-editor-reviewer — head d614a5c
Review coverage & tooling
- Files: 21 reviewed (+1764 / -13)
- Full file bodies included: 0 / 21
- 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)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🧭 Code review
Note
レビュー結果(承認保留)
| Critical | Warning | Nitpick | Info |
|---|---|---|---|
| 🔴 0 | 🟡 0 | 💬 0 | 💡 0 |
確認内容
⚠️ Codexのリポジトリ検査が未完了: 検査処理を完了できませんでした(詳細は実行ログ)⚠️ Claudeのリポジトリ検査は完了せず、固定差分のみ確認: 変更箇所と関連コードが検査量の上限を超過- ✅ 独立した差分レビュー(Claude)を確認
⚠️ Claudeの差分レビューは完了しましたが、Codexのリポジトリ検査が未完了のため、必須の二者レビューが成立せずapprove不可⚠️ Codexの必須レビュアーが利用できなかったためClaudeのdiffベースレビューにフォールバックしました。リポジトリ実体・未変更の呼び出し元は未検査のため、このrunはAPPROVEを発行しません。⚠️ high-risk routeで必須のリポジトリ検査が完了しませんでした。利用可能な縮退レビュー所見は保持しますが、このrunはAPPROVE / REQUEST_CHANGESを発行せずCOMMENTとして投稿します。
レビュー所感
chunk 1: 提供された差分(native の値読み取り ReadWindowsArtifactValue、host の read_node_value、harness ケース)を静的に確認しました。
- 次の流れを追いました。
- 署名照合と判定の後でのみ値を読むこと
- 取り消し、予算、レーン放棄時の値の破棄
- 上限検査
- キャッシュしない応答経路
- この範囲で、根拠付きの具体的な欠陥は見つかりませんでした。
- テストは実行していません。
- 次の定義は差分に含まれず、確認できていません。
WindowsShadowReader::ReadTargetSignature/ReadTargetValueFakeUiaのTick/cancel_afterRespond/JsonEscape- 実機の
WindowsUiaShadowSourceのValue実装(UTF-16 から UTF-8 への変換とバイト上限)
- PR 説明にあるとおり、最終状態での live seam と vitest 全体の再実行は未完了です。
- 特に、取り消しの harness ケース(
artifact-read-canceled-during-the-value-drops-it)は、新しく入った署名読み取りの呼び出し回数に左右される可能性があります。最終状態で harness を再実行して確認してください。; chunk 2: 提示された差分を確認しました。対象は UIA の Value / ControlSignature の追加、computerUseSessionMayStart の切り出し、source 契約テスト、live seam テストです。このうち、実際に起こりうる条件で発生し、変更行に結び付けられる具体的な欠陥は見つかりませんでした。Value は TextPattern を上限+1 文字で読み、超えた場合は拒否します。TextPattern が無い場合だけ ValuePattern を使う順序も、説明どおりです。セッション開始の判定は、アーカイブ済みの Task と getTask が例外を投げた場合に開始を拒否し、それ以外の条件は従来と同じです。これはコードを読んだうえでの判断で、テストは実行していません。また、host.cc、artifact_read.h、ipc.ts の呼び出し側は提示されていないため確認できていません。
Reviewed by vibe-editor-reviewer — head 63e42f8
Review coverage & tooling
- Files: 21 reviewed (+1908 / -13)
- Full file bodies included: 0 / 21
- Diff coverage: ✅ complete; reviewed in 2 chunks
- Reviewer roles: numeric_consistency (deterministic), claude_peer (claude-opus-5-5, fixed-diff only, partial), claude_repository (claude-opus-5-5, fixed-diff only, partial), degraded_route (required repository coverage unavailable; fallback evidence only)
There was a problem hiding this comment.
🧭 Code review
Note
レビュー結果(承認保留)
| Critical | Warning | Nitpick | Info |
|---|---|---|---|
| 🔴 0 | 🟡 0 | 💬 0 | 💡 0 |
確認内容
⚠️ Codexのリポジトリ検査が未完了: 検査処理を完了できませんでした(詳細は実行ログ)⚠️ Claudeのリポジトリ検査は完了せず、固定差分のみ確認: 変更箇所と関連コードが検査量の上限を超過- ✅ 独立した差分レビュー(Claude)を確認
⚠️ Claudeの差分レビューは完了しましたが、Codexのリポジトリ検査が未完了のため、必須の二者レビューが成立せずapprove不可⚠️ Codexの必須レビュアーが利用できなかったためClaudeのdiffベースレビューにフォールバックしました。リポジトリ実体・未変更の呼び出し元は未検査のため、このrunはAPPROVEを発行しません。⚠️ high-risk routeで必須のリポジトリ検査が完了しませんでした。利用可能な縮退レビュー所見は保持しますが、このrunはAPPROVE / REQUEST_CHANGESを発行せずCOMMENTとして投稿します。
レビュー所感
chunk 1: 提供された差分と文脈の範囲を静的に確認しましたが、指摘すべき具体的な欠陥は確認できませんでした。確認した経路は次のとおりです。
- native の読み取り(
ReadWindowsArtifactValue): 対象の探索、署名の照合、判定の門、上限、cancel 時の破棄 - host の
read_node_value: 単一実行のワーカー、待ちを諦めたときの値の消去、エポックと対象の再検証、応答をキャッシュしないこと - harness の新規ケース
なお、本文が提供されていない次の要素の内部の動作は確認していません。テストも実行していません。
WindowsV1UiaPathInterlockWorkerRunningShadowUiaSourceの cancel の計数session.cancel_epochとグローバルなcancellation_epochの関係- TypeScript 側の変更; chunk 2: 提供された差分と文脈の範囲では、具体的な欠陥は確認できませんでした。結果は静的な追跡によるもので、テストは実行していません。確認した内容は次のとおりです。
WindowsUiaShadowSource::Value:TextPattern を優先し、GetText(上限+1)で上限付きに読みます。UTF-16 の 1 単位は UTF-8 で 1 バイト以上になるため、上限を超える値は切り詰めではなく超過として扱われます。TextPattern が無い場合の ValuePattern へのフォールバックも妥当です。ControlSignature:provider が無いとき、または計算結果が空のときは kAbsent を返し、失敗時は kFailed を返します。computerUseSessionMayStart:アーカイブ済みの Task と読めない Task を拒否し、それ以外の条件は従来どおりです。- 新しい source 契約テストと live seam テストも確認しました。
未確認の範囲があります。computer_use_windows_artifact_read.h、host 側のread_node_value実装、shadow reader の変更、ipc.tsの呼び出し側の本文は今回の文脈に含まれていません。そのため、これらの正しさは検証できておらず、この結果をレビュー全体として問題なしとは扱えません。
Reviewed by vibe-editor-reviewer — head 2dba5ab
Review coverage & tooling
- Files: 21 reviewed (+1922 / -13)
- Full file bodies included: 0 / 21
- Diff coverage: ✅ complete; reviewed in 2 chunks
- Reviewer roles: numeric_consistency (deterministic), claude_peer (claude-opus-5-5, fixed-diff only, partial), claude_repository (claude-opus-5-5, fixed-diff only, partial), degraded_route (required repository coverage unavailable; fallback evidence only)
|
/reviewer review |
|
Review pipeline finished (rc=0). |
独立レビューの指摘: 予算の無い経路では、レーンが諦めた後も V1 の探索が続き、interlock と共有する single-flight の枠を握り続けていた。 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
🧭 Code review
Note
レビュー結果(承認保留)
| Critical | Warning | Nitpick | Info |
|---|---|---|---|
| 🔴 0 | 🟡 0 | 💬 0 | 💡 0 |
確認内容
⚠️ Codexのリポジトリ検査が未完了: 検査処理を完了できませんでした(詳細は実行ログ)⚠️ Claudeのリポジトリ検査は完了せず、固定差分のみ確認: 変更箇所と関連コードが検査量の上限を超過- ✅ 独立した差分レビュー(Claude)を確認
⚠️ Claudeの差分レビューは完了しましたが、Codexのリポジトリ検査が未完了のため、必須の二者レビューが成立せずapprove不可⚠️ Codexの必須レビュアーが利用できなかったためClaudeのdiffベースレビューにフォールバックしました。リポジトリ実体・未変更の呼び出し元は未検査のため、このrunはAPPROVEを発行しません。⚠️ high-risk routeで必須のリポジトリ検査が完了しませんでした。利用可能な縮退レビュー所見は保持しますが、このrunはAPPROVE / REQUEST_CHANGESを発行せずCOMMENTとして投稿します。
レビュー所感
chunk 1: 与えられた差分と文脈の範囲を静的に確認しましたが、具体的なトリガーで再現できる重大・警告レベルの欠陥は見つかりませんでした。テストは実行していません。
主に次の点を追いました。
- 新規コミット a8503f6 で、V1 経路にレーンの待ち時間を予算として付けた部分
- 単一実行スロット(running)の取得と解放
- レーンが諦めた後(abandoned)の値の消去
- 署名照合 → 判定 → 値の読み取りの順序と、キャンセルの再確認
- 上限(4096 バイト)の再検証
- 応答をキャッシュしないこと(Respond を使用)
WindowsSession のコピー時の意味、ScrubString、FindWindowsSemanticTarget、WindowsV1UiaPath の実装は差分に含まれていないため、確認できていません。; chunk 2: 提示された差分を確認しました。対象は UIA ソースの Value と ControlSignature、セッション開始ゲートの切り出し、ソース契約テスト、live seam テストです。具体的な欠陥は確認できませんでした。
- Value: TextPattern を先に GetText(上限+1) で読み、無ければ ValuePattern を使います。GetCurrentPatternAs は、パターンが無いとき null で成功を返し、コードはそれを想定しています。超過した値は切り詰めずに判定へ渡ります。
- computerUseSessionMayStart: 次の場合に false を返します。
- アーカイブ済みの Task
- 読めない Task
- Turn の所有者が一致しない
- busy な worker がいる
確認できなかった点:
- ipc.ts、computer_use_windows_artifact_read.h、host.cc の本体は差分にありません。そのため、空値の扱いと、a8503f6 で足したレーン予算の実装そのものは検証していません。
- テストは静的に読んだだけで、実行していません。
Reviewed by vibe-editor-reviewer — head a8503f6
Review coverage & tooling
- Files: 21 reviewed (+1925 / -13)
- Full file bodies included: 0 / 21
- Diff coverage: ✅ complete; reviewed in 2 chunks
- Reviewer roles: numeric_consistency (deterministic), claude_peer (claude-opus-5-5, fixed-diff only, partial), claude_repository (claude-opus-5-5, fixed-diff only, partial), degraded_route (required repository coverage unavailable; fallback evidence only)
独立レビューの指摘: 値の読み取りが shadow の期限を過ぎて返ると、gate は予算切れの印を付けて止まるだけで Canceled() にはならず、その値が ok で返っていた。予算切れと停止も確かめる。harness に期限超過のケースを足し、修正を外すと RED になることを確かめた。 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)を確認
レビュー所感
全差分と関連する呼び出し元を確認し、Windows の署名照合・機密面の拒否・期限切れ応答・セッション開始条件を重点的に追跡しました。重大な欠陥は確認できず、本番の読み取り能力も無効のままです。実行環境がないため、検証は静的確認に限ります。
🛡️ blockingな指摘はありません。bot側の安全設定により、merge-relevantなAPPROVEではなくCOMMENTとして投稿します。
Review coverage & tooling
- Files: 21 reviewed (+1938 / -13)
- Full file bodies included: 0 / 21
- 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 da5089d
…にしない (#824) #820(PR #821)の規則 4 は、270 ms(最初の接触は 470 ms)以上かかって成功した呼び出しを一律に 時間切れとしていた。応答している app でも負荷が高いと 1 回の呼び出しがこの値を超えることがあり、 経路全体が打ち切られて target_unclassified で拒否されていた(PR #821 の CI の deep tree)。 - WindowsV1UiaTimed は、呼び出しが書く出力そのものを受け取り、遅い成功を時間切れとするのは 出力が空のとき(WindowsV1UiaEmpty)だけにする。空の形は型ごとに 1 つ: 要素・pattern・ SAFEARRAY は null、BSTR は null か長さ 0、RECT はすべて 0、値の型(BOOL / int / enum)は 0。 0 が正しい答えでもありうるもの(空の名前、子なし、FALSE、ToggleState_Off など)は、遅ければ 従来どおり時間切れ(fail closed。IsPassword の遅い FALSE を「password ではない」と読まない)。 - 最初の接触(ElementFromHandle / ElementFromPoint / GetFocusedElement)は例外で、遅ければ 要素を返しても時間切れのまま。UI Automation は provider が切れても HWND から要素を作るため (ローカルの live seam で 1026 ms・S_OK・要素ありを観測。成功扱いにすると observe が 2.5 s に 延びた)。 - すべての UIA 呼び出しの呼び出し元が出力を名指しすることを source 契約で数える (ラップ済み 38 == 全 38、渡す出力がその呼び出しの書く変数であること)。 - live seam の C++ に、窓を使わない決定的なケースを足した: 閾値を超えて眠り S_OK と値を返す 呼び出しは成功で経路が続き、空を返す呼び出し(空の BSTR、null の要素、FALSE)と要素を返した 遅い最初の接触は時間切れで経路を終える。 - live seam の 1 ケースの上限を、数えた 1 回の最悪値(Connection 500 + Transaction 300)と 余裕 150 ms の 950 ms にした(host の定数から求め、1 s の Cancel 確認未満を static_assert と 契約で固定)。PR #822 の CI で連鎖が 844 ms で実際に起きて、旧上限(700 ms)で失敗したため。 - host のコメントと ADR の #820 の段落を更新した。 Refs #823 Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
概要
#785 の T15-4w です。Windows の native が、対象のノード 1 つの値を読めるようにします。このほかに小さな作業を 2 つ、別々の commit で入れています。どれも production の能力(
artifactReadSupported)は false のままで、有効にするのは T15-E です。1. T15-4w: Windows の native でノードの値を読む(2c8349f7)
computer_use_windows_artifact_read.hを足しました(ReadWindowsArtifactValue、portable)Capture("copy", targetId)で探します。探し方はセマンティック操作と同じ id の探索です。is_passwordと、classifier の secure / credential で拒否します。名前や class が読めないときはmetadata_complete=falseにします。JudgeArtifactReadに任せます。GetText(上限+1)で上限付きに読んでいます。read_node_valueを足しました。PR-1 と同じ形で、評価ごとに MTA ワーカーを使い、レーンの待ちは 500 ms 以下、UIA は 250 ms です。readNodeValueを足しました。返り値は{ ok: true, text } | { ok: false }に揃えます。余分なキーがある、空、上限を超える、throw した、の場合は拒否します。2. J12:
useComputerUseを mount するテスト(ea119d8a)useComputerUseを、preload API の fake で mount します。copiedの抜粋がカードに出る。3. T15-E の前提 (5): アーカイブ済みの Task ではセッションを始めない(09b3b2a2)
canStartSessionを、computerUseSessionMayStartに切り出しました。computer_startも拒否します。V1 の開始にも効きます。ほかの条件は変えていません。検証
computer-use-windows-artifact-read-live-seam.test.ts(Edit を読む、パスワード / Button / Static / Chrome_WidgetWin_1 / Console を拒否、fixture のダイアログの Edit を読む)留意点
Refs #785
🤖 Generated with Claude Code