Skip to content
Closed
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
1 change: 0 additions & 1 deletion docs/claude-code-web-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@

| 順位 | Tier | 内容 | 対象ファイル (実パス) | 工数 | 注意 |
|---|---|---|---|---|---|
| 284 | T2 | `stale_check_enabled` (Option\<bool\>) の TOML パーステスト追加(未テストのパース経路を補完) | `src/hooks-session-start/src/hooks_config.rs`(`mod tests`、既存 `hooks_config_parses_session_start_staleness_section` 拡張) | XS | 純 deserialize。`temp_dir()` fixture で Linux CI pass 済みパターン、最もクリーン |
| 203 | T2 | GitHub token `ghu_` / `ghr_` の secret 検出ブロックテスト 2 件追加 | `src/hooks-pre-tool-validate/src/presets/safety/secret.rs` | XS | todo 記載の `main.rs` は module split でパスドリフト、実体は `secret.rs`。純 regex 判定 |
| 240 | T2 | `takt.rs` の spawn/try_wait `Err(_)` → `Err(e)` + `eprintln!`(原因握り潰し解消、`.failed` marker debug 改善) | `src/cli-merge-pipeline/src/feedback/takt.rs`(60・68 行) | XS | pnpm/takt の実実行は成功条件外。compile + clippy 通過で足りる |
| 180 | T2 | `escape_markdown_pipe(&str)` を pub 追加 + `format_table` の user field に適用 + 5 variant test(markdown table 破壊の防止 / prompt injection の緩和 = defense-in-depth の一層) | `src/lib-report-formatter/src/lib.rs` | XS-S | 外部依存ゼロの純 lib。既存 private `truncate()` と escape ロジック重複、DRY 整理(共通化 or 役割分担)を検討 |
Expand Down
1 change: 0 additions & 1 deletion docs/todo-summary2.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@
| 281 | 🚀 Tier 1 | **config-reading hook の current_dir() 解決を検出する lint rule (PR #267 post-merge-feedback T1-1 採用)** | todo15.md | S | なし (新規 hook が cwd 基準 config 解決を実装し pre-push REJECT → fix 修正の実例。cwd drift による silent fail-open は新規 hook のたびに再発しうる。Severity High。順位 287 と同一 PR bundle 推奨) |
| 282 | 🚀 Tier 1 | **jj-op-verify の変更系 verb 網羅拡大 — undo/restore/split/bookmark move 等 (PR #267 post-merge-feedback T1-2 採用)** | todo15.md | M | なし (特に `jj undo` の検出漏れは lost-update 再発リスク高。拡張時は expected_op_keyword を jj 0.42 実機の op log 出力と要照合) |
| 283 | 🚀 Tier 1 | **jj-op-verify の verb 検出を command-boundary に anchor (PR #267 post-merge-feedback T1-3 採用)** | todo15.md | S | なし (commit message 引用符内の "jj new" 等での false positive 防止。実装時に accepted risk で一度見送った経緯あり = 着手時に実観測 0 件のままか再確認。順位 285 と表裏) |
| 284 | 🔧 Tier 2 | **stale_check_enabled の TOML パーステスト追加 (PR #267 post-merge-feedback T2-1 採用)** | todo15.md | XS | なし (新フィールドのパース経路が未テスト = silent degrade リスク。既存テストへの数行追加で完備) |
| 285 | 🔧 Tier 2 | **jj keyword を含む commit message の tokenization edge-case テスト (PR #267 post-merge-feedback T2-2 採用)** | todo15.md | S | なし (順位 283 と表裏。283 の着手有無に関わらず現行挙動を regression test で固定する価値が独立して残る。283 と同一 PR 消化が効率的) |
| 286 | 🔧 Tier 2 | **config path 解決の cwd 跨ぎ integration test (PR #267 post-merge-feedback T2-3 採用)** | todo15.md | M | なし (FIXED 済 cwd-config bug の regression guard。既存テストは pure parser のみで file-lookup 経路未カバー。Severity High、Adoption Risk = OS 依存) |
| 287 | 💎 Tier 3 | **「config 読み hook は exe-relative 解決必須」convention の明文化 (PR #267 post-merge-feedback T3-1 採用)** | todo15.md | XS | なし (順位 281 の文書層補完。**281 と同一 PR bundle 推奨**、別作業に切り出す価値は低い) |
Expand Down
19 changes: 0 additions & 19 deletions docs/todo15.md
Original file line number Diff line number Diff line change
Expand Up @@ -362,25 +362,6 @@

---

### stale_check_enabled の TOML パーステスト追加 (PR #267 post-merge-feedback T2-1 採用)

> **動機**: PR #267 で追加した `StalenessConfig.stale_check_enabled` のパース経路にテストがなく、silent degrade (機能が黙って無効化) のリスク。既存テストへの数行追加で完備できる。
>
> **参照**: `.claude/feedback-reports/267.md` Tier 2 #1、`src/hooks-session-start/src/hooks_config.rs` の既存パーステスト
>
> **実行優先度**: 🔧 Tier 2 — Effort XS。

#### 作業計画

- [ ] 既存 fixture に `stale_check_enabled = true` + assert を追加
- [ ] 本エントリ削除 + todo-summary2.md 行削除

#### 完了基準

- 新フィールドのパースが regression test で固定されていること。

---

### jj keyword を含む commit message の tokenization edge-case テスト (PR #267 post-merge-feedback T2-2 採用)

> **動機**: 順位 283 (anchor 修正) と表裏。283 の着手有無に関わらず、現行挙動 (既知の限界) を regression test で明示的に固定する価値が独立して残る。
Expand Down
28 changes: 28 additions & 0 deletions src/hooks-session-start/src/hooks_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ mod tests {
enabled = true
fetch_timeout_secs = 5
default_branch = "main"
stale_check_enabled = true
"#;
let mut f = std::fs::File::create(claude_dir.join("hooks-config.toml")).unwrap();
f.write_all(toml_str.as_bytes()).unwrap();
Expand All @@ -118,6 +119,33 @@ default_branch = "main"
assert_eq!(staleness.enabled, Some(true));
assert_eq!(staleness.fetch_timeout_secs, Some(5));
assert_eq!(staleness.default_branch.as_deref(), Some("main"));
assert_eq!(staleness.stale_check_enabled, Some(true));
let _ = std::fs::remove_dir_all(&root);
}

#[test]
fn staleness_stale_check_enabled_defaults_to_none_when_omitted() {
use std::io::Write;
let root = unique_temp_root("staleness-no-stale-check");
let claude_dir = root.join(".claude");
std::fs::create_dir_all(&claude_dir).unwrap();
let toml_str = r#"
[session_start.staleness]
enabled = true
"#;
let mut f = std::fs::File::create(claude_dir.join("hooks-config.toml")).unwrap();
f.write_all(toml_str.as_bytes()).unwrap();
drop(f);
let config = read_hooks_config(&root);
let staleness = config
.session_start
.as_ref()
.and_then(|s| s.staleness.as_ref())
.expect("staleness section should parse");
assert_eq!(
staleness.stale_check_enabled, None,
"stale_check_enabled 未設定は None (default-OFF、ADR-039)"
);
let _ = std::fs::remove_dir_all(&root);
}

Expand Down