chore(chat): scaffold roster summary, group picture, and participation rules - #769
Merged
Merged
Conversation
…n rules flipcash2-protobuf-api 797052dd -> 35f99814 renames Blob.AccessContext.profile to user_profile, adds a chat_profile scope arm, and adds Metadata.picture, roster_summary, and rules to chat.v1. Carry the rename through BlobAccessContext and wire the new Metadata fields onto Conversation: rosterSummary (defaulting to memberCount/version 0), picture, and the new ConversationRules/ConversationListenerRule/ConversationSpeakerRule types in ConversationRules.swift, mirroring the MinimumBalanceRequirement currency-drop behavior already used for FiatAmount elsewhere in the model layer. BlobAccessContext gains .chatProfile for reading a group chat current picture, but nothing constructs it yet -- no call site needs a chat-scoped blob URL today. The SQLite cache (Database+Conversations.swift) also does not persist picture/rosterSummary/rules yet, so a relaunch drops them until the next fetch; both are follow-up work once there is a consumer, not scaffolding gaps to paper over here.
0.6.0 is unpublished until flipcash2-client-protocol's sync PR merges and publish.yml runs, so the exact: requirement has no tag to resolve until then. The scaffold commit ahead of this builds against the local checkout through FLIPCASH_PROTO_LOCAL, which CI never sees.
Conflict in FlipcashAPI/Package.swift. #771 moved the contract pins out of two flat `.package(url:exact:)` lines into ContractPackage.version; this branch had bumped flipcash2 on the old lines. Resolved to #771's structure carrying the bump, so selective FLIPCASH_PROTO_LOCAL_PACKAGES behaviour is unchanged and ocp stays at 0.3.0.
bmc08gt
added a commit
that referenced
this pull request
Sep 15, 2026
… pins (#778) #764 bumped ocp to 0.4.0 and #769 bumped flipcash2 to 0.6.0 without regenerating the workspace's Package.resolved, so it still recorded 0.3.0 and 0.5.0. Xcode Cloud archives with automatic dependency resolution disabled, which turns that mismatch into a hard error rather than a silent re-resolve: "Deploy Flipcash" build #542 failed with "an out-of-date resolved file was detected". The vector gate builds the SPM schemes with resolution enabled and never opens Code.xcodeproj, so it stayed green. Regenerated with xcodebuild -resolvePackageDependencies. Only the two contract entries and originHash move.
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.
Blocked on code-payments/flipcash2-client-protocol#12. Draft until
0.6.0is published, because theexact:requirement inFlipcashAPI/Package.swifthas no tag to resolve until then. CI never sees the local override, sinceFLIPCASH_PROTO_LOCALis a shell variable.Why
flipcash2-protobuf-apirenamed three fields in place and added group-chat metadata across #93–#98. Nothing was renumbered, so the wire format is unchanged, butAccessContext.profilebecameuser_profileand thescopeoneof gained a third arm, which breaks every exhaustiveswitchover it.What changed
Flipcash/Core/Controllers/ProfileAvatarStore.swift.profile→.userProfileat its one call siteFlipcashCore/.../Services/BlobService.swift.chatProfile(ConversationID)scopeFlipcashCore/.../Conversation/Conversation.swiftpicture,rosterSummary,ruleson the model and its proto initFlipcashCore/.../Conversation/ConversationRules.swiftConversationRosterSummary,ConversationRules, and the rule enumsFlipcashCore/Tests/.../ConversationModelMappingTests.swiftWorth a reviewer's attention
Database+Conversations.swiftdoes not persist the three new fields. They map off the wire and live on the in-memory model, so after a relaunch they read as unset until the next network fetch. Persisting them needs new columns, aSQLiteVersionbump, and a storage shape forRules, which is more than scaffolding should decide on its own — but it means a reviewer should not read this as "group pictures and rules now work offline".ConversationListenerRuleandConversationSpeakerRuleare kept as two parallel enums, mirroring the two parallel proto messages. Android collapsed them into one type (code-payments/code-android-app#1464), so the platforms read differently here; worth settling before anything consumes it.MinimumBalanceRequirementdrops a requirement whose currency it cannot recognize rather than failing the whole metadata mapping, so an unknown currency costs one rule instead of the conversation.Nothing in the app reads
picture,rosterSummary,rules, or builds a.chatProfileaccess context yet. This is scaffolding to keep the target compiling against the new contract, not a behaviour change.