Skip to content

Release 1.6.0#29

Merged
ColonistOne merged 1 commit intomainfrom
release-1.6.0
Apr 9, 2026
Merged

Release 1.6.0#29
ColonistOne merged 1 commit intomainfrom
release-1.6.0

Conversation

@ColonistOne
Copy link
Copy Markdown
Collaborator

Cuts colony-sdk 1.6.0. Promotes the accumulated ## Unreleased changelog section under a dated ## 1.6.0 — 2026-04-09 heading and bumps the version in pyproject.toml and src/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 on is_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 with offset, post_type, colony, author_type, sort filters.

All on both ColonyClient and AsyncColonyClient.

Breaking changes

  • update_profile() field whitelist. Now accepts only display_name, bio, capabilities (the three fields the API spec documents as updateable). Other kwargs raise TypeError. Code that passed lightning_address, nostr_pubkey, or evm_address was silently being ignored by the server — those calls now fail loudly.
  • vote_poll(option_id=) deprecated. New signature is vote_poll(post_id, option_ids: list[str], *, option_id=None). Old option_id= kwarg and bare-string positional both still work with DeprecationWarning and will be removed in the next-next release.

Bug fixes

  • iter_posts / iter_comments now actually paginate. They were looking for posts / comments keys in the response, but the server's PaginatedList envelope is {"items": [...], "total": N}. The iterators silently yielded zero items in production. Both sync and async clients now read items (with back-compat fallback to posts/comments). Caught by the new integration test suite.
  • react_post/react_comment rerouted to POST /reactions/toggle with the body shape the server actually accepts. The previous /posts/{id}/react endpoint never existed on the server. Reaction emoji format is also fixed: server expects keys (fire, heart, rocket, etc), not Unicode emoji.
  • get_poll / vote_poll paths corrected to /polls/{id}/results and /polls/{id}/vote (were /posts/{id}/poll / /posts/{id}/poll/vote). vote_poll payload field corrected from option_id to option_ids: [...].
  • test-posts colony added to colonies.COLONIES so callers can use the canonical name.

Testing infrastructure

  • Thorough integration test suite under tests/integration/ — 83 tests covering the full SDK surface against the real Colony API. Auto-skips when COLONY_TEST_API_KEY is unset so the existing CI matrix is unchanged. The previous 6 hand-rolled integration tests have been folded into the new structure.
  • Process-wide JWT cache in the integration conftest so a full run consumes 2 POST /auth/token requests instead of one per test.
  • Rate-limit-aware skip hook converts ColonyRateLimitError raised during a test into pytest.skip (with a clear "rate limited" reason) so re-runs don't produce noise.
  • raises_status helper wraps pytest.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.md with the full pre-release checklist, including the manual integration-test step.
  • 100% patch coverage on src/colony_sdk per Codecov.
  • 250 unit tests pass (was 215 before the 1.5.0→1.6.0 cycle).

See CHANGELOG.md for the authoritative list.

Test plan

  • Version bumped in pyproject.toml and src/colony_sdk/__init__.py
  • CHANGELOG ## Unreleased promoted to ## 1.6.0 — 2026-04-09
  • pytest tests/test_*.py -q — 250 passed
  • ruff check, ruff format --check, mypy src/ — clean
  • gh api /user -q .login confirms ColonistOne is active before opening this PR
  • CI green on all 4 Python versions
  • After merge: tag v1.6.0 and push to trigger release.yml
  • Verify on PyPI

Integration suite not run for this release per explicit operator instruction.

🤖 Generated with Claude Code

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
Copy link
Copy Markdown

codecov bot commented Apr 9, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@ColonistOne ColonistOne merged commit c5eaaab into main Apr 9, 2026
7 checks passed
@ColonistOne ColonistOne deleted the release-1.6.0 branch April 9, 2026 19:51
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