Uh oh!
There was an error while loading. Please reload this page.
Fix: cross-refactoring の進行が止まる不具合と cross-review の投稿確認を直す(v8.5.0) - #127
Merged
Merged
Conversation
再々検証(PR #125)で見つかった 4 件と、投稿の成否を突き合わせない課題を直した。 - 生成物の同期コミットが必ず失敗する 固定幅で読む `git status --porcelain` の出力を `strip()` していたため、 変更パスの先頭 1 文字が欠けて `git add` が落ちていた。固定幅で読む出力には `strip` を適用しない - 同期の後段で落ちると差分が作業ツリーに残る `git add` / `git commit` の失敗でも、同期が作った差分を捨ててから中断する - 実装担当がコミットを作れない条件が生じる 生成物の検査を通す必要がないことを手順書へ明示し、迂回の手段を 1 つに定めた。 取り込みの前に、コミットされなかった変更を捨てる - 見送りの後に読み取り用の作業ディレクトリを同期していない 提案の直前に毎回同期する。あわせて提案とレビューの打ち切り時間を明示した - cross-review が投稿の成否を突き合わせていない 申告されたコメント数を GitHub 側の実数と照合し、届いていなければ中断する。 取得できなかった場合は申告を採用する Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WxxF27RXyg3QMjayii5dp1
takemi-ohama
left a comment
ContributorAuthor
There was a problem hiding this comment.
🤖 cross-review | round 1 | codex | APPROVE
修正要求はありません。重点確認した同期失敗時のクリーンアップ、未コミット差分の破棄、GitHub投稿数の突き合わせはPR目的と整合しています。
takemi-ohama
left a comment
ContributorAuthor
There was a problem hiding this comment.
🤖 cross-review | round 1 | gemini | APPROVE
変更内容を確認しました。指摘事項はありません。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
再々検証(#126 のレポート)で見つかった不具合 4 件と、
cross-reviewに残っていた投稿確認の課題を直します。cross-reviewが投稿の成否を突き合わせていない直した内容
12. 固定幅で読む出力に
stripを適用しない_git_outは標準出力をstrip()して返しますが、_worktree_changesはgit status --porcelainを固定幅(状態 2 文字 + 空白 + パス)としてline[3:]で切り出します。未 stage の変更は状態コードが
Mと先頭が空白になるため、出力の 1 行目だけパスが 1 文字欠けていました。stripしない選択肢を設け、固定幅で読む箇所だけそれを使います。13. 後段で落ちても差分を残さない
同期コマンド自身の失敗では作業ツリーを戻していましたが、
git add/git commitの失敗では戻していませんでした。残ると次の実行が清浄性の検査で必ず止まり、保留中の push を再試行できません。14. 実装担当のコミットとフックの関係を定める
生成物の同期を pre-commit で検査するリポジトリでは、「同期しない」「
--no-verifyを使わない」「同期しないとコミット拒否」が同時に成立しません。実測では同じ実装担当が適用フェーズではcore.hooksPath=/dev/nullで迂回し、修正フェーズでは迂回せず 0 コミットで終えました。公開は進行側が検証を通してから行うため、実装担当のコミット時点で生成物が古いのは設計どおりです。それを手順書へ明示し、迂回の手段を 1 つに定めました。あわせて、コミットされなかった変更は検証を受けていないため、取り込みの前に捨てます。
15. 提案の直前に読み取り用を同期する
同期が要るのは HEAD が進んだときであって、特定のフェーズの後ではありません。取り消しで進んだ HEAD が読み取り用へ届かず、取り消しで消えた関数への提案が 2 件返っていました。
あわせて、提案とレビューの打ち切り時間を明示しました(実測 90〜285 秒に対し既定 420 秒で、混雑時に超えました)。
cross-review: 申告を GitHub 側と突き合わせる
投稿は AI 自身が
gh apiで行うため、失敗しても結果ファイルの申告だけは残ります。申告のまま進むと、修正担当が読むべき指摘が存在しないまま収束判定まで走ります。「取得できなかった」と「0 件」を区別します。取得の失敗で止めると、GitHub 側の一時的な不調でループが進まなくなるためです。
テスト
先にテストを書いて落ちることを確認し、実装後に通しています。新規 19 件を含め 463 件が通ります。
追加したテスト:
cross-refactoring/tests/test_sync_generated.py(9 件)— 実際の git で、パスの欠落・同期コミット・後段失敗時の破棄・置き土産の扱いを確認cross-review/tests/test_state_posted_comments.py(10 件)— 申告と GitHub 側の突き合わせ既存テストのうち、
_git_outをモックしている箇所のシグネチャと、作業ツリーの状態を段階的に返すヘルパを実態に合わせて更新しました。検証:
🤖 Generated with Claude Code
https://claude.ai/code/session_01WxxF27RXyg3QMjayii5dp1