From 9b169fc598c00b33b7d094dd5b3589121c509d95 Mon Sep 17 00:00:00 2001 From: Rob Zolkos Date: Thu, 22 Oct 2026 19:31:44 -0400 Subject: [PATCH 1/2] Show who completed a to-do or card, and when, by bumping basecamp-sdk to 63115e79 The CLI read cards and to-dos through SDK types that had no `completion`, so `--json` output said `"completion": null` and `"completer": null` on every completed item, though Basecamp sends who and when. basecamp-sdk#1033 models `completion` on to-dos, cards and subtasks and fills Go's `Completer` and `CompletedAt` from it. Pin the SDK at that merge (scripts/bump-sdk.sh) and re-vendor the MCP model from it (scripts/sync-mcp-model.sh). --- go.mod | 2 +- go.sum | 4 +- internal/mcpserver/model/PROVENANCE.json | 4 +- internal/mcpserver/model/openapi.json | 52 ++++++++++++++++++++++-- internal/version/sdk-provenance.json | 6 +-- 5 files changed, 56 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 8980b2adb..0fc9c7173 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( charm.land/bubbles/v2 v2.2.1 charm.land/bubbletea/v2 v2.1.0 charm.land/lipgloss/v2 v2.0.6 - github.com/basecamp/basecamp-sdk/go v0.27.1-0.20261022210749-d69e9669709e + github.com/basecamp/basecamp-sdk/go v0.27.1-0.20261022230746-63115e7978c9 github.com/basecamp/cli v0.2.2-0.20260828230226-767413fc712d github.com/basecamp/mcp v0.0.0-20260828100356-2d6f44b51e9d github.com/basecamp/surfguard/go v0.1.0 diff --git a/go.sum b/go.sum index bfe832e3e..aa0908eee 100644 --- a/go.sum +++ b/go.sum @@ -89,8 +89,8 @@ github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuP github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/basecamp/actioncable-go v1.2.0 h1:t0MxlfMTcmaGXZ5ztgKRs7ZiY1MwXtBRwSSSAh1ofVg= github.com/basecamp/actioncable-go v1.2.0/go.mod h1:ezaV5z1GXQAsqyejqTs6wCFl2D8Wj+COLQkHc/kwoRs= -github.com/basecamp/basecamp-sdk/go v0.27.1-0.20261022210749-d69e9669709e h1:NTjvf3v/uIGLApp9Gs5YsWkGBHyMAz7CONtIr855SBE= -github.com/basecamp/basecamp-sdk/go v0.27.1-0.20261022210749-d69e9669709e/go.mod h1:mUm/MQGMyg1E1cddyxdG7tQHiq0NsYee2zUeAUT5VjU= +github.com/basecamp/basecamp-sdk/go v0.27.1-0.20261022230746-63115e7978c9 h1:ZcW7c/cnQTgFkNHMcnkxPqHIko2d0v2MrOgyykBrOj0= +github.com/basecamp/basecamp-sdk/go v0.27.1-0.20261022230746-63115e7978c9/go.mod h1:mUm/MQGMyg1E1cddyxdG7tQHiq0NsYee2zUeAUT5VjU= github.com/basecamp/cli v0.2.2-0.20260828230226-767413fc712d h1:jAzDrCCzDpIwhbFT1xVVs0z2xpXoDEkomHfKB2bUUp8= github.com/basecamp/cli v0.2.2-0.20260828230226-767413fc712d/go.mod h1:iTBTaWvsPEFIcZfkxQHEfISyJ6sZ7036K6bNx0RY3EE= github.com/basecamp/mcp v0.0.0-20260828100356-2d6f44b51e9d h1:zEQVGq1x1nhKMZ2TudFAcSJ32CHT8richI1vQakIKz4= diff --git a/internal/mcpserver/model/PROVENANCE.json b/internal/mcpserver/model/PROVENANCE.json index baca637d3..42ac0b999 100644 --- a/internal/mcpserver/model/PROVENANCE.json +++ b/internal/mcpserver/model/PROVENANCE.json @@ -1,7 +1,7 @@ { "source": "github.com/basecamp/basecamp-sdk", - "commit": "d69e9669709e121b5336560e2476c460d8f06d04", - "ref": "v0.27.1-1-gd69e9669", + "commit": "63115e7978c989a271220cee8b025135315db882", + "ref": "v0.27.1-3-g63115e79", "files": ["behavior-model.json", "openapi.json"], "synced_by": "scripts/sync-mcp-model.sh", "patches": "binary-upload operations dropped because the toolkit refuses their non-JSON bodies (EXCLUDED_OPERATIONS) and the stream-ticket mint dropped by policy (POLICY_EXCLUDED_OPERATIONS); no tag patches applied (PATCHED_TAGS is empty — the export tags every operation) — see the sync script" diff --git a/internal/mcpserver/model/openapi.json b/internal/mcpserver/model/openapi.json index b4eb6ed67..d95723c84 100644 --- a/internal/mcpserver/model/openapi.json +++ b/internal/mcpserver/model/openapi.json @@ -30740,12 +30740,18 @@ "completed": { "type": "boolean" }, + "completion": { + "$ref": "#/components/schemas/RecordingCompletion" + }, "completed_at": { "type": "string", + "deprecated": true, + "description": "This shape is deprecated since 2026-10: Never sent by Basecamp; read completion.created_at instead", "x-go-type": "time.Time", "x-go-type-import": { "path": "time" - } + }, + "x-deprecated-reason": "This shape is deprecated since 2026-10: Never sent by Basecamp; read completion.created_at instead" }, "comments_count": { "type": "integer", @@ -30767,7 +30773,10 @@ "$ref": "#/components/schemas/Person" }, "completer": { - "$ref": "#/components/schemas/Person" + "$ref": "#/components/schemas/Person", + "deprecated": true, + "description": "This shape is deprecated since 2026-10: Never sent by Basecamp; read completion.creator instead", + "x-deprecated-reason": "This shape is deprecated since 2026-10: Never sent by Basecamp; read completion.creator instead" }, "assignees": { "type": "array", @@ -37247,6 +37256,26 @@ "name" ] }, + "RecordingCompletion": { + "type": "object", + "description": "Who completed a to-do, card or subtask, and when.", + "properties": { + "created_at": { + "type": "string", + "x-go-type": "time.Time", + "x-go-type-import": { + "path": "time" + } + }, + "creator": { + "$ref": "#/components/schemas/Person" + } + }, + "required": [ + "created_at", + "creator" + ] + }, "RecordingParent": { "type": "object", "properties": { @@ -38341,12 +38370,18 @@ "completed": { "type": "boolean" }, + "completion": { + "$ref": "#/components/schemas/RecordingCompletion" + }, "completed_at": { "type": "string", + "deprecated": true, + "description": "This shape is deprecated since 2026-10: Never sent by Basecamp; read completion.created_at instead", "x-go-type": "time.Time", "x-go-type-import": { "path": "time" - } + }, + "x-deprecated-reason": "This shape is deprecated since 2026-10: Never sent by Basecamp; read completion.created_at instead" }, "parent": { "$ref": "#/components/schemas/RecordingParent" @@ -38358,7 +38393,10 @@ "$ref": "#/components/schemas/Person" }, "completer": { - "$ref": "#/components/schemas/Person" + "$ref": "#/components/schemas/Person", + "deprecated": true, + "description": "This shape is deprecated since 2026-10: Never sent by Basecamp; read completion.creator instead", + "x-deprecated-reason": "This shape is deprecated since 2026-10: Never sent by Basecamp; read completion.creator instead" }, "assignees": { "type": "array", @@ -39032,6 +39070,9 @@ "completed": { "type": "boolean" }, + "completion": { + "$ref": "#/components/schemas/RecordingCompletion" + }, "content": { "type": "string" }, @@ -39883,6 +39924,7 @@ }, "due_on": { "type": "string", + "x-basecamp-clearable": {}, "x-go-type": "types.Date", "x-go-type-import": { "path": "github.com/basecamp/basecamp-sdk/go/pkg/types" @@ -39908,6 +39950,7 @@ }, "due_on": { "type": "string", + "x-basecamp-clearable": {}, "x-go-type": "types.Date", "x-go-type-import": { "path": "github.com/basecamp/basecamp-sdk/go/pkg/types" @@ -40353,6 +40396,7 @@ }, "due_on": { "type": "string", + "x-basecamp-clearable": {}, "x-go-type": "types.Date", "x-go-type-import": { "path": "github.com/basecamp/basecamp-sdk/go/pkg/types" diff --git a/internal/version/sdk-provenance.json b/internal/version/sdk-provenance.json index b7d18e6d8..f0239d2a0 100644 --- a/internal/version/sdk-provenance.json +++ b/internal/version/sdk-provenance.json @@ -1,9 +1,9 @@ { "sdk": { "module": "github.com/basecamp/basecamp-sdk/go", - "version": "v0.27.1-0.20261022210749-d69e9669709e", - "revision": "d69e9669709e", - "updated_at": "2026-10-22T21:07:49Z" + "version": "v0.27.1-0.20261022230746-63115e7978c9", + "revision": "63115e7978c9", + "updated_at": "2026-10-22T23:07:46Z" }, "api": { "repo": "basecamp/bc3", From 9dd1595eb4ba192ba5b1f3b791a3c46632710a7a Mon Sep 17 00:00:00 2001 From: Rob Zolkos Date: Thu, 22 Oct 2026 19:33:34 -0400 Subject: [PATCH 2/2] Update the Nix vendorHash for the basecamp-sdk bump MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Nix flake build computed sha256-hun/… for the go modules at the new pin. --- nix/package.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nix/package.nix b/nix/package.nix index 72064e058..5473eaec8 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -8,7 +8,7 @@ buildGoModule.override { go = go_1_26; } (finalAttrs: { src = lib.cleanSource ./..; # To update: set to lib.fakeHash, run `nix build`, use the hash from the error. - vendorHash = "sha256-U8sNbyU3V12EDPls/wzFVEBhXAOjGFriXrZnYHckeIs="; + vendorHash = "sha256-hun/i3MPdFGgzl0qYgal3ur2UQVCS+qnnJdFBreVDDY="; subPackages = [ "cmd/basecamp" ];