Repository navigation
Apple shell: carry every server request through one HTTP adapter - #65
Merged
Merged
Conversation
The DTOs mirror the core's new wire: one serverRequest effect in place of the six request effects, one serverResponse command in place of the seven settles, newDeviceId on deleteListeningData / deleteAccount (a fresh UUID made when the user asks) and the optional platform on requestSignInLink. ServerCarrier replaces the typed SyncApi client and its response types: it sends any request to the sync-server base URL as described and returns the serverResponse that settles it, status 0 with no sync server or on a network error, timeout or cancellation. AppStore carries every request, the sign-out revoke included, and dispatches the settle on the main actor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 3, 2026
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.
Summary
The Apple shell (iOS and macOS, through
CascadeShared) now carries every sync-server request on one code path. The core decides what each request means.ServerCarrier.sendreturns status 0 in these cases: no sync server configured, a bad URL, a non-HTTP response, or a thrown error (network, the 15 s timeout, cancellation).Dto.swiftmirrors the core's wire:Effect.serverRequest(ServerRequest)andCommand.serverResponse(id:status:body:).newDeviceIdondeleteListeningData/deleteAccount.platformonrequestSignInLink.Evidence
cargo test: every suite passes. The core is unchanged on this branch.effect.rs,command.rsandserver.rs.Merge Danger
Door: two-way
Revert the commits to bring back the typed client.
Blast Radius: account-sync
If it is wrong, sign-in, listening sync and the delete actions on iOS and macOS break. Playback, timers and the watch app don't touch this path.
Unaddressed findings
Standards
platformonrequestSignInLinkis never sent by this shell. Kept. Issue Apple shell: carry every server request through one HTTP adapter #61 asks for the DTO to carry it, and it matches the core's wire. Only the Windows shell needs a link hand-off.UUID().uuidStringappears inline in both delete buttons. Kept. The issue says the fresh UUID is "made when the user asks", and a helper for one expression adds little.Spec
platformwith the sign-in link request. Intended: "behave as before on this platform". Apple handles the link through its universal link.Content-Type: application/jsonis now set only when there is a body. Kept. The server reads JSON only on routes that take a body (axumJsonextractor), and bodiless DELETEs and logout don't check the header.Closes #61
🤖 Generated with Claude Code