概要
findPrForIssue / hasMergedPullRequest(tools/autopilot/src/project.js)は GitHub の
close リンク(closedByPullRequestsReferences)で Issue↔PR を解決する(#826)。しかし
GitHub は PR が非デフォルトブランチ宛て(例: EPIC サブ Issue の PR が topic/koshien-epic-738 宛て)の
場合、本文の Closes #N を閉じる PR リンクとして登録しない。
→ #829(base ブランチ宣言で epic ブランチ宛て PR を作る)と相互作用し、epic サブ Issue の PR が
findPrForIssue で見つからない。
対処案
findPrForIssue / hasMergedPullRequest を base 非依存にする。autopilot の PR は必ず
head ブランチが topic/autopilot-<issue> なので、これを使う:
findPrForIssue(N): まず close リンク(既存・default base に強い)、無ければ
gh pr list --search "head:topic/autopilot-<N>" --state open で特定(base 非依存・あいまい検索でない)。
hasMergedPullRequest(N): 同様に head ブランチで PR を引き、その merged を見る
(close リンクに依存しない)。
これで default base / 非 default base どちらの PR も確実に解決でき、#825 の全文あいまい検索にも戻らない。
受け入れ条件
概要
findPrForIssue/hasMergedPullRequest(tools/autopilot/src/project.js)は GitHub のclose リンク(
closedByPullRequestsReferences)で Issue↔PR を解決する(#826)。しかしGitHub は PR が非デフォルトブランチ宛て(例: EPIC サブ Issue の PR が
topic/koshien-epic-738宛て)の場合、本文の
Closes #Nを閉じる PR リンクとして登録しない。→ #829(base ブランチ宣言で epic ブランチ宛て PR を作る)と相互作用し、epic サブ Issue の PR が
findPrForIssue で見つからない。
実害(#827 / PR #828 で観測)
topic/autopilot-827 → topic/koshien-epic-738、本文にCloses #827)に対しclosedByPullRequestsReferences(#827)が空 →findPrForIssue(827)が null。(手動でラベル付与・Ready 化して暫定対応した)。
hasMergedPullRequest(827)も同理由で false → feat(koshien): 「AIを試す」でステージ+スプライトを出力しグローバル初期化する (#827) #828 を epic ブランチに merge しても feat(koshien): 「AIを試す」で編集中スプライト+ステージを出力しグローバル変数/リストを初期化する (v2 スクリプト無しステージの初期化生成バグ修正含む) #827 が自動 Close されない(「topic merge = close」運用が効かない)。
対処案
findPrForIssue/hasMergedPullRequestを base 非依存にする。autopilot の PR は必ずhead ブランチが
topic/autopilot-<issue>なので、これを使う:findPrForIssue(N): まず close リンク(既存・default base に強い)、無ければgh pr list --search "head:topic/autopilot-<N>" --state openで特定(base 非依存・あいまい検索でない)。hasMergedPullRequest(N): 同様に head ブランチで PR を引き、そのmergedを見る(close リンクに依存しない)。
これで default base / 非 default base どちらの PR も確実に解決でき、#825 の全文あいまい検索にも戻らない。
受け入れ条件
topic/autopilot-<N>head)をfindPrForIssue(N)が見つけるhasMergedPullRequest(N)が非 default base への merge も検知する