Skip to content

[codex] プロトコルエラー分類の粒度改善#46

Merged
6uclz1 merged 3 commits intomainfrom
codex/reduce-command-layer-duplication
Feb 23, 2026
Merged

[codex] プロトコルエラー分類の粒度改善#46
6uclz1 merged 3 commits intomainfrom
codex/reduce-command-layer-duplication

Conversation

@6uclz1
Copy link
Owner

@6uclz1 6uclz1 commented Feb 23, 2026

概要

CLI 側の parse_response は検証自体は厳密でしたが、レスポンス不正の多くを PROTOCOL_VERSION_MISMATCH に集約していたため、障害時に「本当にバージョン不一致なのか」「レスポンス形式不正なのか」「request_id の取り違えなのか」が判別しづらい状態でした。

本PRでは、プロトコル関連エラーを用途別に分離し、利用者と Remote Script 実装者の双方が原因を素早く特定できるようにしました。

ユーザー影響

不正レスポンス発生時のエラーコードがより具体的になります。

  • PROTOCOL_VERSION_MISMATCH: 実際の protocol_version 不一致
  • PROTOCOL_INVALID_RESPONSE: 必須キー欠落や型不正などのレスポンス形式不正
  • PROTOCOL_REQUEST_ID_MISMATCH: request_id 不一致

これにより、同じ終了コード (ExitCode.PROTOCOL_MISMATCH) でも、エラーコード文字列から切り分けの初動が明確になります。

根本原因

parse_response の各検証分岐で AppError を投げる際に、実際の失敗理由に関係なく error_code="PROTOCOL_VERSION_MISMATCH" が使われていました。

修正内容

src/ableton_cli/client/protocol.py:

  • プロトコル系例外生成を _raise_protocol_error に集約(DRY化)
  • 検証失敗を次のルールで分類
    • missing keys / 型不正 / error.details 不正: PROTOCOL_INVALID_RESPONSE
    • request_id 不一致: PROTOCOL_REQUEST_ID_MISMATCH
    • protocol_version 値不一致: PROTOCOL_VERSION_MISMATCH

src/ableton_cli/errors.py:

  • PROTOCOL_INVALID_RESPONSE / PROTOCOL_REQUEST_ID_MISMATCHExitCode.PROTOCOL_MISMATCH にマッピング追加

tests/test_protocol.py:

  • Red->Green で新規テストを追加
    • 必須キー欠落は PROTOCOL_INVALID_RESPONSE
    • request_id 不一致は PROTOCOL_REQUEST_ID_MISMATCH
    • protocol_version 型不正は PROTOCOL_INVALID_RESPONSE
  • 既存テストの期待値を新分類に合わせて更新

tests/test_exit_codes.py:

  • 新エラーコード2種が ExitCode.PROTOCOL_MISMATCH へ解決されることを追加検証

検証

以下を実行し、すべて成功しました。

  • uv run python -m ableton_cli.dev_checks
  • uv run ruff check .
  • uv run ruff format --check .
  • uv run pytest

@6uclz1 6uclz1 marked this pull request as ready for review February 23, 2026 03:53
@6uclz1 6uclz1 merged commit ca42604 into main Feb 23, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant