Sync SDK with latest upstream Fizzy API changes#94
Conversation
There was a problem hiding this comment.
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
ListPinsto 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.
There was a problem hiding this comment.
1 issue found
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
19e06df to
b6919bf
Compare
|
Fixed — cubic found the Kotlin coroutine tests were using runBlocking; they now use runTest with mock-client timeouts disabled for deterministic test execution. |
There was a problem hiding this comment.
3 issues found across 46 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
|
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. |
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
myendpoints and update endpoints returning resource bodies.What changed
Smithy / API model
abd5956(2026-04-14) to08395fa(2026-06-01).UpdateMyTimezone:PATCH /{accountId}/my/timezone.jsontimezone_name204 No ContentListPinsfrom a root/my/pins.jsonendpoint to the account-scoped path:GET /{accountId}/my/pins.jsonUpdateBoardreturnsBoardUpdateColumnreturnsColumnUpdateCommentreturnsCommentUpdateUserreturnsUserMoveCardreturnsCardGenerated artifacts / SDKs
Regenerated derived artifacts and client code:
openapi.jsonbehavior-model.jsonTests and conformance
ListPinspathUpdateMyTimezonepath and request body shapeNotes for reviewers
PATCH; Rails acceptsPATCHfor these resource updates. The upstream docs usePUTwording for several update endpoints, but the current generated SDK contract remains PATCH-based.UpdateBoardhas an upstream conditional204 No Contentcase when the caller removes their own board access. The SDK already models the normal200 Boardresponse, but does not currently model the conditional empty response separately.Validation
make checkpassed locally.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
/{accountId}/my/timezone.jsonwithtimezone_name(204 No Content; idempotent with retries)./{accountId}/my/pins.json(was/my/pins.json).api_path) and formats generated code.Migration
pins.list(account_id:)pins.list(accountId:)accountIdin the method call; Kotlin/TypeScript use account‑scoped clients.Written for commit a2c6056. Summary will update on new commits.