Skip to content

feat(hooks-session-start): 月次レビュー起動 reminder (L1) を追加 (WP-12 step 2/3, ADR-062) - #331

Merged
aloekun merged 1 commit into
masterfrom
feat/monthly-review-l1-reminder
Jul 29, 2026
Merged

feat(hooks-session-start): 月次レビュー起動 reminder (L1) を追加 (WP-12 step 2/3, ADR-062)#331
aloekun merged 1 commit into
masterfrom
feat/monthly-review-l1-reminder

Conversation

@aloekun

@aloekun aloekun commented Jul 29, 2026

Copy link
Copy Markdown
Owner

概要

月次ハーネス ROI レビュー (docs/monthly-harness-roi-review-plan.md) の Phase 2 (PR-3 前半): L1 reminder。SessionStart hook に /monthly-review skill 起動 reminder を追加する (ADR-062、WP-12 step 2/3、試験運用)。

weekly_review module のパターンを踏襲しつつ、月次向けに failed marker 経路を持たない 構成 (設計決定 1: L2 の月次集計 cli-telemetry-report は決定論 exe で高速なため resume 機構を採らない)。

変更内容

  • hooks_config.rs: MonthlyReviewReminderConfig (enabled / threshold_days / system_message_enabled) を追加し SessionStartConfig に配線。
  • monthly_review.rs (新 module): last-run staleness の 1 経路。設計決定 3 の教訓 (a)〜(d) を適用。
    • .claude/monthly-review-last-run.jsonlast_run_at 内容 timestamp で判定 (mtime 非依存、PastTime で未来値を Stale 扱い、silent-fresh 防止 / ADR-031 教訓)
    • lib_jj_helpers::resolve_main_workspace_rootmain workspace root に canonical 化 (ADR-045 状態分裂対策)
    • SingleLineMessagesystemMessage opt-in (ADR-059)
    • telemetry id monthly_review_reminder / warn で計装 (ADR-055)
    • threshold の code default = 28 日 (ADR-053/061 の撤去粒度「4 週間」と整合)
  • main.rs: append_cwd_nudges から配線。weekly + monthly は systemMessage スロットが 1 つのため combine_system_messages で 1 行に合成。50 行ガイドライン (順位 48) 遵守で append_review_reminder_nudges に分割。
  • .claude/hooks-config.toml: enabled = true / threshold_days = 28 / system_message_enabled = true で dogfood 有効化 (ADR-039: code default は OFF、派生 deploy では section を置かず完全 skip)。
  • docs/monthly-harness-roi-review-plan.md: Phase 2 を「✅ 実装完了」に更新。

検証

  • cargo test --workspace — 全 crate green (hooks-session-start 120 件、うち新規 monthly_review 21 + config parse 2 + combine 3)
  • cargo clippy --workspace --all-targets -- -D warnings — warning なし
  • pnpm lint:md — 0 error
  • pre-push-review (takt): APPROVE (simplicity)

補足 / 既知の follow-up

monthly_review.rsweekly_review.rs と近い構造だが、設計決定 3 の明示に従う意図的な mirror。threshold_days と weekly の reminder_threshold_days のフィールド名非対称も設計決定 3 の表記に従ったもの。3 つ目の reminder が生じる場合は共通 last_run_staleness helper への抽出を検討 (takt simplicity review の non-blocking 指摘、将来拡張)。

Phase 3 (L3 skill /monthly-review + ADR-062 新規 + ADR-055/053/061 追記) は後続 PR で対応する。

Summary by CodeRabbit

  • 新機能

    • セッション開始時に、月次レビューの実施時期を知らせるリマインダーを追加しました。
    • /monthly-review の起動を促す補足情報と、ユーザーに表示される通知に対応しました。
    • 週次・月次リマインダーが同時に発生した場合も、通知をまとめて表示します。
  • ドキュメント

    • 月次レビューの動作仕様、設定、検証内容を更新しました。

…, ADR-062)

月次ハーネス ROI レビュー (docs/monthly-harness-roi-review-plan.md) の Phase 2。SessionStart hook に `/monthly-review` skill 起動 reminder を追加する。

- hooks_config.rs: MonthlyReviewReminderConfig (enabled / threshold_days / system_message_enabled)
- monthly_review.rs (新 module): last-run staleness の 1 経路。last_run_at 内容 timestamp で判定 (mtime 非依存)、resolve_main_workspace_root で main-root canonical 化 (ADR-045)、SingleLineMessage で systemMessage opt-in (ADR-059)、telemetry id monthly_review_reminder / warn で計装 (ADR-055)。weekly と異なり failed marker 経路なし (設計決定 1)。
- main.rs: append_cwd_nudges から配線、weekly + monthly の systemMessage を combine_system_messages で 1 行合成。50 行ガイドライン遵守で append_review_reminder_nudges に分割。
- hooks-config.toml: enabled=true / threshold_days=28 で dogfood (ADR-039: code default OFF)。

cargo test --workspace / cargo clippy --workspace --all-targets -- -D warnings / pnpm lint:md 全通。
@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

月次レビューリマインダーの設定、last-run状態に基づく発火判定、追加コンテキストとsystemMessageの生成、SessionStartへのweekly併合処理、関連テストと計画ドキュメントを追加しました。

Changes

月次レビューリマインダー

Layer / File(s) Summary
設定契約とdogfood設定
src/hooks-session-start/src/hooks_config.rs, .claude/hooks-config.toml
monthly_review_reminder のTOML設定型とSessionStart設定フィールドを追加し、enabledthreshold_dayssystem_message_enabled のパースをテストしました。
状態判定とリマインダー生成
src/hooks-session-start/src/monthly_review.rs
main workspace rootの状態ファイルからlast_run_atを読み取り、Missing、Stale、ElapsedDays、Unreadableを判定して、発火時の追加コンテキストと任意のSingleLineMessageを生成します。関連する境界値、欠損、不正値、未来値、mtime非依存動作をテストしました。
SessionStart統合と計画更新
src/hooks-session-start/src/main.rs, docs/monthly-harness-roi-review-plan.md
weeklyとmonthlyのリマインダーを評価し、追加コンテキストを追記しながら複数のsystemMessageを/で結合して返す処理を追加しました。計画書に実装内容と検証結果を反映しました。

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant SessionStart
  participant monthly_review
  participant LastRunFile
  participant HookResponse
  SessionStart->>monthly_review: compute monthly reminder
  monthly_review->>LastRunFile: read last_run_at
  LastRunFile-->>monthly_review: last-run state
  monthly_review-->>SessionStart: nudge with context and optional message
  SessionStart->>HookResponse: combine weekly and monthly messages
Loading

Possibly related PRs

🚥 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 月次レビュー起動 reminder の追加を端的に示しており、変更内容の主旨と一致しています。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 feat/monthly-review-l1-reminder

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: CodeRabbit のみ pending (Review in progress)。他の CI check なし。mergeStateStatus は UNSTABLE (この pending check に起因)。
  • レビュー状況: 人間レビューなし (reviewDecision 空)。CodeRabbit はレビュー未着 (自動生成の "Currently processing new changes..." 通知のみで実質的な findings は 0 件)。インラインコメント・会話コメントとも findings なし。
  • Verdict: user_decision (CodeRabbit レビュー未完了のため暫定。findings 0 件時点のルールに従えば approved 相当だが、レビュー自体が in-progress のため最終判定は次回レビュー完了後に再評価を推奨)

Applicable Findings (Critical / High / Major)

該当なし (レビュー未着のため findings 自体が存在しない)。

Applicable Findings (Medium 以下)

該当なし。

Filtered (not applicable)

該当なし。

Diff 概要 (軽量サマリー)

変更ファイル 5件:

File 変更概要
.claude/hooks-config.toml [session_start.monthly_review_reminder] 新設 (enabled=true / threshold_days=28 / system_message_enabled=true、dogfood 有効化)
docs/monthly-harness-roi-review-plan.md Phase 2 (L1 reminder) 実装完了の記録・設計決定の追記
src/hooks-session-start/src/hooks_config.rs MonthlyReviewReminderConfig struct 追加 + parse テスト2件
src/hooks-session-start/src/main.rs append_cwd_nudgesappend_review_reminder_nudges に拡張し weekly/monthly 両 reminder を配線、combine_system_messages で systemMessage 1行合成 (テスト3件)
src/hooks-session-start/src/monthly_review.rs (新規, 566行) 月次レビュー reminder 本体: last-run staleness 判定 (.claude/monthly-review-last-run.json)、main-workspace-root canonical化 (ADR-045)、systemMessage/additionalContext 2層出力 (ADR-059)、単体テスト21件

diff 内容は PR body に記載の設計 (ADR-062, ADR-039 experimental pattern, ADR-045 main-root canonical化, ADR-059 2層可視化) と整合しており、逸脱は見当たらない。

次のアクション

  • CodeRabbit のレビュー完了を待って、findings が投稿され次第 (人間 or 次回ローカルセッションで) 再分析すること。
  • CI check が CodeRabbit のみで pending 状態が続く場合、他に必須 CI が構成されているか (build/test workflow の起動有無) を確認すると良い。

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/hooks-session-start/src/monthly_review.rs (1)

40-138: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚖️ Poor tradeoff

weekly_review.rs とほぼ同一のロジックが複製されています。

MonthlyLastRunState / MonthlyLastRunFile / last_run_state_from_content / *_staleness_hits / *_staleness_labelweekly_review.rs の対応関数と実質同一です (異なるのは path 定数と文言のみ)。将来 silent-fresh 系の修正が入ると片側だけ直す事故が起きやすいため、last_run_state(enum + JSON parse + 経過日数導出) を共通 module へ切り出すことを検討してください。今回のスコープ外で構いません。

🤖 Prompt for 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.

In `@src/hooks-session-start/src/monthly_review.rs` around lines 40 - 138, 共有の
last-run 状態判定ロジックが monthly_review.rs と weekly_review.rs
に重複しているため、MonthlyLastRunState、MonthlyLastRunFile、last_run_state_from_content、および
staleness 判定・ラベル処理を共通モジュールへ移し、両レビュー処理から再利用してください。各側には path 定数と固有の表示文言だけを残し、既存の
Missing、Stale、Unreadable、経過日数の挙動を維持してください。
🤖 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.

Nitpick comments:
In `@src/hooks-session-start/src/monthly_review.rs`:
- Around line 40-138: 共有の last-run 状態判定ロジックが monthly_review.rs と
weekly_review.rs
に重複しているため、MonthlyLastRunState、MonthlyLastRunFile、last_run_state_from_content、および
staleness 判定・ラベル処理を共通モジュールへ移し、両レビュー処理から再利用してください。各側には path 定数と固有の表示文言だけを残し、既存の
Missing、Stale、Unreadable、経過日数の挙動を維持してください。

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 5e06fef9-e6c3-49e4-ba9f-bc7913bf9e2d

📥 Commits

Reviewing files that changed from the base of the PR and between e196d07 and 4c38b15.

📒 Files selected for processing (5)
  • .claude/hooks-config.toml
  • docs/monthly-harness-roi-review-plan.md
  • src/hooks-session-start/src/hooks_config.rs
  • src/hooks-session-start/src/main.rs
  • src/hooks-session-start/src/monthly_review.rs

@github-actions

Copy link
Copy Markdown
Contributor

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

  • トリガー: pull_request_review (submitted) / 実行 run
  • CI: analyze (本 workflow自身) pending (実行中のため自己参照的に未完了、想定通り) / CodeRabbit pass (Review completed)。mergeStateStatus は UNSTABLE だが要因は上記 pending の1件のみ。
  • レビュー状況: 人間レビューなし (reviewDecision 空)。CodeRabbit が新規レビューを投稿 (COMMENTED, 2026-07-29T18:18:08Z) — nitpick 1件 (Trivial)。インラインコメント・request changes なし。
  • Verdict: approved (該当 finding は CodeRabbit 申告の Trivial 1件のみで、CodeRabbit 自身も「今回のスコープ外で構いません」と明記した任意の将来改善提案。ブロッキング要素なし)

Applicable Findings (Critical / High / Major)

該当なし。

Applicable Findings (Medium 以下)

# File (Line) Reviewer Issue Recommended Action
1 src/hooks-session-start/src/monthly_review.rs (40-138) CodeRabbit weekly_review.rs とほぼ同一の last-run 状態判定ロジック (MonthlyLastRunState/MonthlyLastRunFile/last_run_state_from_content/staleness 判定・ラベル処理) が複製されている (Trivial) 現時点では対応不要 (CodeRabbit 自身が「今回のスコープ外で構いません」と明記)。本機能は ADR-062/ADR-039 に基づく試験運用 (dogfood 3回で本採用/却下判定) のため、共通module化は promotion 判定後に検討する方が [[ADR-024]]・[[ADR-044]] の「早期の共通化はリスク」判断基準と整合的

Filtered (not applicable)

該当なし。

次のアクション

  • 今回の CodeRabbit nitpick は非ブロッキングであり対応不要。monthly_review 機能の dogfood 3回終了・本採用判定時に、weekly_review.rs との共通ロジック抽出 (ADR-044 層1「2 crate/module で重複、variant として export を検討」相当) をあわせて再検討することを推奨。
  • 現在 CI check は CodeRabbit と本 workflow (analyze) のみ。build/test 系の必須 CI が別途構成されているか要確認 (未構成なら意図通りか要確認)。

@aloekun
aloekun merged commit 453620e into master Jul 29, 2026
2 checks passed
@aloekun
aloekun deleted the feat/monthly-review-l1-reminder branch July 29, 2026 19:37
aloekun added a commit that referenced this pull request Jul 30, 2026
月次ハーネス ROI レビュー (docs/monthly-harness-roi-review-plan.md) の Phase 3。L3 skill (/monthly-review、skills repo で別途 commit) に対応する本 repo の docs を整備する。

- ADR-062 新規: 月次ハーネス ROI レビューの背景/設計決定/ユーザー決定事項を正式記録 (試験運用、ADR-039 3 点セット)。cli-telemetry-report (L2) + SessionStart reminder (L1、#331) + /monthly-review skill (L3) の 3 層。
- ADR-055 amendment: WP-12 step 2/3 消化 + 出力先の週次→月次変更。
- ADR-053 / ADR-061 追記: 撤去判定 (4 週間非観測) を月次レビューが連続 2 か月発火 0 で機械 promote。
- CLAUDE.md index に ADR-062 追加。
- todo 整理: todo-summary2.md の順位 307/308/312 削除、todo16.md の WP-12 step2/step3/retention セクション削除、harness-improvement-plan.md の WP-12 状態更新。

docs-only。pnpm lint:md 全通。
aloekun added a commit that referenced this pull request Jul 30, 2026
月次ハーネス ROI レビュー (docs/monthly-harness-roi-review-plan.md) の Phase 3。L3 skill (/monthly-review、skills repo で別途 commit) に対応する本 repo の docs を整備する。

- ADR-062 新規: 月次ハーネス ROI レビューの背景/設計決定/ユーザー決定事項を正式記録 (試験運用、ADR-039 3 点セット)。cli-telemetry-report (L2) + SessionStart reminder (L1、#331) + /monthly-review skill (L3) の 3 層。
- ADR-055 amendment: WP-12 step 2/3 消化 + 出力先の週次→月次変更。
- ADR-053 / ADR-061 追記: 撤去判定 (4 週間非観測) を月次レビューが連続 2 か月発火 0 で機械 promote。
- CLAUDE.md index に ADR-062 追加。
- todo 整理: todo-summary2.md の順位 307/308/312 削除、todo16.md の WP-12 step2/step3/retention セクション削除、harness-improvement-plan.md の WP-12 状態更新。

docs-only。pnpm lint:md 全通。
aloekun added a commit that referenced this pull request Jul 30, 2026
月次ハーネス ROI レビュー (docs/monthly-harness-roi-review-plan.md) の Phase 3。L3 skill (/monthly-review、skills repo で別途 commit) に対応する本 repo の docs を整備する。

- ADR-062 新規: 月次ハーネス ROI レビューの背景/設計決定/ユーザー決定事項を正式記録 (試験運用、ADR-039 3 点セット)。cli-telemetry-report (L2) + SessionStart reminder (L1、#331) + /monthly-review skill (L3) の 3 層。
- ADR-055 amendment: WP-12 step 2/3 消化 + 出力先の週次→月次変更。
- ADR-053 / ADR-061 追記: 撤去判定 (4 週間非観測) を月次レビューが連続 2 か月発火 0 で機械 promote。
- CLAUDE.md index に ADR-062 追加。
- todo 整理: todo-summary2.md の順位 307/308/312 削除、todo16.md の WP-12 step2/step3/retention セクション削除、harness-improvement-plan.md の WP-12 状態更新。

docs-only。pnpm lint:md 全通。
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