fix(deck): address review feedback on card comment tools

- Wrap raw DeckComment returns in CardCommentResponse(BaseResponse) for
  create/update so the success/timestamp envelope matches other deck tools
  (#737 review issue 2).
- Rename ListCardCommentsResponse.total → count and clarify in the
  description that it's the page size, not a server-side total — the Deck
  list endpoint does not expose one (#737 review issue 3).
- Validate the documented 1000-character limit on create/update with an
  inline length check + ValueError, matching the pattern in
  api/management.py (#737 review issue 4).
- Use modern int | None union syntax for the new parent_id parameter
  (#737 review issue 1); rest of the file is left in the existing
  Optional[...] style.

Also add an MCP-level test that the >1000 char message is rejected, and
update the existing comment tests to unwrap the new comment field.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Chris Coutinho
2026-04-29 16:57:46 +02:00
co-authored by Claude Opus 4.7
parent 13abaf3db7
commit 2129bd6fac
3 changed files with 59 additions and 15 deletions
+14 -3
View File
@@ -288,12 +288,23 @@ class LabelOperationResponse(StatusResponse):
class ListCardCommentsResponse(BaseResponse):
"""Response model for listing card comments."""
results: list[DeckComment] = Field(description="List of card comments")
total: int = Field(description="Number of comments returned")
results: list[DeckComment] = Field(description="Card comments in this page")
count: int = Field(
description=(
"Number of comments returned in this page (page size, not the "
"server-side total — the Deck list endpoint does not expose a total)."
)
)
class CardCommentResponse(BaseResponse):
"""Response model returned when a single card comment is created or updated."""
comment: DeckComment = Field(description="The created or updated card comment")
class CardCommentOperationResponse(StatusResponse):
"""Response model for card comment create/update/delete operations."""
"""Response model for card comment operations that don't return comment data (e.g. delete)."""
card_id: int = Field(description="ID of the card the comment belongs to")
comment_id: int = Field(description="ID of the affected comment")