Bump SDK to cc8e977 and thread bucket ID into card column commands#522
Conversation
The SDK's CardColumnsService now requires a bucket (project) ID on SetColor, EnableOnHold, and DisableOnHold. Resolve the project the same way sibling card commands do (URL > --in/--project flag > config > interactive) and pass it through to the SDK. Unblocks the checkins `--by` feature (#443), which depends on ListAnswersByPerson landing in the same SDK range.
There was a problem hiding this comment.
1 issue found across 5 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
There was a problem hiding this comment.
Pull request overview
This PR bumps the Basecamp Go SDK to a newer main-branch revision and updates the CLI’s card column commands to accommodate a breaking SDK signature change by resolving and passing the bucket (project) ID into CardColumnsService operations.
Changes:
- Bump
github.com/basecamp/basecamp-sdk/gotocc8e9772e729and update provenance metadata. - Thread
projectintocards column on-hold,no-on-hold, andcolor, resolving a numeric bucket ID and passing it to the SDK. - Update the cards command tests for the updated
newCardsColumnColorCmdsignature.
Tip
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.
Reviewed changes
Copilot reviewed 4 out of 5 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| internal/version/sdk-provenance.json | Records the updated SDK revision/version and timestamp. |
| internal/commands/cards.go | Updates column subcommands for new SDK method signatures; adds resolveColumnBucketID helper. |
| internal/commands/cards_test.go | Adjusts the color command constructor call to match the new signature. |
| go.mod | Bumps the Basecamp SDK module requirement (and an indirect runtime bump). |
| go.sum | Updates checksums for the bumped SDK and transitive dependency changes. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Color and on-hold sections are only supported on standard Kanban::Column columns — the API rejects them on Triage, Not now, and Done columns with a bare 404. Fetch the column first and return a clear usage error naming the constraint instead of surfacing the raw 404. Covers cards column color, on-hold, and no-on-hold, with tests for the success paths, the guard rejection across all three non-standard column types, the not-found case, and URL-based project resolution.
Review carefully before merging. Consider a major version bump. |
resolveColumnBucketID seeded from the --in/--project flag before the URL's bucket, contradicting its own doc comment (URL > flag > config) and, when a URL and a differing --in were both given, targeting the wrong bucket (a guaranteed 404 — the URL identifies the column's real bucket). Seed from the URL first. Adds a test locking in URL-over-flag.
The comment claimed parity with other card commands, but those seed from the flag first (flag > URL); this helper intentionally does URL > flag. Document the divergence and why URL wins instead of claiming a match.
Summary
Bumps the Basecamp SDK from
v0.7.4-0.20260423230153-f54589f0924a(main @ 2026-04-23) tov0.7.4-0.20260629111348-cc8e9772e729(main @ 2026-06-29).The only breaking change in that range affecting the CLI is on
CardColumnsService:SetColor,EnableOnHold, andDisableOnHoldnow take a leadingbucketID int64. The three affected commands (cards column color,cards column on-hold,cards column no-on-hold) previously only accepted a column ID/URL and never resolved a project. They now resolve the project the same way sibling card commands (cards column move) do — URL >--in/--projectflag > config > interactive — via a sharedresolveColumnBucketIDhelper, and pass the numeric bucket ID through to the SDK.Friendly guard for non-standard columns
While validating this against a live account, we found that color and on-hold sections are only supported on standard
Kanban::Columncolumns. The BC3 API (kanban/columns/on_holdsandcolorscontrollers both scope torecordings.kanban_columns) rejects these actions on Triage, Not now, and Done columns with a bare404 Not Found.Rather than surface that confusing 404, the commands now fetch the column first and return a clear usage error, e.g.:
Why
This unblocks the check-ins
--byfeature request (#443 / draft PR #444), which depends onListAnswersByPersonlanding in the same SDK range but not in any tagged release. Doing the SDK bump + the unrelated CardColumns migration here keeps #444 a small, on-topic diff (just the rename toListAnswersByPersononce this merges).Changes
go.mod/go.sum/internal/version/sdk-provenance.json—make bump-sdkinternal/commands/cards.go—resolveColumnBucketID+requireStandardColumnhelpers; threadprojectinto the three column commands, passbucketIDto the SDK, guard against non-standard columnsinternal/commands/cards_test.go— tests for the success paths, the guard rejection across all three non-standard column types (on-hold/no-on-hold/color), the column-not-found case, and URL-based bucket resolutionValidation
Smoke tested end-to-end against a live account: color and on-hold/no-on-hold verified on standard columns (via both
--inand URL resolution), and the friendly guard confirmed on Triage/Not now/Done.bin/cipasses.Notes