背景(調査で確定した事実)
worker(コンテナ内 claude)が headless Playwright で動作確認できることを実証した:
- Playwright
1.59.1 + bundled chromium(chromium_headless_shell 含む)インストール済み。worktree からも
symlink 経由で解決、ブラウザキャッシュは ~/.cache/ms-playwright(HOME 共有)。
- スモークテスト成功: headless で稼働中 monitor を開き、
title / DOM / スクショ取得まで完動。
しかし現状は 「worker は動作確認できない」前提で設計されており、これが障害:
docs/autopilot/autonomous-contract.md / docs/autopilot/README.md に 「コンテナ内 daemon が
headless で実ブラウザを動かせない」 と明記 → DoD を daemon のテンプレコメント生成 →
ホスト側 headful Claude 引き継ぎにしている。一般的な UI 確認についてはこの前提は誤り。
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
背景(調査で確定した事実)
worker(コンテナ内 claude)が headless Playwright で動作確認できることを実証した:
1.59.1+ bundled chromium(chromium_headless_shell含む)インストール済み。worktree からもsymlink 経由で解決、ブラウザキャッシュは
~/.cache/ms-playwright(HOME 共有)。title/ DOM / スクショ取得まで完動。しかし現状は 「worker は動作確認できない」前提で設計されており、これが障害:
docs/autopilot/autonomous-contract.md/docs/autopilot/README.mdに 「コンテナ内 daemon がheadless で実ブラウザを動かせない」 と明記 → DoD を daemon のテンプレコメント生成 →
ホスト側 headful Claude 引き継ぎにしている。一般的な UI 確認についてはこの前提は誤り。
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パッケージを headless で使う手順に置換(
tools/playwright-verify/*.mjsと同じ launch パターン:chromium.launch({ headless: true }))。tmp/配下。DOM 取得・クリック・getBoundingClientRect等で DoD 項目を検証。http://localhost:8787/や
MONITOR_HTMLを静的 serve して確認。localhost:8601)が必要。起動は重い(webpack)ので、プレビュー URL があればそれを優先、無ければ dev server を起動して待機してから確認。
e2e-test.mdの既知事項)→実 Chrome が要るため ホスト/人間へ引き継ぎ(従来どおり)。
2. 契約 / README の前提更新
autonomous-contract.md/README.mdの **「headless で実ブラウザを動かせない」**を「一般 UI 確認は headless(bundled chromium)で可能。dev server 要否は UI 種別で判断。
音/autoplay など実 Chrome 必須のケースのみホスト引き継ぎ」 に更新。
applyDodHandoffs)は 音/autoplay 等の限定ケースに縮小(廃止ではなく、対象を明確化)。一般 UI は verify フェーズが headless で自己完結。
3. worker が使いやすいヘルパー(任意・推奨)
tools/autopilot/bin/pw-checkかスニペット)を用意し、verify プロンプトから参照できるようにする(bundled chromium 固定・
スクショ tmp/・タイムアウト既定)。過剰なら手順文書のみでも可。
制約 / 注意
playwrightパッケージ headless。DoD
autopilot-verify.mdが headlessplaywrightパッケージ手順に更新(MCP 記述を除去)autonomous-contract.md/README.mdの「headless で動かせない」前提が更新されているnode --test緑・スクショがtmp/に出る