Say what DeleteTool really does: delete or disable, never trash
The DeleteTool spec said "Delete a tool (trash it)". The Go ToolsService.Delete comment added "Trashed tools can be recovered from the trash." Both are wrong. DELETE /dock/tools/:id takes one of two paths, and neither one uses the trash (bc3 API docs, "Trash a tool", corrected in basecamp/bc3#13973):
- Deleted: an external link, or a tool that is empty while the project has another tool of the same type. Items already in the trash don't count as content, archived and draft items do, and a Card Table counts only its cards. A deleted tool is destroyed with everything inside it about five days later. Until then, a deleted external link can be restored in the web app.
- Disabled: every other tool, such as the only tool of its type or one with content. This is the same as
DisableTool, andEnableToolbrings it back.
Both outcomes return 204. To tell which one happened, get the tool: a deleted tool has status "deleted". A disabled tool keeps its status and has no position.
The old summary spread to every generated SDK's method docs and to the basecamp-cli MCP catalog (delete_tool: Delete a tool (trash it)). A customer saw the same false claim through the MCP server, which basecamp/basecamp-mcp-server#273 fixes.
Changes
spec/basecamp.smithy: theDeleteTooldoc. Its first line is a self-contained summary, because generators and the MCP catalog show only that line.go/pkg/basecamp/tools.go: theDeletedoc comment.- Everything else comes from
make generate. That covers OpenAPI, the Go catalog, and the TS, Ruby, Python, Kotlin and Rust service docs, plus the generator timestamps. - No wire, type or behaviour change.
Checked locally: make go-check-drift, py-check-drift and rs-check-drift, go vet, and go test ./pkg/basecamp/.
Follow-up
Once this merges, basecamp-cli needs scripts/sync-mcp-model.sh to pick up the new text. basecamp/basecamp-cli#940 fixes the CLI's own tools trash help.
Review
Codex (gpt-6.1-sol, high) found two issues in round 1, and both are taken. "Empty" now carries bc3's Card Table rule, and the blanket "cannot be restored" is gone because external links can be restored before they're destroyed. Round 2 found nothing.
Summary by cubic
Corrects the DeleteTool spec and Go doc, which said "trash it," but DELETE /dock/tools/:id never trashes: it deletes an external link or an empty extra tool, and disables every other tool, both returning 204. The spec, Go wrapper, and all generated SDK docs now describe both outcomes and how to tell them apart (a deleted tool has status "deleted"). No wire, type, or behavior change; everything beyond the two source edits is regeneration output.