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
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
- [ADR-059: hook 通知の可視化チャネル分離 (systemMessage = ユーザー向け / additionalContext = モデル向け)](docs/adr/adr-059-hook-system-message-visibility.md) *(試験運用)*
- [ADR-060: Cloud ハーネス有効化 — tracked dispatcher 登録 + SessionStart 実体確保の 2 層分離](docs/adr/adr-060-cloud-harness-sessionstart-dispatcher.md) *(試験運用)*
- [ADR-061: tool call leak の hard-fail 経路対応 — Stop 不発火の回収層 + scan_tail 合成エントリ耐性](docs/adr/adr-061-tool-call-leak-hardfail-recovery.md) *(試験運用)*
- [ADR-062: 月次ハーネス ROI レビュー — telemetry 発火実績によるハーネス複雑度の棚卸し (WP-12 step 2/3)](docs/adr/adr-062-monthly-harness-roi-review.md) *(試験運用)*

## 開発 convention / チェックリスト

Expand Down
16 changes: 14 additions & 2 deletions docs/adr/adr-053-stop-tool-call-leak-detection.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,14 +139,25 @@ section 不在 / `enabled` 未設定 / `false` では完全 skip。本リポジ
根本原因は上流の不具合であり、本 hook は上流が修正されるまでの時限的な防御層である。
撤去判定 trigger:

- **撤去**: 上流 (Claude Code / モデル) の修正が確認できた、または leak が
**4 週間観測されなくなった**時点で、hook 登録解除 + crate 削除の revert PR を作成
- **撤去**: 上流 (Claude Code / モデル) の修正が確認できた、または **月次レビュー (ADR-062) が
leak を連続 2 か月発火 0 で非アクティブ化候補として promote した**時点で、hook 登録解除 +
crate 削除の revert PR を作成 (旧「4 週間非観測」基準は ADR-062 の 2 か月基準へ正式置換。
2 か月は 4 週間より保守的。詳細は本 § 末尾の追記を参照)
- **継続**: leak が観測され続ける間は維持。block 発火が透明になるよう stderr /
reason に検知回数を明示している

dogfood 計測項目: block 発火数、fail-open (上限到達) 数、誤検知報告 (正当なテキスト
出力が block された件数、期待値 0)。

**撤去判定の機械 promote (2026-07-30 追記、[ADR-062](adr-062-monthly-harness-roi-review.md))**:
上記「4 週間観測されなくなった」の判定は人間の記憶に依存していたが、
[ADR-062 (月次ハーネス ROI レビュー)](adr-062-monthly-harness-roi-review.md) が
telemetry 発火実績 (id `hooks-stop-tool-call-leak` + ADR-061 の `prompt-recovery` warn) から
**連続 2 か月発火 0 で非アクティブ化候補として機械 promote** する (config `zero_streak_months`、
既定 2。4 週間より保守的な置き換え)。promote は `/monthly-review` skill の AskUserQuestion を
経てユーザーが採否し、自動無効化はしない。最終的な hook 登録解除 + crate 削除の revert PR は
本 § の手順に従う。

## 帰結

### 利点
Expand Down Expand Up @@ -187,6 +198,7 @@ ADR-061 と連動する。約 150 セッションの corpus 調査で hard-fail

## 関連 ADR

- [ADR-062](adr-062-monthly-harness-roi-review.md) — 月次 ROI レビュー (撤去判定「4 週間非観測」を発火実績で機械 promote)
- [ADR-061](adr-061-tool-call-leak-hardfail-recovery.md) — hard-fail 経路対応 (本 ADR の拡張)
- [ADR-039](adr-039-experimental-feature-standard-pattern.md) — 試験運用標準パターン
- [ADR-004](adr-004-stop-hook-quality-gate.md) — Stop 品質ゲート (ループ防止方式の逸脱元)
Expand Down
38 changes: 38 additions & 0 deletions docs/adr/adr-055-firing-telemetry-collection.md
Original file line number Diff line number Diff line change
Expand Up @@ -279,8 +279,46 @@ thread panic (join の `Err`) は実 quality 違反ではないため `InfraErro
- fail-open 原則は不変。telemetry 記録の有無に関わらず block decision 自体は emit するため、
infra エラー時も Claude への block 通知は従来どおり行われ、ゲート挙動は変わらない。

## Amendment (2026-07-30): WP-12 step 2/3 消化 + 出力先の週次→月次変更 (ADR-062)

初版 § コンテキスト / § Bounded lifetime は、step 2 (ROI 棚卸し pre-step) の出力先を
**週次レビュー ([ADR-031](adr-031-weekly-review-pipeline.md)) の facet** と想定していた。
[ADR-062 (月次ハーネス ROI レビュー)](adr-062-monthly-harness-roi-review.md) の実装にあたり、
この想定を **月次レビューへ変更**し、WP-12 step 2/3 を ADR-062 で消化する。

### 出力先を週次→月次に変更

テレメトリ傾向は週次では変化が小さくノイズになり、ADR-053/061 の leak 撤去粒度「4 週間」とも
月次が一致する。よって step 2 の集計は週次 facet ではなく **月次の決定論 exe
`cli-telemetry-report`** (ADR-062 § 決定 2) が担い、出力は `.claude/monthly-reviews/` +
月次 rollup (`.claude/telemetry/monthly-<YYYY-MM>.json`) とする。週次 = whole-tree コード
レビュー / 月次 = telemetry/ROI 棚卸し、の役割分担で ADR-031 と併存する。

### step 2 / step 3 の消化内容 (ADR-062 に詳細)

- **step 2 (棚卸し pre-step)**: `cli-telemetry-report` が workspace 横断で `firings-*.jsonl` を
集計し、月別 × id 別カウント + 発火 0 リスト + config enabled / exe 配備 snapshot + incident 由来
ルール ([ADR-049](adr-049-incident-eval-regression-suite.md)) の維持推奨マークを出力する。
incident 由来の区別は初版 § Bounded lifetime の想定どおり `[rules.incident]` を真実源とする。
- **step 3 (bounded lifetime 判定の機械化)**: config `[[telemetry_report.mechanisms]]` の静的
マッピングで「連続 `zero_streak_months` (既定 2) か月発火 0 → 非アクティブ化候補として promote」を
MVP 実装。初期マッピングは ADR-053/061 の leak 検知 1 件。自動無効化はせず採否は
`/monthly-review` skill の AskUserQuestion を経る (ADR-022/028)。

### retention (順位 312) の相乗り

初版 § Windows 並行書き込み安全性 の per-pid × 日次 partition は削除機構が無かった。
`cli-telemetry-report` に retention (`[telemetry_report] retention_days`、code default 未設定 =
削除無効の opt-in) を相乗りさせ、rollup 確定後の raw daily ファイルを削除する (複数月トレンドは
rollup から読むため判定に影響しない)。

なお、初版 (別 § に既述) の 2026-07-29 amendment「block 記録を実 quality 違反に限定 (順位309)」は、
ADR-062 の Phase 0 (ユーザー決定事項 3) として先行実装したものであり、本 step 2/3 の ROI 信号
精度向上の一部である。

## 関連 ADR

- [ADR-062](adr-062-monthly-harness-roi-review.md) — 月次ハーネス ROI レビュー (WP-12 step 2/3 の実装、出力先を月次に変更)
- [ADR-039](adr-039-experimental-feature-standard-pattern.md) — 試験運用標準パターン (opt-in / kill-switch / bounded lifetime)
- [ADR-043](adr-043-security-gates-fail-closed.md) — fail-closed 原則 (本 telemetry は observation 層で適用外 = fail-open)
- [ADR-044](adr-044-subprocess-utility-extraction-boundary.md) — utility extraction 境界 (UTC ヘルパー抽出トリガ到達)
Expand Down
16 changes: 14 additions & 2 deletions docs/adr/adr-061-tool-call-leak-hardfail-recovery.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,13 +163,24 @@ code default OFF を継承する。
根本原因は上流の不具合であり、本 hook は上流が修正されるまでの時限的な防御層である。
[ADR-053](adr-053-stop-tool-call-leak-detection.md) と連動して撤去を判定する:

- **撤去**: 上流 (Claude Code / モデル) の修正が確認できた、または leak が **4 週間観測されなく
なった**時点で、ADR-053 とまとめて hook 登録解除 + crate 削除の revert PR を作成
- **撤去**: 上流 (Claude Code / モデル) の修正が確認できた、または **月次レビュー (ADR-062) が
leak (Stop block + 本回収 warn の合算) を連続 2 か月発火 0 で promote した**時点で、ADR-053 と
まとめて hook 登録解除 + crate 削除の revert PR を作成 (旧「4 週間非観測」基準は ADR-062 の
2 か月基準へ正式置換)
- **継続**: leak が観測され続ける間は維持

dogfood 計測項目: 回収発火数 (telemetry の `hooks-stop-tool-call-leak/prompt-recovery`)、
UserPromptSubmit の発火順 (ハーネス自身の isMeta 注入との前後関係の実観測)、誤発火報告 (期待値 0)。

**撤去判定の機械 promote (2026-07-30 追記、[ADR-062](adr-062-monthly-harness-roi-review.md))**:
ADR-053 と連動する「4 週間観測されなくなった」の撤去判定は、
[ADR-062 (月次ハーネス ROI レビュー)](adr-062-monthly-harness-roi-review.md) が telemetry 発火
実績から機械 promote する。本 ADR の回収層は id `hooks-stop-tool-call-leak/prompt-recovery`
(decision = warn) で記録されるため、leak トレンドは ADR-053 の Stop block と本 warn の**合算と
内訳**で見る。両 id が連続 2 か月発火 0 (config `zero_streak_months`、既定 2) で非アクティブ化候補と
なり、`/monthly-review` skill の AskUserQuestion を経てユーザーが採否する (自動無効化しない)。
撤去は ADR-053 とまとめた revert PR で行う。

## 帰結

### 利点
Expand All @@ -192,6 +203,7 @@ UserPromptSubmit の発火順 (ハーネス自身の isMeta 注入との前後

## 関連 ADR

- [ADR-062](adr-062-monthly-harness-roi-review.md) — 月次 ROI レビュー (撤去判定を発火実績で機械 promote、回収 warn を合算)
- [ADR-053](adr-053-stop-tool-call-leak-detection.md) — 既存の Stop hook 検知 (本 ADR の拡張元)
- [ADR-039](adr-039-experimental-feature-standard-pattern.md) — 試験運用標準パターン
- [ADR-049](adr-049-incident-eval-regression-suite.md) — incident→eval 回帰スイート (fixture 方針)
Expand Down
Loading
Loading