Skip to content

fix: aiagent.sh の必須チェック対応マージ待機ロジックを private 側から同期#18

Merged
yktsnet merged 1 commit into
mainfrom
claude/04-aiagent-merge-wait-sync
Jul 8, 2026
Merged

fix: aiagent.sh の必須チェック対応マージ待機ロジックを private 側から同期#18
yktsnet merged 1 commit into
mainfrom
claude/04-aiagent-merge-wait-sync

Conversation

@yktsnet

@yktsnet yktsnet commented Jul 8, 2026

Copy link
Copy Markdown
Owner

変更内容

_aiagent_finish()gh pr merge "$pr_num" --merge || return 1 を、即時マージ→失敗時フォールバックの2段構えに変更(private 正本 ~/dotfiles/zsh/neo/aiagent.sh の Issue 15 / PR #97 で導入済みのロジックを本リポの公開ミラーに移植)。

  1. gh pr merge "$pr_num" --merge をまず試みる。成功すれば従来どおり続行。
  2. 失敗した場合(必須ステータスチェック未完了等)、gh pr merge "$pr_num" --merge --auto で auto-merge を有効化。有効化自体が失敗したら return 1
  3. gh pr checks "$pr_num" --watch --fail-fast でチェック完了を待つ。チェックが fail したら return 1(マージしない)。
  4. auto-merge は checks 通過後に GitHub 側で非同期にマージされるため、gh pr view "$pr_num" --json state --jq .state を5秒間隔でポーリングし MERGED になるまで待つ。上限180秒(3分)で諦めて return 1(手動対応を促すメッセージ付き)。

必須チェックのないリポでは手順1で即マージが成功するため従来どおり完走する。必須チェックのあるリポ(本リポ PR #16 で発生した事象)では手順2〜4を経てマージ完了まで待ってから後続処理(worktree/ブランチ掃除・Issueクローズ)へ進む。

private 正本には本Issueのスコープ外の pr_merge_sha 取得(別Issueで追加済みの既存機能)が同ブロック前後に存在するが、今回は移植対象外として含めていない。

静的確認結果

  • zsh -n zsh/functions/aiagent.sh: OK(構文エラーなし)
  • nix flake check: 評価エラーなし(既存の設定非推奨警告のみ、本変更と無関係)
  • git diff --name-only --cached: zsh/functions/aiagent.sh(issueの「対象」と完全一致)
  • private 正本 ~/dotfiles/zsh/neo/aiagent.sh の該当ブロック(PR #97 差分)と diff 目視確認: 移植ブロック自体は完全一致。差分は private 側にのみ存在する pr_merge_sha 関連2箇所のみで、これは本Issueのスコープ外(別Issueで追加された既存機能)
  • caller整合性: _aiagent_finish()issue-finish からのみ呼ばれ、シグネチャ変更なし。呼び出し元に変更不要

検証手順

実マージを伴う動作確認は本Issueのスコープ外(Builder はリモート・実行系コマンドに触れない)。次回 user が issue-finish を実行する際に確認する:

  • 必須ステータスチェックのないリポ: 従来どおり即マージで完走することを確認
  • 必須ステータスチェックのあるリポ(本リポ dotfiles-public 等): gh pr merge --merge が失敗 → auto-merge 有効化 → gh pr checks --watch でCI待機 → マージ完了後に後続処理まで完走することを確認

## 変更内容
`_aiagent_finish()` の `gh pr merge "$pr_num" --merge || return 1` を、即時マージ→失敗時フォールバックの2段構えに変更(private 正本 `~/dotfiles/zsh/neo/aiagent.sh` の Issue 15 / PR #97 で導入済みのロジックを本リポの公開ミラーに移植)。

1. `gh pr merge "$pr_num" --merge` をまず試みる。成功すれば従来どおり続行。
2. 失敗した場合(必須ステータスチェック未完了等)、`gh pr merge "$pr_num" --merge --auto` で auto-merge を有効化。有効化自体が失敗したら `return 1`。
3. `gh pr checks "$pr_num" --watch --fail-fast` でチェック完了を待つ。チェックが fail したら `return 1`(マージしない)。
4. auto-merge は checks 通過後に GitHub 側で非同期にマージされるため、`gh pr view "$pr_num" --json state --jq .state` を5秒間隔でポーリングし `MERGED` になるまで待つ。上限180秒(3分)で諦めて `return 1`(手動対応を促すメッセージ付き)。

必須チェックのないリポでは手順1で即マージが成功するため従来どおり完走する。必須チェックのあるリポ(本リポ PR #16 で発生した事象)では手順2〜4を経てマージ完了まで待ってから後続処理(worktree/ブランチ掃除・Issueクローズ)へ進む。

private 正本には本Issueのスコープ外の `pr_merge_sha` 取得(別Issueで追加済みの既存機能)が同ブロック前後に存在するが、今回は移植対象外として含めていない。

## 静的確認結果
- `zsh -n zsh/functions/aiagent.sh`: OK(構文エラーなし)
- `nix flake check`: 評価エラーなし(既存の設定非推奨警告のみ、本変更と無関係)
- `git diff --name-only --cached`: zsh/functions/aiagent.sh(issueの「対象」と完全一致)
- private 正本 `~/dotfiles/zsh/neo/aiagent.sh` の該当ブロック(PR #97 差分)と diff 目視確認: 移植ブロック自体は完全一致。差分は private 側にのみ存在する `pr_merge_sha` 関連2箇所のみで、これは本Issueのスコープ外(別Issueで追加された既存機能)
- caller整合性: `_aiagent_finish()` は `issue-finish` からのみ呼ばれ、シグネチャ変更なし。呼び出し元に変更不要

## 検証手順
実マージを伴う動作確認は本Issueのスコープ外(Builder はリモート・実行系コマンドに触れない)。次回 user が `issue-finish` を実行する際に確認する:
- 必須ステータスチェックのないリポ: 従来どおり即マージで完走することを確認
- 必須ステータスチェックのあるリポ(本リポ dotfiles-public 等): `gh pr merge --merge` が失敗 → auto-merge 有効化 → `gh pr checks --watch` でCI待機 → マージ完了後に後続処理まで完走することを確認
@yktsnet
yktsnet merged commit d2a1157 into main Jul 8, 2026
@yktsnet
yktsnet deleted the claude/04-aiagent-merge-wait-sync branch July 8, 2026 14:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant