Repository navigation
Add basecamp boost update - #917
Merged
Merged
Conversation
robzolkos
force-pushed
the
boost-update-cmd
branch
from
October 20, 2026 01:12
7c4ff97 to
99b508f
Compare
robzolkos
force-pushed
the
connect-pings
branch
from
October 20, 2026 01:12
14c799f to
25c32c8
Compare
robzolkos
force-pushed
the
connect-pings
branch
from
October 20, 2026 01:16
25c32c8 to
897265a
Compare
robzolkos
force-pushed
the
boost-update-cmd
branch
2 times, most recently
from
October 20, 2026 01:56
973e182 to
9f7d876
Compare
robzolkos
force-pushed
the
connect-pings
branch
2 times, most recently
from
October 20, 2026 02:02
25f7263 to
e121261
Compare
robzolkos
force-pushed
the
boost-update-cmd
branch
2 times, most recently
from
October 20, 2026 02:22
78fe691 to
882a6a1
Compare
Changes the content of a boost the caller gave, through the SDK's
BoostsService.Update (PUT /boosts/{id}). Takes a boost id or URL and the
new content, or - to read it from stdin. The same 16-character cap as
create is checked before any request, through one shared helper, and
blank content is refused locally. Only a boost's creator can update it;
the server's 403, 404 and 422 come back through the usual error mapping.
Depends on the SDK's UpdateBoost (basecamp-sdk#1016), reached here
through the DO NOT MERGE replace beneath this commit.
robzolkos
marked this pull request as ready for review
October 20, 2026 02:30
robzolkos
force-pushed
the
boost-update-cmd
branch
from
October 20, 2026 02:30
882a6a1 to
698047c
Compare
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
URL identity validation and shell-safe breadcrumb quoting need correction before approval.
2 open issues
What changed in this PR
Adds basecamp boost update and its boosts alias to edit existing reactions through the SDK.
Changes:
- Adds update handling with stdin support and shared length validation.
- Adds unit and live smoke coverage.
- Updates the command catalog, surface snapshot, and API coverage.
[!TIP]
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or rungh pr ready --undo.
Click "Ready for review" or rungh pr readyto reengage.
| File | Description |
|---|---|
| internal/commands/commands.go | Registers the update action. |
| internal/commands/boost.go | Implements update and shared length validation. |
| internal/commands/boost_test.go | Tests input handling, requests, and errors. |
| e2e/smoke/smoke_communication_write.bats | Adds a live update smoke test. |
| API-COVERAGE.md | Documents the seventh boost operation. |
| .surface | Records update commands, arguments, and flags. |
Review effort: Balanced
boost update took a URL's boost and project IDs and dropped the rest, so a URL from another account updated the boost with that ID in the configured one, and a URL naming a to-do, a recording's boost list or another host was read as a boost. The URL must now be on a Basecamp host and name one boost, checked before content is read, and its account must match the configured one, checked before anything is sent. The show breadcrumb quotes its project for the shell.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

What
basecamp boost update <boost-id|url> <content>(andboosts update) changes the content of a boost you gave. It calls the SDK'sBoostsService.Update(PUT /boosts/{id}).boost createandboost updateshare one helper (checkBoostLength), and the check runs before any request is made.-as the content reads it from stdin, ascreatedoes..../boosts/789, parsed the wayshowanddeleteparse it). The route is flat, so no project or item is needed; the boost ID is the whole address.create: the updated boost, a summary (Updated boost #N to <content>), and breadcrumbs to show and delete it..surface,API-COVERAGE.mdboosts row (6 to 7 operations), and a live smoke test.skills/basecamp/SKILL.mddocuments no boost commands, so it is unchanged. The basecamp-connect skill is untouched.SDK dependency
Needs
UpdateBoostfrom basecamp-sdk #1016 (head32567741, which contains #1015). Until that releases, the bottomDO NOT MERGEcommits point thereplaceat a local SDK worktree. Drop them and runmake bump-sdkonce it ships. This PR is stacked on #914.Compatibility check (final SDK vs the provisional CLI stack)
With the replace pointed at the #1016 SDK,
make check(whatbin/ciruns) at the replace commit alone (#913/#914 code, nothing of this PR) exits 0: fmt, vet, lint, lint-actions, go unit tests (-tags dev ./...), BATS e2e, sync-skills, naming, surface, skill drift, bare groups, lint lockstep, smoke coverage, eval checks, race shards, tidy. Only the SDK provenance check skips, as expected with a replace active. The final SDK broke nothing in #913/#914.Tests
New tests in
internal/commands/boost_test.go(all red against the oldboost.go, green now): sends new content and summary,boostsalias, URL form, stdin, over 16 refused before any request, exactly 16 accepted, 16 emoji accepted (characters, not bytes), empty and blank refused before any request, bad ID refused before any request, 403/404/422 mapping.make checkon the PR head also exits 0.Live check
Against production, on the R2-D2 Ping line (bucket 49282878, line 10420899410), as the logged-in profile (R2-D2), self-cleaning:
boost createwith 👀,boost updateto✅ done,boost showconfirmed✅ done, an over-cap update was refused locally, a stdin update (-) worked, thenboost delete. The line's one pre-existing boost was untouched.Summary by cubic
Adds
basecamp boost update <boost-id|url> <content>(andboosts update) to change the content of a boost you gave, via the SDK'sUpdateBoost(PUT /boosts/{id}).boost create, checked before any request through one shared helper; blank content is refused locally, and-reads content from stdin.create: the updated boost, a summary, and breadcrumbs to show and delete it..surface,API-COVERAGE.md(boosts row 6 to 7), and adds a live smoke test.Dependencies
Depends on the SDK's
UpdateBoost(basecamp-sdk#1016); the bottomDO NOT MERGEcommits point thereplaceat a local SDK worktree. Drop them and runmake bump-sdkonce the SDK ships.Written for commit 8fff68c. Summary will update on new commits.