Skip to content

feat(weekly-review): file_length scan を pre-LLM step として追加 (PR-W0) + 順位 222 採用 - #219

Merged
aloekun merged 2 commits into
masterfrom
pr-w0-weekly-audit
Jun 24, 2026
Merged

feat(weekly-review): file_length scan を pre-LLM step として追加 (PR-W0) + 順位 222 採用#219
aloekun merged 2 commits into
masterfrom
pr-w0-weekly-audit

Conversation

@aloekun

@aloekun aloekun commented Jun 24, 2026

Copy link
Copy Markdown
Owner

Summary

docs/file-length-enforcement-plan.md (PR #218 で land 済) で計画した PR-W0 (Weekly audit / E) を実装する。ADR-031 weekly-review pipeline に deterministic な file_length scan を pre-LLM step として追加 し、800 行超 file の現状を毎週 1 回機械的に可視化する。

順位 147 (file_length lint、PR #202) は hooks-post-tool-comment-lint-rust の PostToolUse hook として実装されており、触られた file の編集時のみ additionalContext で 800 行超を警告する設計 (soft-nag、touch-trigger ratchet)。このため未触り state の violation は警告されず、PR-3a (#217) 時点で 7 件の累積を許す結果となった。

本 PR はその構造的盲点を「週次 audit」で補う最初の機構。順位 147 の touch-trigger と本 step の whole-tree scan が補完関係で 2 層防御を形成する。

変更内容

新 facet file-length-watchlist

.takt/workflows/weekly-review.yamlreviewers parallel step に追加 (4 番目の parallel facet)。

  • type: LLM facet (takt は command-type step を持たないため LLM facet を deterministic instruction で wrap)
  • persona: simplicity-reviewer (file length は SRP / simplicity 観点と整合)
  • model: haiku (cheap、command 実行 + 整形のみ)
  • policy: review (read-only、既存 reviewer と一貫)
  • allowed_tools: Bash + Read (find/wc/awk 実行用)
  • instruction: file-length-watchlist (新規)
  • output: file-length-watchlist.md (Report Directory)
  • completion: analysis complete (step-level all("analysis complete") rule と整合)

新 instruction .takt/facets/instructions/file-length-watchlist.md

決定論的 shell command を実行し、出力を markdown table に整形する deterministic instruction:

find src -name '*.rs' -not -path '*/target/*' -exec wc -l {} + 2>/dev/null \
  | awk '$1 > 800 && $2 != "total" { print $0 }' \
  | sort -rn

出力 markdown は以下の構造:

  • 800 行超 file 一覧 (件数表示 + table)
  • 計画書 docs/file-length-enforcement-plan.md Phase 1 (PR-W1〜W4) との関係を明示
  • 0 件 (clean state) case でも file を生成 (aggregate-weekly が常に Read 可能な前提を満たす)

LLM 判断の余地なし。命令通りに Bash を実行し、出力を整形するだけ。

aggregate-weekly instruction の更新

.takt/facets/instructions/aggregate-weekly.md3 reports → 4 reports に拡張:

  • Input source list に file-length-watchlist.md を追加
  • 機械的観測は Phase 1 統合 (LLM findings) には含めず、Phase 4 出力の専用 section "File Length Watchlist (機械的観測)" として weekly report に転載
  • findings ゼロ case の出力 template にも同 section を追加

計画書 status 更新

docs/file-length-enforcement-plan.md の進捗追跡 table で PR-W0[in progress] にマーク。merge 後に [x] + PR 番号に更新する想定 (本 file 削除条件 1 / 3)。

設計上のポイント

  • takt の step type 制約: takt workflow は LLM facet のみサポート (command-type step なし)。Rust 製の deterministic 機構を入れるには「LLM facet を limit instruction で deterministic wrapping」する形を採用 (analyzer 推奨の "pre-LLM Rust step" との差分)
  • 観点番号 ⑦: 既存 3 facet は ADR-031 の review scope 軸で観点 ① (architecture) / ④ (security) / ⑥ (simplicity) を扱う。本 facet は観点 ⑦ として deterministic な機械観測層を補完
  • aggregate-weekly での扱い: LLM findings (severity / category / location 必須) とは別系統の「機械的観測」section として転載。findings JSON には含めない (Phase C skill /weekly-review での AskUserQuestion 採否 flow は LLM findings のみが対象、watchlist は単なる health check)
  • 計画書との整合: planning doc PR-W0 section の設計案通り (find command / aggregate-weekly 注入)

Test plan

  • markdownlint: 0 errors (PostToolUse hook で各 Edit 確認)
  • cli-docs-lint --check cross-ref: OK (planning doc 内 link は ../src/ 形式)
  • takt pre-push-review approved (Result: Success)
  • YAML 構文確認 (既存 3 facet と structurally identical)
  • 次回 /weekly-review 実行で実観測 (本 PR merge 後、weekly schedule に合わせて発火)

dogfood は本 PR land 後の次の weekly run (= 2026-06-30 周辺、ADR-031 § Phase E トリガー方式 per "前回実行から 7 日経過で promote" reminder) で行う。

PR 計画における位置

master (PR #218 land 済、planning doc 確立)
  ↓
本 PR (PR-W0、weekly audit step 追加)  ← 本 PR
  ↓
PR-W1 (hooks-post-tool-comment-lint-rust 分割)
  ↓
PR-W2 (cli-pr-monitor 分割)
  ↓
PR-W3 (cli-merge-pipeline 分割)
  ↓
PR-W4 (cli-push-runner 分割)
  ↓
PR-W5 (Stop hook gate 追加、Phase 2 完了)
  ↓
[将来] PR-W6 (C → B 移行検討)

PR-W1 〜 W4 が land するごとに、本 watchlist の件数が 7 → 6 → 5 → 4 → ... → 0 と減少する想定。0 件到達後は恒久 audit として継続。

関連 PR / commit

bonus content

本 PR には 2 つの commit が含まれる:

  1. docs(todo): 順位 222 採用 (PR #218 post-merge-feedback #5)~/.claude/CLAUDE.md に「AI 先走り防止」rule 追加の todo entry
  2. feat(weekly-review): file_length scan を pre-LLM step として追加 (PR-W0) — 本 PR の主目的

Summary by CodeRabbit

  • New Features

    • 週次レポートに、長すぎるファイルの一覧を自動で含めるようになりました。
    • しきい値超過ファイルがある場合も、ない場合も結果が出力されます。
  • Documentation

    • 週次レビューの手順と出力形式を更新しました。
    • 実行ルールや確認フローの案内を追記しました。
  • Chores

    • 進捗表記とタスク整理を更新しました。

aloekun added 2 commits June 24, 2026 22:50
PR #218 (docs PR、ファイルサイズチェックフロー改善計画 + 順位 220/221 採用)
の post-merge-feedback で承認された #5 を採用:

順位 222 (💎 Tier 3、Effort XS):
`~/.claude/CLAUDE.md` に「複数セッション跨ぎの計画文書作成時は AI が
先走らずユーザー確認後に方針報告し GO/NO-GO を得る」ルール追加

由来: PR #218 session 内で Plan file 作成完了報告後、AI がユーザー承認
なしに PR-W0 着手しようとして `[Request interrupted by user]` で停止
された実観測 (Severity Medium、Frequency Low 初観測、Effort XS、
Adoption Risk None)。memory `feedback_no_unauthorized_reorder` の補強
として「planning doc 作成のような大きな task 完了時は GO/NO-GO 確認待ち」
を明文化、派生プロジェクトへ `~/.claude/CLAUDE.md` 経由で自動波及。

採用しなかった項目:
- #1 (weekly audit を feedback entry にも明示): 計画書 PR-W0 で既に管理
- #3 (lib-subprocess stress test): 順位 220 と完全重複
- #4 (Agent template PMF entry): 計画書 Appendix A で既に capture、却下
- #2/#6/#7: 様子見継続
ADR-031 weekly-review pipeline に deterministic Rust pre-step として
800 行超 file の scan を追加。LLM facet 不要、純機械測定。

順位 147 (file_length lint) は touch-trigger ratchet で「触られた file の
編集時のみ警告」設計のため、未触り state の violation を可視化できない。
本 step は毎週 1 回 master HEAD に対して 800 行超 file を全件列挙し、
aggregate-weekly facet の input に注入して watchlist として report 化する。

PR-3a (PR #217) で 7 件の 800 行超 file が判明した経緯から、Phase 1
(file split work、PR-W1 〜 W4) の進捗 dashboard としても機能する。
全 file ≤ 800 行に到達後も恒久的に監視継続。

由来: docs/file-length-enforcement-plan.md PR-W0 (PR #218 で land)、
severity = warning (block しない、健康診断目的)。
@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1da0c3a9-5e44-4c20-ae16-c3e50ebc05ef

📥 Commits

Reviewing files that changed from the base of the PR and between b87174c and 591d108.

📒 Files selected for processing (6)
  • .takt/facets/instructions/aggregate-weekly.md
  • .takt/facets/instructions/file-length-watchlist.md
  • .takt/workflows/weekly-review.yaml
  • docs/file-length-enforcement-plan.md
  • docs/todo-summary.md
  • docs/todo10.md

📝 Walkthrough

Walkthrough

週次レビューワークフローに file-length-watchlist facetを新規追加した。800行超のRustファイルを機械的にスキャンするinstruction・ワークフロー定義・集約ルールを追加し、PR-W0進捗をin progressに更新した。

Changes

file-length-watchlist facet追加

Layer / File(s) Summary
file-length-watchlist facet instruction定義
.takt/facets/instructions/file-length-watchlist.md
800行超Rustファイルの週次スキャン手順を新規定義。find/wc/awk/sortによるBashコマンド、markdownテンプレート(1件以上/0件)、出力契約、完了条件、読み取り専用・LLM判断排除の原則を規定。
weekly-reviewワークフローへの組み込み
.takt/workflows/weekly-review.yaml
reviewers並列ステップにfile-length-watchlistエントリを追加し、許可ツール(Bash/Read)・instruction参照・出力ファイル名・完了条件を定義。
aggregate-weeklyへの集約ルール追加
.takt/facets/instructions/aggregate-weekly.md
入力レポート一覧にfile-length-watchlist.mdを追加。findingsに含めず「File Length Watchlist (機械的観測)」sectionとして転載するルール、findingsゼロ時テンプレへの同section追記を反映。
ドキュメント進捗・タスク更新
docs/file-length-enforcement-plan.md, docs/todo-summary.md, docs/todo10.md
PR-W0ステータスをin progressへ更新。todo-summary.mdに順位222タスク行を追加。todo10.mdにplanning doc完了時GO/NO-GO確認ルール追加タスクを新規追記。

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • aloekun/claude-code-hook-test#182: aggregate-weekly.mdおよびweekly-review.yamlの週次Phase B集約・ワークフロー基盤を確立したPRで、本PRはその統合ポイントを直接拡張している。
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR-W0のfile length scanをweekly-reviewのpre-LLM stepとして追加した主旨が伝わっており、順位222の採用も含めて変更内容に概ね一致しています。
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@aloekun
aloekun merged commit 33a845d into master Jun 24, 2026
1 check passed
@aloekun
aloekun deleted the pr-w0-weekly-audit branch June 24, 2026 16:07
aloekun added a commit that referenced this pull request Jun 24, 2026
…PR-W1、self-host irony 解消) (#220)

* docs(plan): PR-W0 を [x] #219 (merged at 2026-06-24T16:07:42Z) に更新

PR #219 (PR-W0、weekly-review に file_length scan facet 追加) が
2026-06-24T16:07:42Z に master へ land したことを受けて、
docs/file-length-enforcement-plan.md の進捗追跡 table の PR-W0 status を
`[in progress]` → `[x] #219` に更新する。

* refactor(hooks-post-tool-comment-lint-rust): main.rs を module 分割 (PR-W1)

docs/file-length-enforcement-plan.md PR-W1 を実装。
lint hook 本体 (1606 行) を coding-style.md § File Organization (800 行 max)
内に収まる module 構成に分割。behavior 不変な mechanical refactor で
関数 signature・公開 API・field 名・default 値はすべて保持。

順位 147 (file_length lint、PR #202 land) を自分自身に適用した self-host
の整合性を確立。本 PR が land すれば 7 files 中 1 件 (1606 行) を 800 行
以下に解消、weekly-review file_length watchlist の件数が 7 → 6 に減少。

分割計画は計画書 PR-W1 section + Appendix A Agent prompt template 参照。
PR-3a (#217) の hooks-session-start 分割と同型 procedure を Agent 委譲で
実装、behavior 不変性は test count 不変 + cargo clippy clean で verify。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant