Add contact avatar operations - #229
Merged
Merged
Conversation
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The modeled delete response status and validation documentation are inconsistent with the new behavior.
Review effort: Balanced
Findings: 1
Open (3)
What changed in this PR
Adds contact avatar update/delete operations across the Smithy contract and all five shipped SDKs, with unit and conformance coverage.
Changes:
- Models avatar update/delete routes and payloads.
- Regenerates all SDK clients and metadata.
- Adds cross-SDK tests and conformance dispatch.
[!TIP]
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or rungh pr ready --undo.
Click "Ready for review" or rungh pr readyto reengage.
| File | Description |
|---|---|
spec/hey.smithy |
Defines avatar operations and models. |
spec/shape-fingerprint.json |
Records the new response shape. |
spec/route-coverage.json |
Adds route coverage metadata. |
openapi.json |
Publishes the generated API contract. |
behavior-model.json |
Adds retry/idempotency behavior. |
go/pkg/generated/client.gen.go |
Generates Go models and methods. |
go/pkg/hey/contacts.go |
Adds Go convenience wrappers. |
go/pkg/hey/services_test.go |
Tests Go avatar behavior. |
go/pkg/hey/url-routes.json |
Registers Go route metadata. |
rust/hey-sdk/src/generated/types.rs |
Generates Rust models. |
rust/hey-sdk/src/generated/services/contacts.rs |
Generates Rust service methods. |
rust/hey-sdk/src/generated/routes.rs |
Generates Rust routes. |
rust/hey-sdk/tests/services_contacts.rs |
Tests Rust avatar behavior. |
rust/hey-sdk/PARITY.md |
Updates parity counts. |
typescript/src/generated/schema.ts |
Generates TypeScript schema types. |
typescript/src/generated/operations.ts |
Generates TypeScript operations. |
typescript/src/generated/coverage.json |
Registers generated coverage. |
typescript/tests/client.test.ts |
Tests TypeScript requests. |
typescript/README.md |
Updates operation count. |
typescript/VALIDATION.md |
Updates validation totals. |
kotlin/sdk/src/commonMain/kotlin/com/basecamp/hey/generated/Routes.kt |
Generates Kotlin routes. |
kotlin/sdk/src/commonMain/kotlin/com/basecamp/hey/generated/services/ContactsService.kt |
Generates Kotlin methods. |
kotlin/sdk/src/commonMain/kotlin/com/basecamp/hey/generated/models/ContactAvatarPayload.kt |
Adds Kotlin payload model. |
kotlin/sdk/src/commonMain/kotlin/com/basecamp/hey/generated/models/ContactAvatarRequestContent.kt |
Adds Kotlin request model. |
kotlin/sdk/src/commonMain/kotlin/com/basecamp/hey/generated/models/UpdateContactAvatarResponseContent.kt |
Adds Kotlin response alias. |
kotlin/sdk/src/commonTest/kotlin/com/basecamp/hey/ContactsServiceTest.kt |
Tests Kotlin behavior. |
kotlin/sdk/src/commonTest/kotlin/com/basecamp/hey/RouteTest.kt |
Updates Kotlin route count. |
swift/Sources/Hey/Generated/Routes.swift |
Generates Swift routes. |
swift/Sources/Hey/Generated/Services/ContactsService.swift |
Generates Swift methods. |
swift/Sources/Hey/Generated/Models/ContactAvatarPayload.swift |
Adds Swift payload model. |
swift/Sources/Hey/Generated/Models/ContactAvatarRequestContent.swift |
Adds Swift request model. |
swift/Sources/Hey/Generated/Models/UpdateContactAvatarResponseContent.swift |
Adds Swift response alias. |
swift/Tests/HeyTests/ContactsTests.swift |
Tests Swift behavior. |
swift/Tests/HeyTests/RouteTests.swift |
Updates Swift route count. |
conformance/tests/paths.json |
Adds shared path fixtures. |
conformance/runner/go/main.go |
Dispatches Go fixtures. |
conformance/runner/rust/src/operations.rs |
Dispatches Rust fixtures. |
conformance/runner/kotlin/src/main/kotlin/com/basecamp/hey/conformance/Operations.kt |
Dispatches Kotlin fixtures. |
conformance/runner/swift/Sources/ConformanceRunner/Operations.swift |
Dispatches Swift fixtures. |
conformance/runner/typescript/fixture-inventory.json |
Registers TypeScript fixtures. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
robzolkos
force-pushed
the
feat/contact-avatars
branch
3 times, most recently
from
October 2, 2026 22:09
9f45904 to
5de99fd
Compare
robzolkos
force-pushed
the
feat/contact-avatars
branch
from
October 2, 2026 22:24
5de99fd to
899e38e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.




What changed
UpdateContactAvatarandDeleteContactAvatarin SmithyContacts.UpdateAvatarandContacts.DeleteAvatarwrappersThe update operation takes the signed blob ID returned by
Attachments.Upload/CreateDirectUpload, and returns the updated contact.Dependency
Requires basecamp/haystack#8895, which adds the JSON response contract while preserving the browser form flow.
Validation
make checkSummary by cubic
Adds
UpdateContactAvatarandDeleteContactAvatarto the Smithy contract and regenerates the Go, Rust, TypeScript, Kotlin, and Swift SDKs with shared conformance coverage.New Features
UpdateContactAvatarPUTs the signed blob ID returned byAttachments.Upload/CreateDirectUploadand returns the updated contact.DeleteContactAvatarremoves the uploaded avatar and restores the default avatar, responding with 204.Contactsservice gainsUpdateAvatar/DeleteAvatarwrappers with instrumentation and validation error mapping.Dependencies
Written for commit 899e38e. Summary will update on new commits.