feat(nightly-todo): PR タイトルに実装内容を入れる (ADR-072 決定 17) - #389
Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
📝 WalkthroughWalkthrough台帳に任意の Changes夜間PRタイトル処理
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant Ledger
participant TaskSelector
participant NightlyWorkflow
participant GitHubCLI
Ledger->>TaskSelector: PRタイトルを読み取る
TaskSelector->>TaskSelector: screen_for_titleで処理
TaskSelector-->>NightlyWorkflow: pr_title_displayを出力
NightlyWorkflow->>NightlyWorkflow: PR_TITLEを決定
NightlyWorkflow->>GitHubCLI: gh pr create --title PR_TITLE
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 |
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)(該当なし — レビュー指摘 0 件) Applicable Findings (Medium 以下)(該当なし) Filtered (not applicable)(該当なし) 次のアクション
|
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/cli-nightly-task-select/src/ledger/screening.rs`:
- Around line 110-130: Extend is_bidi_or_invisible_format_char to cover the
complete intended Unicode format/invisible character set, including U+2061 and
any other omitted characters. Ensure both reject_prompt_frame_escape in ledger
parsing and screen_for_title use this predicate so such characters are rejected
in framing and title screening. Add regression coverage for a payload containing
U+2061 in both paths.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: d3e01b78-affd-4ede-a0ff-6520ba425f66
📒 Files selected for processing (6)
.github/workflows/nightly-todo.ymldocs/adr/adr-072-nightly-todo-loop.mddocs/claude-code-web-tasks.mdsrc/cli-nightly-task-select/src/ledger.rssrc/cli-nightly-task-select/src/ledger/screening.rssrc/cli-nightly-task-select/src/main.rs
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)
Applicable Findings (Medium 以下)(該当なし) Filtered (not applicable)(該当なし — 唯一の指摘は project fitness filter を通過。プラットフォーム適合性・ADR 意図的設計・sensitive-file・スコープ外・false positive のいずれにも該当せず) 次のアクション
|
タイトルが "feat: 順位 NNN の無人実装 (nightly-todo)" 固定で、自動実行したことしか 分からなかった。翌朝 PR 一覧を見た人間が中身を開くまで何が入っているか判断できない。 - 台帳へ optional な PRタイトル 列を追加する (注意 列と同じ扱い、列が無くても動く) - タイトルは <PRタイトル列> (nightly-todo 順位 NNN) の形にする - 未記入の行は従来のタイトルへフォールバックする (移行期間を許す) - タイトル用の screening (screen_for_title) を新設する - 出力契約の allowlist と検証の両方へ pr_title_display を足す - ADR-072 決定 17 として記録し、決定 14 へ 3 つ目の公開面を追記する タイトルはコードスパンで囲めないため、本文用 screening をそのまま流用すると囲いが 無い状態で @mention と改行が素通りする。出口ごとに必要な処理が違うという決定 14 の 方針に従い、空白の 1 行化・@ の全角化・60 文字上限を行う別関数にした。 実装中に自分のバグを 2 件検出した。optional 列を max_index() へ数え漏らして index out of bounds で panic する経路 (実測で再現し exit 2 へ修正) と、本文用 screening が改行を空白化ではなく除去する実挙動の取り違え。 ADR-072 決定 17
🤖 PR Monitor 分析 (GitHub Actions バックストップ)
Applicable Findings (Critical / High / Major)
Applicable Findings (Medium 以下)(該当なし) Filtered (not applicable)(該当なし) 次のアクション
|
634b2c1 to
191d462
Compare
本セッションで実施した WP-18 (2) 運用問題 5 件の対処 (#385/#386/#388/#389) について、 実走観測の記録・計画書の整理・feedback 採否の登録をまとめて行う。 ## 実走観測の記録 - ADR-072 へ定常運用 2 巡目 (PR #387) の観測を追加する。決定 15-17 投入後の 9 項目が設計どおり動いたことと、review-request の成功判定が「反応の有無」で 止まっている (拒否も success になる) ことを事実として記録する - ADR-019 へレート制限の競合が記録の翌日に実地で再現したことを追加する - 順位 386 の観測を 7 回 → 9 回へ更新する。うち 1 件は空コミットではなく 「近い revset を優先する規則」そのものが原因で、本命の対処案だけでは 解決しない可能性がある点を併記する ## 計画書の整理 (ADR-073 新設) - 完了条件の切り方 (残作業を 3 区分に分け、その WP が生んだ問題は完了条件に 含め、WP 外の派生は含めない) を ADR-073 として切り出す - WP-18 節を 71 行 → 35 行へ整理し、完了記録を削除して残作業のみにする - ローカル実行時の jj workspace 注記を ADR-072 へ移す ## post-merge feedback 採否 (順位 414-432) - 採用候補 24 件のうち 6 件は当該 PR 内で実装済みのため対象外とした (実物と照合して確認) - 採用 19 件を系統 A-G + セッション由来へ分類して登録する - SIGPIPE resilience は却下する。レポートが「実測証拠」とした recovery が 実際には発生しておらず (run 1 回・completed・marker の痕跡なし)、提案内容も ADR-030 §L1 で実装済みだった。feedback レポート自身が根拠を誤った初の実例 として記録し、順位 403 の対象へ含めるよう申し送る ## 付随 - todo21.md が 57KB (50KB 閾値超過) のため todo22.md を新設する - todo-summary.md の「現行の追加先」が todo14.md のまま stale だったので直す - cli-docs-lint が検出した preamble の数詞ずれ (23 → 24) を 9 ファイルで更新する ADR-073 / 順位 414-432
本セッションで実施した WP-18 (2) 運用問題 5 件の対処 (#385/#386/#388/#389) について、 実走観測の記録・計画書の整理・feedback 採否の登録をまとめて行う。 ## 実走観測の記録 - ADR-072 へ定常運用 2 巡目 (PR #387) の観測を追加する。決定 15-17 投入後の 9 項目が設計どおり動いたことと、review-request の成功判定が「反応の有無」で 止まっている (拒否も success になる) ことを事実として記録する - ADR-019 へレート制限の競合が記録の翌日に実地で再現したことを追加する - 順位 386 の観測を 7 回 → 9 回へ更新する。うち 1 件は空コミットではなく 「近い revset を優先する規則」そのものが原因で、本命の対処案だけでは 解決しない可能性がある点を併記する ## 計画書の整理 (ADR-073 新設) - 完了条件の切り方 (残作業を 3 区分に分け、その WP が生んだ問題は完了条件に 含め、WP 外の派生は含めない) を ADR-073 として切り出す - WP-18 節を 71 行 → 35 行へ整理し、完了記録を削除して残作業のみにする - ローカル実行時の jj workspace 注記を ADR-072 へ移す ## post-merge feedback 採否 (順位 414-432) - 採用候補 24 件のうち 6 件は当該 PR 内で実装済みのため対象外とした (実物と照合して確認) - 採用 19 件を系統 A-G + セッション由来へ分類して登録する - SIGPIPE resilience は却下する。レポートが「実測証拠」とした recovery が 実際には発生しておらず (run 1 回・completed・marker の痕跡なし)、提案内容も ADR-030 §L1 で実装済みだった。feedback レポート自身が根拠を誤った初の実例 として記録し、順位 403 の対象へ含めるよう申し送る ## 付随 - todo21.md が 57KB (50KB 閾値超過) のため todo22.md を新設する - todo-summary.md の「現行の追加先」が todo14.md のまま stale だったので直す - cli-docs-lint が検出した preamble の数詞ずれ (23 → 24) を 9 ファイルで更新する ADR-073 / 順位 414-432
本セッションで実施した WP-18 (2) 運用問題 5 件の対処 (#385/#386/#388/#389) について、 実走観測の記録・計画書の整理・feedback 採否の登録をまとめて行う。 ## 実走観測の記録 - ADR-072 へ定常運用 2 巡目 (PR #387) の観測を追加する。決定 15-17 投入後の 9 項目が設計どおり動いたことと、review-request の成功判定が「反応の有無」で 止まっている (拒否も success になる) ことを事実として記録する - ADR-019 へレート制限の競合が記録の翌日に実地で再現したことを追加する - 順位 386 の観測を 7 回 → 9 回へ更新する。うち 1 件は空コミットではなく 「近い revset を優先する規則」そのものが原因で、本命の対処案だけでは 解決しない可能性がある点を併記する ## 計画書の整理 (ADR-073 新設) - 完了条件の切り方 (残作業を 3 区分に分け、その WP が生んだ問題は完了条件に 含め、WP 外の派生は含めない) を ADR-073 として切り出す - WP-18 節を 71 行 → 35 行へ整理し、完了記録を削除して残作業のみにする - ローカル実行時の jj workspace 注記を ADR-072 へ移す ## post-merge feedback 採否 (順位 414-432) - 採用候補 24 件のうち 6 件は当該 PR 内で実装済みのため対象外とした (実物と照合して確認) - 採用 19 件を系統 A-G + セッション由来へ分類して登録する - SIGPIPE resilience は却下する。レポートが「実測証拠」とした recovery が 実際には発生しておらず (run 1 回・completed・marker の痕跡なし)、提案内容も ADR-030 §L1 で実装済みだった。feedback レポート自身が根拠を誤った初の実例 として記録し、順位 403 の対象へ含めるよう申し送る ## 付随 - todo21.md が 57KB (50KB 閾値超過) のため todo22.md を新設する - todo-summary.md の「現行の追加先」が todo14.md のまま stale だったので直す - cli-docs-lint が検出した preamble の数詞ずれ (23 → 24) を 9 ファイルで更新する ADR-073 / 順位 414-432
Summary
<台帳の PRタイトル列> (nightly-todo 順位 NNN)にした。実装内容と自動作成の両方が PR 一覧から読める注意列と同じ扱いで、列が無い台帳でも従来どおり動く)。無人可の 6 行を記入済みscreen_for_titleを新設した(3 つ目の公開面。コードスパンで囲めないため本文用を流用できない)feat: 順位 NNN の無人実装 (nightly-todo)へフォールバックするledger.rsからledger/screening.rsを切り出した(責務としても「出口ごとの無害化」で独立)Context
Why: 2026-08-11 に PR #387(順位 339 の夜間実装)を観測した際、タイトルが
feat: 順位 339 の無人実装 (nightly-todo)固定で、自動実行したことしか分からないことが判明した。人間が作る PR(feat(review-request): bot 作成 PR へ人間資格情報で CodeRabbit レビューを要求する)と比べて一覧上の情報量が明確に劣り、翌朝レビューする人間が中身を開くまで対応を判断できない。Scope decision:
内容列を切り詰める案は、あれが agent への依頼文であってタイトルではないため採らなかった(機械的に切っても「何を実装したか」にならず、conventional commits の prefix もfeat:固定のままになる)なぜ screening を分けたか: 既存の
screen_for_public_outputの無害化は「workflow が戻り値をコードスパンで囲む」ことが前提で、@mentionと markdown を verbatim に残す設計だった(コードスパン内では描画も通知も起きないため)。PR タイトルはコードスパンにできないので、そのまま流用すると囲いが無い状態で素通りする。screen_for_titleは追加で以下を行う。--titleの引数を壊す@→ 全角@Validation
cargo test --workspace: 全 crate green。cli-nightly-task-selectは 47 → 56 pass(9 件追加)cargo clippy --workspace --all-targets: 警告 0 /pnpm lint:docs/ markdownlint: 0 errorverdict=APPROVE/ Severity None実装中に検出した自分のバグ 2 件
Columns::max_index()にpr_titleを含め忘れ、末尾セルが欠けた行が列数チェックを通り抜けていたindex out of bounds: the len is 4 but the index is 4)→ 修正後は exit 2 の loud な停止になることを再確認前者の教訓(「optional」はヘッダに列が無くてよいという意味であって、ヘッダにあるのに行に無くてよいのではない)はコード doc に残した。
出力契約の注意
cli-nightly-task-selectの新出力pr_title_displayは、workflow の allowlist(grep -E '^(...)=')と出力契約の検証の両方へ足してある。片方だけだと新しい出力が黙って捨てられ、毎晩フォールバックし続ける形で劣化する — これは workflow のコメントが元から警告していた失敗モードそのもの。検証 step はpr_title_display=の行の存在を見る(値は空でもよい)。References
Summary by CodeRabbit
新機能
改善