active: true
derived: false
groups:
- SERIAL
header: |
  MsgpackSerializer テスト
level: 2.12
links:
- SPEC012: IlEEyNoh-5i97xTY3u_oOqlcEp8ud-AmBaT-2xG7m78=
normative: true
ref: ''
references:
- path: tests/unit/test_serializer.py
  type: file
reviewed: I5ptMCSQHQ99izx8SOs1lgNZVqUedSsg9AljNAvaVh0=
text: |
  ## 目的

  `MsgpackSerializer` はキャッシュデータの永続化形式を決定する。シリアライズの不具合はデータ消失（デシリアライズ不能）やサイレントなデータ劣化（精度低下等）に直結する。スレッドセーフ性の欠如はマルチスレッド環境での競合状態を引き起こす。

  ## 検証観点

  - **ラウンドトリップ**: プリミティブ型（int, float, str, bytes, None, bool）と基本コレクション（list, dict）が `dumps` → `loads` で元の値と一致すること
  - **Pydantic モデル**: Pydantic モデルが dict に変換されてシリアライズされ、デシリアライズ後に元のモデルが復元されること
  - **numpy 配列**: ndarray の shape, dtype, 値が保持されること。float64 等の精度が劣化しないこと
  - **スレッドセーフ LRU キャッシュ**: サブクラス解決のキャッシュがスレッドローカルであり、複数スレッドからの同時アクセスで競合しないこと
  - **ExtType 拡張**: カスタム型が ExtType (code 0-127) で正しく登録・解決されること
