test(jj-op-verify): commit message の tokenization edge-case… (nightly-todo 順位 285) - #442
Conversation
実装完了は cli-ledger-cleanup が台帳の宣言と PR の変更を突き合わせて判定済み。マージと後始末を原子的にするため PR へ同梱する。
|
@coderabbitai review |
✅ Action performedReview finished.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
💤 Files with no reviewable changes (3)
Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review. 📝 WalkthroughWalkthrough
Changesjj トークン化検証
Estimated code review effort: 2 (Simple) | ~10 minutes Merge Risk: ⚪ Minimal · up to The PR adds focused commit-message tokenization edge-case tests and updates task documentation; no actionable merge-blocking risk remains after normal checks and review. Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)(該当なし — レビュー未実施のため) Applicable Findings (Medium 以下)(該当なし) Filtered (not applicable)(該当なし) 軽量サマリー (レビュー指摘 0 件のため diff 概要のみ)nightly-todo による自動 PR (順位 285 の消化)。変更ファイル 4 件:
次のアクション
|
変更系 jj 操作の後に op log へ operation を書く別のコマンドが走ると、 `jj op log --limit 1` の先頭がそちらに占められ「operation not recorded」の誤警告が出る。 本セッションで 4 回発火中 2 回が誤警告だった。 観測は正しく推論が誤っている形だった。「op log 先頭に対応する operation がありません」は 事実だが、「コマンドが実際には実行されていない可能性があります」は誤り。押し下げているのは fetch/push だけでなく snapshot working copy も含み、直近 40 op のうち 28 件 (70%) が 付随 op だった (snapshot 17 / push 5 / fetch 5 / import git refs 1)。 - INCIDENTAL_OP_PREFIXES を読み飛ばし、最初の非付随 op と照合する - 遡る上限は 10 件 (OP_LOG_WINDOW)。無制限に広げると過去の同種 op が一致して 「記録済み」と誤判定する偽陰性が増える - **最初の非付随 op で止める**のが偽陰性対策。一致するまで探し続けると、本当に落ちた 操作を過去の同種 op が隠して警告が出るべき場面で黙る - モジュール doc に「対象外は検出のトリガーとしてだけで、これらも op log に operation を 書く」を明記。塞がらない 2 つの限界 (チェーン内の最後の 1 件しか追跡しない / サブプロセスが作る op は予見できない) も併記した 検証: unit test 22 件。変異テストで 3 方向の検知を実測 (skip リストを空にすると 4 件、 選別で付随 op を飛ばさないと 3 件、op log 全体から一致を探す典型的な偽陰性実装にすると 1 件)。 PR M (順位 476) との実装順の調整は不要だった。触る関数が違う (本 PR = 照合窓の fetch_op_head / decide_context、M = 検出の detect_last_mutating_jj_op) うえ、PR を スタックしない運用なので M は本 PR のマージ後に master 起点で作られる。 実際の制約は夜間ループの PR #442 (順位 285) だった。同じ main.rs に現行のバグ挙動を 固定するテストを追加しており、PR M が挙動を直すと落ちる。CI green・指摘 0 だったため 本 PR の前にマージした。 あわせて順位 283 の lane を ✅ → — へ引き取った。476 と同一内容で、auto lane に残すと 夜間ループが同じファイルを並行実装しうるため経路を先に閉じた。台帳行そのものの削除は 元計画どおり PR M で行う。 CodeRabbit #448 の指摘を反映: 進捗記録の日付を 2026-08-26 と書いていたが、本リポジトリは UTC 基準で日付を記録する (2026-08-22 18:05 UTC の run を「2026-08-22」と記録している)。 実測時点の UTC は 2026-08-25 だったため 3 箇所を 2026-08-25 へ修正した。 後始末: todo25.md の 489 節 + todo-summary2.md の 489 行を削除。
変更系 jj 操作の後に op log へ operation を書く別のコマンドが走ると、 `jj op log --limit 1` の先頭がそちらに占められ「operation not recorded」の誤警告が出る。 本セッションで 4 回発火中 2 回が誤警告だった。 観測は正しく推論が誤っている形だった。「op log 先頭に対応する operation がありません」は 事実だが、「コマンドが実際には実行されていない可能性があります」は誤り。押し下げているのは fetch/push だけでなく snapshot working copy も含み、直近 40 op のうち 28 件 (70%) が 付随 op だった (snapshot 17 / push 5 / fetch 5 / import git refs 1)。 - INCIDENTAL_OP_PREFIXES を読み飛ばし、最初の非付随 op と照合する - 遡る上限は 10 件 (OP_LOG_WINDOW)。無制限に広げると過去の同種 op が一致して 「記録済み」と誤判定する偽陰性が増える - **最初の非付随 op で止める**のが偽陰性対策。一致するまで探し続けると、本当に落ちた 操作を過去の同種 op が隠して警告が出るべき場面で黙る - モジュール doc に「対象外は検出のトリガーとしてだけで、これらも op log に operation を 書く」を明記。塞がらない 2 つの限界 (チェーン内の最後の 1 件しか追跡しない / サブプロセスが作る op は予見できない) も併記した 検証: unit test 22 件。変異テストで 3 方向の検知を実測 (skip リストを空にすると 4 件、 選別で付随 op を飛ばさないと 3 件、op log 全体から一致を探す典型的な偽陰性実装にすると 1 件)。 PR M (順位 476) との実装順の調整は不要だった。触る関数が違う (本 PR = 照合窓の fetch_op_head / decide_context、M = 検出の detect_last_mutating_jj_op) うえ、PR を スタックしない運用なので M は本 PR のマージ後に master 起点で作られる。 実際の制約は夜間ループの PR #442 (順位 285) だった。同じ main.rs に現行のバグ挙動を 固定するテストを追加しており、PR M が挙動を直すと落ちる。CI green・指摘 0 だったため 本 PR の前にマージした。 あわせて順位 283 の lane を ✅ → — へ引き取った。476 と同一内容で、auto lane に残すと 夜間ループが同じファイルを並行実装しうるため経路を先に閉じた。台帳行そのものの削除は 元計画どおり PR M で行う。 CodeRabbit #448 の指摘を反映: 進捗記録の日付を 2026-08-26 と書いていたが、本リポジトリは UTC 基準で日付を記録する (2026-08-22 18:05 UTC の run を「2026-08-22」と記録している)。 実測時点の UTC は 2026-08-25 だったため 3 箇所を 2026-08-25 へ修正した。 後始末: todo25.md の 489 節 + todo-summary2.md の 489 行を削除。
Phase 0 / Phase D の 8 PR (#442 / #445-450 / #452) の post-merge feedback を一括採否した。 全 55 提案のうち analyzer の採用候補は 24 件で、そこからルールを増やすだけの 10 件を 却下し 12 件を採用、PR 6 本に束ねた。 却下の根拠はユーザー決定 (2026-08-27):「これまでにもルールを追加して溜飲を下げ、 ルールを破るケースが多発した」。本計画 § 根因 の 3 番目 (「ルールを作らないルール」 自身が強制されていない) と同じ判断で、Phase 5 の撤1-③ が置くゲートの対象を自分で 増やさない運用でもある。却下 10 件のうち 3 件は採用側の機構が同じ問題を塞ぐ。 - F1 / F6 は Phase 1 の前に置く (軽い後始末)。F1 は D3 の takt fix step が作った 重複定義の解消、F6 は既存機構の記述 - F3 / F4 / F2 / F5 は Phase 1 の後に置く。機1 が検出条件と allowlist を確定させ、 F5 はその条件を実コードで検証・補強する側に回る あわせて Phase D と PR T の実走確認を完了として記録した。夜間 run 33000789454 が success で完走し順位 193 の PR #451 を作成したことで、Phase 0 の PR T で取れて いなかった「完走 green」の観測が取れている。 取り下げ 1 件 (mutation 検査の CI 固定化) は既存起票の順位 36 / 38 と重複するため 起票しない。対応不要 1 件 (数値記述訂正) は PR #452 で実施済み。 CodeRabbit #453 の指摘 3 件を反映: - 状態行が「実走確認 1 件のみ残」のままで、本文の観測完了記録と矛盾していた。 bugfix-batch-plan.md 側の残観測トラッキングと PR T の状態も観測完了へ更新した - **F5 の根拠と実行順が矛盾していた**。「F5 で得る形が機1 の検出条件を詰める材料に なる」と書きながら F5 を Phase 1 の後に置いていた。機1 は分離済みなら通すので F5 が塞ぐ穴 (繋ぎ目が未固定) は機1 の射程外である、という関係へ説明を正した - F2 の対象パスが「CI」としか書かれておらず、`.github/workflows/` を触るなら Guard 禁止パス該当で auto lane 不可になる点が分類から漏れていた。置き場所を 着手時に決めることと、決めた時点の分類を明記した
Phase 0 / Phase D の 8 PR (#442 / #445-450 / #452) の post-merge feedback を一括採否した。 全 55 提案のうち analyzer の採用候補は 24 件で、そこからルールを増やすだけの 10 件を 却下し 12 件を採用、PR 6 本に束ねた。 却下の根拠はユーザー決定 (2026-08-27):「これまでにもルールを追加して溜飲を下げ、 ルールを破るケースが多発した」。本計画 § 根因 の 3 番目 (「ルールを作らないルール」 自身が強制されていない) と同じ判断で、Phase 5 の撤1-③ が置くゲートの対象を自分で 増やさない運用でもある。却下 10 件のうち 3 件は採用側の機構が同じ問題を塞ぐ。 - F1 / F6 は Phase 1 の前に置く (軽い後始末)。F1 は D3 の takt fix step が作った 重複定義の解消、F6 は既存機構の記述 - F3 / F4 / F2 / F5 は Phase 1 の後に置く。機1 が検出条件と allowlist を確定させ、 F5 はその条件を実コードで検証・補強する側に回る あわせて Phase D と PR T の実走確認を完了として記録した。夜間 run 33000789454 が success で完走し順位 193 の PR #451 を作成したことで、Phase 0 の PR T で取れて いなかった「完走 green」の観測が取れている。 取り下げ 1 件 (mutation 検査の CI 固定化) は既存起票の順位 36 / 38 と重複するため 起票しない。対応不要 1 件 (数値記述訂正) は PR #452 で実施済み。 CodeRabbit #453 の指摘 3 件を反映: - 状態行が「実走確認 1 件のみ残」のままで、本文の観測完了記録と矛盾していた。 bugfix-batch-plan.md 側の残観測トラッキングと PR T の状態も観測完了へ更新した - **F5 の根拠と実行順が矛盾していた**。「F5 で得る形が機1 の検出条件を詰める材料に なる」と書きながら F5 を Phase 1 の後に置いていた。機1 は分離済みなら通すので F5 が塞ぐ穴 (繋ぎ目が未固定) は機1 の射程外である、という関係へ説明を正した - F2 の対象パスが「CI」としか書かれておらず、`.github/workflows/` を触るなら Guard 禁止パス該当で auto lane 不可になる点が分類から漏れていた。置き場所を 着手時に決めることと、決めた時点の分類を明記した
台帳 (docs/claude-code-web-tasks.md) の無人可タスク 順位 285 を
夜間ループ (nightly-todo workflow) が無人で実装した PR です。
jj keyword を含む commit message の tokenization edge-case テストを追加cargo test --workspace+cargo clippy --workspace --all-targets -- -D warningsを回して green を確認済み(agent の自己申告ではなく workflow が回し直した結果)。これはコストフィルタで
品質の保証ではありません — 単一 OS で
--ignoredも hooks smoke も含みませんcli-autonomy-gate --operation autonomous-pr(kill-switch + 背圧) を通過マージ判断は人間が行います (ADR-052 の commitment 点)。CI が緑で内容が台帳の
意図に沿っていればマージしてください。ずれている場合はクローズを —
採用率は WP-18 の受け入れ基準の測定対象です。
close する場合の lane 操作 (ADR-072 決定 20): 人間が引き取るなら台帳の
無人可を✅→—へ変更してください。✅のまま close すると、決着済み PR のブランチ掃除の後にこの順位が再び選択されます (= 再投入の意思表示)。
run: https://github.com/aloekun/claude-code-hook-test/actions/runs/32656895551
Summary by CodeRabbit
テスト
jj newを正しく検出する回帰テストを追加しました。jjnewの部分一致や、jj,など句読点付きトークンを誤検出しないことを確認します。ドキュメント