Migrate CLI to flat SDK routes by jeremy · Pull Request #132 · basecamp/basecamp-cli

AI review requested due to automatic review settings

February 5, 2026 09:34

chatgpt-codex-connector[bot]

Copilot AI review requested due to automatic review settings

February 5, 2026 09:50

Copilot AI review requested due to automatic review settings

February 5, 2026 10:57

Copilot AI review requested due to automatic review settings

February 8, 2026 09:32

Copilot AI review requested due to automatic review settings

February 22, 2026 06:16

Copilot AI review requested due to automatic review settings

February 22, 2026 17:01

Copilot AI review requested due to automatic review settings

February 26, 2026 17:03
Update all SDK service calls to use flat URL routing where bucketID/
projectID has been removed from method signatures. This is the CLI-side
companion to basecamp/basecamp-sdk#74 which flattens all SDK routes from
/{accountId}/buckets/{projectId}/resource/{id} to
/{accountId}/resource/{id}.

Key changes:
- Remove bucketID first-arg from ~120 SDK method calls across 25+ files
- Remove project resolution from single-resource commands (show, complete,
  update, etc.) that no longer need project context
- Flatten raw API paths in show.go and resolver.go
- Remove timesheet entry CRUD commands (Get/Create/Update/Trash removed
  from flat SDK) and clock shortcut
- Remove unused project parameters from card column/step and todolist
  group subcommands
- Update command catalog, breadcrumbs, and tests
…arded

Addresses PR review: commands that no longer need project context should
use extractID() instead of extractWithProject() with the second return
value discarded.
Remove "without project shows error" tests for events, messagetypes,
recordings visibility, timesheet recording, and webhooks — these
commands no longer require project context with flat SDK routes.

@jeremy

@jeremy

@jeremy

@jeremy

@jeremy

ProjectTimeline and ProjectReport now accept projectID param.
Webhooks List/Create now accept bucketID param.
Timesheet entry route segment fixed (timesheet_entries).
Timesheet: add --project/--in flags, pass projectID to ProjectReport.
Webhooks: add --project/--in flags, pass bucketID to List/Create.
Boost delete: add project resolution (matches list/show/create).
Timeline: pass projectID to ProjectTimeline in both one-shot and watch.

@jeremy

…ost delete

These SDK methods operate by globally-unique ID and don't accept a
bucketID param. The resolution chains were prompting users for a
project that was never used.

@jeremy

Aligns URL parse output with flat route terminology. Updates unit
tests, e2e tests, and skill documentation.
When a campfire ID is passed directly, the flat SDK doesn't need a
project. Only resolve project when deriving campfire from project dock.
The Comment resolver requires a projectID to show the recording picker.
Ensure project is resolved before calling the interactive path.
SDK flat branch merged to main. Bumps from 96abdc8 (flat) to 6b4c632
(main), picking up the /buckets/ → /projects/ path corrections for
GetProjectTimeline and GetProjectTimesheet.

jeremy added a commit that referenced this pull request

Mar 1, 2026
These tests were added aspirationally in #132 for a breadcrumbs feature
that hasn't been built yet. Mark them as skip to unblock the release.

jeremy added a commit that referenced this pull request

Mar 1, 2026
- Use GOWORK=off in provenance-check so go list reads go.mod directly
  instead of resolving through the workspace
- Skip unimplemented breadcrumb e2e tests (aspirational from #132)