Skip to content

Say what tools trash really does: delete or disable, never trash - #940

Merged
jeremy merged 5 commits into
mainfrom
docs/tools-trash-outcome
Oct 22, 2026
Merged

jeremy merged 5 commits into
mainfrom
docs/tools-trash-outcome

Conversation

@jeremy

@jeremy jeremy commented Oct 22, 2026 •

Copy link
Copy Markdown
Member

basecamp tools trash said it would "permanently trash a dock tool" and remove "the tool and all its content", and then reported "Tool N trashed". Basecamp does neither. 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 tools disable, and tools enable brings it back.

Both outcomes return 204. A customer saw this through the MCP server: the project's original To-dos, Docs & Files and Chat were reported as trashed and restorable, but they had only been disabled. basecamp/basecamp-mcp-server#273 fixes the MCP reply.

Changes

  • The tools trash help now describes both outcomes and says how to tell them apart: run tools show <id>, and a deleted tool has status "deleted". The tools agent notes say the same in one line.
  • The summary now reads "Tool N removed from the dock (deleted or disabled)". A first breadcrumb points to basecamp tools show <id>.
  • The data key stays {"trashed": true}, so scripts that read it keep working. A comment at the call site explains why.
  • TestToolsTrashSummaryDoesNotClaimTrash pins the summary and the breadcrumb. It fails on main, where it gets "Tool 557 trashed" and no show breadcrumb.

Not in this PR

MCP model sync (follow-up commits)

basecamp/basecamp-sdk#1031 is merged as d69e9669. This PR now pins the SDK at that commit with scripts/bump-sdk.sh, a pseudo-version since no Go release has been cut. It re-vendors internal/mcpserver/model from the commit with scripts/sync-mcp-model.sh, so the built-in MCP server's delete_tool now describes both outcomes. The catalog snapshot is regenerated, and nix/package.nix's vendorHash is updated for the new modules. The bump also brings in basecamp/basecamp-sdk#1028, which reads a pixel dimension one ulp off an integer as that integer. That is the SDK's only other Go change since v0.27.0.

Review

Our Codex review (gpt-6.1-sol, high) of the sync commit found nothing.

Codex (gpt-6.1-sol, high) made two findings, and both are taken. "Empty" now carries bc3's Card Table rule, so a table with columns and no cards counts as empty and gets deleted. The blanket "can't be restored" is gone, because a deleted external link can be restored in the web app until it's destroyed.

DELETE /dock/tools/:id deletes an external link or an empty extra tool of
a type, and disables every other tool. Neither goes to the trash, and both
answer 204. The help promised permanent removal of the tool and all its
content, and the summary said "trashed".

Describe both outcomes in the help, word the summary as "removed from the
dock (deleted or disabled)", and point a breadcrumb at tools show, which
tells them apart. The data key stays "trashed" for existing scripts.
Codex review: a Card Table counts only cards, so one with columns and no
cards is empty and gets deleted; and a deleted external link can still be
restored in the web app until it is destroyed. Say both.
@jeremy
jeremy requested a review from a team as a code owner October 22, 2026 18:37
Copilot AI balanced review requested due to automatic review settings October 22, 2026 18:37
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-22T22:00:34.875065Z 7c57d9a New commits
🔒 Security Review ✅ Completed 2026-10-22T22:01:44.974440Z 7c57d9a New commits
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Copilot AI previously approved these changes Oct 22, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approved

These narrowly scoped messaging changes preserve behavior and data compatibility, include focused regression coverage, and have no identified blocking issues.

No open issues 🎉

What changed in this PR

Corrects basecamp tools trash messaging to describe Basecamp’s delete-or-disable behavior without changing the operation or breaking existing script output.

Changes:

  • Updates help, agent notes, and the success summary to clarify that tools never enter the trash.
  • Adds a tools show breadcrumb and regression coverage while preserving {"trashed": true} compatibility.

[!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.

File Description
internal/​commands/​tools.go Clarifies removal outcomes and adds a verification breadcrumb.
internal/​commands/​tools_test.go Pins the corrected summary and project-scoped breadcrumb.

Review effort: Balanced

…d text

The built-in MCP server's delete_tool still described itself as "Delete a
tool (trash it)", from the vendored SDK model. basecamp-sdk#1031 corrected
the description; pin the SDK at that merge (scripts/bump-sdk.sh) and
re-vendor the model from it (scripts/sync-mcp-model.sh).

The bump also brings in the SDK's other change since v0.27.0: reading a
pixel dimension one ulp off an integer as that integer (basecamp-sdk#1028).
Copilot AI balanced review requested due to automatic review settings October 22, 2026 21:19
Copilot AI dismissed their stale review, a newer Copilot review was requested October 22, 2026 21:19
@github-actions github-actions Bot added sdk SDK wrapper and provenance deps labels Oct 22, 2026
Copilot AI previously approved these changes Oct 22, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approved

Static review found no blocking issues in the messaging, compatibility preservation, regression test, or synchronized SDK and MCP updates.

No open issues 🎉

Review effort: Balanced

@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: 64d1b99039

ℹ️ 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 internal/commands/tools.go
The Nix flake build computed sha256-U8sN… for the go modules at the new
pin.
Copilot AI balanced review requested due to automatic review settings October 22, 2026 21:30
Copilot AI dismissed their stale review, a newer Copilot review was requested October 22, 2026 21:30
Copilot AI previously approved these changes Oct 22, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approved

Static review identified no blocking issues in the wording, breadcrumb, regression coverage, or SDK/model alignment; tests and the Nix build were not run.

No open issues 🎉

Review effort: Balanced

tools trash points to tools show to tell its outcomes apart, but show read
every missing position as disabled, so a deleted tool came back "at
position disabled": the opposite outcome. Check status first.

Codex review on #940.
Copilot AI balanced review requested due to automatic review settings October 22, 2026 21:59
Copilot AI dismissed their stale review, a newer Copilot review was requested October 22, 2026 21:59

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🟢 Approved

The focused changes preserve output compatibility, consistently explain both outcomes, and include targeted regression coverage, with no blocking issues identified.

No open issues 🎉

Review effort: Balanced

@jeremy
jeremy merged commit 9242a3b into main Oct 22, 2026
42 checks passed
@jeremy
jeremy deleted the docs/tools-trash-outcome branch October 22, 2026 22:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

commands CLI command implementations deps sdk SDK wrapper and provenance tests Tests (unit and e2e)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants