test(hooks-session-start): stale_check_enabled の TOML パーステスト追加 (順位 284) - #324
Closed
aloekun wants to merge 1 commit into
Closed
test(hooks-session-start): stale_check_enabled の TOML パーステスト追加 (順位 284)#324aloekun wants to merge 1 commit into
aloekun wants to merge 1 commit into
Conversation
- 既存 staleness fixture に stale_check_enabled = true + assert を追加 - 未設定時に None (default-OFF、ADR-039) を固定する regression test を追加 - 完了タスクの行/エントリを claude-code-web-tasks.md / todo-summary2.md / todo15.md から削除 DoD: cargo test --workspace green (0 failed) + cargo clippy -p hooks-session-start clean Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JU2UF5SW8Dy76rpag9zr29
|
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)
📝 WalkthroughWalkthrough
Changesstale_check_enabled パース検証
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
🚥 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 |
Contributor
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)該当なし(レビュー未着のため指摘自体が存在しない) Applicable Findings (Medium 以下)該当なし Filtered (not applicable)該当なし 次のアクション
|
|
gh CLI write-path 検証用のテストコメントです (gh api -X POST)。セッション環境からの書き込み経路が通ることを確認しました。 Generated by Claude Code |
aloekun
added a commit
that referenced
this pull request
Aug 9, 2026
todo 順位 395。クローズ済み PR #365 のブランチを手で消したことで ADR-072 決定 3 の 除外マーカーが失われ、同じ順位が再選択された (PR #373)。決定 3 自体は設計どおりで、 ブランチの存在が着手済みマーカーである以上、浮いたブランチを定期的に片付ける場が要る。 **takt workflow には置けない。** 検出には git ls-remote / gh = ネットワークが要るが、 weekly-review.yaml は全 provider に network_access: false を課している (他 3 パイプラインは true)。1 つの scan のためにこれを反転すると whole-tree review 6 facet すべての隔離が 緩むため、/monthly-review が cli-telemetry-report を呼ぶのと同じく skill 側 (ADR-031 の L3 = 決定論層) に置いた。置き場所の判断基準 (ネットワークが要るか) を ADR-031 へ記録。 判定規則: - 紐づく PR がすべて closed/merged → 削除候補 - open が 1 本でもある → 対象外 (close 後に別 PR を開く / reopen が実在する) - PR が 1 件も無い → 対象外 (PR 未作成の作業中ブランチと区別できない) - trunk は常に対象外 / claude/nightly-* は除外しない (除外すると順位が二度と選ばれない) - state が未知の値 → open 扱い (保護側。誤って削除提案に載せない) **PR は全件引かずブランチごとに --head で引く。** 総 PR 数は単調増加する一方、remote ブランチ数は運用上小さく有界。全件方式は実装中に実際に破綻した (本リポジトリは PR が 300 件を超えており、書いた時点で既に上限に張り付いていた)。 **削除はしない。** 出力は人間がそのまま貼れる git push --delete までで、exe は実行 しない (ADR-022 / ADR-028)。ブランチ削除は外部可視かつ着手済みマーカーの破棄でもある。 **出力に wall-clock を含めない。** 同じ状態なら同じ出力にして週次 diff を取れるようにし、 「今週新たに浮いたブランチ」だけを読めるようにした。実行時刻は呼び手が記録する。 - 新規 crate src/cli-stale-branch-scan (classify = 純粋判定 / collect = fail-closed I/O) - unit test 25 件。取得失敗・上限到達・欠損フィールドはすべて Err に倒し、0 件と報告しない - pnpm stale-branch-scan / build:cli-stale-branch-scan (build:all にも登録) - ADR-031 に § 残存ブランチ検出 と L2/L3 の置き場所判断基準を追記 実走: 本リポジトリで削除候補 0 件、open PR 3 本 (#320/#324/#373) を正しく対象外と判定。 weekly-review skill (別リポジトリ claude-code-skills) 側の Step 1.0 / Phase 3 追記は 本 PR に含まれない。編集は済んでいるがコミットは未実施。 --- pre-push review 対応 --- security REJECT (High, SEC-NEW-cli-stale-branch-scan-main-L154): git の ref 名規則は `;` バッククォート `|` `$()` を許す (git check-ref-format で実測)。push 権限を持つ誰か (夜間/cloud harness の自動化を含む) が細工したブランチ名は、本レポートが設計として 出す「そのまま貼れる削除コマンド」経由でコピペ実行時に任意コマンドを実行し得る。 安全文字の allowlist を導入し、外れる名前には削除コマンドを生成しない。 **指摘の修正範囲は狭かったので広げた。** 同じブランチ名は削除提案表の 1 列目と 参考表 2 つにも出るため、コマンド欄だけ塞いでもバッククォート (コードスパン脱出) と `|` (表の列構造破壊) が残る。描画の全経路を単一の branch_cell() へ通し、危険文字を `?` へ潰したうえで印を付ける形にした。出口ごとに個別対策を足すと出口が増えたときに 同じ穴が空くため、安全文字集合の定義は 1 箇所に保つ。 simplicity (SIM-NEW-cli-stale-branch-scan-classify-L283): trunk 名を独自 hardcode して おり lib_jj_helpers::TRUNK_BOOKMARKS からずれて develop/trunk を守れていなかった。 is_trunk_bookmark 呼び出しに変更し、push-runner-config.toml の default_branch も 追加の保護対象として読む。 test 30 件 (危険文字が 3 表いずれにも生で出ないことの回帰固定を含む)。 workspace 全体 2,000 pass / clippy clean / lint 0 error。 --- pre-push review 2 巡目 --- simplicity needs_fix (High, SIM-NEW-cli-stale-branch-scan-main-L121): configured_trunk_branch() が top-level default_branch しか読まないが、本リポジトリの push-runner-config.toml は top-level をコメントアウトし [pr_size_check] / [docs_only_routing] の section override だけで trunk 名を決めている (ADR-051 の cross-config coupling)。master は TRUNK_BOOKMARKS に含まれるため masked だが、標準外の trunk 名を section override だけで設定している リポジトリでは None に落ち、trunk が削除候補として貼れるコマンド付きで出得た。 cli-push-runner の effective_default_branch() と同じ top-level → section fallback へ修正。 **実 config に対する回帰テストを追加した** (--ignored)。既存 5 件は合成 TOML で分岐を 固めるだけで、指摘の起点だった「このリポジトリの実 config が section override 構成で ある」事実を突いていない。実ファイルの構成が変わって解決不能になっても合成テストは 気づけないため、実ファイルから "master" が解決できることを値まで assert する。 test 36 件 (うち 1 件は cwd 依存の --ignored)。workspace 全体 2,005 pass / clippy clean。
1 task
aloekun
added a commit
that referenced
this pull request
Aug 9, 2026
todo 順位 395。クローズ済み PR #365 のブランチを手で消したことで ADR-072 決定 3 の 除外マーカーが失われ、同じ順位が再選択された (PR #373)。決定 3 自体は設計どおりで、 ブランチの存在が着手済みマーカーである以上、浮いたブランチを定期的に片付ける場が要る。 **takt workflow には置けない。** 検出には git ls-remote / gh = ネットワークが要るが、 weekly-review.yaml は全 provider に network_access: false を課している (他 3 パイプラインは true)。1 つの scan のためにこれを反転すると whole-tree review 6 facet すべての隔離が 緩むため、/monthly-review が cli-telemetry-report を呼ぶのと同じく skill 側 (ADR-031 の L3 = 決定論層) に置いた。置き場所の判断基準 (ネットワークが要るか) を ADR-031 へ記録。 判定規則: - 紐づく PR がすべて closed/merged → 削除候補 - open が 1 本でもある → 対象外 (close 後に別 PR を開く / reopen が実在する) - PR が 1 件も無い → 対象外 (PR 未作成の作業中ブランチと区別できない) - trunk は常に対象外 / claude/nightly-* は除外しない (除外すると順位が二度と選ばれない) - state が未知の値 → open 扱い (保護側。誤って削除提案に載せない) **PR は全件引かずブランチごとに --head で引く。** 総 PR 数は単調増加する一方、remote ブランチ数は運用上小さく有界。全件方式は実装中に実際に破綻した (本リポジトリは PR が 300 件を超えており、書いた時点で既に上限に張り付いていた)。 **削除はしない。** 出力は人間がそのまま貼れる git push --delete までで、exe は実行 しない (ADR-022 / ADR-028)。ブランチ削除は外部可視かつ着手済みマーカーの破棄でもある。 **出力に wall-clock を含めない。** 同じ状態なら同じ出力にして週次 diff を取れるようにし、 「今週新たに浮いたブランチ」だけを読めるようにした。実行時刻は呼び手が記録する。 - 新規 crate src/cli-stale-branch-scan (classify = 純粋判定 / collect = fail-closed I/O) - unit test 25 件。取得失敗・上限到達・欠損フィールドはすべて Err に倒し、0 件と報告しない - pnpm stale-branch-scan / build:cli-stale-branch-scan (build:all にも登録) - ADR-031 に § 残存ブランチ検出 と L2/L3 の置き場所判断基準を追記 実走: 本リポジトリで削除候補 0 件、open PR 3 本 (#320/#324/#373) を正しく対象外と判定。 weekly-review skill (別リポジトリ claude-code-skills) 側の Step 1.0 / Phase 3 追記は 本 PR に含まれない。編集は済んでいるがコミットは未実施。 --- pre-push review 対応 --- security REJECT (High, SEC-NEW-cli-stale-branch-scan-main-L154): git の ref 名規則は `;` バッククォート `|` `$()` を許す (git check-ref-format で実測)。push 権限を持つ誰か (夜間/cloud harness の自動化を含む) が細工したブランチ名は、本レポートが設計として 出す「そのまま貼れる削除コマンド」経由でコピペ実行時に任意コマンドを実行し得る。 安全文字の allowlist を導入し、外れる名前には削除コマンドを生成しない。 **指摘の修正範囲は狭かったので広げた。** 同じブランチ名は削除提案表の 1 列目と 参考表 2 つにも出るため、コマンド欄だけ塞いでもバッククォート (コードスパン脱出) と `|` (表の列構造破壊) が残る。描画の全経路を単一の branch_cell() へ通し、危険文字を `?` へ潰したうえで印を付ける形にした。出口ごとに個別対策を足すと出口が増えたときに 同じ穴が空くため、安全文字集合の定義は 1 箇所に保つ。 simplicity (SIM-NEW-cli-stale-branch-scan-classify-L283): trunk 名を独自 hardcode して おり lib_jj_helpers::TRUNK_BOOKMARKS からずれて develop/trunk を守れていなかった。 is_trunk_bookmark 呼び出しに変更し、push-runner-config.toml の default_branch も 追加の保護対象として読む。 test 30 件 (危険文字が 3 表いずれにも生で出ないことの回帰固定を含む)。 workspace 全体 2,000 pass / clippy clean / lint 0 error。 --- pre-push review 2 巡目 --- simplicity needs_fix (High, SIM-NEW-cli-stale-branch-scan-main-L121): configured_trunk_branch() が top-level default_branch しか読まないが、本リポジトリの push-runner-config.toml は top-level をコメントアウトし [pr_size_check] / [docs_only_routing] の section override だけで trunk 名を決めている (ADR-051 の cross-config coupling)。master は TRUNK_BOOKMARKS に含まれるため masked だが、標準外の trunk 名を section override だけで設定している リポジトリでは None に落ち、trunk が削除候補として貼れるコマンド付きで出得た。 cli-push-runner の effective_default_branch() と同じ top-level → section fallback へ修正。 **実 config に対する回帰テストを追加した** (--ignored)。既存 5 件は合成 TOML で分岐を 固めるだけで、指摘の起点だった「このリポジトリの実 config が section override 構成で ある」事実を突いていない。実ファイルの構成が変わって解決不能になっても合成テストは 気づけないため、実ファイルから "master" が解決できることを値まで assert する。 test 36 件 (うち 1 件は cwd 依存の --ignored)。workspace 全体 2,005 pass / clippy clean。 --- CodeRabbit レビュー対応 (#377、3 件) --- - ADR-031 に L3 skill の所在を明記。skill は本リポジトリではなく skills repo ($CLAUDE_SKILLS_REPO) にあり ~/.claude/skills/ へ deploy する構成 (ADR-062 の /monthly-review と同じ)。ADR がそれを書いていなかったため「ADR は L3 を定義して いるが実装が無い」と読めていた。各層の実体がどこにあるかの表を追加し、skill 側の 変更は PR diff に現れない帰結も明記した。 - ADR-031 の削除コマンドを実装に合わせて `--delete -- <branch>` へ修正。あわせて 「貼れるコマンドである以上ブランチ名は攻撃面」という設計理由 (-- 区切りと allowlist の 2 つの手当て) を ADR 側にも残した。実装だけが知っている状態を解消。 - gh 自体の失敗にもブランチ名を付ける。map_err が parse_pr_list の結果にしか 掛かっておらず、起動失敗 / timeout / 非ゼロ exit ではどのブランチで止まったか 分からなかった。最大 100 ブランチを順に回すため fail-closed 停止後の切り分けが 効かない。実行層を closure で受ける形にし、失敗経路をネットワーク無しで固定する 回帰テストを 3 件追加。 test 40 件 (うち --ignored 1)。workspace 全体 2,009 pass / clippy clean / lint 0 error。
aloekun
added a commit
that referenced
this pull request
Aug 9, 2026
todo 順位 395。クローズ済み PR #365 のブランチを手で消したことで ADR-072 決定 3 の 除外マーカーが失われ、同じ順位が再選択された (PR #373)。決定 3 自体は設計どおりで、 ブランチの存在が着手済みマーカーである以上、浮いたブランチを定期的に片付ける場が要る。 **takt workflow には置けない。** 検出には git ls-remote / gh = ネットワークが要るが、 weekly-review.yaml は全 provider に network_access: false を課している (他 3 パイプラインは true)。1 つの scan のためにこれを反転すると whole-tree review 6 facet すべての隔離が 緩むため、/monthly-review が cli-telemetry-report を呼ぶのと同じく skill 側 (ADR-031 の L3 = 決定論層) に置いた。置き場所の判断基準 (ネットワークが要るか) を ADR-031 へ記録。 判定規則: - 紐づく PR がすべて closed/merged → 削除候補 - open が 1 本でもある → 対象外 (close 後に別 PR を開く / reopen が実在する) - PR が 1 件も無い → 対象外 (PR 未作成の作業中ブランチと区別できない) - trunk は常に対象外 / claude/nightly-* は除外しない (除外すると順位が二度と選ばれない) - state が未知の値 → open 扱い (保護側。誤って削除提案に載せない) **PR は全件引かずブランチごとに --head で引く。** 総 PR 数は単調増加する一方、remote ブランチ数は運用上小さく有界。全件方式は実装中に実際に破綻した (本リポジトリは PR が 300 件を超えており、書いた時点で既に上限に張り付いていた)。 **削除はしない。** 出力は人間がそのまま貼れる git push --delete までで、exe は実行 しない (ADR-022 / ADR-028)。ブランチ削除は外部可視かつ着手済みマーカーの破棄でもある。 **出力に wall-clock を含めない。** 同じ状態なら同じ出力にして週次 diff を取れるようにし、 「今週新たに浮いたブランチ」だけを読めるようにした。実行時刻は呼び手が記録する。 - 新規 crate src/cli-stale-branch-scan (classify = 純粋判定 / collect = fail-closed I/O) - unit test 25 件。取得失敗・上限到達・欠損フィールドはすべて Err に倒し、0 件と報告しない - pnpm stale-branch-scan / build:cli-stale-branch-scan (build:all にも登録) - ADR-031 に § 残存ブランチ検出 と L2/L3 の置き場所判断基準を追記 実走: 本リポジトリで削除候補 0 件、open PR 3 本 (#320/#324/#373) を正しく対象外と判定。 weekly-review skill (別リポジトリ claude-code-skills) 側の Step 1.0 / Phase 3 追記は 本 PR に含まれない。編集は済んでいるがコミットは未実施。 --- pre-push review 対応 --- security REJECT (High, SEC-NEW-cli-stale-branch-scan-main-L154): git の ref 名規則は `;` バッククォート `|` `$()` を許す (git check-ref-format で実測)。push 権限を持つ誰か (夜間/cloud harness の自動化を含む) が細工したブランチ名は、本レポートが設計として 出す「そのまま貼れる削除コマンド」経由でコピペ実行時に任意コマンドを実行し得る。 安全文字の allowlist を導入し、外れる名前には削除コマンドを生成しない。 **指摘の修正範囲は狭かったので広げた。** 同じブランチ名は削除提案表の 1 列目と 参考表 2 つにも出るため、コマンド欄だけ塞いでもバッククォート (コードスパン脱出) と `|` (表の列構造破壊) が残る。描画の全経路を単一の branch_cell() へ通し、危険文字を `?` へ潰したうえで印を付ける形にした。出口ごとに個別対策を足すと出口が増えたときに 同じ穴が空くため、安全文字集合の定義は 1 箇所に保つ。 simplicity (SIM-NEW-cli-stale-branch-scan-classify-L283): trunk 名を独自 hardcode して おり lib_jj_helpers::TRUNK_BOOKMARKS からずれて develop/trunk を守れていなかった。 is_trunk_bookmark 呼び出しに変更し、push-runner-config.toml の default_branch も 追加の保護対象として読む。 test 30 件 (危険文字が 3 表いずれにも生で出ないことの回帰固定を含む)。 workspace 全体 2,000 pass / clippy clean / lint 0 error。 --- pre-push review 2 巡目 --- simplicity needs_fix (High, SIM-NEW-cli-stale-branch-scan-main-L121): configured_trunk_branch() が top-level default_branch しか読まないが、本リポジトリの push-runner-config.toml は top-level をコメントアウトし [pr_size_check] / [docs_only_routing] の section override だけで trunk 名を決めている (ADR-051 の cross-config coupling)。master は TRUNK_BOOKMARKS に含まれるため masked だが、標準外の trunk 名を section override だけで設定している リポジトリでは None に落ち、trunk が削除候補として貼れるコマンド付きで出得た。 cli-push-runner の effective_default_branch() と同じ top-level → section fallback へ修正。 **実 config に対する回帰テストを追加した** (--ignored)。既存 5 件は合成 TOML で分岐を 固めるだけで、指摘の起点だった「このリポジトリの実 config が section override 構成で ある」事実を突いていない。実ファイルの構成が変わって解決不能になっても合成テストは 気づけないため、実ファイルから "master" が解決できることを値まで assert する。 test 36 件 (うち 1 件は cwd 依存の --ignored)。workspace 全体 2,005 pass / clippy clean。 --- CodeRabbit レビュー対応 (#377、3 件) --- - ADR-031 に L3 skill の所在を明記。skill は本リポジトリではなく skills repo ($CLAUDE_SKILLS_REPO) にあり ~/.claude/skills/ へ deploy する構成 (ADR-062 の /monthly-review と同じ)。ADR がそれを書いていなかったため「ADR は L3 を定義して いるが実装が無い」と読めていた。各層の実体がどこにあるかの表を追加し、skill 側の 変更は PR diff に現れない帰結も明記した。 - ADR-031 の削除コマンドを実装に合わせて `--delete -- <branch>` へ修正。あわせて 「貼れるコマンドである以上ブランチ名は攻撃面」という設計理由 (-- 区切りと allowlist の 2 つの手当て) を ADR 側にも残した。実装だけが知っている状態を解消。 - gh 自体の失敗にもブランチ名を付ける。map_err が parse_pr_list の結果にしか 掛かっておらず、起動失敗 / timeout / 非ゼロ exit ではどのブランチで止まったか 分からなかった。最大 100 ブランチを順に回すため fail-closed 停止後の切り分けが 効かない。実行層を closure で受ける形にし、失敗経路をネットワーク無しで固定する 回帰テストを 3 件追加。 test 40 件 (うち --ignored 1)。workspace 全体 2,009 pass / clippy clean / lint 0 error。
Owner
Author
|
Claude Code WebからPRを作るテスト、確認できたのでクローズ |
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 free
to 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.
概要
docs/claude-code-web-tasks.md の順位 284 (PR #267 post-merge-feedback T2-1 採用) を消化する。
StalenessConfig.stale_check_enabled(Option<bool>) のパース経路が未テストで silent degrade (機能が黙って無効化) のリスクがあったため、regression test で固定する。変更内容
src/hooks-session-start/src/hooks_config.rshooks_config_parses_session_start_staleness_sectionの fixture にstale_check_enabled = true+ assert を追加None(default-OFF、ADR-039 § 1) となることを固定するstaleness_stale_check_enabled_defaults_to_none_when_omittedを新規追加docs/claude-code-web-tasks.md— Batch 1 の順位 284 行docs/todo-summary2.md— 順位 284 行docs/todo15.md— 詳細エントリDoD
cargo test --workspacegreen (0 failed、hooks_config テスト 5 件 pass)cargo clippy -p hooks-session-start --all-targetsclean🤖 Generated with Claude Code
https://claude.ai/code/session_01JU2UF5SW8Dy76rpag9zr29
Generated by Claude Code
Summary by CodeRabbit
テスト
stale_check_enabledのTOMLパースを検証するテストを追加しました。ドキュメント