Skip to content

feat(session-start): weekly-review reminder に systemMessage 可視化通知 (ADR-059 / PR-N1) - #299

Merged
aloekun merged 5 commits into
masterfrom
feat/adr-059-hook-system-message
Jul 19, 2026
Merged

feat(session-start): weekly-review reminder に systemMessage 可視化通知 (ADR-059 / PR-N1)#299
aloekun merged 5 commits into
masterfrom
feat/adr-059-hook-system-message

Conversation

@aloekun

@aloekun aloekun commented Jul 19, 2026

Copy link
Copy Markdown
Owner

概要

docs/weekly-review-notification-plan.mdPR-N1。weekly-review reminder (ADR-031) が additionalContext のみで発火しており、これは Claude のコンテキストに注入されるだけでユーザーの画面に表示されないため、約 4 週間気付かれなかった (2026-07-19 調査の根本原因)。

hook 通知を 2 層の可視化チャネルに分離する (ADR-059):

チャネル 宛先 内容
hookSpecificOutput.additionalContext モデル (Claude) 行動指示・詳細
systemMessage (トップレベル) ユーザー 1 行サマリー

変更内容 (コミット単位・レビューしやすい粒度で 5 分割)

  1. docs(adr) — ADR-059 起案 + CLAUDE.md リンク追記
  2. refactor(session-start) — SessionStart JSON 組み立てを build_session_start_json(context, system_message) に切り出し (この時点は None 呼び出しで挙動不変) + builder テスト
  3. feat(session-start)WeeklyReviewReminderConfig.system_message_enabled (source default OFF) 追加 / compute_weekly_review_reminder_nudgeWeeklyReviewNudge { additional_context, system_message } に struct 化 / system_message_enabled が真かつ発火時のみ 1 行の systemMessage を生成 / additionalContext 末尾に「セッション冒頭でユーザーに一言伝えよ」の defense-in-depth 明示指示 / main.rs 配線 / テスト
  4. chore(config).claude/hooks-config.tomlsystem_message_enabled = true (dogfood 有効化)
  5. docs — 計画書に PR-N1 作業記録を反映

ADR-039 3 点セット

  • opt-in: system_message_enabled は source default OFF。本 repo config で明示 ON、派生 repo は本行を置かない。
  • kill-switch: system_message_enabled = false で systemMessage のみ停止 / enabled = false で reminder 自体停止。
  • bounded lifetime: 判定期限 2026-08-16。判定材料は PR-N3 の発火テレメトリ (ADR-055 統合)。

テスト・検証

  • cargo test -p hooks-session-start: 92 passed (config parse / systemMessage 生成の Missing・ElapsedDays・failed marker・有効/無効 各分岐 / JSON builder 形状 / 明示指示)
  • cargo clippy -p hooks-session-start --all-targets -- -D warnings: クリーン
  • pnpm build:all: 成功
  • デプロイ済み exe を実際に駆動して end-to-end 確認: main workspace は last-run 未実行 (Missing) のため、systemMessage = "週次レビュー: 実行記録なし (threshold 7 日)。/weekly-review の実行を検討してください" と additionalContext 末尾の defense-in-depth 明示指示の両方が出力されることを確認。

残タスク (計画書 削除条件 2)

land 後に 新セッションを起動して UI 上に systemMessage の 1 行が実表示されるか目視確認する。表示スタイル (警告色か等) はドキュメント未明記のため dogfood で確認する。表示されない場合は実装を revert せず、表示経路を再調査してから判断する (defense-in-depth の additionalContext 明示指示が backstop として残る)。

関連

  • 計画: docs/weekly-review-notification-plan.md (PR-N1 → N2 → N3 の直列投入。全 land + dogfood 後に本計画書を削除)
  • ADR-059 (新規) / ADR-031 / ADR-045 (PR-N2 で対処) / ADR-055 (PR-N3 で対処)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 新機能

    • 週次レビューリマインダーが発火した際、ユーザー向けの1行サマリーをシステムメッセージとして表示できるようになりました。
    • 詳細な案内は従来どおり追加コンテキストとして提供されます。
    • システムメッセージ表示は設定で個別に有効・無効を切り替えられます。
  • ドキュメント

    • 通知表示の設計方針と検証計画を追加しました。

aloekun and others added 5 commits July 19, 2026 13:41
weekly-review reminder が additionalContext のみで発火しユーザー画面に出ず約4週間 silent だった問題 (2026-07-19 調査) に対し、systemMessage=ユーザー向け1行 / additionalContext=モデル向け詳細 の2層分離を決定。ADR-039 3点セット (config opt-in system_message_enabled / kill-switch / bounded lifetime、判定期限 2026-08-16) を適用。weekly のみ先行 dogfood → 行動要求系 nudge へ段階展開。PR-N1 の設計根拠。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
emit_session_start_output の serde_json 組み立てを build_session_start_json(context, system_message) に抽出。system_message = Option<&str> を受け Some のときのみトップレベル systemMessage を付与する形にし、当面 None 呼び出しで挙動不変。systemMessage 有無の JSON 形状を固定する builder unit test 2 本を追加。ADR-059 の systemMessage 配線 (次 commit) の土台。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
WeeklyReviewReminderConfig に system_message_enabled (source default OFF) を追加。compute_weekly_review_reminder_nudge の戻り値を WeeklyReviewNudge { additional_context, system_message } に struct 化し、system_message_enabled が真かつ発火時のみ 1 行の systemMessage を生成 (Missing/ElapsedDays/failed marker を要約、\n 非含)。additionalContext 末尾に「セッション冒頭でユーザーに一言伝えよ」の defense-in-depth 明示指示を追加。main.rs は struct を消費して systemMessage を build_session_start_json へ配線。config parse / systemMessage 生成分岐 / 明示指示 / builder 併用の unit test を追加 (計 92 passed)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… を追記 (ADR-059 dogfood)

本リポジトリで systemMessage 可視化通知を有効化して dogfood する。source default OFF・派生 repo は本行を置かない旨と 2 段 kill-switch (system_message_enabled=false / enabled=false) をコメントに明記。判定期限 2026-08-16。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ADR 番号 059 確定・4 分割コミット粒度・検証結果 (cargo test 92 passed / clippy clean / build:all 成功 / デプロイ exe 駆動で systemMessage 実出力を end-to-end 確認)・残タスク (削除条件 2 = land 後の新セッション UI 目視確認、判定期限 2026-08-16) を追記。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 19, 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

Run ID: 57e23f2e-f57a-45bf-b6ea-fd2b43083190

📥 Commits

Reviewing files that changed from the base of the PR and between 31b62cc and a3e6482.

📒 Files selected for processing (7)
  • .claude/hooks-config.toml
  • CLAUDE.md
  • docs/adr/adr-059-hook-system-message-visibility.md
  • docs/weekly-review-notification-plan.md
  • src/hooks-session-start/src/hooks_config.rs
  • src/hooks-session-start/src/main.rs
  • src/hooks-session-start/src/weekly_review.rs

📝 Walkthrough

Walkthrough

週次レビューリマインダーに systemMessageadditionalContext の分離出力を追加しました。設定、ナッジ生成、session-start JSON 組み立て、テスト、ADR・計画書を更新しています。

Changes

Weekly review notification visibility

Layer / File(s) Summary
通知契約と設定
docs/adr/adr-059-hook-system-message-visibility.md, src/hooks-session-start/src/hooks_config.rs, .claude/hooks-config.toml, CLAUDE.md, docs/weekly-review-notification-plan.md
ADR-059でユーザー向けsystemMessageとモデル向けadditionalContextを分離する方針を定義し、system_message_enabledの設定、解析テスト、関連文書を追加しています。
週次ナッジ生成
src/hooks-session-start/src/weekly_review.rs
週次ナッジをadditional_contextと任意の1行system_messageに分離し、設定の有効・無効、staleness、failed marker、fresh状態をテストしています。
session-start出力配線
src/hooks-session-start/src/main.rs
additionalContextをhook出力へ追加し、system_messageがある場合だけトップレベルsystemMessageをJSONへ追加するビルダーとテストを導入しています。

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant SessionStart
  participant WeeklyReview
  participant JsonBuilder
  participant User
  SessionStart->>WeeklyReview: compute weekly review nudge
  WeeklyReview-->>SessionStart: additional_context and optional system_message
  SessionStart->>JsonBuilder: build session-start JSON
  JsonBuilder-->>User: emit additionalContext and optional systemMessage
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 weekly-review reminder の systemMessage 可視化通知という主変更を簡潔に表しており、変更内容と一致しています。
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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/adr-059-hook-system-message

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 のみが登録された check (PENDING، レビュー進行中)。他の CI check は登録なし。mergeable: MERGEABLE / mergeStateStatus: UNSTABLE (pending check起因)
  • レビュー状況: CodeRabbit — レビュー未着 (「processing new changes...」の自動コメントのみ、findings 未生成)。人間レビュー・他 bot レビューともに 0 件。インライン指摘 0 件。
  • Verdict: approved (現時点で applicable な指摘が 0 件のため。CodeRabbit のレビュー未着分は待たずに次回 trigger で再評価する)

Applicable Findings (Critical / High / Major)

(該当なし)

Applicable Findings (Medium 以下)

(該当なし)

Filtered (not applicable)

(該当なし — レビュー指摘自体がまだ存在しない)

diff 概要 (軽量サマリー)

本 PR は ADR-059 (試験運用) の実装。7 ファイル変更、いずれも今回導入する ADR-059 の記述内容と整合している:

File 変更概要
docs/adr/adr-059-hook-system-message-visibility.md (new) ADR-059 本文 (新規119行) — systemMessage/additionalContext の2層可視化チャネル分離を提案
CLAUDE.md ADR 一覧に ADR-059 リンク追加 (+1行)
.claude/hooks-config.toml system_message_enabled = true を追加、source default OFF である旨のコメント (+6行)
docs/weekly-review-notification-plan.md 作業記録セクション追記 (+15行、実装完了ログ)
src/hooks-session-start/src/hooks_config.rs WeeklyReviewReminderConfigsystem_message_enabled: Option<bool> 追加 + parse テスト2件
src/hooks-session-start/src/main.rs build_session_start_json() を純粋関数として切り出し、systemMessage 有無で JSON 分岐 + テスト2件
src/hooks-session-start/src/weekly_review.rs WeeklyReviewNudge struct 化 (additional_context / system_message)、build_weekly_review_system_message() 新設、defense-in-depth 明示指示追加 + テスト多数

ADR-039 の3点セット (config opt-in / kill-switch / bounded lifetime) が ADR-059 内で明示され、実装 (system_message_enabledunwrap_or(false) source default OFF、2段階 kill-switch、判定期限 2026-08-16) と一致していることを確認した。PR 本文の作業記録には cargo test 92 passed / cargo clippy clean / pnpm build:all 成功 / end-to-end 確認済みとの記載あり (未検証の申告値として参考情報)。

次のアクション

  • CodeRabbit のレビュー結果が付き次第、次回 trigger で本 workflow が再分析する (現時点では待機不要)。
  • 削除条件2 (新セッション起動時に systemMessage が実際に UI 表示されるか目視確認) は ADR-059 で「land 後の残タスク」と明記されている点を merge 判断時に留意。

@aloekun
aloekun merged commit eedb802 into master Jul 19, 2026
1 check passed
@aloekun
aloekun deleted the feat/adr-059-hook-system-message branch July 19, 2026 05:15
aloekun added a commit that referenced this pull request Jul 19, 2026
* docs(todo): PR-N1〜N3 post-merge feedback の採用候補を todo 登録 (#288 昇格 + 329-332 新設)

PR #299/#300/#301 の post-merge feedback から採用候補 5 件を系統別に登録:
- #288 昇格 (系統 A): pre-push review の diff スコープ漏れが 3 連続再発 (Severity High)。
  post-merge 全 run 集約に加え push-runner [diff] stage の tip-only 範囲修正を統合し Tier2→Tier1
- 329 (系統 B): 新規 ADR 起案時の「判断根拠 × 既存 ADR 定義」矛盾チェックリスト
- 330 (系統 B): 行動要求 nudge の 2 チャネル返却 + 多義的戻り値 struct 化 convention
- 331 (系統 C): systemMessage 含む JSON 出力の exe-spawn E2E テスト
- 332 (系統 D): pnpm build:all の Windows cp.exe PATH 自動化

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* docs(todo): PR #302 CodeRabbit 指摘を反映 (#288 fail-closed 祖先検証 / schema 移行 / Windows 検出 / ADR 意図変更)

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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