closure-scope-retention-guardlisted
Install: claude install-skill s977043/river-review
> 由来: Claude Code の `/simplify`(Efficiency 観点の closure 保持)に由来(inspired by)。Issue #1452 P3 で、`skills/agent-skills/river-review-code/references/SIMPLIFY.md` から closure スコープ保持の詳細検出を本 registry skill へ委譲した。
## Pattern declaration
Primary pattern: Reviewer
Secondary patterns: Inversion
Why: 長寿命オブジェクトの closure 保持をチェックリストで評価するが、保持の証拠が差分に無い変更では実行しない。
## Goal / 目的
- 長寿命オブジェクト(キャッシュ・リスナー・シングルトン・戻り値として保存されるオブジェクト)が、closure/環境キャプチャで enclosing scope 全体(大きな配列・一時バッファ等)を生存させ続けるメモリ保持を防ぐ。
- 必要なフィールドだけをコピーする形(class / 明示フィールド化 / 縮約済み構造)を促す。
## Non-goals / 扱わないこと
- correctness bug・セキュリティ欠陥は対象外(bug 系・security 系観点の責務)。
- 短命な関数スコープ内で完結し、戻り後に到達不能になる一時変数は対象外��
- 一般的なパフォーマンス最適化論(ホットパスの計算量など)は SIMPLIFY 側 Efficiency の残余に委ねる。
## applyTo に `scripts/**` と `runners/**` を含める理由
`applyTo` の各 glob は拡張子で境界付けした midstream ソース限定(scoping ガイド「midstream (application source)」の範囲内)である。長寿命 singleton / キャッシュは `src/` に限らず `scripts/`・`runners/` の常駐プロセス・起動パスにも生じ得るため、SIMPLIFY の applyTo 経路差を解消する目的で実行コードを持つ3ルートを対象にする。`tests/**`・`docs/**`・`dist/**` は含めない。
## Pre-execution Gate / 実行前ゲート
このスキルは以下の条件が**すべて**満たされない限り `NO_REVIEW` を返す。dispatcher 経路では Gate が強制されないため、実行時に本文の Gate を必ず自己適用する。
- [ ] 差分に**リポジトリ内で実行されるコード**(`src/` / `scripts/` / `runners/` 配下の `.ts` / `.tsx` / `.js` / `.jsx` / `.mjs` / `.cjs`)の変更が含まれている。
- [ ] 差分に**長寿命オブジェクト**(module-level singleton・キャッシュ・登録されるリスナー・戻り値として保存されるオブジェクト)を **closure/環境キャプチャで構築する証拠**が含まれている。
- [ ] その closure が **enclosing scope の大きなデータ**(ファイル全文・大配列・一時バッファ・パース済みドキュメント群)を到達可能に保っている証拠がある。
-