Skip to content

fix(computer-use): #820 Windows の V1 のレーンの UI Automation に 500 ms のタイムアウトを付ける - #821

Merged
yusei531642 merged 17 commits into
mainfrom
fix/820-v1-uia-timeout
Oct 17, 2026
Merged

yusei531642 merged 17 commits into
mainfrom
fix/820-v1-uia-timeout

Conversation

@yusei531642

@yusei531642 yusei531642 commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator

概要

Windows の V1 の処理で、レーンの上で呼ぶ UI Automation にタイムアウトを付けます(#820。S5-c-2 計画の R8)。いまはタイムアウトがないので、対象の窓が応答しなくなると、レーンが止まったままになります。

変更

  • computer_use_windows_uia_source.h: CreateBoundedAutomation(timeout_ms, ...) を足しました。
    • CLSID_CUIAutomation8 と IUIAutomation2 を使い、ConnectionTimeout と TransactionTimeout を設定します。
    • PR-1 の WindowsUiaShadowSource::Create も、この関数を使うように共通化しました。動きは同じです。
  • computer_use_windows_host.cc: CreateWindowsV1Automation を足しました。
    • タイムアウトは 500 ms です。
    • IUIAutomation2 を取れないときだけ、従来の CLSID_CUIAutomation(タイムアウトなし)に戻ります。戻った回数を数え、初回だけ OutputDebugStringA に出します。
    • CoCreateInstance(CLSID_CUIAutomation, ...) を直接呼んでいた 8 か所を、このヘルパーに置き換えました。対象は HasUiAutomation、ReadUiaObservation、ClassifyWindowsUiaElement、ClassifyWindowsPoint、ClassifyWindowsFocusedElement、CaptureWindowsControlBindings、WindowsFocusedElementSignature、FindWindowsSemanticTarget です。
    • dispatch と preflight の本体は変えていません。
  • ADR: [bug] Computer Use Windows: V1 のレーンの UI Automation にタイムアウトが無く、応答しない対象でレーンが止まりうる (#500 S5-c-2 R8) #820 の対応を 1 段落で書きました。

500 ms にした理由

  • 応答する app なら、呼び出しは数 ms で終わります。interlock の 250 ms の 2 倍にして、生きているけれど遅い app を「読めない」と扱わないようにしました。
  • 応答しない対象は、1 回の呼び出しで打ち切られます(実測 511〜513 ms)。V1 の経路は最初に読み取りが失敗した時点で結果を決めるので、Cancel の確認の 1 s と、preflight の 10 s に収まります。

失敗したときの扱い(各呼び出し元で確認。V1 の判定の意味は変えていません)

呼び出し元 失敗したとき
ClassifyWindowsPoint / ClassifyWindowsFocusedElement 未分類のリスクになり、target_unclassified で拒否
ReadUiaObservation / CaptureWindowsControlBindings / WindowsFocusedElementSignature 観測の失敗、または stale_target
FindWindowsSemanticTarget target_required / accessibility_unavailable

テスト

  • source 契約で、次を固定しました。
    • host で CLSID_CUIAutomation(8 以外)を作るのは、フォールバックの 1 か所だけ。uia_source.h で CLSID_CUIAutomation8 を作るのも 1 か所だけ。
    • タイムアウトの設定、フォールバックの計数、500 ms と 1 s の関係。
  • live seam(新規 computer-use-windows-v1-uia-timeout-live-seam.test.ts)では、本物の host.cc をコンパイルして使います。
    • 自作の「4.5 秒応答しない窓」に対して V1 の 6 つの経路を呼ぶと、どれも 511〜513 ms で戻り、どれも fail closed になりました。
    • 応答する窓は、通常どおり読めます。
    • タイムアウトを外す変異を入れると、約 4.4 s 止まって失敗しました(RED)。
  • harness は全件 PASS しました。vitest は 329 件が通過しました(computer-use-windows と computer-use-native)。tsc と prettier も問題なく、host は警告なしでビルドできました。

留意点

  • V1 で作る UIA が CUIAutomation8 に変わりました。fixture の journey(署名が必要)では、まだ確かめていません。CI と、人による受入で確かめます。
  • RevalidateWindowsTarget は前面の窓などの前提が多いので、live seam では直接は呼んでいません。中で使っている WindowsFocusedElementSignature を代わりに確かめています。

Refs #820(close は main の CI と反証監査のあとで行う)

🤖 Generated with Claude Code

…WindowsV1Automation にまとめる)

- V1 の UIA 生成 8 か所を CreateWindowsV1Automation に集約し、IUIAutomation2 の Connection/TransactionTimeout を 500 ms に設定
- shadow と共通の CreateBoundedAutomation(CUIAutomation8)を uia_source.h に置く。取れなければ従来どおり(タイムアウトなし)で、回数を数えて記録する
- タイムアウトは各呼び出し元の「読めない」(未分類・false・stale_target)として fail closed
- 応答しない自作の窓に対する live seam(本物の host.cc をコンパイル)と source 契約を追加、ADR に #820 の段落

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sprintreviewer

sprintreviewer Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

🗺️ PR Walkthrough

Note

Windows V1 の UI Automation 呼び出しを共通の生成関数経由にし、IUIAutomation2 の接続・処理タイムアウトと呼び出し経路の停止制御を追加しています。タイムアウトや Cancel 時は既存の fail closed 判定に沿って処理を拒否し、応答が送信済みの操作は未確認として区別します。

Changed files (7)
File Summary
apps/desktop/computer-use-native/computer_use_windows_host.cc V1 の UI Automation 生成、呼び出し計測、observe 予算、Cancel 監視を追加し、各呼び出し元を共通制御下に置いています。
apps/desktop/computer-use-native/computer_use_windows_uia_source.h タイムアウト付き UI Automation を作る共通関数を追加し、shadow source と V1 host で共有しています。
apps/desktop/src/main/computer-use-windows-v1-uia-timeout-live-seam.test.ts 実 host を使う Windows live seam と source 契約を追加し、応答しない対象や通常対象での経路を確認します。
apps/desktop/computer-use-native/computer_use_protocol_fuzz.cc 未読・未分類の V1 リスクが通常の dispatch 許可にならない条件を追加しています。
apps/desktop/src/main/computer-use-native-host.test.ts 未送信の accessibility timeout と、送信後に未確認となった timeout の失敗分類を追加しています。
apps/desktop/src/main/computer-use-windows-shadow-reader.test.ts 共通生成関数と shadow source の利用契約を更新しています。
tasks/designs/adr-computer-use-agent-driven-v2.md ADR に Issue #820 の対応を追記しています。

Reviewed by vibe-editor-reviewer — head 80d6ff5

# Conflicts:
#	tasks/designs/adr-computer-use-agent-driven-v2.md

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Warning

未検証の指摘候補 1 件 — 根拠の確認が必要です

Critical Warning Nitpick Info
🔴 0 🟡 1 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ✅ 独立した差分レビュー(Claude)を確認

レビュー所感

固定 HEAD を確認し、UIA 生成、COM 解放、失敗時の拒否処理と Cancel の直列処理を追跡しました。呼び出し単位のタイムアウトが累積し、想定するレーン応答時間を超える経路が残っています。実行検証は行っていません。

🔍 Verification: 1 件は 未検証の指摘候補(必要な判定・コード根拠の照合が未完了です)。検証による除外や重要度の引き下げは行っていません。

指摘の正しさは未確定です。見逃し防止のため候補と現在の判定を保持しています。

根拠の確認は該当スレッドに返信してください。PR全体の再レビューは /reviewer full review、検証設定の確認は /reviewer config で行えます。既存スレッドは再レビューで自動解決されません。


Reviewed by vibe-editor-reviewer — head 6451ecf

Review coverage & tooling
  • Files: 5 reviewed (+505 / -46)
  • 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)
  • Verification: 1 件は 未検証の指摘候補(必要な判定・コード根拠の照合が未完了です)。検証による除外や重要度の引き下げは行っていません。

Comment thread apps/desktop/computer-use-native/computer_use_windows_host.cc Outdated

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Warning

1 actionable finding(s) — review recommended

Critical Warning Nitpick Info
🔴 0 🟡 1 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ✅ 独立した差分レビュー(Claude)を確認

レビュー所感

指定 HEAD を確認し、UIA 生成、COM の寿命管理、各経路の失敗処理とテストの前提を静的に追跡しました。既報と重複しない新たな重大不具合は確認できませんでした。Windows の実行検証は行っていません。

⏳ 過去のレビューで指摘済み・未解決のスレッド 1 件(🟡 1)が open のままです。対応済みであればスレッドを resolve してください(verdict に反映されます)。


Reviewed by vibe-editor-reviewer — head 74b6ac8

Review coverage & tooling
  • Files: 5 reviewed (+505 / -46)
  • 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)

- 呼び出し 1 回の上限を Connection 500 ms / Transaction 300 ms に分け、経路ごとに最初の時間切れで UIA を呼ぶのをやめる(短い経路は 400 ms の予算、observe は 12 s の予算と cancel の確認)
- ClassifyWindowsUiaElement は読めない要素で親をたどらず、ClassifyWindowsPoint は facts が不完全なら署名を読まず、observe は未分類のフォーカスの署名を読まない
- 理由を accessibility_timeout / observation_timeout / input_timeout_unconfirmed に分ける
- live seam を別プロセスの窓(応答しない窓、普通の窓、途中で止まる native provider)に作り直し、source 契約を強める、ADR を更新

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Warning

3 actionable finding(s) — review recommended

Critical Warning Nitpick Info
🔴 0 🟡 3 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ✅ 独立した差分レビュー(Claude)を確認

レビュー所感

固定 HEAD を確認し、UIA の期限管理、取消し、入力失敗の伝播と関連テストを静的に追跡しました。短い経路の予算確認と semantic target 検索の上限に不足があり、Cancel が期限内に完了しないケースが残ります。実行検証は行っていません。

🔍 Verification: 全 4 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 1 件を反証・重複確認により除外

検証パスで除外された指摘 1 件(反証または重複を確認)
  • apps/desktop/computer-use-native/computer_use_windows_host.cc:3846 — このPRによる導入・悪化ではない — The slow-success traversal and absence of epoch/deadline checks already exist in base. Head preserves the same traversal limits and adds early exits for timeout failures; it does not worsen the candidate's successful sub-timeout response scenario.

Reviewed by vibe-editor-reviewer — head 4bc06d9

Review coverage & tooling
  • Files: 6 reviewed (+1102 / -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)
  • Verification: 全 4 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 1 件を反証・重複確認により除外

Comment thread apps/desktop/computer-use-native/computer_use_windows_host.cc
Comment thread apps/desktop/computer-use-native/computer_use_windows_host.cc Outdated
…の時間切れを検出する(レビュー指摘の反映)

- 短い経路の 400 ms の予算を削除(深い木の live app が未分類になる退行)。経路を打ち切るのは、最初の時間切れと cancellation_epoch の変化だけ。preflight / dispatch の 1 フレームを外側の経路で包み、状態を共有する
- すべての UIA 呼び出しを WindowsV1UiaCall / Contact / Read(cancel・時間切れ・observe 予算の確認と呼び出しの時間の測定)経由にする。timeout の 30 ms 手前以上かかった呼び出しは、S_OK でも時間切れとして扱う(CI で、答えない native provider の observe が 1.5 s かかって成功した件)
- 最悪値を 1 回の呼び出し 500 + 300 = 800 ms で数え直し、コメント・ADR・source 契約(定数どうしの比較)で固定。observe 全体の予算は 25 s(予算切れ時はノード数だけを記録)
- dispatch の共通の後処理が input_timeout_unconfirmed を上書きしないようにする
- live seam: 子プロセスを Job Object と HANDLE_LIST で起動、深い木・入れ子の経路・cancel・理由・semantic dispatch のケースを追加、前面化に失敗したら理由つきで skip、afterAll の rmSync を再試行付きに

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Warning

3 actionable finding(s) — review recommended

Critical Warning Nitpick Info
🔴 0 🟡 3 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ✅ 独立した差分レビュー(Claude)を確認

レビュー所感

固定 HEAD と全差分を確認し、タイムアウト・キャンセルの伝播、入力前の拒否判定、テストの成立条件を追跡しました。semantic action の停止処理の漏れと、Windows の live seam が必ず失敗する初期値に修正が必要です。検証は静的解析のみで、実行はしていません。

🔍 Verification: 全 3 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外


Reviewed by vibe-editor-reviewer — head 12570a5

Review coverage & tooling
  • Files: 6 reviewed (+1432 / -105)
  • Full file bodies included: 0 / 6
  • Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6-astra), claude_peer (claude-opus-5-5, fixed-diff only, partial)
  • Verification: 全 3 件の指摘を検証パス(gpt-6.1-sol / high)でクロスチェック済み(コード引用を固定base/headと照合) — 0 件を反証・重複確認により除外

Comment thread apps/desktop/computer-use-native/computer_use_windows_host.cc
Comment thread apps/desktop/src/main/computer-use-windows-v1-uia-timeout-live-seam.test.ts Outdated
Comment thread apps/desktop/computer-use-native/computer_use_windows_host.cc Outdated
…wrappers

Semantic action patterns/name/state reads use the timed read, side-effecting calls are gated by WindowsV1UiaMayCall, a cut-off child is released, the live seam initializes accepted=false as production does, and the source contract counts every UIA call. Adds a default-risk harness check, job-handle contract and the 200 ms margin / CI measurements to the ADR.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Warning

3 actionable finding(s) — review recommended

Critical Warning Nitpick Info
🔴 0 🟡 3 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ⚠️ 独立した差分レビュー(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ リードが指定した重点ファイルの精査(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ 要求された独立した第二読者が未完了のためapprove不可

レビュー所感

指定された全差分と関連呼び出し元を確認し、タイムアウト・取消しの伝播、入力送信前の拒否、送信後の未確認扱いを重点的に追跡しました。静的確認では、新たに報告すべき重大な不具合は認められませんでした。Windows での実行検証は行っていません。

⏳ 過去のレビューで指摘済み・未解決のスレッド 3 件(🟡 3)が open のままです。対応済みであればスレッドを resolve してください(verdict に反映されます)。


Reviewed by vibe-editor-reviewer — head 2450c68

Review coverage & tooling
  • Files: 7 reviewed (+1625 / -138)
  • Full file bodies included: 0 / 7
  • Diff coverage: ✅ complete; reviewed in 2 chunks
  • Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6-astra)

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Note

レビュー結果(承認保留)

Critical Warning Nitpick Info
🔴 0 🟡 0 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ⚠️ 独立した差分レビュー(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ リードが指定した重点ファイルの精査(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ 要求された独立した第二読者が未完了のためapprove不可

レビュー所感

指定された全差分と関連呼び出し元を確認し、タイムアウト後の拒否、キャンセル状態の共有、入力結果の伝播を重点的に追跡しました。重大な新規不具合を裏付ける根拠は見つかりませんでした。実行検証は行っておらず、Windows 上の時間上限と互換性は静的確認に限ります。


Reviewed by vibe-editor-reviewer — head 3388f83

Review coverage & tooling
  • Files: 7 reviewed (+1644 / -138)
  • Full file bodies included: 0 / 7
  • Diff coverage: ✅ complete; reviewed in 2 chunks
  • Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6-astra)

WindowsV1UiaMayCall は経路が無いとき false を返す(fail closed)。本番の V1 呼び出しはすべて経路の内側から届く。live seam の semantic dispatch も本番と同じく外側の経路の中で呼び、所有者だけがポインタを戻すことを契約テストで固定する。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Note

レビュー結果(承認保留)

Critical Warning Nitpick Info
🔴 0 🟡 0 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ⚠️ 独立した差分レビュー(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ リードが指定した重点ファイルの精査(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ 要求された独立した第二読者が未完了のためapprove不可

レビュー所感

全差分と関連する呼び出し元を確認し、タイムアウト・キャンセルの状態共有、失敗時の拒否、送信済み操作の効果不明扱いを重点的に追跡しました。重大な不具合を裏付ける証拠は見つかりませんでした。実行検証は行っていません。


Reviewed by vibe-editor-reviewer — head af0d3cd

Review coverage & tooling
  • Files: 7 reviewed (+1654 / -138)
  • Full file bodies included: 0 / 7
  • Diff coverage: ✅ complete; reviewed in 2 chunks
  • Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6-astra)

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Note

レビュー結果(承認保留)

Critical Warning Nitpick Info
🔴 0 🟡 0 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ⚠️ 独立した差分レビュー(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ リードが指定した重点ファイルの精査(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ 要求された独立した第二読者が未完了のためapprove不可
  • ⚠️ 既存レビュー指摘を完全取得できないためapprove不可

レビュー所感

全差分と関連呼び出し元を確認し、UIA の停止状態共有、取消し、送信前の拒否と送信後の効果不明の扱いを重点的に追跡しました。静的確認では重大な新規欠陥は認められませんでしたが、Windows 実機でのタイムアウト上限は実行検証していません。


Reviewed by vibe-editor-reviewer — head 1687575

Review coverage & tooling
  • Files: 7 reviewed (+1661 / -138)
  • Full file bodies included: 0 / 7
  • Diff coverage: ✅ complete; reviewed in 2 chunks
  • Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6-astra)

yusei531642 and others added 4 commits October 17, 2026 21:06
…れることを確かめる

830 ms は 1 つずつ測った値の合計で、連鎖は測っていないと書く。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…k の縮退を ADR の既知の限界に書く

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Note

レビュー結果(承認保留)

Critical Warning Nitpick Info
🔴 0 🟡 0 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ⚠️ 独立した差分レビュー(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ リードが指定した重点ファイルの精査(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ 要求された独立した第二読者が未完了のためapprove不可

レビュー所感

固定HEADと全差分を確認し、停止状態の共有、取消し、入力送信前後の失敗処理、COM所有権を追跡しました。確認範囲では、このPRが導入する重大な不具合は特定できませんでした。実行検証は利用できず、Windowsでの時間上限は静的確認のみです。


Reviewed by vibe-editor-reviewer — head 5c90e79

Review coverage & tooling
  • Files: 7 reviewed (+1726 / -138)
  • Full file bodies included: 0 / 7
  • Diff coverage: ✅ complete; reviewed in 2 chunks
  • Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6-astra)

…unclassified のままにする

独立レビューの指摘: 署名を分類の完了で絞ったため、8 段より深い要素など生きているが未分類のフォーカスで署名が null になり、preflight が native_focused_target_changed で拒否していた(エージェントは再 observe を繰り返す)。#820 より前と同じく常に読む。時間切れ・Cancel のあとは経路が呼ばずに拒否する。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@yusei531642

Copy link
Copy Markdown
Collaborator Author

独立した第二読者のレビュー(ReviewBOT の第二読者の代わり)

ReviewBOT の第二読者は、入力容量の上限で毎回完了しませんでした(承認保留)。代わりに、作業に関わっていないレビュアー 2 名(読み取りのみ)が head 5c90e79 の全差分を読み、出た指摘を別の 1 名が反証を試みて検証しました。

  • correctness(COM の解放、経路の寿命と入れ子、停止の論理、ラップ漏れ、理由の対応、accepted): 指摘 0 件
  • behaviour(以前の V1 の流れが誤って fail closed にならないか、契約テストの文字列が C++ と一致するか): 指摘 1 件。反証役が確認し、本物と判断しました。

🤖 Generated with Claude Code

@sprintreviewer sprintreviewer Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧭 Code review

Note

レビュー結果(承認保留)

Critical Warning Nitpick Info
🔴 0 🟡 0 💬 0 💡 0

確認内容

  • ✅ 変更箇所と関連するコード経路を確認
  • ⚠️ 独立した差分レビュー(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ リードが指定した重点ファイルの精査(Claude)のレビューを完了できませんでした: 追加レビューのファイル数・入力容量の上限を超過
  • ⚠️ 要求された独立した第二読者が未完了のためapprove不可

レビュー所感

全差分と関連する呼び出し元を確認し、タイムアウト・Cancel の伝播、入力前の拒否、送信済み操作の効果不明扱い、COM リソース管理を重点的に検証しました。重大な新規不具合は確認できませんでしたが、実行検証は利用できないため、Windows 上の時間上限は静的確認に留まります。


Reviewed by vibe-editor-reviewer — head 80d6ff5

Review coverage & tooling
  • Files: 7 reviewed (+1731 / -138)
  • Full file bodies included: 0 / 7
  • Diff coverage: ✅ complete; reviewed in 2 chunks
  • Reviewer roles: numeric_consistency (deterministic), codex_deep (gpt-6-astra)

@yusei531642
yusei531642 merged commit cc59e6a into main Oct 17, 2026
74 of 78 checks passed
yusei531642 added a commit that referenced this pull request Oct 17, 2026
#820(#821)で経路の外の V1 の UIA 呼び出しは拒否されるようになったため、ワーカーで要求の epoch を持つ WindowsV1UiaPath を張る。最初の時間切れでそれ以降を打ち切り、Cancel は次の呼び出しの前で止める。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
yusei531642 added a commit that referenced this pull request Oct 17, 2026
…e のまま)、J12、アーカイブ済み Task の開始拒否 (#822)

* feat(computer-use): #785 T15-4w Windows の native が対象 1 ノードの値を読む(能力は production で false のまま)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(computer-use): #785 J12 useComputerUse を mount して copied の値がどこにも残らないことを固定する

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(computer-use): #785 T15-E (5) アーカイブ済みの Task ではセッションを始めない

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test(computer-use): #785 T15-4w live seam を Windows 以外では describe ごと skip する

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(computer-use): #785 T15-4w 読む要素の署名を照合し、放棄された値も scrub する

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(computer-use): #785 T15-4w ワーカーの V1 の解決と署名を、境界のある V1 経路の中で行う

#820(#821)で経路の外の V1 の UIA 呼び出しは拒否されるようになったため、ワーカーで要求の epoch を持つ WindowsV1UiaPath を張る。最初の時間切れでそれ以降を打ち切り、Cancel は次の呼び出しの前で止める。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(computer-use): #785 T15-4w 読み取りワーカーの V1 経路にレーンの待ち時間を予算として付ける

独立レビューの指摘: 予算の無い経路では、レーンが諦めた後も V1 の探索が続き、interlock と共有する single-flight の枠を握り続けていた。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(computer-use): #785 T15-4w 期限を過ぎて返った値の読み取りを使わない

独立レビューの指摘: 値の読み取りが shadow の期限を過ぎて返ると、gate は予算切れの印を付けて止まるだけで Canceled() にはならず、その値が ok で返っていた。予算切れと停止も確かめる。harness に期限超過のケースを足し、修正を外すと RED になることを確かめた。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
yusei531642 added a commit that referenced this pull request Oct 17, 2026
…にしない (#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>
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