← ClaudeAtlas

closure-scope-retention-guardlisted

Detects long-lived objects (caches, listeners, singletons) that capture an entire enclosing scope via closures/environment capture, keeping large arrays or buffers alive, and proposes copying only the needed fields.
s977043/river-review · ★ 3 · Code & Development · score 75
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 の大きなデータ**(ファイル全文・大配列・一時バッファ・パース済みドキュメント群)を到達可能に保っている証拠がある。 -