active: true
derived: false
groups:
- SERIAL
header: |
  カスタム型登録テスト
level: 2.13
links:
- SPEC013: tCDiJbP0rONEPJ0pU-_D3TmsXbZio1XmZ4U_63hZRII=
normative: true
ref: ''
references:
- path: tests/unit/test_type_registry.py
  type: file
reviewed: Lo7ssc9sJ30br-XDpTrsfuHHs_KX2-PvGZQI4mQRTNE=
text: |
  ## 目的

  カスタム型登録はユーザー定義クラスのキャッシュを可能にする拡張ポイントである。登録の不備は `SerializationError` によるキャッシュ保存失敗を引き起こし、ユーザーの既存コードとの統合を阻害する。デコレータ方式と命令方式の両方の登録パスを検証する。

  ## 検証観点

  - **デコレータ登録**: `@spot.register(code=N, encoder=..., decoder=...)` でクラスが登録され、そのインスタンスのシリアライズ/デシリアライズが正常に動作すること
  - **命令的登録**: `spot.register_type(MyClass, code=N, ...)` でも同等の登録が行われること
  - **Pydantic factory デコーダ**: Pydantic モデルの `model_validate` をデコーダとして使用する場合に、バリデーション付きの復元が正しく動作すること
  - **ネスト構造**: カスタム型を含む dict、カスタム型のリスト、カスタム型をフィールドに持つカスタム型など、複雑な入れ子構造が正しくエンコード/デコードされること
  - **code 衝突**: 同一 code を重複登録した場合の挙動が明確であること
