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
11 changes: 11 additions & 0 deletions .claude/settings.local.json.template
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,17 @@
]
}
],
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "\"{{PROJECT_DIR}}\\.claude\\hooks-user-prompt-feedback-recovery.exe\"",
"timeout": 5
}
]
}
],
"PreToolUse": [
{
"matcher": "Bash|Write|Edit|Replace",
Expand Down
8 changes: 8 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ members = [
"src/hooks-session-start",
"src/hooks-stop-feedback-dispatch",
"src/hooks-stop-quality",
"src/hooks-user-prompt-feedback-recovery",
"src/lib-jj-helpers",
"src/lib-pending-file",
"src/lib-report-formatter",
Expand Down
15 changes: 0 additions & 15 deletions docs/todo.md
Original file line number Diff line number Diff line change
Expand Up @@ -103,21 +103,6 @@ dogfood では PR #74 マージ後、pending file が `dispatched` で stuck し

#### 作業計画

##### Phase C: UserPromptSubmit hook — L2 Recovery (PR 3)

- [ ] `src/hooks-user-prompt-feedback-recovery/` 新規 crate
- `Cargo.toml` を workspace member に追加 (ADR-026)
- `src/main.rs`:
- stdin から UserPromptSubmit event JSON を読む
- `.claude/feedback-reports/*.md.failed` を検索
- 見つかれば additionalContext で「未完了 feedback あり、再実行: `pnpm feedback-retry <pr>`」を出力
- 見つからなければ silent exit
- [ ] `Cargo.toml` (workspace root) の `members` に追加
- [ ] `package.json` の `build:hooks-user-prompt-feedback-recovery` 追加、`deploy:hooks` に統合
- [ ] (任意) `pnpm feedback-retry <pr>` script 追加 (cli-merge-pipeline の post_steps を単独再実行する thin wrapper)
- [ ] settings.local.json + `templates/settings.json` の UserPromptSubmit hook エントリ登録
- [ ] テスト追加 (failed marker 検出、additionalContext フォーマット)

##### Phase D: ❌ 廃止 (skill enrichment 不要)

##### Phase E: 旧機構廃止 (PR 4 — Phase B/C dogfood 数回後)
Expand Down
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,14 @@
"build:hooks-post-tool-linter": "cargo build --release -p hooks-post-tool-linter && cp target/release/hooks-post-tool-linter.exe .claude/hooks-post-tool-linter.exe",
"build:hooks-stop-quality": "cargo build --release -p hooks-stop-quality && cp target/release/hooks-stop-quality.exe .claude/hooks-stop-quality.exe",
"build:hooks-stop-feedback-dispatch": "cargo build --release -p hooks-stop-feedback-dispatch && cp target/release/hooks-stop-feedback-dispatch.exe .claude/hooks-stop-feedback-dispatch.exe",
"build:hooks-user-prompt-feedback-recovery": "cargo build --release -p hooks-user-prompt-feedback-recovery && cp target/release/hooks-user-prompt-feedback-recovery.exe .claude/hooks-user-prompt-feedback-recovery.exe",
"build:cli-push-runner": "cargo build --release -p cli-push-runner && cp target/release/cli-push-runner.exe .claude/cli-push-runner.exe",
"build:cli-pr-monitor": "cargo build --release -p cli-pr-monitor && cp target/release/cli-pr-monitor.exe .claude/cli-pr-monitor.exe",
"build:check-ci-coderabbit": "cargo build --release -p check-ci-coderabbit && cp target/release/check-ci-coderabbit.exe .claude/check-ci-coderabbit.exe",
"build:hooks-session-start": "cargo build --release -p hooks-session-start && cp target/release/hooks-session-start.exe .claude/hooks-session-start.exe",
"build:cli-merge-pipeline": "cargo build --release -p cli-merge-pipeline && cp target/release/cli-merge-pipeline.exe .claude/cli-merge-pipeline.exe",
"build:hooks-settings": "node -e \"const fs=require('fs');const t=fs.readFileSync('.claude/settings.local.json.template','utf8');const p=process.cwd().replace(/\\\\/g,'\\\\\\\\');fs.writeFileSync('.claude/settings.local.json',t.replace(/\\{\\{PROJECT_DIR\\}\\}/g,p))\" && echo settings.local.json generated",
"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:hooks-stop-feedback-dispatch && pnpm build:cli-push-runner && pnpm build:cli-pr-monitor && pnpm build:cli-merge-pipeline && pnpm build:check-ci-coderabbit && pnpm build:hooks-settings",
"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:hooks-stop-feedback-dispatch && pnpm build:hooks-user-prompt-feedback-recovery && pnpm build:cli-push-runner && pnpm build:cli-pr-monitor && pnpm build:cli-merge-pipeline && pnpm build:check-ci-coderabbit && pnpm build:hooks-settings",
"push": ".\\.claude\\cli-push-runner.exe && .\\.claude\\cli-pr-monitor.exe --monitor-only",
"create-pr": ".\\.claude\\cli-pr-monitor.exe",
"observe-pr": ".\\.claude\\cli-pr-monitor.exe --observe",
Expand Down
1 change: 1 addition & 0 deletions scripts/deploy-hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ const EXE_FILES = [
"hooks-post-tool-linter.exe",
"hooks-stop-quality.exe",
"hooks-stop-feedback-dispatch.exe",
"hooks-user-prompt-feedback-recovery.exe",
"cli-push-runner.exe",
"cli-pr-monitor.exe",
"cli-merge-pipeline.exe",
Expand Down
12 changes: 10 additions & 2 deletions src/cli-merge-pipeline/src/feedback.rs
Original file line number Diff line number Diff line change
Expand Up @@ -401,12 +401,20 @@ pub fn write_failed_marker(
## 失敗理由\n\n{}\n\n\
## 復旧手順\n\n\
1. このマーカー (`{}`) を残したまま、Claude Code セッションで何か入力する\n\
2. UserPromptSubmit hook (`hooks-user-prompt-feedback-recovery`) が検出し、再実行を促す\n\
3. または直接: `pnpm feedback-retry {}` (Phase C 以降で実装)\n",
2. UserPromptSubmit hook (`hooks-user-prompt-feedback-recovery`) が検出し、Claude に再実行を促す\n\
3. Claude セッションから手動で再実行する場合は、リポジトリルートで\n \
`pnpm exec takt -w {} -t \"{}{}\"` を直接起動してください\n \
注意: この再実行は `.takt/post-merge-feedback-context.json` を読み直すだけなので、\n \
失敗から再実行までの間に **別 PR が `pnpm merge-pr` を実行している** と context が\n \
上書きされ、誤った PR の transcript range が使われます。再実行前に\n \
`.takt/post-merge-feedback-context.json` の `pr_number` が #{} と一致することを必ず確認してください。\n",
pr_number,
TAKT_WORKFLOW,
reason,
path.display(),
TAKT_WORKFLOW,
TAKT_TASK_PREFIX,
pr_number,
pr_number,
);
fs::write(&path, body).map_err(|e| format!("failed marker 書込失敗: {}", e))?;
Expand Down
10 changes: 10 additions & 0 deletions src/hooks-user-prompt-feedback-recovery/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[package]
name = "hooks-user-prompt-feedback-recovery"
version = "0.1.0"
edition = "2021"

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

# [profile.release] は workspace root (Cargo.toml) に集約 (ADR-026)
Loading