Skip to content

Add --on-hold flag to cards move command#325

Merged
jeremy merged 10 commits intobasecamp:mainfrom
nnemirovsky:feat/cards-move-on-hold
Mar 18, 2026
Merged

Add --on-hold flag to cards move command#325
jeremy merged 10 commits intobasecamp:mainfrom
nnemirovsky:feat/cards-move-on-hold

Conversation

@nnemirovsky
Copy link
Copy Markdown
Contributor

@nnemirovsky nnemirovsky commented Mar 16, 2026

Depends on basecamp/basecamp-sdk#188

What

Add --on-hold flag to basecamp cards move to move cards into the on-hold section of a column.

  • basecamp cards move <id> --on-hold — move to on-hold of current column
  • basecamp cards move <id> --to <column> --on-hold — move to on-hold of target column

Why

There was no way to move cards to/from on-hold sections via the CLI. The SDK was also missing the on_hold property on CardColumn, which is required to resolve the on-hold section ID.

Testing

  • Tested against live Basecamp API: moved cards to on-hold, between on-hold sections, and back to main columns
  • go build ./... passes (with SDK replace pointing to fork branch)
  • make check — blocked until SDK PR is merged and dep bumped

Note: go.mod contains a temporary replace directive pointing to the SDK fork. This should be replaced with a proper version bump once basecamp/basecamp-sdk#188 is merged and tagged.


Summary by cubic

Adds --on-hold to basecamp cards move so you can move a card into the on‑hold section of its current or a target column. Also adds an mv alias, blocks --position with --on-hold, and makes --to optional in that mode.

  • New Features

    • basecamp cards move <id> --on-hold moves to on‑hold of the current column.
    • basecamp cards move <id> --to <column> --on-hold moves to on‑hold of the target column (use --card-table when <column> is a name).
    • mv alias; --to optional with --on-hold; rejects --position with --on-hold; no --card-table needed for numeric IDs or when using the current column.
    • Clear errors: when a column has no on‑hold section (hint shows exact column ID) and when a card has no parent column (hint shows how to target a column).
    • Tests: coverage for numeric/named columns, disabled on‑hold error, and --position + --on-hold rejection; mock transports now fail on unexpected API calls.
  • Dependencies

    • Bumps github.com/basecamp/basecamp-sdk/go to v0.6.1-0.20260318172136-4784bb2fda18 with CardColumn.OnHold and on‑hold enable/disable APIs.
    • Removes the temporary local replace for basecamp-sdk/go.

Written for commit 7f30f0a. Summary will update on new commits.

@nnemirovsky nnemirovsky requested a review from a team as a code owner March 16, 2026 05:31
Copilot AI review requested due to automatic review settings March 16, 2026 05:31
@github-actions github-actions bot added commands CLI command implementations skills Agent skills deps labels Mar 16, 2026
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2 issues found across 4 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="go.mod">

<violation number="1" location="go.mod:80">
P1: Do not merge a `replace` directive pointing to a personal fork. Per project conventions, SDK dependency changes should go through `make bump-sdk` which updates both `go.mod` and `sdk-provenance.json`. This `replace` directive should be removed before merging — wait for basecamp/basecamp-sdk#188 to be merged and tagged, then use `make bump-sdk` to pull in the official release.</violation>
</file>

<file name="internal/commands/cards.go">

<violation number="1" location="internal/commands/cards.go:690">
P2: `--position` is silently ignored when combined with `--on-hold`. Reject the unsupported combination early so users don't assume their card landed at a specific position.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds support for moving Card Table cards into a column’s on-hold section via the basecamp cards move command, with accompanying CLI docs and an SDK dependency update.

Changes:

  • Add --on-hold flag to basecamp cards move, including a new moveCardOnHold code path.
  • Update Basecamp skill documentation with on-hold move examples.
  • Temporarily switch the Basecamp SDK dependency via a go.mod replace (and corresponding go.sum updates).

Reviewed changes

Copilot reviewed 3 out of 4 changed files in this pull request and generated 8 comments.

File Description
skills/basecamp/SKILL.md Documents new --on-hold usage for card moves.
internal/commands/cards.go Implements --on-hold flag handling and on-hold move logic.
go.mod Adds a temporary replace to a forked basecamp-sdk version.
go.sum Updates checksums to match the forked SDK dependency.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI review requested due to automatic review settings March 16, 2026 05:52
@github-actions github-actions bot added tests Tests (unit and e2e) enhancement New feature or request labels Mar 16, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds CLI support for moving Basecamp cards into a column’s on-hold section, aligning the CLI with upcoming SDK support for CardColumn.on_hold.

Changes:

  • Add --on-hold (and mv alias) to basecamp cards move, including new move logic for current vs target column.
  • Update docs/examples for the new flag and adjust for an SDK API signature change.
  • Temporarily point github.com/basecamp/basecamp-sdk/go to a fork via go.mod replace + updated go.sum.

Reviewed changes

Copilot reviewed 5 out of 6 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
skills/basecamp/SKILL.md Documents cards move --on-hold usage and examples.
internal/commands/tools.go Updates Tools.Create call to new SDK signature (adds nil options).
internal/commands/cards.go Implements --on-hold behavior for cards move and adds mv alias.
internal/commands/cards_test.go Adds tests for --position + --on-hold incompatibility and on-hold behavior.
go.mod Adds temporary replace to SDK fork (pseudo-version).
go.sum Updates checksums to match forked SDK dependency.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@github-actions github-actions bot removed the deps label Mar 16, 2026
Copilot AI review requested due to automatic review settings March 16, 2026 07:15
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds support for moving cards into a column’s on-hold section via the CLI, relying on the SDK exposing CardColumn.on_hold.

Changes:

  • Add --on-hold (and mv alias) to basecamp cards move, including validation that rejects --position with --on-hold.
  • Add/adjust unit tests and CLI docs/examples for the new flag.
  • Update module files (including a local replace for the SDK) and add a large mention-support implementation plan doc.

Reviewed changes

Copilot reviewed 5 out of 6 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
internal/commands/cards.go Implements --on-hold behavior via moveCardOnHold and updates command help/flags.
internal/commands/cards_test.go Adds tests for --on-hold validation and a mocked on-hold move flow.
skills/basecamp/SKILL.md Documents the new --on-hold usage with examples.
go.mod Adds a local filesystem replace for the SDK (temporary but currently merge-blocking).
go.sum Removes prior SDK checksums (likely a side effect of the local replace).
docs/superpowers/plans/2026-03-13-mention-support.md Adds an unrelated implementation plan document (appears out of scope for this PR).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI review requested due to automatic review settings March 16, 2026 08:52
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds support in the Basecamp CLI for moving cards into a column’s on-hold section via a new --on-hold flag, updating docs and test coverage accordingly.

Changes:

  • Add --on-hold mode (and mv alias) to basecamp cards move, including validation that --position cannot be combined with --on-hold.
  • Implement on-hold move flow by resolving the target column’s on-hold section ID and moving the card there.
  • Update Basecamp skill docs and add unit tests for the new flag/behavior.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
skills/basecamp/SKILL.md Documents new cards move --on-hold usage and examples.
internal/commands/cards.go Implements --on-hold flag handling, alias, validation, and on-hold move helper.
internal/commands/cards_test.go Adds tests and HTTP transport mocks for on-hold move flows and flag validation.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI review requested due to automatic review settings March 18, 2026 20:24
@github-actions github-actions bot added sdk SDK wrapper and provenance deps labels Mar 18, 2026
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 5 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="go.mod">

<violation number="1" location="go.mod:9">
P1: This pins the SDK to a pseudo-version (untagged commit) which should not be merged. Once basecamp/basecamp-sdk#188 is tagged, run `make bump-sdk` to update to the proper release version — per AGENTS.md, go.mod should not be edited directly.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

charm.land/bubbletea/v2 v2.0.2
charm.land/lipgloss/v2 v2.0.0
github.com/basecamp/basecamp-sdk/go v0.6.0
github.com/basecamp/basecamp-sdk/go v0.6.1-0.20260318172136-4784bb2fda18
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai bot Mar 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1: This pins the SDK to a pseudo-version (untagged commit) which should not be merged. Once basecamp/basecamp-sdk#188 is tagged, run make bump-sdk to update to the proper release version — per AGENTS.md, go.mod should not be edited directly.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At go.mod, line 9:

<comment>This pins the SDK to a pseudo-version (untagged commit) which should not be merged. Once basecamp/basecamp-sdk#188 is tagged, run `make bump-sdk` to update to the proper release version — per AGENTS.md, go.mod should not be edited directly.</comment>

<file context>
@@ -6,7 +6,7 @@ require (
 	charm.land/bubbletea/v2 v2.0.2
 	charm.land/lipgloss/v2 v2.0.0
-	github.com/basecamp/basecamp-sdk/go v0.6.0
+	github.com/basecamp/basecamp-sdk/go v0.6.1-0.20260318172136-4784bb2fda18
 	github.com/basecamp/cli v0.1.1
 	github.com/charmbracelet/bubbles v1.0.0
</file context>
Fix with Cubic

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pseudo-version is intentional — SDK PR 188 merged to main but no tag has been cut yet. The bump was done via make bump-sdk REF=4784bb2fda18 which is the standard workflow per AGENTS.md. Once a tagged release is available, a follow-up make bump-sdk will pin to it.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the feedback! I've saved this as a new learning to improve future reviews.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an --on-hold mode to basecamp cards move so cards can be moved into the on-hold section of either their current column or a specified target column, leveraging the SDK’s new CardColumn.on_hold support.

Changes:

  • Add --on-hold flag (and mv alias) to basecamp cards move, making --to optional in on-hold mode and rejecting --position with --on-hold.
  • Implement moveCardOnHold(...) to resolve the correct on-hold section ID and perform the move, with an error when on-hold is unavailable.
  • Update docs/surface snapshots and bump the Basecamp SDK dependency to a revision that exposes CardColumn.on_hold.

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 6 out of 7 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
internal/commands/cards.go Adds the new --on-hold flow to cards move, including alias and validation logic.
internal/commands/cards_test.go Adds test coverage for on-hold moves and validates --position + --on-hold rejection.
skills/basecamp/SKILL.md Documents new on-hold move usage examples.
.surface Records the new --on-hold flag in CLI surface snapshots.
go.mod Bumps Basecamp SDK to a revision that includes CardColumn.on_hold.
go.sum Updates checksums for the SDK version bump.
internal/version/sdk-provenance.json Captures the updated SDK provenance metadata (version/revision/timestamp).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

nnemirovsky and others added 10 commits March 18, 2026 13:43
Move a card to the on-hold section of its current column (--on-hold) or
a target column (--to <column> --on-hold). Requires the SDK to expose
the on_hold property on CardColumn (basecamp/basecamp-sdk#188).
- Reject --position when combined with --on-hold
- Fix help examples to use numeric column IDs
- Rename annotation key from "notes" to "agent_notes"
- Use CardColumns().Get() for numeric column IDs and current column
  to avoid requiring --card-table in multi-table projects
- Fix SKILL.md example to use numeric column ID
- Add tests for --position + --on-hold rejection and --on-hold
  without --card-table
- Update go.mod replace to latest SDK fork commit
- Fix usage hint to match actual command syntax (no --enable flag)
- Update --to flag description to note it's optional with --on-hold
- Add SKILL.md example for --card-table with named column + --on-hold
- Replace weak on-hold test with mock transport that verifies full flow
- Fix agent_notes on cards move: replace irrelevant assignee filtering
  note with --position/--on-hold incompatibility note
- Fix mock transport comment to reflect actual request sequence
- Add tests for --on-hold with numeric --to and disabled on-hold error
- Mock transports now error on unexpected requests instead of returning
  empty 200s, catching unintended API calls in tests
- On-hold error hint now includes the concrete column ID instead of a
  generic placeholder
Pin to 4784bb2fda18 which adds CardColumnOnHold types, EnableOnHold,
and DisableOnHold service methods.
Cover the named-column + --on-hold code path with
TestCardsMoveOnHoldWithNamedColumn. Fix mock JSON to match real
CardColumnOnHold struct shape. Regenerate .surface for --on-hold flag.
Use ErrUsageHint with a concrete --to suggestion instead of a bare
ErrUsage, so users know how to recover when the API returns a card
without a parent column reference.
Copilot AI review requested due to automatic review settings March 18, 2026 20:53
@jeremy jeremy force-pushed the feat/cards-move-on-hold branch from ae9627b to 7f30f0a Compare March 18, 2026 20:53
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends the Basecamp CLI’s card-moving workflow by adding an --on-hold mode to basecamp cards move, enabling moves into a column’s on-hold section (either for the current column or a specified target column). It also updates the pinned Basecamp SDK version to one that exposes CardColumn.OnHold, which is required to resolve the on-hold section ID.

Changes:

  • Add --on-hold to cards move (with mv alias), make --to optional in that mode, and reject --position when --on-hold is set.
  • Implement on-hold move resolution logic (current column vs numeric --to vs named --to via card table lookup) with helpful usage hints.
  • Add/extend tests for the new flag behavior and update docs + CLI surface/dependency metadata.

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 6 out of 7 changed files in this pull request and generated no comments.

Show a summary per file
File Description
internal/commands/cards.go Adds --on-hold flag/alias and implements move-to-on-hold behavior, including validation and user-facing hints.
internal/commands/cards_test.go Adds coverage for --on-hold flows (no --to, numeric --to, named --to) and validates flag incompatibilities.
skills/basecamp/SKILL.md Documents new cards move --on-hold usage examples.
.surface Updates CLI surface snapshot to include the new --on-hold flag.
go.mod / go.sum Bumps github.com/basecamp/basecamp-sdk/go to a revision that includes CardColumn.OnHold.
internal/version/sdk-provenance.json Records the updated SDK version and revision provenance.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@jeremy jeremy merged commit 69a74f0 into basecamp:main Mar 18, 2026
26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commands CLI command implementations deps enhancement New feature or request sdk SDK wrapper and provenance skills Agent skills tests Tests (unit and e2e)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants