active: true
derived: false
groups:
- KEY
header: |
  KeyGenPolicy テスト
level: 2.6
links:
- SPEC006: pFm7iWgbUueDYy-VjCWEcj_X4UgrplwKA4MdhrCsMxI=
normative: true
ref: ''
references:
- path: tests/unit/test_cachekey.py
  type: file
reviewed: 3cSg0ZMGxvY_lJjY6HOpDAvoP80Ld78mLGq46mMHKjg=
text: |
  ## 目的

  `KeyGenPolicy` は引数ごとのキー生成戦略をカスタマイズする機構であり、ログレベルやデバッグフラグのような非決定的引数をキーから除外したり、ファイルパスの代わりにファイル内容でキーを生成するユースケースを支える。戦略の誤適用はキャッシュの正確性を根本から損なう。

  ## 検証観点

  - **KeyGen.ignore()**: 指定された引数がキャッシュキーの計算から除外され、その引数の値を変えてもキャッシュヒットすること
  - **KeyGen.map() + FILE_CONTENT**: ファイルパス引数に対し、パス文字列ではなくファイル内容のハッシュがキーに使われること。同一内容の別パスファイルが同一キーを生成すること
  - **KeyGen.path_stat()**: ファイルの mtime/size に基づくキー生成が機能すること
  - **bind() 連携**: `KeyGenPolicy.bind(func)` が関数シグネチャ（位置引数・キーワード引数・デフォルト値）を正しく解釈すること
  - **@mark 統合**: `@spot.mark(keygen=KeyGen.ignore("verbose"))` のようにデコレータ経由で戦略が正しく適用されること
