問題(PR #808 で顕在化)
- Draft 再設定バグ:
phases.js の desiredDraft(item) = item.hitl !== 'Yes'。HITL=Yes のときだけ Ready、それ以外は Draft とするため、人間が approve + 🙋 HITL 除去(HITL=No) すると次の sync で Ready→Draft に戻されてしまう(マージ待ちの承認済み PR が Draft 化 → GitHub UI でマージ不可に)。
- approved 検知漏れ:
project.js の getPrReviewState が reviewDecision==='APPROVED' のみで判定。ブランチ保護でレビュー必須でない場合 reviewDecision が空になり、APPROVED レビューがあっても approved=false → daemon が verify に進めない。
対策
- desiredDraft を Status ベースに: AI 作業中/未着手(New Item/Backlog/Icebox/Sprint Backlog/In Progress)は Draft、人間に渡った後(Review/DoD/Close)は Ready とする。HITL の有無で Draft を決めない。
- 例:
desiredDraft = !['Review','DoD','Close'].includes(item.status)
- getPrReviewState を reviews ベースに補強:
reviewDecision が空でも、reviews の各人間の最新状態に APPROVED があり CHANGES_REQUESTED が無ければ approved=true とする。
検証
- approve + HITL 除去した Review PR が Draft に戻らない(Ready のまま)こと(unit: desiredDraft)。
- reviewDecision が空でも APPROVED レビューを approved と判定すること(unit: getPrReviewState 相当の純粋部分 or 切り出し)。
背景
完全自律運転の要。これが直ると approve→(daemon が verify)→人間 merge の流れが Draft で詰まらない。
問題(PR #808 で顕在化)
phases.jsのdesiredDraft(item) = item.hitl !== 'Yes'。HITL=Yes のときだけ Ready、それ以外は Draft とするため、人間が approve + 🙋 HITL 除去(HITL=No) すると次の sync で Ready→Draft に戻されてしまう(マージ待ちの承認済み PR が Draft 化 → GitHub UI でマージ不可に)。project.jsのgetPrReviewStateがreviewDecision==='APPROVED'のみで判定。ブランチ保護でレビュー必須でない場合 reviewDecision が空になり、APPROVED レビューがあっても approved=false → daemon が verify に進めない。対策
desiredDraft = !['Review','DoD','Close'].includes(item.status)reviewDecisionが空でも、reviewsの各人間の最新状態に APPROVED があり CHANGES_REQUESTED が無ければ approved=true とする。検証
背景
完全自律運転の要。これが直ると approve→(daemon が verify)→人間 merge の流れが Draft で詰まらない。