Skip to content

Sync SDK with latest upstream Fizzy API changes#94

Merged
robzolkos merged 3 commits into
basecamp:mainfrom
robzolkos:upstream-fizzy-scope-20260531
Jun 3, 2026
Merged

Sync SDK with latest upstream Fizzy API changes#94
robzolkos merged 3 commits into
basecamp:mainfrom
robzolkos:upstream-fizzy-scope-20260531

Conversation

@robzolkos
Copy link
Copy Markdown
Collaborator

@robzolkos robzolkos commented Jun 3, 2026

Summary

Sync the SDK spec and generated clients with the latest upstream Fizzy API surface through basecamp/fizzy@08395fa.

This picks up the recent upstream API changes around account-scoped my endpoints and update endpoints returning resource bodies.

What changed

Smithy / API model

  • Updated upstream provenance from abd5956 (2026-04-14) to 08395fa (2026-06-01).
  • Added UpdateMyTimezone:
    • PATCH /{accountId}/my/timezone.json
    • request body: timezone_name
    • success response: 204 No Content
  • Changed ListPins from a root /my/pins.json endpoint to the account-scoped path:
    • GET /{accountId}/my/pins.json
  • Confirmed the recent update-return-body PRs are represented in the SDK model:
    • UpdateBoard returns Board
    • UpdateColumn returns Column
    • UpdateComment returns Comment
    • UpdateUser returns User
    • MoveCard returns Card

Generated artifacts / SDKs

Regenerated derived artifacts and client code:

  • openapi.json
  • behavior-model.json
  • generated URL route table
  • Go generated types/services/operation registry
  • TypeScript generated schema/metadata/services
  • Ruby generated metadata/types/services
  • Swift generated metadata/models/services
  • Kotlin generated metadata/types/services

Tests and conformance

  • Added conformance coverage for:
    • account-scoped ListPins path
    • UpdateMyTimezone path and request body shape
  • Updated conformance dispatchers for Ruby, TypeScript, and Kotlin.
  • Added per-language unit coverage for pins/timezone path behavior.
  • Updated operation/audit counts from 111 to 112 operations.

Notes for reviewers

  • The SDK still models update operations as PATCH; Rails accepts PATCH for these resource updates. The upstream docs use PUT wording for several update endpoints, but the current generated SDK contract remains PATCH-based.
  • UpdateBoard has an upstream conditional 204 No Content case when the caller removes their own board access. The SDK already models the normal 200 Board response, but does not currently model the conditional empty response separately.

Validation

  • make check passed locally.
  • Conformance passed across Go, TypeScript, Ruby, and Kotlin: 127 passed, 0 failed.
  • Swift build/tests also passed locally on Linux.

Summary by cubic

Sync the SDK to the latest Fizzy API. Adds an account‑scoped timezone update endpoint and makes pins listing account‑scoped, with regenerated specs/clients and updated tests across languages. Also tightens path generation to ensure correct account‑scoped “my” routes.

  • New Features

    • Added UpdateMyTimezone: PATCH /{accountId}/my/timezone.json with timezone_name (204 No Content; idempotent with retries).
    • Moved ListPins to /{accountId}/my/pins.json (was /my/pins.json).
    • Regenerated OpenAPI/specs and SDKs for Go, TypeScript, Ruby, Swift, and Kotlin; tests/conformance updated (112 ops). Go now renders some paths from the generated route table (adds api_path) and formats generated code.
  • Migration

    • Pins listing now requires account context:
      • Ruby: pins.list(account_id:)
      • Swift: pins.list(accountId:)
      • Go/Kotlin/TypeScript: keep using account‑scoped clients or base URL (no signature change).
    • Timezone update is account‑scoped:
      • Go/Swift/Ruby require accountId in the method call; Kotlin/TypeScript use account‑scoped clients.

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

Review in cubic

Copilot AI review requested due to automatic review settings June 3, 2026 16:39
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Syncs the Fizzy SDK’s Smithy/OpenAPI source-of-truth and all generated language clients to match upstream basecamp/fizzy@08395fa, primarily covering account-scoped /my/* endpoints and the new UpdateMyTimezone operation.

Changes:

  • Added UpdateMyTimezone (PATCH /{accountId}/my/timezone.json, 204 No Content) across the Smithy model, OpenAPI, generated SDKs, and conformance runners/tests.
  • Moved ListPins to the account-scoped path (GET /{accountId}/my/pins.json) and updated SDK implementations/tests accordingly.
  • Regenerated derived artifacts/metadata and updated conformance inventories/audit counts to 112 operations.

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.

Reviewed changes

Copilot reviewed 27 out of 46 changed files in this pull request and generated no comments.

Show a summary per file
File Description
typescript/tests/fizzy.test.ts Adds integration coverage for account-scoped pins + timezone paths.
typescript/src/generated/services/identity.ts Adds updateTimezone operation and request type mapping.
typescript/src/generated/schema.d.ts Updates TS schema typings for pins + timezone operations.
typescript/src/generated/path-mapping.ts Updates operation mapping for account-scoped pins + timezone.
typescript/src/generated/openapi-stripped.json Updates TS OpenAPI artifact for pins + timezone operations.
typescript/src/generated/metadata.json Updates generated timestamp + adds operation metadata entries.
typescript/scripts/generate-services.ts Adds service/method naming overrides for UpdateMyTimezone.
swift/Tests/FizzyTests/FizzyTests.swift Adds Swift transport-level assertions for pins/timezone generated paths.
swift/Sources/FizzyGenerator/ServiceGrouper.swift Groups UpdateMyTimezone under Identity service in generator.
swift/Sources/FizzyGenerator/MethodNaming.swift Adds Swift method naming override for UpdateMyTimezone.
swift/Sources/Fizzy/Generated/Services/PinsService.swift Updates pins list to require accountId and use account-scoped path.
swift/Sources/Fizzy/Generated/Services/IdentityService.swift Adds updateTimezone(accountId:req:) using account-scoped path.
swift/Sources/Fizzy/Generated/Models/UpdateMyTimezoneRequest.swift Adds generated request model for timezone update.
swift/Sources/Fizzy/Generated/Metadata.swift Adds retry metadata for UpdateMyTimezone.
spec/fizzy.smithy Updates Smithy model: adds UpdateMyTimezone, scopes ListPins under {accountId}.
spec/api-provenance.json Bumps upstream provenance revision/date.
ruby/test/fizzy_test.rb Adds Ruby unit tests verifying generated service paths for pins/timezone.
ruby/scripts/generate-services.rb Adds Ruby service/method naming overrides for UpdateMyTimezone.
ruby/lib/fizzy/generated/types.rb Adds generated request content type for timezone update.
ruby/lib/fizzy/generated/services/pins_service.rb Updates pins list to require account_id and use account-scoped path.
ruby/lib/fizzy/generated/services/identity_service.rb Adds update_timezone with account-scoped path + request body.
ruby/lib/fizzy/generated/metadata.json Updates generated timestamp + adds operation metadata entries.
rubric-audit.json Updates audit date and operation/conformance counts for 112 ops.
openapi.json Updates canonical OpenAPI: pins path now account-scoped; adds timezone endpoint + schema.
kotlin/sdk/src/commonTest/kotlin/com/basecamp/fizzy/FizzyTest.kt Adds Kotlin tests ensuring pins/timezone requests hit account-scoped paths.
kotlin/sdk/src/commonMain/kotlin/com/basecamp/fizzy/generated/services/Types.kt Adds UpdateMyTimezoneBody request type.
kotlin/sdk/src/commonMain/kotlin/com/basecamp/fizzy/generated/services/pins.kt Switches pins to account-scoped request helper.
kotlin/sdk/src/commonMain/kotlin/com/basecamp/fizzy/generated/services/identity.kt Adds updateTimezone operation with timezone_name payload.
kotlin/sdk/src/commonMain/kotlin/com/basecamp/fizzy/generated/Metadata.kt Adds operation config for UpdateMyTimezone.
kotlin/generator/src/main/kotlin/com/basecamp/fizzy/generator/Config.kt Adds Kotlin generator overrides for service grouping + method naming.
kotlin/conformance/src/main/kotlin/com/basecamp/fizzy/conformance/Main.kt Adds conformance dispatcher case for UpdateMyTimezone.
go/pkg/generated/types.gen.go Adds generated Go request content type for timezone update.
go/pkg/generated/aliases.go Adds Go type alias for UpdateMyTimezoneRequest.
go/pkg/fizzy/url-routes.json Updates URL route inventory for account-scoped pins + timezone paths.
go/pkg/fizzy/operations_registry.go Registers UpdateMyTimezone operation handler.
go/pkg/fizzy/identity_service.go Adds Go IdentityService.UpdateTimezone implementation.
go/pkg/fizzy/identity_service_test.go Adds Go tests for pins and timezone account-scoped paths.
go/pkg/fizzy/api-provenance.json Bumps Go package provenance revision/date.
go/cmd/generate-services/main.go Adds Go generator overrides for UpdateMyTimezone service/method naming.
go.work.sum Updates Go workspace sums after regeneration/dependency resolution.
conformance/tests/request-shapes.json Adds request-shape conformance case for timezone_name field.
conformance/tests/paths.json Updates pins path conformance and adds timezone path conformance case.
conformance/runner/typescript/runner.test.ts Adds TS conformance dispatch for UpdateMyTimezone.
conformance/runner/ruby/runner.rb Updates Ruby conformance dispatch for account-scoped pins + timezone op.
behavior-model.json Adds operation behavior metadata for UpdateMyTimezone.
AGENTS.md Updates API surface inventory to 112 ops and includes UpdateMyTimezone.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

1 issue found

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

Re-trigger cubic

Comment thread kotlin/sdk/src/commonTest/kotlin/com/basecamp/fizzy/FizzyTest.kt Outdated
@robzolkos robzolkos force-pushed the upstream-fizzy-scope-20260531 branch from 19e06df to b6919bf Compare June 3, 2026 17:08
Copilot AI review requested due to automatic review settings June 3, 2026 17:18
@robzolkos
Copy link
Copy Markdown
Collaborator Author

Fixed — cubic found the Kotlin coroutine tests were using runBlocking; they now use runTest with mock-client timeouts disabled for deterministic test execution.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 27 out of 46 changed files in this pull request and generated no new comments.

Copy link
Copy Markdown

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

3 issues found across 46 files

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

Re-trigger cubic

Comment thread kotlin/conformance/src/main/kotlin/com/basecamp/fizzy/conformance/Main.kt Outdated
Comment thread go/pkg/fizzy/identity_service.go Outdated
Comment thread go/pkg/fizzy/identity_service.go Outdated
@robzolkos
Copy link
Copy Markdown
Collaborator Author

Fixed — cubic found three follow-ups: Kotlin conformance now uses the nullable str helper, Go exposes UpdateMyTimezone, and the generated Go method renders its path from the generated route table.

@robzolkos robzolkos merged commit b51cff8 into basecamp:main Jun 3, 2026
28 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants