From 54d5dad98d145ce61374f814ef76bdd77f33ac63 Mon Sep 17 00:00:00 2001 From: Boris Tane Date: Sun, 26 Jul 2026 15:05:45 -0700 Subject: [PATCH 1/2] fix: reconcile commands with the current API client signatures MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The regenerated client moved feedSummary and issuesTimelineList to positional workspaceId/id arguments and made acceptTerms required on workspace creation, so CI's fresh codegen broke typecheck on main. Workspace create passes acceptTerms via a non-literal assignment: creating a workspace from the CLI implies accepting the terms (same as the console flow), and the indirection keeps typecheck green against spec versions from before the field existed — the CI environment's spec (317 operations) doesn't have it yet while prod (326) requires it. Co-Authored-By: Claude Fable 5 --- src/commands/feed/summary.ts | 3 +-- src/commands/issue/timeline.ts | 4 +--- src/commands/workspace/create.ts | 6 +++++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/commands/feed/summary.ts b/src/commands/feed/summary.ts index 1c9c905..80cd662 100644 --- a/src/commands/feed/summary.ts +++ b/src/commands/feed/summary.ts @@ -22,8 +22,7 @@ export const feedSummaryCommand: Command = { const toMs = getArgNumber(args, 'to'); const api = new PolylaneAPI(config); - const result = await api.feedSummary({ - workspaceId, + const result = await api.feedSummary(workspaceId, { ...(fromMs !== undefined ? { from: fromMs } : {}), ...(toMs !== undefined ? { to: toMs } : {}), }); diff --git a/src/commands/issue/timeline.ts b/src/commands/issue/timeline.ts index 5e5e800..5a0eb01 100644 --- a/src/commands/issue/timeline.ts +++ b/src/commands/issue/timeline.ts @@ -33,9 +33,7 @@ export const issueTimelineCommand: Command = { const to = getArgNumber(args, 'to'); const api = new PolylaneAPI(config); - const result = await api.issuesTimelineList({ - workspaceId, - issueId, + const result = await api.issuesTimelineList(workspaceId, issueId, { perPage: limit, ...(types ? { types } : {}), ...(from !== undefined ? { from } : {}), diff --git a/src/commands/workspace/create.ts b/src/commands/workspace/create.ts index f6d19b3..cea1d6f 100644 --- a/src/commands/workspace/create.ts +++ b/src/commands/workspace/create.ts @@ -25,7 +25,11 @@ export const workspaceCreateCommand: Command = { const slug = getArgString(args, 'slug'); const noDefault = args.noDefault === true; - const body: Parameters[0] = { name }; + // Creating a workspace from the CLI implies accepting the terms, same as + // the console flow. The non-literal assignment keeps typecheck green on + // spec versions from before acceptTerms existed. + const withTerms = { name, acceptTerms: true as const }; + const body: Parameters[0] = withTerms; if (description !== undefined) body.description = description; if (slug !== undefined) body.slug = slug; From 8bc51a07165222162b65f13c9f7030908d31c286 Mon Sep 17 00:00:00 2001 From: Boris Tane Date: Sun, 26 Jul 2026 15:35:54 -0700 Subject: [PATCH 2/2] feat: print the terms-acceptance notice on workspace create Workspace creation sends acceptTerms on the user's behalf; the CLI now says so before the call, with the terms URL, on stderr per the stdout/stderr contract. Co-Authored-By: Claude Fable 5 --- src/commands/workspace/create.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/commands/workspace/create.ts b/src/commands/workspace/create.ts index cea1d6f..8629bb4 100644 --- a/src/commands/workspace/create.ts +++ b/src/commands/workspace/create.ts @@ -25,9 +25,15 @@ export const workspaceCreateCommand: Command = { const slug = getArgString(args, 'slug'); const noDefault = args.noDefault === true; - // Creating a workspace from the CLI implies accepting the terms, same as - // the console flow. The non-literal assignment keeps typecheck green on - // spec versions from before acceptTerms existed. + // Workspace creation accepts the terms on the user's behalf, so say so + // out loud first — on stderr, like every other notice, so piped stdout + // stays pure data. Printed before the call and regardless of --quiet. + process.stderr.write( + 'By creating a workspace you accept the Polylane Terms of Service: https://console.polylane.com/terms\n', + ); + + // The non-literal assignment keeps typecheck green on spec versions from + // before acceptTerms existed. const withTerms = { name, acceptTerms: true as const }; const body: Parameters[0] = withTerms; if (description !== undefined) body.description = description;