diff --git a/.claude/hooks-config.toml b/.claude/hooks-config.toml index c7f0293..2bc42df 100644 --- a/.claude/hooks-config.toml +++ b/.claude/hooks-config.toml @@ -117,11 +117,13 @@ default_branch = "master" # "main" など、リポジトリに合わせて変 # type = "command" # cmd = "gh pr checks --required" -# マージ後の学び提案機能(将来実装) -# [[merge_pipeline.post_steps]] -# name = "post_merge_learnings" -# type = "ai" -# prompt = "analyze_pr_learnings" +# マージ後のフィードバックループ自動起動 (ADR-029 試験運用) +# cli-merge-pipeline が .claude/post-merge-feedback-pending.json を書き込み、 +# hooks-stop-feedback-dispatch が検出して /post-merge-feedback skill を起動する。 +[[merge_pipeline.post_steps]] +name = "post_merge_feedback" +type = "ai" +prompt = "post-merge-feedback" # ─── Post-PR Monitor: daemon + state file ─── # diff --git a/docs/todo.md b/docs/todo.md index c577a02..051725d 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -6,65 +6,9 @@ ## 現在進行中 -### マージ後フィードバックの定常化 (post-merge-feedback 自動起動) +### post-merge-feedback skill の pending file 対応 (skill リポジトリ側で実施) -> **全体ゴール**: `pnpm merge-pr` 後、Stop 時に `/post-merge-feedback` skill の起動を Claude に指示する自動化を本プロジェクトで dogfood 開始できる状態にする。 -> -> **設計の核 (state file + 現セッション起動)**: cli-merge-pipeline が `.claude/post-merge-feedback-pending.json` を書き込み、新規 Stop hook が検出 → `additionalContext` で Claude に skill 起動を指示。新セッションを spawn しないので ADR-014 選択肢 3「skill はメイン会話内で実行」の原則を維持し、セッション知見の引き継ぎ問題を構造的に回避する。 -> -> **依存関係・順序**: `1-C (hook)` を先に進める。最後に `1-D (有効化 + 試験運用開始)`。`1-E (skill 更新)` は独立タスクとして切り出し済み。 -> -> **全タスク共通の参照先**: 設計の詳細は `docs/adr/adr-029-post-merge-feedback-auto-trigger.md` (PR #69 で新規作成、PR #70 で create_new 採用 / producer フィールド追加を反映)。以降のタスクはこの ADR の仕様に従う。 - -#### 1-C. hooks-stop-feedback-dispatch 新規 exe (コード + 配布統合、1 PR) - -- **やろうとしたこと**: Stop 時に pending file を検出し、`additionalContext` で Claude に skill 起動を指示する単一責務 hook を追加。既存 `hooks-stop-quality` とは責務分離 (ADR-022 原則) -- **現在地**: 未着手 - - [ ] `src/hooks-stop-feedback-dispatch/` 新規 crate - - `Cargo.toml` を workspace member に登録 (ADR-026) - - `src/main.rs` を実装: - - stdin JSON 読み取り (`stop_hook_active` 等) - - `stop_hook_active == true` → silent exit (無限ループ防止、hooks-stop-quality と同じパターン) - - pending 不在 → silent exit - - 破損 (size 0 / parse 失敗 / schema_version 不一致) → 削除して silent exit - - stale (created_at + 24h < now) → 削除して silent exit - - `status == "pending"` → 構造化 `additionalContext` を stdout に出力 + pending file の `status` を `"dispatched"` に atomic 更新 (`dispatched_at` も設定) - - `status == "dispatched"` → silent exit (二重通知しない) - - `status == "consumed"` → 削除して silent exit (後片付け) - - [ ] `Cargo.toml` (workspace root) の `members` に追加 - - [ ] `package.json` に `build:hooks-stop-feedback-dispatch` 追加、`deploy:hooks` に統合 - - [ ] `.claude/settings.json` の Stop hook エントリに 2 つ目の exe を追加 (hooks-stop-quality の**後**の順序) - - [ ] `templates/settings.json` にも同様の設定を反映 (派生プロジェクト配布用) - - [ ] unit test 追加: - - pending 不在で正常 exit - - `stop_hook_active = true` で silent exit (pending を読まない) - - 破損 pending の削除 + silent exit - - stale pending の削除 + silent exit - - status=pending → additionalContext 生成 + status=dispatched へ更新 - - status=dispatched → silent exit - - status=consumed → 削除 + silent exit - - additionalContext 文字列フォーマット検証 (構造化タグの key 順序等) -- **完了基準**: `cargo test` 通過 + `pnpm build:hooks-stop-feedback-dispatch` / `pnpm deploy:hooks` 成功 + hooks-stop-quality と並行動作確認 -- **詰まっている箇所**: なし - -#### 1-D. post_steps 有効化 + 試験運用開始 (設定 + todo 更新、1 PR) - -- **やろうとしたこと**: 設定を有効化し、本プロジェクトで dogfood を開始する -- **現在地**: 未着手 - - [ ] `.claude/hooks-config.toml` の `[[merge_pipeline.post_steps]]` を有効化: - ```toml - [[merge_pipeline.post_steps]] - name = "post_merge_feedback" - type = "ai" - prompt = "post-merge-feedback" - ``` - - [ ] `templates/hooks-config.toml` にも反映 (派生プロジェクト用、デフォルト opt-in/opt-out 方針は PR 内で判断) - - [ ] `docs/todo.md` から本タスク群 (1-C〜1-D、および section ヘッダーと前文) を削除 (運用ルール: 完了タスクは ADR/仕組みに反映後に削除。1-A は PR #69、1-B は PR #70 で削除済) -- **完了基準**: 実マージ (別 PR) の `pnpm merge-pr` で pending file が生成され、Stop 時に Claude が構造化 `additionalContext` を受け取って skill 起動を試みるフローが走ること (skill 未対応なら手動起動で検証) -- **詰まっている箇所**: なし -- **依存関係**: 1-C (hook) の完了 - -#### 1-E. post-merge-feedback skill の pending file 対応 (別タスク、skill リポジトリ側で実施) +> **参照**: `docs/adr/adr-029-post-merge-feedback-auto-trigger.md` — CLI / Stop hook / skill の 3 者協調設計。本タスクは skill 側の Phase 0 対応 (ADR-029 task 1-E)。 - **やろうとしたこと**: skill Phase 1 の前段に「pending file 先読み (Phase 0)」を追加し、status が `"dispatched"` の場合は引数指定と同等の最優先度で採用。skill 完了時に `status = "consumed"` に更新してからファイル削除 - **現在地**: 未着手 @@ -77,14 +21,14 @@ - [ ] (任意) skill eval の追加: pending file ありのケース / 破損ケース / status 別の挙動 - **完了基準**: skill が pending file を正しく consume し、本プロジェクトの dogfood で Claude が自動起動した skill から Feedback Report が出力される - **詰まっている箇所**: skill の管理場所 (本プロジェクト外) の扱いは `/skill-sync-check` の結果次第 -- **依存関係**: 1-C/1-D とは並行可能だが、dogfood の完結には 1-E も必要 -#### 1-F. (追って) ADR-014 試験運用フラグ解除 + takt-test-vc 反映 +### (追って) ADR-014 試験運用フラグ解除 + takt-test-vc 反映 + +> **参照**: `docs/adr/adr-029-post-merge-feedback-auto-trigger.md` — 本タスクは ADR-029 task 1-F。本プロジェクトでの dogfood が十分に回ってから着手。 - **やろうとしたこと**: dogfood 1-2 週間で問題なければ ADR-014 を本採用化し、takt-test-vc へバックポート -- **現在地**: 未着手。1-D 以降 + 運用観察が前提 +- **現在地**: 未着手。本プロジェクトで実マージ数回の観察が前提 - **詰まっている箇所**: dogfood 結果に依存するため着手タイミングは未定 -- **依存関係**: 1-D 完了 + 本プロジェクトで実マージ数回の観察 --- diff --git a/templates/hooks-config-python.toml b/templates/hooks-config-python.toml index e186fc4..ac6e870 100644 --- a/templates/hooks-config-python.toml +++ b/templates/hooks-config-python.toml @@ -49,3 +49,16 @@ cmd = "pnpm py-test:e2e" # max_duration_secs = 600 # check_ci = true # check_coderabbit = true + +# ─── Merge Pipeline: post_steps ─── +# pnpm merge-pr 後に post-merge-feedback skill を自動起動する (ADR-029 試験運用)。 +# 有効化には post-merge-feedback skill が deploy されている必要があります。 + +# [merge_pipeline] +# step_timeout = 120 +# default_branch = "master" # リポジトリに合わせて変更 + +# [[merge_pipeline.post_steps]] +# name = "post_merge_feedback" +# type = "ai" +# prompt = "post-merge-feedback" diff --git a/templates/hooks-config-typescript.toml b/templates/hooks-config-typescript.toml index cfef20e..5fe68e7 100644 --- a/templates/hooks-config-typescript.toml +++ b/templates/hooks-config-typescript.toml @@ -53,3 +53,16 @@ cmd = "pnpm build" # max_duration_secs = 600 # check_ci = true # check_coderabbit = true + +# ─── Merge Pipeline: post_steps ─── +# pnpm merge-pr 後に post-merge-feedback skill を自動起動する (ADR-029 試験運用)。 +# 有効化には post-merge-feedback skill が deploy されている必要があります。 + +# [merge_pipeline] +# step_timeout = 120 +# default_branch = "master" # リポジトリに合わせて変更 + +# [[merge_pipeline.post_steps]] +# name = "post_merge_feedback" +# type = "ai" +# prompt = "post-merge-feedback"