From f3bdff922ea86c9521748c95bc7172b78b960aff Mon Sep 17 00:00:00 2001 From: aloekun Date: Thu, 2 Jul 2026 23:10:27 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20PR-W5=20(#234)=20land=20=E5=8F=8D?= =?UTF-8?q?=E6=98=A0=20+=20post-merge-feedback=20=E6=8E=A1=E7=94=A8=203=20?= =?UTF-8?q?=E4=BB=B6=E3=82=92=20todo=20=E7=99=BB=E9=8C=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/file-length-enforcement-plan.md | 12 +++++- docs/todo-summary.md | 3 ++ docs/todo13.md | 64 ++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 2 deletions(-) diff --git a/docs/file-length-enforcement-plan.md b/docs/file-length-enforcement-plan.md index 003331d5..fa03880e 100644 --- a/docs/file-length-enforcement-plan.md +++ b/docs/file-length-enforcement-plan.md @@ -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) @@ -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 / 順位 diff --git a/docs/todo-summary.md b/docs/todo-summary.md index 48ab61c1..492c9488 100644 --- a/docs/todo-summary.md +++ b/docs/todo-summary.md @@ -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 への直接効果は小さい。 diff --git a/docs/todo13.md b/docs/todo13.md index 44a393bd..2a7eaf43 100644 --- a/docs/todo13.md +++ b/docs/todo13.md @@ -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 末尾を参照。)