Skip to content

test(jj-op-verify): commit message の tokenization edge-case… (nightly-todo 順位 285) - #442

Merged
aloekun merged 2 commits into
masterfrom
claude/nightly-285
Aug 25, 2026
Merged

test(jj-op-verify): commit message の tokenization edge-case… (nightly-todo 順位 285)#442
aloekun merged 2 commits into
masterfrom
claude/nightly-285

Conversation

@nightly-todo-aloekun

@nightly-todo-aloekun nightly-todo-aloekun Bot commented Aug 23, 2026

Copy link
Copy Markdown
Contributor

台帳 (docs/claude-code-web-tasks.md) の無人可タスク 順位 285
夜間ループ (nightly-todo workflow) が無人で実装した PR です。

  • 内容: jj keyword を含む commit message の tokenization edge-case テストを追加
  • 事前フィルタ: 夜間 workflow が ubuntu 上で cargo test --workspace +
    cargo clippy --workspace --all-targets -- -D warnings を回して green を確認済み
    (agent の自己申告ではなく workflow が回し直した結果)。これはコストフィルタで
    品質の保証ではありません — 単一 OS で --ignored も hooks smoke も含みません
  • 品質の保証: 本 PR に紐づく ci.yml (windows-latest + ubuntu-latest) のチェックを見てください
  • ゲート: 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, など句読点付きトークンを誤検出しないことを確認します。
  • ドキュメント

    • 完了したトークン化エッジケースのタスク項目を、関連するTODO一覧から削除しました。

nightly-todo and others added 2 commits August 23, 2026 18:08
実装完了は cli-ledger-cleanup が台帳の宣言と PR の変更を突き合わせて判定済み。マージと後始末を原子的にするため PR へ同梱する。
@aloekun

aloekun commented Aug 23, 2026

Copy link
Copy Markdown
Owner

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Aug 23, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: dd35ee16-254d-47e1-9926-61db34fbd3c3

📥 Commits

Reviewing files that changed from the base of the PR and between f57908d and 9da5363.

📒 Files selected for processing (4)
  • docs/claude-code-web-tasks.md
  • docs/todo-summary2.md
  • docs/todo15.md
  • src/hooks-post-tool-jj-op-verify/src/main.rs
💤 Files with no reviewable changes (3)
  • docs/claude-code-web-tasks.md
  • docs/todo-summary2.md
  • docs/todo15.md

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

detect_last_mutating_jj_op に、コミットメッセージ内の jj トークン化に関する回帰テストを追加しました。対応するTODO項目を3つのドキュメントから削除しました。

Changes

jj トークン化検証

Layer / File(s) Summary
トークン化回帰テスト
src/hooks-post-tool-jj-op-verify/src/main.rs
jj newによる既知の上書き挙動、jjnewの非検出、jj,の非検出をテストします。
関連TODOの削除
docs/claude-code-web-tasks.md, docs/todo-summary2.md, docs/todo15.md
完了したトークン化エッジケースのTODO項目を削除しました。

Estimated code review effort: 2 (Simple) | ~10 minutes

Merge Risk: ⚪ Minimal · up to 9da53

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: aloekun

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed タイトルは、jj の commit message tokenization edge case に対するテスト追加という主な変更を明確に示しています。
Docstring Coverage ✅ Passed Docstring check was indeterminate for this PR — some files could not be analyzed in time. Not blocking.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/nightly-285

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

🤖 PR Monitor 分析 (GitHub Actions バックストップ)

  • トリガー: issue_comment (created) / 実行 run
  • CI: rust (ubuntu-latest) pending / rust (windows-latest) pending / request pass / CodeRabbit pending (review in progress)
  • レビュー状況: CodeRabbit — レビュー未実施 (陽性証拠なし)。会話コメントは @coderabbitai review 依頼への Action performed 定型応答と Currently processing new changes... please wait の walkthrough 進行中通知のみで、reviews API は空配列、インライン指摘も 0 件。head SHA 9da53634... に対する actionable_comments / findings の陽性証拠がまだ無い。人間レビューも 0 件 (reviewDecision 空)。
  • Verdict: user_decision

Applicable Findings (Critical / High / Major)

(該当なし — レビュー未実施のため)

Applicable Findings (Medium 以下)

(該当なし)

Filtered (not applicable)

(該当なし)

軽量サマリー (レビュー指摘 0 件のため diff 概要のみ)

nightly-todo による自動 PR (順位 285 の消化)。変更ファイル 4 件:

  • src/hooks-post-tool-jj-op-verify/src/main.rs (+33): commit message 内に埋め込まれた jj keyword の tokenization edge-case を固定する回帰テストを 3 件追加 (split_whitespace が quote を認識しないことによる既知の限界を明示的に regression として固定、および jj token の完全一致要求を検証する 2 テスト)。純粋な unit test 追加でロジック変更なし。
  • docs/claude-code-web-tasks.md, docs/todo-summary2.md, docs/todo15.md: 完了した順位 285 の台帳エントリ削除 (該当箇所は元々 ✅ 済みの行/セクション削除のみ)。

次のアクション

  • CodeRabbit の walkthrough 完了と rust (ubuntu-latest / windows-latest) CI の完走を待つ (現時点では待たずに終了)。
  • CI 完走後、CodeRabbit のレビュー結果 (findings) が付いた時点で再度この分析を回し、陽性証拠に基づいた Verdict へ更新すること。

@aloekun
aloekun merged commit 1cc2303 into master Aug 25, 2026
4 checks passed
@aloekun
aloekun deleted the claude/nightly-285 branch August 25, 2026 15:09
aloekun added a commit that referenced this pull request Aug 25, 2026
変更系 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 行を削除。
aloekun added a commit that referenced this pull request Aug 26, 2026
変更系 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 行を削除。
aloekun added a commit that referenced this pull request Aug 27, 2026
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 不可になる点が分類から漏れていた。置き場所を
  着手時に決めることと、決めた時点の分類を明記した
aloekun added a commit that referenced this pull request Aug 27, 2026
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 不可になる点が分類から漏れていた。置き場所を
  着手時に決めることと、決めた時点の分類を明記した
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