概要
findPrForIssue(tools/autopilot/src/project.js)が Issue に紐づく PR を
gh pr list --search "Closes #<N> in:body" の全文あいまい検索で解決しているため、
別の PR が本文で #<N> に言及しただけで誤ヒットする。.[0] を取るので、言及だけの
無関係 PR が先頭に来ると誤った PR を返す。
実例
PR #822(インベントリ移動)の本文・コミットに「#631/#633」への言及があったため:
$ gh pr list --search "Closes #631 in:body" --state all
#631→PR 818 [OPEN] # 本来の PR(Closes #631)
#631→PR 822 [MERGED] # 言及しただけの無関係 PR が誤ヒット
結果、#631 の PR projection が #822 のコメントを読みにいって失敗
(daemon ログ: pr projection failed: ... issues/822/comments ... unexpected EOF)。
影響
対処案
Closes #<N> in:body のテキスト検索をやめ、GitHub が認識する「この Issue を閉じる PR」リンクで解決する:
- GraphQL
issue(number).closedByPullRequestsReferences(includeClosedPrs:true)
(hasMergedPullRequest で既に使用実績あり)で連携 PR を取り、open を優先・最新を選ぶ。
- もしくは検索結果を、本文に**厳密な
Closes #<N>(語境界つき)**を含む PR だけにフィルタし、
open を優先・複数なら新しい方を選ぶ。
DoD
概要
findPrForIssue(tools/autopilot/src/project.js)が Issue に紐づく PR をgh pr list --search "Closes #<N> in:body"の全文あいまい検索で解決しているため、別の PR が本文で
#<N>に言及しただけで誤ヒットする。.[0]を取るので、言及だけの無関係 PR が先頭に来ると誤った PR を返す。
実例
PR #822(インベントリ移動)の本文・コミットに「#631/#633」への言及があったため:
結果、#631 の PR projection が #822 のコメントを読みにいって失敗
(daemon ログ:
pr projection failed: ... issues/822/comments ... unexpected EOF)。影響
address-review/ DoD 引き継ぎ(feat(autopilot): DoD フェーズを headful 引き継ぎ生成に再定義(verify はホスト Claude へ渡す) #821)もfindPrForIssueを使うため、誤 PR で作業する恐れ。(#631/#633)等)なので再発しやすい。対処案
Closes #<N> in:bodyのテキスト検索をやめ、GitHub が認識する「この Issue を閉じる PR」リンクで解決する:issue(number).closedByPullRequestsReferences(includeClosedPrs:true)(
hasMergedPullRequestで既に使用実績あり)で連携 PR を取り、open を優先・最新を選ぶ。Closes #<N>(語境界つき)**を含む PR だけにフィルタし、open を優先・複数なら新しい方を選ぶ。
DoD
#<N>に言及していても、findPrForIssue(N)が実際に N を閉じる PRを返すcd tools/autopilot && node --test緑