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
12 changes: 10 additions & 2 deletions docs/file-length-enforcement-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ Agent 委譲。ADR-018 (cli-pr-monitor の takt 移行) を参照させる必要

### PR-W5: Stop hook gate (C) 追加

- **status**: 実装完了 (dogfood pass、PR 未作成) @5cfcfb5a
- **status**: [x] land 済 (#234, merged 2026-07-02T12:06:37Z)
- **owner**: -
- **effort**: S
- **依存**: PR-W1 + W2 + W3 + W4 が **全て land 済** (clean state 必須、未 land 状態で C を入れると Stop が常に block) — 4 件とも land 済 (#220/#224/#230/#231)
Expand Down Expand Up @@ -483,11 +483,19 @@ PR-W1 [x] #220 (merged at 2026-06-24T18:04:56Z)
PR-W2 [x] #224 (merged at 2026-06-28T13:15:36Z)
PR-W3 [x] #230 (merged at 2026-07-01T05:27:34Z)
PR-W4 [x] #231 (merged at 2026-07-01T08:42:27Z)
PR-W5 [~] 実装完了 (dogfood pass、PR 未作成) @5cfcfb5a
PR-W5 [x] #234 (merged at 2026-07-02T12:06:37Z)
```

land 後は `[x]` + PR 番号を記入し、最終的に 6 件全て `[x]` で本 file を削除。

**削除条件の進捗 (2026-07-02、PR-W5 land 後)**:

1. ✅ PR-W0 〜 PR-W5 が全て master に land 済 (#219/#220/#224/#230/#231/#234)
2. ⏳ `find src -name "*.rs" ... $1 > 800` = 0 件 — 次回 weekly audit (PR-W0/ADR-031) で確認
3. ⏳ PR-W5 land 後の Stop hook gate dogfood で `FILE_LENGTH_CHECK_OVERRIDE=1` を使わず 1-2 セッション通過 — 観測開始

条件 ② ③ 充足を確認したら本 file を削除する。W5 land 後に恒久配置が必要な知見 (順位 243 の pub(crate) チェックリスト等、本 file を参照先にしているもの) は削除前に coding-style.md / CLAUDE.md へ移設する。

---

## 関連 ADR / memory / 順位
Expand Down
3 changes: 3 additions & 0 deletions docs/todo-summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@
| 245 | 💎 Tier 3 | **`PR_SIZE_CHECK_OVERRIDE=1` 適用ポリシーを push-runner-config.toml に明文化 (PR #231 post-merge-feedback T3-3 採用)** | todo13.md | XS | なし (override の使い方が「知っている人だけが知る」暗黙知化、機械的 refactor (削除≒追加) の定義と override 判断基準を push-runner-config.toml の `[pr_size_check]` コメントまたは docs に追記。file-length 強制継続で機械 refactor の override 判断は今後も発生 (Frequency Medium) + Effort XS + Adoption Risk None) |
| 246 | 🔧 Tier 2 | **monitor の CI 完了判定を短絡 — CodeRabbit review-complete + mergeability CLEAN で CI 待機を skip し merge-ready 判定 (PR #232 post-merge-feedback T2-1 採用)** | todo13.md | S | なし (CodeRabbit のみが check の構成 (GitHub Actions 等の実 CI 不在) で monitor が「CI: pending」を無限に誤報し、GitHub API 直接確認 (mergeStateStatus=CLEAN / mergeable=MERGEABLE) で merge 可能を確認する手動対応が PR #231/#232 で 2 回発生 = 幻の CI pending。docs-only PR の共通 pattern で再現見込み。poll ループに「review 完了 + mergeability CLEAN なら CI 待機を短絡」条件分岐を追加 (parse logic 改修不要)。Severity Medium + Frequency Medium + Effort S + Adoption Risk None) |
| 247 | 💎 Tier 3 | **`review-jj-robustness-whole` facet (観点⑧) の dogfood + bounded-lifetime 評価 (ADR-031 拡張、PR-2) ★ 週次拡張** | todo13.md | S | なし (PR-2 で ADR-031 週次に観点⑧ jj-workspace robustness facet 追加。非 colocated / 並列 jj workspace の silent bug 4 class = mtime staleness / `CARGO_MANIFEST_DIR` 実行時読み / `--repo` 無し gh / colocated `.git` 前提 を whole-tree 検出。新規実験 facet ゆえ ADR-039 bounded-lifetime で 2-3 週 dogfood → 採用率 / false positive で定着 or retire 判定。2026-07 セッションで 4 bug class 実観測が起点) |
| 248 | 💎 Tier 3 | **Gate Function Design Checklist を新規 guide として追加 (fail-closed パターン集) (PR #234 post-merge-feedback T3-1 採用)** | todo13.md | S | なし (却下した linter 化 T1-1/T1-2 の補完。fail-closed 実装の失敗/推奨パターンを 1 箇所に集約。PR #234 で collect_oversize_files 初版の `.ok()?` が fail-open bug → CodeRabbit Major #234-1。Severity Medium + Frequency Medium + Effort S + Adoption Risk None、順位 249 と相補) |
| 249 | 💎 Tier 3 | **ADR-043 に fail-open vs fail-closed の具体コード例を追記 (PR #234 post-merge-feedback T3-2 採用)** | todo13.md | S | なし (ADR-043 は security-critical だが具体コード例が未記載で解釈分散が今回の bug を生んだ。`.ok()?` anti-pattern / single-read + ErrorKind idiom / multi-step vs 単一操作の比較を ADR 本文に追記。Severity Medium + Frequency Medium + Effort S + Adoption Risk None、順位 248 と相補) |
| 250 | 💎 Tier 3 | **ADR-021 に「jj revset の base branch は config/arg 化 (hardcode 禁止)」を明文化 (PR #234 post-merge-feedback T3-3 採用)** | todo13.md | XS | なし (PR #234 で `[file_length_gate] base` を config 引数化 = ADR-021 準拠。custom lint ⑫ `no-hardcoded-jj-revset-range` は `.rs` の `master..@` literal を捕捉するが、TOML config / docs / 他ツールへの原則適用は未明文化。Severity Low + Frequency Medium + Effort XS + Adoption Risk None) |

**戦略**: Tier 1 を 2〜3 セッションで片付け → Tier 2 で ADR-032 の前提 + rate-limit + convergence cost 削減を進める → Tier 3 で ADR-032 を land + ドキュメント整備。Tier 4-5 は cleanup / 外部展開で daily efficiency への直接効果は小さい。

Expand Down
64 changes: 64 additions & 0 deletions docs/todo13.md
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,70 @@

---

### Gate Function Design Checklist を新規 guide として追加 (fail-closed パターン集) (PR #234 post-merge-feedback T3-1 採用)

> **動機**: fail-closed 実装の失敗パターンと推奨パターンが複数の ADR / memory に分散しており、新規 gate 実装者が再発させるリスクが高い。PR #234 で `collect_oversize_files` の初版が `.ok()?` で読み取り失敗を握り潰す fail-open bug を含み CodeRabbit Major #234-1 で指摘された。gate 実装の失敗/推奨パターンを 1 箇所に集約する。
>
> **本タスクの位置づけ**: PR #234 post-merge-feedback Tier 3 #1 採用 (Severity Medium / Frequency Medium / Effort S / Adoption Risk None)。同 feedback の T1-1 (`filter_map + .ok()?` の linter 化) / T1-2 (TOCTOU linter 化) は false positive 多発リスクで却下推奨となったため、その補完としてドキュメント化が必須。
>
> **参照**: `.claude/feedback-reports/234.md` Tier 3 #1、`docs/adr/adr-043-security-gates-fail-closed.md` (fail-closed 原則)、順位 249 (ADR-043 コード例追記、相補)、custom lint ⑫ `no-hardcoded-jj-revset-range`。
>
> **実行優先度**: 💎 **Tier 3** — Effort S。

#### 作業計画

- [ ] Gate Function Design Checklist を `CLAUDE.md` patterns section または `docs/guides/gate-functions.md` に新設: (1) 判定不能状態は fail-closed、(2) gate 関数内で `filter_map + .ok()?` 禁止、(3) single-pass file access で TOCTOU 回避、(4) iterator chain + `Result::?` idiom で nesting depth 抑制、(5) エラーパスを明示的にテスト
- [ ] ADR-043 (順位 249) との相互リンク
- [ ] 本 entry 削除 + todo-summary.md 行削除

#### 完了基準

- fail-closed gate の失敗/推奨パターンが 1 箇所に集約され、新規 gate 実装者が参照して再発を防げる。

---

### ADR-043 に fail-open vs fail-closed の具体コード例を追記 (PR #234 post-merge-feedback T3-2 採用)

> **動機**: ADR-043 は security-critical だが具体的なコード例が未記載で、解釈の分散が PR #234 の `.ok()?` fail-open bug を生んだ。`.ok()?` anti-pattern / single-read + `ErrorKind` inspection idiom / multi-step vs 単一操作の比較を ADR 本文に追記し、レビュー時の一貫した判断基準を提供する。
>
> **本タスクの位置づけ**: PR #234 post-merge-feedback Tier 3 #2 採用 (Severity Medium / Frequency Medium / Effort S / Adoption Risk None)。順位 248 (運用チェックリスト) と相補的な決定記録。
>
> **参照**: `.claude/feedback-reports/234.md` Tier 3 #2、`docs/adr/adr-043-security-gates-fail-closed.md` (追記先)、順位 248 (Gate Function Design Checklist)。
>
> **実行優先度**: 💎 **Tier 3** — Effort S。

#### 作業計画

- [ ] ADR-043 に具体コード例 section を追加 (`.ok()?` anti-pattern / single-read + `ErrorKind` idiom / TOCTOU 回避の単一操作)
- [ ] 本 entry 削除 + todo-summary.md 行削除

#### 完了基準

- レビュー時に fail-open / fail-closed の判断基準が具体コードで参照でき、解釈の分散が解消される。

---

### ADR-021 に「jj revset の base branch は config/arg 化 (hardcode 禁止)」を明文化 (PR #234 post-merge-feedback T3-3 採用)

> **動機**: PR #234 で `[file_length_gate] base` を config 引数化する ADR-021 準拠パターンを実装した (default `master`、`format!("{}..@", base)`)。custom lint ⑫ `no-hardcoded-jj-revset-range` は `.rs` の `master..@` literal を捕捉するが、TOML config / docs / 他ツールへの原則適用は明文化されていない。base branch hardcode 禁止の原則を明文化する。
>
> **本タスクの位置づけ**: PR #234 post-merge-feedback Tier 3 #3 採用 (Severity Low / Frequency Medium / Effort XS / Adoption Risk None)。jj change detection は複数ツールで多用されるため原則の明文化価値がある。
>
> **参照**: `.claude/feedback-reports/234.md` Tier 3 #3、`docs/adr/adr-021-jj-change-detection-principles.md` (追記先)、custom lint ⑫ `no-hardcoded-jj-revset-range`。
>
> **実行優先度**: 💎 **Tier 3** — Effort XS。

#### 作業計画

- [ ] ADR-021 (または `CLAUDE.md`) に「jj revset の base branch は config / arg 化し hardcode 禁止」の原則を明文化 (`.rs` / TOML config / docs / 他ツール横断)
- [ ] 本 entry 削除 + todo-summary.md 行削除

#### 完了基準

- base branch hardcode 禁止の原則が明文化され、新規 jj 変更検出実装で参照できる。

---

## 既知課題 (記録のみ、本セッションで未対応)

(現時点で本ファイルへの既知課題は無し。docs/todo10.md / todo9.md 末尾を参照。)