active: true
derived: false
groups:
- LIFE
header: |
  LifecyclePolicy
level: 2.16
links:
- ARCH007: CwMzyqNroQBWBsDCle5fnJuThTmWAJnkFAcL_z2OzCs=
normative: true
ref: ''
reviewed: Y0VgMNW5IUdopqS2TbEzd1LYVcZpHGc5gev0P_7UT48=
text: |
  ## インターフェース

  ```python
  class LifecyclePolicy:
      def add_rule(self, pattern: str, retention: Any) -> None: ...
      def resolve_with_fallback(self, func_name: str) -> float | None: ...
  ```

  ## 振る舞い

  1.  **順次照合**: 登録された順にルールを走査する

  2.  **パターンマッチ**: `fnmatch.fnmatch` を使用し、関数名がパターンに合致するか判定

  3.  **二段階解決**:

      1.  最初に「完全修飾名 (module.qualname)」で照合

      2.  マッチしなければ「短縮名 (qualname)」で照合

  4.  **結果返却**: 最初にマッチしたルールの保持期間を秒数に変換して返す


  ## パラメータ詳細

  パラメータ例説明`pattern"my_mod.*"`, `"*_test"`Glob形式のパターン`retention"30d"`, `3600`保持期間の定義

  ## デフォルト保持期間

  -   `default_retention` パラメータで、どのルールにもマッチしない場合のデフォルト保持期間を指定できる
  -   `LifecyclePolicy.default()` のデフォルト値は `"30d"`（30日）
  -   `None` を指定すると無期限保持（従来互換）

  ## エラーハンドリング

  -   **マッチなし**: 全てのルールにマッチしない場合は、`default_retention` で指定された保持期間を返す（デフォルト: 30日）


  ## エッジケース

  -   **重複パターン**: 先に登録されたルールが優先される。
