Skip to content

feat(autopilot): worker が headless Playwright で動作確認まで完結できるようにする #891

Description

@smalruby3-editor-bot

背景(調査で確定した事実)

worker(コンテナ内 claude)が headless Playwright で動作確認できることを実証した:

  • Playwright 1.59.1 + bundled chromium(chromium_headless_shell 含む)インストール済み。worktree からも
    symlink 経由で解決、ブラウザキャッシュは ~/.cache/ms-playwright(HOME 共有)。
  • スモークテスト成功: headless で稼働中 monitor を開き、title / DOM / スクショ取得まで完動。

しかし現状は 「worker は動作確認できない」前提で設計されており、これが障害:

  1. docs/autopilot/autonomous-contract.md / docs/autopilot/README.md「コンテナ内 daemon が
    headless で実ブラウザを動かせない」
    と明記 → DoD を daemon のテンプレコメント生成 →
    ホスト側 headful Claude 引き継ぎにしている。一般的な UI 確認についてはこの前提は誤り
  2. tools/autopilot/prompts/autopilot-verify.md「Playwright MCP」で確認と指示。しかし
    Playwright MCP は host Chrome 依存でコンテナ内では失敗Chromium distribution 'chrome' is not found)。worker が MCP を使うと失敗する。

目的

worker(verify / review フェーズ)が playwright パッケージ(bundled chromium・headless)
自分で動作確認まで完結できるようにする。

変更方針

1. autopilot-verify.md(検証手順を headless playwright に)

  • 「Playwright MCP」の記述を削除し、playwright パッケージを headless で使う手順に置換
    tools/playwright-verify/*.mjs と同じ launch パターン: chromium.launch({ headless: true }))。
  • スクショは tmp/ 配下。DOM 取得・クリック・getBoundingClientRect 等で DoD 項目を検証。
  • UI 種別で分岐:
    • 自己完結ページ(autopilot monitor 等): dev server 不要。daemon の http://localhost:8787/
      MONITOR_HTML を静的 serve して確認。
    • scratch-gui の UI: dev server(localhost:8601)が必要。起動は重い(webpack)ので、
      プレビュー URL があればそれを優先、無ければ dev server を起動して待機してから確認。
    • 音 / autoplay 依存: headless chromium では信用できない(e2e-test.md の既知事項)→
      実 Chrome が要るため ホスト/人間へ引き継ぎ(従来どおり)。
  • 判定できない/確認 NG のときは HITL か address-review へ戻す(既存の出口を踏襲)。

2. 契約 / README の前提更新

  • autonomous-contract.md / README.md の **「headless で実ブラウザを動かせない」**を
    「一般 UI 確認は headless(bundled chromium)で可能。dev server 要否は UI 種別で判断。
    音/autoplay など実 Chrome 必須のケースのみホスト引き継ぎ」
    に更新。
  • DoD の headful 引き継ぎ(applyDodHandoffs)は 音/autoplay 等の限定ケースに縮小(廃止では
    なく、対象を明確化)。一般 UI は verify フェーズが headless で自己完結。

3. worker が使いやすいヘルパー(任意・推奨)

  • 共通の headless launch を薄く包む小さなヘルパー(例 tools/autopilot/bin/pw-check
    スニペット)を用意し、verify プロンプトから参照できるようにする(bundled chromium 固定・
    スクショ tmp/・タイムアウト既定)。過剰なら手順文書のみでも可。

制約 / 注意

  • Playwright MCP は使わない(host Chrome 依存でコンテナ不可)。必ず playwright パッケージ headless。
  • dev server 起動は重いので、プレビュー URL があれば優先。無闇に毎回ビルドしない。
  • 音/autoplay の最終確認は実 Chrome(ホスト)— headless で「OK」と誤判定しない。

DoD

  • autopilot-verify.md が headless playwright パッケージ手順に更新(MCP 記述を除去)
  • UI 種別(自己完結 / scratch-gui / 音系)で確認手順が分岐している
  • autonomous-contract.md / README.md の「headless で動かせない」前提が更新されている
  • (ヘルパーを作る場合)node --test 緑・スクショが tmp/ に出る
  • 実際に autopilot monitor の自己完結ページを headless で確認する例が手順に含まれる

Metadata

Metadata

Assignees

Labels

🤖 autopilotautopilot が処理対象にした Issue/PR(daemon が付与)

Type

No type

Fields

No fields configured for issues without a type.

Projects

Status
Close

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions