Skip to content

Withdraw account-wide boost listing (bc3 #12464) - #591

Open
jeremy wants to merge 1 commit into
mainfrom
drop-account-wide-boosts
Open

Withdraw account-wide boost listing (bc3 #12464)#591
jeremy wants to merge 1 commit into
mainfrom
drop-account-wide-boosts

Conversation

@jeremy

@jeremy jeremy commented Jul 30, 2026

Copy link
Copy Markdown
Member

Why

BC5 is withdrawing GET /:account/boosts.json (basecamp/bc3#12464; diagnosis basecamp/bc3#12458): the query costs ~44s on the largest account, and this CLI was its only known consumer (~2,250 req/30d globally). Once that deploys, the path 404s. The withdrawal is temporary — reintroduction on a boost-proportional query is tracked in basecamp/bc3#12463 — so this removes the CLI's two routes to the endpoint before v0.8.0 stable, reverting one command's slice of the #584 surface that shipped in v0.8.0-rc.1.

What

  • boost list is item-scoped only: the --all-projects flag and the bare-invocation account-wide fallback are gone, along with runBoostListAccountWide and flattenAccountWideBoosts.
  • The arg stays optional (MaximumNArgs(1), surface keeps [id|url]): a bare boost list gets a usage hint — carrying an explicit --project forward into the corrected invocation — instead of a cobra arity error. When bc3 #12463 brings the feed back, the bare form slots back in with zero arg churn.
  • The two FLAG removals are acknowledged in .surface-breaking, so check-surface-compat passes against v0.8.0-rc.1.
  • Docs trued up: ACCOUNT-WIDE-LISTINGS.md (16-method matrix, per-item dispatch, I3–I6, release-note bullet), SKILL.md, API-COVERAGE.md.

Untouched: the other seven account-wide listings and shared accountwide.go helpers, recording-scoped boost list <id>/--event, boost create/show/delete, the TUI boost picker, and the SDK (GetEverythingBoosts stays; pulling it would churn every client twice for a temporary withdrawal).

Tests

  • New TestBoostListWithoutIDIsUsageError (the withdrawn behavior's replacement) plus rewrites for the configured-project, explicit-project, and --event bare-list paths — all shown red against the unmodified code first, and all assert no request reaches the API.
  • Deleted the account-wide route stub and its seven tests; dropped boost from TestAccountWideListingsRejectRootTodolist (bare boost list no longer reaches the todolist rejection).
  • go test ./internal/commands/, make check, make check-surface-compat, and make test-e2e all pass; manual: bare boost list → hint, --all-projects → unknown flag.

Timing: land before or with v0.8.0 stable (bc3 #12464 still open as of 2026-07-30, expected to merge shortly).


Summary by cubic

Withdraws the account‑wide boost feed; basecamp boost list is now item‑scoped only. Removes --all-projects and replaces the bare invocation with a clear usage hint.

  • Migration
    • Removed --all-projects from basecamp boost list/basecamp boosts list; pass an item ID or URL instead: basecamp boost list <id|url> [--project <project>].
    • A bare boost list now errors with a hint; it no longer lists across projects.
    • --event still works but requires an item ID.
    • Docs updated; breaking flag removals recorded. Other account‑wide listings are unchanged.

Written for commit 4e88f2c. Summary will update on new commits.

Review in cubic

BC5 is withdrawing GET /:account/boosts.json — the query costs ~44s on
the largest account, and this CLI was its only known consumer. Once the
bc3 change deploys, the path 404s, so the two routes to it go before
v0.8.0 stable: `boost list --all-projects` and the bare `boost list`
account-wide fallback.

`boost list` is item-scoped only now. The arg stays optional so a bare
invocation gets a friendly usage hint (carrying an explicit project
forward) instead of a cobra arity error, and the surface keeps `[id|url]`
— when bc3 #12463 reintroduces the feed on a boost-proportional query,
the bare form slots back with zero arg churn. The flag removals are
acknowledged in .surface-breaking against v0.8.0-rc.1.

The other seven account-wide listings, recording-scoped `boost list <id>`,
and `boost create` are untouched, as is the SDK's GetEverythingBoosts
(pulling it would churn every client twice for a temporary withdrawal).
Copilot AI review requested due to automatic review settings July 30, 2026 16:21
@github-actions github-actions Bot added commands CLI command implementations tests Tests (unit and e2e) skills Agent skills docs breaking Breaking change labels Jul 30, 2026
@github-actions

Copy link
Copy Markdown

⚠️ Potential breaking changes detected:

  • The account-wide boost listing functionality has been removed, including the 'list' command functionality for retrieving boosts across all projects without specifying an ID.
  • The '--all-projects' flag for the 'boost list' command has been removed.
  • The behavior of the 'boost list' command has changed. It now requires specifying an item ID or URL, which could break existing scripts relying on default account-wide boost listing.

Review carefully before merging. Consider a major version bump.

@github-actions github-actions Bot added the enhancement New feature or request label Jul 30, 2026

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4e88f2cf90

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread API-COVERAGE.md
Comment on lines +27 to +29
the 17 are reached from the CLI — `Boosts` lost its upstream endpoint when the
account-wide boost feed was withdrawn (bc3 #12464; reintroduction tracked in
bc3 #12463) — see [Account-wide

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Correct the remaining full-coverage claims

After removing the only CLI route to EverythingService.Boosts, this paragraph correctly says only 16 of 17 methods are reachable, but the same document still claims that the service is “fully reached” at lines 15–17 and that “All 17 methods are reachable” at lines 68–69. This leaves the API coverage document internally contradictory and overstates SDK parity; update those remaining claims to describe the Boosts exception.

Useful? React with 👍 / 👎.

Copilot AI left a comment

Copy link
Copy Markdown

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 removes the CLI’s account-wide boost list behavior and the --all-projects flag to avoid calling the soon-to-be-withdrawn BC5 endpoint (GET /:account/boosts.json), keeping boost list item-scoped only and updating docs/surface tracking accordingly.

Changes:

  • Remove boost list account-wide fallback + --all-projects flag; keep boost list item-scoped and return a usage hint on bare invocation.
  • Update unit tests to assert bare boost list is a usage error and makes no API requests; remove now-obsolete account-wide route stubs/tests.
  • Update docs and CLI surface metadata to reflect the removal (SKILL.md, ACCOUNT-WIDE-LISTINGS.md, API-COVERAGE.md, .surface, .surface-breaking).

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

Show a summary per file
File Description
internal/commands/boost.go Removes account-wide boost listing + --all-projects; makes boost list item-scoped and returns a usage hint when no ID is provided.
internal/commands/boost_test.go Reworks boost list tests around the new “usage error, no API call” behavior; deletes account-wide listing tests.
internal/commands/accountwide_test.go Drops boost from account-wide listing todolist rejection coverage since it no longer has an account-wide path.
skills/basecamp/SKILL.md Updates documentation to reflect 7 (not 8) account-wide list commands.
ACCOUNT-WIDE-LISTINGS.md Updates the method matrix/invariants to reflect removal of the account-wide boost aggregate.
API-COVERAGE.md Updates EverythingService coverage note/matrix to reflect 16/17 reachable methods due to boost feed withdrawal.
.surface Removes --all-projects from basecamp boost(s) list.
.surface-breaking Records the removed --all-projects flags as acknowledged breaking surface changes.

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

Comment on lines 85 to +89
if recording == "" {
switch {
case explicitProject != "" && allProjects:
return output.ErrUsageHint("Cannot combine --all-projects with --project",
"--all-projects lists boosts from every project; drop --project, or pass an item ID to list one item's boosts")
case explicitProject != "":
return output.ErrUsageHint("Boosts belong to an item, so --project alone cannot list them",
fmt.Sprintf("Pass the item's ID or URL: basecamp boost list <id> --project %s", explicitProject))
hint := "Pass the item's ID or URL: basecamp boost list <id>"
explicitProject := project
if explicitProject == "" {
explicitProject = app.Flags.Project
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking Breaking change commands CLI command implementations docs enhancement New feature or request skills Agent skills tests Tests (unit and e2e)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants