Skip to content

Conversation

@franccesco
Copy link
Owner

Summary

This release contains breaking changes that significantly improve the developer experience across the SDK.

Breaking Changes

  • client.user.all() renamed to client.user.list() for consistency with other SDK patterns
  • client.user.details(all=True) renamed to client.user.details(include_all=True) for parameter clarity
  • client.issue.solve() renamed to client.issue.complete() and now returns IssueDetails instead of bool
  • client.todo.complete() now returns Todo object instead of bool
  • client.goal.update/delete/archive/restore() now return None instead of bool
  • client.headline.update/delete() now return None instead of bool
  • Client raises ConfigurationError instead of ValueError for missing API key

New Features

  • Added client.issue.update() method for updating existing issues
  • Added client.scorecard.get() method for retrieving scorecard details
  • Added GoalStatus enum for type-safe status values (ON_TRACK, AT_RISK, COMPLETE)
  • Added base_url and timeout parameters to sync Client for configuration flexibility
  • AsyncClient now validates API key at initialization (consistent with sync Client)

Documentation

  • All API documentation updated to reflect breaking changes
  • Added examples for new methods and enums
  • Updated error handling guide with new exception types

Test Plan

  • All existing tests pass with updated method names
  • New tests cover issue update functionality
  • New tests cover scorecard get functionality
  • GoalStatus enum tests pass
  • Client configuration tests pass (base_url, timeout, ConfigurationError)
  • AsyncClient validation tests pass

Migration Guide

# Before (v0.19.x)
users = client.user.all()
user = client.user.details(user_id=123, all=True)
client.issue.solve(issue_id=456)
success = client.todo.complete(todo_id=789)  # bool
success = client.goal.update(goal_id=101, status="on")  # bool

# After (v0.20.0)
users = client.user.list()
user = client.user.details(user_id=123, include_all=True)
issue = client.issue.complete(issue_id=456)  # IssueDetails
todo = client.todo.complete(todo_id=789)  # Todo
client.goal.update(goal_id=101, status=GoalStatus.ON_TRACK)  # None

🤖 Generated with Claude Code

BREAKING CHANGES:
- Rename `client.user.all()` to `client.user.list()` for consistency
- Rename `client.user.details(all=True)` to `details(include_all=True)`
- Rename `client.issue.solve()` to `client.issue.complete()` (returns IssueDetails)
- `client.todo.complete()` now returns Todo instead of bool
- Goal operations (update/delete/archive/restore) now return None instead of bool
- Headline operations (update/delete) now return None instead of bool
- Client raises ConfigurationError instead of ValueError for missing API key

New Features:
- Add `client.issue.update()` method for updating existing issues
- Add `client.scorecard.get()` method for retrieving scorecard details
- Add `GoalStatus` enum for type-safe status values
- Add `base_url` and `timeout` parameters to sync Client
- AsyncClient now validates API key at initialization

Documentation:
- All docs updated to reflect the breaking changes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@franccesco franccesco merged commit 47b58fa into main Dec 11, 2025
6 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.

2 participants