Repository navigation
Conversation
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
実行時並列数の保存と再同期予算 src/core/workflow/system/pr-execution-context.ts, src/infra/task/*, src/features/merge/index.ts, src/features/tasks/execute/taskWorkflowExecution.ts, src/__tests__/merge.test.ts, src/__tests__/merge-clone.integration.test.ts |
PRマージタスクに実行時並列数を保存し、Requeue・Retryでは保存値を優先します。組み込み修正ワークフローのステップ予算に、並列数から算出した再同期分を加えます。 |
CI後の競合再同期とマージ判定 src/infra/workflow/system/DefaultSystemStepServices.ts, src/infra/workflow/system/system-pr-ci.ts, builtins/*/workflows/merge-review-fix*.yaml, src/__tests__/it-merge-workflow-execution.test.ts, src/__tests__/system-pr-status.test.ts, CHANGELOG.md, docs/cli-reference*.md, docs/workflows*.md |
同期結果に再同期回数と上限を追加します。CI後に CONFLICTING で上限未満なら再同期し、同期後はレビューを繰り返さず push へ進みます。BEHIND は再同期対象から除外します。新しいHEADのCI状態取得では、異なるHEAD SHAの再実行情報を使いません。テストと日英のドキュメントも更新します。 |
Priority:
Estimated code review effort: 3 (Moderate) | ~25 minutes
Change: Feature
Sequence Diagram(s)
sequenceDiagram
participant Workflow as merge-review-fix
participant Sync as sync_with_root
participant Push
participant Caccia
participant CI as CI status
Workflow->>Sync: 同期と競合解消
Sync-->>Workflow: 同期結果と再同期回数・上限
Workflow->>Push: 同期後の変更をpush
Push-->>Workflow: 更新後のHEAD
Workflow->>Caccia: 更新後のHEADで実行
Caccia-->>Workflow: 実行結果とHEAD SHA
Workflow->>CI: 更新後のHEADのCIを待機
CI-->>Workflow: CI結果とmergeable状態
loop CONFLICTINGかつ上限未満
Workflow->>Sync: 再同期
end
Possibly related PRs
- nrslib/takt#1889: 再同期後の組み込みmerge workflowがCacciaを実行する経路と、自動Cacciaの重複抑止を扱っています。
- nrslib/takt#1874: 同じmerge workflowのCI復旧を扱い、このPRでは再同期後もCI修正・再実行の使用回数を維持します。
Merge Risk: 
Minimal · up to 4fb75
-
No issue identified that needs resolution before merging; normal checks remain appropriate.
Pre-merge checks: 
3 · 
1
-
Failed checks: 1 inconclusive Passed checks: 3 passedFull details: Linked Issues check
-
Explanation
#1893の主要要件は差分で確認できます。日英のmerge-review-fixとmerge-review-fix-simpleは、CI 後のCONFLICTINGに対して上限内で再同期し、再レビューを省略してpushへ進みます。BEHINDはunmergeableへ進まず、従来のマージ判定へ進みます。実行時並列数の保存、max(2, concurrency - 1)の上限、上限到達時の停止、関連テスト、日英ドキュメント、CHANGELOG の変更も要約にあります。ただし、変更テストがtsconfig.tests.jsonとscripts/test-classification.mjsに登録済みであること、および build・lint・対象テストの成功を、確認可能な差分または実行結果から確定できません。Resolution
変更テストの両登録ファイルで対象テストの包含または登録を確認し、
npm run build、npm run lint、対象テストの成功結果を提示してください。
-
Finishing Touches
-
📝 Generate docstrings
-
- Commit to this branch
- Create a new PR
🧪 Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
Comment @coderabbitai help to get the list of available commands.
Summary
takt merge の並列実行で後から競合した PR を取り込み直してマージまで進める
背景
takt mergeを並列で動かしていると、片方の PR が先にマージされたことで、もう片方の PR が土台ブランチと競合する。現状のマージ用 workflow は、最初の同期(土台を PR に取り込み、競合があれば AI で解消して push)でしか土台との競合を見ておらず、レビュー・修正・Caccia・CI 待ちの後に GitHub のmergeableがCONFLICTINGになっていると、「mergeability is CONFLICTING」とコメントして COMPLETE(マージしない)で止まる。再同期も再試行もせず、利用者がtakt merge <番号>を打ち直す必要がある。目的
並列実行中に別の PR が先にマージされて対象 PR が土台と競合しても、止まらずに土台を取り込み直し、マージまで進められるようにする。回数には上限を設け、上限を超えたら今と同じくコメントして止める。
作業範囲
優先度 高: 競合時の取り込み直しをマージ用 workflow に入れる
対象は、
takt mergeが実行するマージまで進む builtin のマージ用 workflow(ja / en)。mergeableがCONFLICTINGなら、コメントして止める代わりに、土台の取り込み直しへ戻る。取り込み直しは既存の同期(土台を PR に取り込んで push)と競合解消(競合を AI で解消して push)をそのまま使うreviewをやり直さない。push 後の Caccia → CI 待ち → マージ可否の確認 → マージへ進む。競合解消の差分は Caccia(CodeRabbit)と CI で確認するCONFLICTINGのときだけ。競合は無く土台が進んだだけ(BEHIND)の場合は今までどおりそのままマージを試みるmerge.concurrencyと CLI の--concurrencyで決まった実行時の値で、設定が動的でも上限がそれに追従する優先度 中: ドキュメント
利用者から見える挙動が変わるので、
takt mergeとマージ用 workflow を説明している docs(日英)に、競合時の取り込み直しと上限の規則を書き、CHANGELOG に記載する。優先度 中: テストとゲート
tsconfig.tests.jsonとscripts/test-classification.mjsに正しく登録するnpm run build、npm run lint、対象テストを通す参考となる現状の証拠(必須の変更対象や方式ではない)
実行ワークフローが現状を調査し、変更対象と方式を決める。
merge-review-fix-simple。merge-review-fixもマージまで進む。merge-reviewはコメントだけでマージしないCONFLICTINGならunmergeableに進んでコメントして COMPLETEwhen(...)条件は設定を直接読めず、system step が返した値だけを読める。一方で system step は設定を読める(Caccia 効果がcaccia.enabledを読んでいるのと同じ形)fix_pushstep の実行回数をfixRoundsとして読んでいる。取り直しの回数も同じ取り方ができる--concurrencyで上書きされた並列数を再開(Requeue / Retry)でも同じ値で使うには、takt mergeがタスクを作るときにタスクのデータへ記録する方法がある。脅威検査の上限merge_threat_check_max_diff_bytesが同じ方法で記録されているwhen(回数 < 上限)で戻るか止まるかを分岐する形。採用するかはワークフローの判断でよいmergeableの判定。判定からマージ実行までの間に別の PR がマージされて実際のマージが失敗する場合の扱いは、現状のmerge_failedの経路を調べたうえでワークフローが決める期待する振る舞い
形式仕様(Quint)
形式仕様(Alloy)
受け入れ条件
npm run build、npm run lint、対象テストが通り、追加・変更したテストがtsconfig.tests.jsonとscripts/test-classification.mjsに登録されているExecution Report
Workflow
defaultcompleted successfully.Closes #1893
Summary by CodeRabbit