Repository navigation
Conversation
Pin the SDK at 4e1cf312 (scripts/bump-sdk.sh), which adds
Projects().UpdateWallpaper and RemoveWallpaper, a wallpaper {url, mode}
on Project, and wallpaper_mode on UpdateProjectRequest. The bump also
brings in the SDK's other changes since d69e9669: who completed a to-do,
card or subtask (basecamp-sdk#1033) and a Rust-only due-date fix
(basecamp-sdk#1032).
Re-vendor the MCP model from that commit (scripts/sync-mcp-model.sh).
UpdateProjectWallpaper is a multipart upload, which the JSON tool-call
convention cannot carry, so the sync drops it with the other uploads;
remove_project_wallpaper is served. Update the Nix vendorHash, verified
by a Docker Nix build.
basecamp projects wallpaper set <file> [--mode fill|tile]
basecamp projects wallpaper mode <fill|tile>
basecamp projects wallpaper remove
The project comes from --project/--in, then the configured default, as
for other project-scoped commands; the positional slot is the file or
the mode. Before anything is sent, set refuses a file that is not PNG,
JPEG, WebP or AVIF or is over 10 MB, and both set and mode refuse a mode
other than fill or tile. The formats and the cap are named once and feed
the help and the refusals. The server sniffs the bytes and holds the
web's rules (editors only, agents refused), and its 422 or 403 comes
back as the error.
mode goes through PUT /projects/:id.json with wallpaper_mode, sending the
current name the SDK requires and nothing else. Each command answers
with the project re-read, so the output shows wallpaper {url, mode}, or
no wallpaper after remove; a failed re-read falls back with a notice,
since the change has already happened.
The skill says which commands change a wallpaper and what an agent cannot learn from leaf help in time: an agent profile is always refused, so retrying or reaching for basecamp api is wrong. An eval case holds that the agent uses wallpaper set rather than projects update. API-COVERAGE gains a BC5 projects (wallpaper) row for the two new endpoints, and the totals move from 209 to 211.
Styled and Markdown project output listed no wallpaper, so a person running projects show or a wallpaper command saw nothing of it. Show the mode under Info when one is attached. The URL is a signed-in redirect, no use to read in a terminal, so it stays in JSON only.
Contributor
There was a problem hiding this comment.
Copilot was unable to review this pull request because the organization has exhausted its available GitHub AI Credits or reached a budget that stops additional usage. An organization owner can increase the applicable AI Credits budget or wait for the usage allowance to reset. Learn about budgets for usage-based billing. Review the organization's AI Credits budgets.
This branch has not been deployed
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
Adds
basecamp projects wallpaperso people and agents can set, lay out and remove a project's wallpaper. The limits match the web.setuploads PNG, JPEG, WebP or AVIF up to 10 MB. The CLI refuses another type, a larger file, or an unknown mode before it sends anything. bc3 sniffs the bytes and refuses a mislabeled file with a 422.modechangesfillortilethrough the existing project update, and resends the project's current name..data.wallpaperset to{url, mode}or absent.projects showadds aWallpaper: tileline in styled and Markdown output.skills/basecamp/SKILL.mdgains a "Project wallpaper" section and an eval case. API-COVERAGE gets a row.Why
Card: Add ability to add/remove wallpaper. This also covers the wallpaper half of #864.
It depends on two unmerged PRs. https://github.com/basecamp/bc3/pull/14062 adds the endpoint. basecamp/basecamp-sdk#1037 models it.
go.modpins the SDK branch at a pseudo-version. Re-bump after the SDK merges, then re-sync the MCP model and the Nix hash.Scope
remove_project_wallpaperbecomes an MCP tool through the model sync. The upload is multipart, so the sync drops it with the other uploads.Testing
bin/cipasses on this head.End to end,
verify-basecamp-cliran this branch's binary against bc3 #14062 on a local server. Each change was read back fromGET /projects/:id.json:mode fill;mode stretch, refused locally (exit 1);.png, refused by the server with a 422 (exit 9);modeon a project with no wallpaper.The wallpaper URL redirects (302). This run found that bc3 accepted the mislabeled text file, which #14062 now fixes.
Unit tests cover:
?mode=;{"name":…,"wallpaper_mode":…};New BATS tests are in
e2e/projects.bats. The smoke tests insmoke_projects_write.batsneed a live account and mark themselves unverifiable until bc3 ships.Summary by cubic
Adds
basecamp projects wallpaper set|mode|removeso people can set, lay out, and remove a project's wallpaper, matching the web's limits.setaccepts PNG, JPEG, WebP, or AVIF up to 10 MB and refuses wrong types, sizes, or modes before sending anything; the server sniffs bytes and rejects mislabeled files.modechangesfillortilethrough the existing project update, resending the current name..data.wallpaperas{url, mode}or absent;projects showprints the mode.remove_project_wallpaperbecomes an MCP tool;setis excluded because its multipart body can't cross JSON tool calls.Dependencies
go.modpins the SDK branch.Written for commit 53a29b6. Summary will update on new commits.