active: true
derived: false
groups:
- LIFE
header: |
  LifecyclePolicy テスト
level: 2.16
links:
- SPEC016: pYeLx2dK7QDT3MJlNEPOt2oJ-OaOO1TiNw_YrV9_-Fg=
normative: true
ref: ''
references:
- path: tests/unit/test_lifecycle.py
  type: file
reviewed: hyMyfT7FdBkA0cUTKUJ6dS8n7KtCZhvFuVOsC0Ks9p0=
text: |
  ## 目的

  `LifecyclePolicy` はキャッシュデータの保持期間を関数名パターンで制御する。パターンマッチングの不備は、重要なキャッシュの意図しない削除（データロス）や不要なキャッシュの蓄積（ディスク圧迫）を引き起こす。

  ## 検証観点

  - **パターンマッチング**: glob パターン（`"train_*"`, `"*.preprocess"` 等）がルールの `func_pattern` として正しく機能し、マッチした関数に対して指定の `Retention` が適用されること
  - **ルール優先順位**: 複数ルールがマッチした場合に、リスト順（先勝ち or 後勝ち）でルールが決定されること
  - **resolve_with_fallback**: 完全修飾名（`module.qualname`）でルールが見つからない場合に、短縮名（`qualname` のみ）でフォールバック検索が行われること
  - **デフォルト保持期間**: どのルールにもマッチしない関数に対して `default_retention` で指定された保持期間（デフォルト: 30日）が適用されること
  - **無期限保持の互換性**: `default_retention=None` を指定した場合に無期限保持（`None`）が返されること
