Skip to content

Adopt SDK v0.24.0 and make the plugin rename failure-safe - #861

Merged
robzolkos merged 2 commits into
mainfrom
release/v0.13.0
Oct 7, 2026
Merged

robzolkos merged 2 commits into
mainfrom
release/v0.13.0

Conversation

@robzolkos

@robzolkos robzolkos commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • replace the unpublished SDK pseudo-version with tagged v0.24.0
  • refresh SDK and MCP provenance plus the Nix vendor hash
  • install basecamp-cli@37signals at each Claude scope before removing the working basecamp@37signals copy
  • leave the old scoped copy installed when replacement installation fails

Verification

  • GOWORK=off bin/ci
  • local binary build metadata resolves github.com/basecamp/basecamp-sdk/go v0.24.0
  • read-only live-account smoke tests: auth validation, accounts, current user, projects, people, assignments, recordings, notifications, search, and doctor
  • connector doctor attempted separately; release remains gated on reconnecting the currently refused agent credential

Summary by cubic

Adopts the released SDK v0.24.0 and makes the Claude plugin rename failure-safe.

  • Replaces the unpublished SDK pseudo-version with v0.24.0 and refreshes SDK and MCP provenance plus the Nix vendor hash.
  • Installs basecamp-cli@37signals at each Claude scope before removing the working basecamp@37signals copy, leaving the old copy in place when the replacement installation fails.

Written for commit ca17ae8. Summary will update on new commits.

View guided diff Turn on auto-fix

Copilot AI balanced review requested due to automatic review settings October 7, 2026 19:15
@robzolkos
robzolkos requested a review from a team as a code owner October 7, 2026 19:15
@github-actions github-actions Bot added commands CLI command implementations sdk SDK wrapper and provenance tests Tests (unit and e2e) deps labels Oct 7, 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@cubic-dev-ai cubic-dev-ai Bot 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.

1 issue found across 7 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="internal/commands/wizard_agents_test.go">

<violation number="1" location="internal/commands/wizard_agents_test.go:86">
P3: `stubClaudeMigration(t, "")` does not mean "no scope fails": `[ "$5" = "" ]` is true whenever the fifth positional is empty or absent, so any `plugin install` invocation with fewer than five args is forced to exit 1. Today `preinstallRenamedClaudePlugin` always installs with `--scope`, so this is latent, but the condition contradicts the helper's no-failure contract and will silently fail a future unscoped install. Guard the scope comparison with a non-empty check.</violation>
</file>

Reply with feedback, questions, or to request a fix.

View guided diff | Turn on auto-fix | Re-trigger cubic

logFile := filepath.Join(dir, "calls.log")
script := "#!/bin/sh\n" +
"echo \"$*\" >> \"" + logFile + "\"\n" +
"if [ \"$1 $2\" = \"plugin install\" ] && [ \"$5\" = \"" + failedInstallScope + "\" ]; then exit 1; fi\n" +

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.

P3: stubClaudeMigration(t, "") does not mean "no scope fails": [ "$5" = "" ] is true whenever the fifth positional is empty or absent, so any plugin install invocation with fewer than five args is forced to exit 1. Today preinstallRenamedClaudePlugin always installs with --scope, so this is latent, but the condition contradicts the helper's no-failure contract and will silently fail a future unscoped install. Guard the scope comparison with a non-empty check.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At internal/commands/wizard_agents_test.go, line 86:

<comment>`stubClaudeMigration(t, "")` does not mean "no scope fails": `[ "$5" = "" ]` is true whenever the fifth positional is empty or absent, so any `plugin install` invocation with fewer than five args is forced to exit 1. Today `preinstallRenamedClaudePlugin` always installs with `--scope`, so this is latent, but the condition contradicts the helper's no-failure contract and will silently fail a future unscoped install. Guard the scope comparison with a non-empty check.</comment>

<file context>
@@ -77,6 +77,54 @@ func readClaudeCalls(t *testing.T, claudePath string) string {
+	logFile := filepath.Join(dir, "calls.log")
+	script := "#!/bin/sh\n" +
+		"echo \"$*\" >> \"" + logFile + "\"\n" +
+		"if [ \"$1 $2\" = \"plugin install\" ] && [ \"$5\" = \"" + failedInstallScope + "\" ]; then exit 1; fi\n" +
+		"exit 0\n"
+	path := filepath.Join(dir, "claude")
</file context>

@robzolkos
robzolkos merged commit eee7682 into main Oct 7, 2026
40 of 41 checks passed
@robzolkos
robzolkos deleted the release/v0.13.0 branch October 7, 2026 19:24
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