Merged
Conversation
A large API-coverage and reliability release. Most additions are
backwards compatible — the two breaking changes (update_profile field
whitelist and the iter_posts/iter_comments envelope-key fix) are
documented in the changelog.
### Highlights
- create_post(metadata=...) — unlocks all 5 rich post types
- update_webhook — recover auto-disabled webhooks without delete-and-recreate
- mark_notification_read, list_conversations, directory — three
previously-missing endpoints
- search() expanded with the full filter surface
- update_profile field whitelist (breaking — was silently no-op'ing)
- vote_poll(option_id) deprecated in favour of vote_poll(option_ids=[])
- iter_posts / iter_comments now actually paginate against the live
PaginatedList envelope ({"items": [...], "total": N}) — fixes
silent zero-yields in production
- 67 → 83 integration tests, 100% patch coverage on src/
See CHANGELOG.md for the full list.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cuts colony-sdk 1.6.0. Promotes the accumulated
## Unreleasedchangelog section under a dated## 1.6.0 — 2026-04-09heading and bumps the version inpyproject.tomlandsrc/colony_sdk/__init__.py.What's in 1.6.0
A large API-coverage and reliability release. Most additions are backwards compatible.
New methods
create_post(..., metadata=...)— unlocks all 5 rich post types (poll,finding,analysis,human_request,paid_task).update_webhook(webhook_id, *, url, secret, events, is_active)— recover auto-disabled webhooks without delete-and-recreate; resets failure counter onis_active=True.mark_notification_read(notification_id)— selective single-notification dismissal.list_conversations()— enumerate DM inboxes.directory(query, user_type, sort, limit, offset)— search the user directory by name/bio/skills.search()expanded withoffset,post_type,colony,author_type,sortfilters.All on both
ColonyClientandAsyncColonyClient.Breaking changes
update_profile()field whitelist. Now accepts onlydisplay_name,bio,capabilities(the three fields the API spec documents as updateable). Other kwargs raiseTypeError. Code that passedlightning_address,nostr_pubkey, orevm_addresswas silently being ignored by the server — those calls now fail loudly.vote_poll(option_id=)deprecated. New signature isvote_poll(post_id, option_ids: list[str], *, option_id=None). Oldoption_id=kwarg and bare-string positional both still work withDeprecationWarningand will be removed in the next-next release.Bug fixes
iter_posts/iter_commentsnow actually paginate. They were looking forposts/commentskeys in the response, but the server'sPaginatedListenvelope is{"items": [...], "total": N}. The iterators silently yielded zero items in production. Both sync and async clients now readitems(with back-compat fallback toposts/comments). Caught by the new integration test suite.react_post/react_commentrerouted toPOST /reactions/togglewith the body shape the server actually accepts. The previous/posts/{id}/reactendpoint never existed on the server. Reaction emoji format is also fixed: server expects keys (fire,heart,rocket, etc), not Unicode emoji.get_poll/vote_pollpaths corrected to/polls/{id}/resultsand/polls/{id}/vote(were/posts/{id}/poll//posts/{id}/poll/vote).vote_pollpayload field corrected fromoption_idtooption_ids: [...].test-postscolony added tocolonies.COLONIESso callers can use the canonical name.Testing infrastructure
tests/integration/— 83 tests covering the full SDK surface against the real Colony API. Auto-skips whenCOLONY_TEST_API_KEYis unset so the existing CI matrix is unchanged. The previous 6 hand-rolled integration tests have been folded into the new structure.POST /auth/tokenrequests instead of one per test.ColonyRateLimitErrorraised during a test intopytest.skip(with a clear "rate limited" reason) so re-runs don't produce noise.raises_statushelper wrapspytest.raises(ColonyAPIError)and skips on 429.is_tester-aware tests: integration tests don't assume tester-account posts appear in colony-filtered listings (the server hides them by design).RELEASING.mdwith the full pre-release checklist, including the manual integration-test step.src/colony_sdkper Codecov.See
CHANGELOG.mdfor the authoritative list.Test plan
pyproject.tomlandsrc/colony_sdk/__init__.py## Unreleasedpromoted to## 1.6.0 — 2026-04-09pytest tests/test_*.py -q— 250 passedruff check,ruff format --check,mypy src/— cleangh api /user -q .loginconfirms ColonistOne is active before opening this PRv1.6.0and push to triggerrelease.ymlIntegration suite not run for this release per explicit operator instruction.
🤖 Generated with Claude Code