Skip to content

feat(autopilot): DoD フェーズを headful 引き継ぎ生成に再定義(verify はホスト Claude へ渡す) #821

Description

@smalruby3-editor-bot

概要

DoD フェーズを headful 検証のホスト引き継ぎ生成として autopilot に内製化する。コンテナ内 daemon は
headless でブラウザを動かせないため、ホスト側の Claude(headful Playwright)に渡す引き継ぎコメントを
daemon が生成・投稿
する。手動実演済み: PR #818
コメント #818 (comment) を内製化する。

重要: 実装は daemon コード側で行う(.claude/ を編集しない)

verify スキル.claude/skills/autopilot-verify/SKILL.md)の書き換えは .claude/ 編集となり、
autopilot 自身の implement が確認プロンプトで止まる(#820.claude/ の編集物は外へ出したが、
スキル本体は依然 .claude/)。そこで handoff 生成を daemon の JS(tools/autopilot/)側の
テンプレート生成
として実装する。child Claude を起動せず、純粋な I/O + 文字列テンプレートで完結。
→ 実装が触るのは tools/autopilot/ + docs/autopilot/ + tests のみ= .claude/ 不触で無人完走できる。

(既存の autopilot-verify スキルは手動 inject 用に残してよい。自動経路はこの daemon 生成を使う。)

期待する振る舞い

トリガ: Review → DoD(board 移動)

人間が「コードはOK、次は DoD 検証」と判断して Status を Review→DoD にする。

daemon: DoD 引き継ぎ生成(tick ステップ・child Claude 不要)

Status=DoD かつ autopilot:dod-handoff コメントが未投稿 の leaf(Issue) について、daemon が:

  1. 連携 PR と Issue 本文の DoD チェックリスト を取得。
  2. プレビュー URL を PR の CI コメント(https://smalruby.jp/smalruby3-editor/<branch>/)から拾う。
  3. CI 状態を確認。赤なら handoff を出さず HITL コメントで Review に戻す(任意)。
  4. テンプレートで引き継ぎ本文を生成して autopilot:dod-handoff マーカー付きコメントを投稿:
    • プレビュー URL(headful 確認先)
    • Issue の DoD チェックリストをそのまま転記
    • 定型の headful 手順雛形(?no_beforeunload=1、スクショは tmp/docs/<feature>/screenshots/
      秘密情報は本文に書かずローカル .env 参照、本番 Chrome で確認)
    • 報告の出口(後述)
  5. sticky(autopilot:sticky)には「DoD 引き継ぎあり(↑コメント)」の 1 行ポインタを足す。
  6. 🙋 HITL を維持(ホスト/人間の番)。冪等: 既に autopilot:dod-handoff があれば再投稿しない。

報告の出口(ホスト Claude → 人間)

  • OK → 人間が merge → 既存 merge-progression が leaf を Close。
  • NG → ホストが PR にコメントし 🙋 HITL を外す → DoD 解除 → address-review に差し戻し
    (Review と対称。phaseForItem に DoD 解除パスを追加)。

変更対象(実装方針・すべて .claude/ の外)

  • tools/autopilot/src/phases.js
    • 純粋関数 dodHandoffBody({issue, pr, previewUrl, dodChecklist})(テンプレート生成)。
    • 純粋関数 needsDodHandoff(item, {hasHandoffComment})(DoD + 未生成 + PR あり → true)。
    • phaseForItem: DoD で 🙋 解除 → address-review(NG 差し戻し。OR セマンティクスは Review と同じ)。
  • tools/autopilot/src/project.js: PR の CI コメントからプレビュー URL を拾うヘルパー、
    autopilot:dod-handoff コメントの有無検出(listIssueComments 流用)。
  • tools/autopilot/src/daemon.js: tick に applyDodHandoffs(items, cfg, state, log, deps) を追加
    (injection 可能にして node:test で検証)。sticky に DoD ポインタ。
  • docs/autopilot/autonomous-contract.md / README.md: DoD 節を「daemon が headful 引き継ぎを生成」
    「DoD 解除 → address-review」に更新。
  • tests(node:test): dodHandoffBody / needsDodHandoff / phaseForItem の DoD 解除分岐 / 冪等性。

DoD

  • Review→DoD にすると、UI PR に autopilot:dod-handoff 引き継ぎコメントが 1 回だけ投稿される
  • 引き継ぎに「プレビュー URL + Issue の DoD チェックリスト + 定型 headful 手順 + 報告の出口」が含まれる
  • sticky に DoD 引き継ぎへのポインタが出る(sticky 本体は上書きされない別コメント)
  • DoD で 🙋 を外すと address-review に差し戻る
  • 生成は冪等(二重投稿しない)
  • phases の純粋関数テストを追加し cd tools/autopilot && node --test
  • contract/README の DoD 節を更新

備考

Metadata

Metadata

Assignees

No one assigned

    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