Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .claude/hooks-config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
# "jj-immutable" — jj --ignore-immutable
# "jj-main-guard" — jj new main / jj edit main
# "jj-push-guard" — jj git push / jj push 禁止 (pnpm push に誘導)
# "gh-pr-merge-guard" — gh pr merge ブロック (pnpm merge に誘導)
# "gh-pr-merge-guard" — gh pr merge ブロック (pnpm merge-pr に誘導)
# "electron" — Electron GUI 実行ブロック
# プリセット名以外の文字列は正規表現としてカスタムパターン扱い
blocked_patterns = [
Expand Down Expand Up @@ -118,7 +118,7 @@ prompt = "optimize_commit_structure"

# ─── Merge Pipeline: PR マージ + ローカル同期 ───
#
# pnpm merge で起動されるパイプライン。
# pnpm merge-pr で起動されるパイプライン。
# PreToolUse の "gh-pr-merge-guard" プリセットにより直接の gh pr merge はブロックされ、
# このパイプラインを通すことが強制される。
#
Expand Down Expand Up @@ -147,7 +147,7 @@ default_branch = "master" # "main" など、リポジトリに合わせて変

# ─── Post-PR Monitor: daemon + state file ───
#
# pnpm pr-create / pnpm push 実行時に daemon がバックグラウンドで起動し、
# pnpm create-pr / pnpm push 実行時に daemon がバックグラウンドで起動し、
# check-ci-coderabbit.exe を定期ポーリングして結果を
# .claude/pr-monitor-state.json に書き出す。
# Claude は CronCreate で state file を cat し、action に従って行動する。
Expand Down
6 changes: 4 additions & 2 deletions .claude/settings.local.json.template
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
"allow": [
"Bash(pnpm build:all)",
"Bash(pnpm check-ci *)",
"Bash(pnpm pr-create *)",
"Bash(pnpm create-pr)",
"Bash(pnpm create-pr *)",
"Bash(cargo test:*)",
"Bash(pnpm merge)"
"Bash(pnpm merge-pr)",
"Bash(pnpm merge-pr *)"
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved
]
},
"hooks": {
Expand Down
4 changes: 2 additions & 2 deletions docs/adr/adr-009-post-pr-monitor.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ Claude が "gh pr create" を実行しようとする
│
▼
PreToolUse guard (gh-pr-create-guard) がブロック
└─ 「pnpm pr-create を使ってください」と誘導
└─ 「pnpm create-pr を使ってください」と誘導
│
▼
Claude が "pnpm pr-create -- --title ..." を実行
Claude が "pnpm create-pr -- --title ..." を実行
│
▼
cli-pr-monitor.exe (スタンドアロン)
Expand Down
6 changes: 3 additions & 3 deletions docs/adr/adr-013-merge-pipeline.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ Claude が "gh pr merge" を実行しようとする
▼
PreToolUse (hooks-pre-tool-validate)
├─ "gh-pr-merge-guard" プリセットでブロック
└─ エラーメッセージ: 「pnpm merge を使用してください」
└─ エラーメッセージ: 「pnpm merge-pr を使用してください」
│
▼
Claude が "pnpm merge" を実行する
Claude が "pnpm merge-pr" を実行する
│
▼
cli-merge-pipeline.exe (スタンドアロン)
Expand All @@ -59,7 +59,7 @@ cli-merge-pipeline.exe (スタンドアロン)
| 項目 | 決定 | 理由 |
|---|---|---|
| マージ戦略 | squash 固定 | master の履歴を 1 PR = 1 コミットに保つ |
| PR 検出 | jj bookmark から自動検出 | `pnpm push` / `pnpm pr-create` と同じ方式で一貫性がある |
| PR 検出 | jj bookmark から自動検出 | `pnpm push` / `pnpm create-pr` と同じ方式で一貫性がある |
| ブランチ削除 | `--delete-branch` で自動削除 | マージ済みブランチの残留を防ぐ |
| ローカル同期 | `jj git fetch` + `jj new master` | マージ後すぐに master 最新から作業を開始できる |
| ステップ分離 | `pre_steps`(マージ前)/ `post_steps`(マージ後) | 学び提案等の post-merge 処理を正しいタイミングで実行 |
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
"build:all": "pnpm build:hooks-session-start && pnpm build:hooks-pre-tool-validate && pnpm build:hooks-post-tool-linter && pnpm build:hooks-stop-quality && pnpm build:cli-push-pipeline && pnpm build:cli-pr-monitor && pnpm build:cli-merge-pipeline && pnpm build:check-ci-coderabbit && pnpm build:hooks-settings",
"review:ai": "claude -p \"/pre-push-review\"",
"push": ".\\.claude\\cli-push-pipeline.exe && .\\.claude\\cli-pr-monitor.exe --monitor-only",
"pr-create": ".\\.claude\\cli-pr-monitor.exe",
"merge": ".\\.claude\\cli-merge-pipeline.exe",
"create-pr": ".\\.claude\\cli-pr-monitor.exe",
"merge-pr": ".\\.claude\\cli-merge-pipeline.exe",
"check-ci": ".\\.claude\\check-ci-coderabbit.exe",
"mark-notified": ".\\.claude\\cli-pr-monitor.exe --mark-notified",
"check-monitor": "type .\\.claude\\pr-monitor-state.json 2>NUL || echo No active monitor",
Expand Down
4 changes: 2 additions & 2 deletions src/cli-merge-pipeline/src/main.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//! Merge Pipeline ランナー (スタンドアロン exe)
//!
//! pnpm merge から呼び出され、PR のマージとローカル同期を実行します。
//! pnpm merge-pr から呼び出され、PR のマージとローカル同期を実行します。
//! hooks-config.toml の [merge_pipeline] セクションから設定を読み込みます。
//!
//! 処理フロー:
Expand Down Expand Up @@ -325,7 +325,7 @@ fn run_steps(phase: &str, steps: &[PipelineStepConfig], timeout: u64) -> Result<
eprintln!("{}", output);
}
log_info(&format!(
"パイプライン中断: {} が失敗しました。問題を修正して pnpm merge を再実行してください。",
"パイプライン中断: {} が失敗しました。問題を修正して pnpm merge-pr を再実行してください。",
step.name
));
return Err(1);
Expand Down
2 changes: 1 addition & 1 deletion src/cli-pr-monitor/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
//!
//! モード:
//! デフォルト (PR 作成): gh pr create を実行 → daemon 起動 → CronCreate 指示を stdout 出力
//! pnpm pr-create -- --title "..." --body "..."
//! pnpm create-pr -- --title "..." --body "..."
//!
//! --monitor-only: PR が存在すれば daemon 起動、なければ exit 0
//! pnpm push 完了後にチェインで呼ばれる
Expand Down
16 changes: 8 additions & 8 deletions src/hooks-pre-tool-validate/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -264,36 +264,36 @@ pnpm push
]
}

/// プリセット: gh-pr-create-guard (gh pr create を禁止し pnpm pr-create に誘導)
/// プリセット: gh-pr-create-guard (gh pr create を禁止し pnpm create-pr に誘導)
fn preset_gh_pr_create_guard() -> Vec<BlockedPattern> {
vec![
BlockedPattern {
pattern: Regex::new(r#"(?im)(^|&&|;|\|\||\||&)\s*(?:[A-Za-z_][A-Za-z0-9_]*=\S+\s+|command\s+|env\s+)*gh\s+(?:.*\s+)?pr\s+create(\s|$)"#).unwrap(),
message: r#"**gh pr create がブロックされました**

PR 作成は pnpm pr-create 経由で行ってください。
pnpm pr-create は PR 作成後に CI・CodeRabbit の自動監視も開始します。
PR 作成は pnpm create-pr 経由で行ってください。
pnpm create-pr は PR 作成後に CI・CodeRabbit の自動監視も開始します。

**代わりに以下を実行してください:**
```
pnpm pr-create -- --title "タイトル" --body "本文"
pnpm create-pr -- --title "タイトル" --body "本文"
```

-- 以降の引数はそのまま gh pr create に転送されます。"#,
},
]
}

/// プリセット: gh-pr-merge-guard (gh pr merge を禁止し pnpm merge に誘導)
/// プリセット: gh-pr-merge-guard (gh pr merge を禁止し pnpm merge-pr に誘導)
fn preset_gh_pr_merge_guard() -> Vec<BlockedPattern> {
let msg = r#"**gh pr merge がブロックされました**

PR マージは pnpm merge 経由で行ってください。
pnpm merge は PR のマージに加え、ローカル環境の同期も自動で行います。
PR マージは pnpm merge-pr 経由で行ってください。
pnpm merge-pr は PR のマージに加え、ローカル環境の同期も自動で行います。

**代わりに以下を実行してください:**
```
pnpm merge
pnpm merge-pr
```

現在のブックマークから PR を自動検出してマージします。"#;
Expand Down