Skip to content

fix(autopilot): findPrForIssue が言及だけの無関係 PR を誤ヒットする (全文検索→close リンクへ) #825

Description

@smalruby3-editor-bot

概要

findPrForIssuetools/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

  • 他 PR が #<N> に言及していても、findPrForIssue(N)実際に N を閉じる PRを返す
  • open PR を merged より優先(projection 対象は open PR)
  • 該当ロジックの node:test を追加し cd tools/autopilot && node --test

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