Repository navigation
chore(deps): move to flipcash2 contract dd5e92db - #1504
Merged
Merged
Conversation
flipcash2 replaced EmojiReaction.reacted_by_self (bool) with a self_reactor Reactor message, so a reaction now carries who reacted and when instead of just a flag. Reactor also gains a version field. Update the domain model, both proto-to-domain mapping directions, Room serialization (EmojiReactionSerialized/ReactorSerialized), and the local reaction-overlay logic in EventStreamDelegate, which has to derive self status itself since ReactionUpdate carries no self flag: it compares the update actor to the signed-in user and uses the ADDED/REMOVED action to set or clear self_reactor.
Threads the flipcash2 ViewMode (FULL / FULL_OR_REDACTED / REDACTED) through GetChat, GetMessage(s), and GetDelta so a caller can ask for redacted content instead of full and the response can report a message as ChatMessage.redacted. Adds MuteChat/UnmuteChat as a new pair of RPCs on Chat: MuteState (Until/Forever) and ViewerState (per-caller chat state, currently just mute) get domain models, ChatMetadata and MetadataUpdate carry the new ViewerStateChanged case, ChatController/ChatRepository gain muteChat/ unmuteChat, and MuteChatError/UnmuteChatError join the error taxonomy. Two things are deliberately left as scaffolding for the muting feature itself, not built here: - EventStreamDelegate acknowledges ViewerStateChanged without persisting it — there is no chat_metadata column for viewer state yet, and adding one is a Room migration that belongs with that feature's storage work. - PushChatMetadata.muted is threaded through from the proto so it reaches NotificationPayload, but nothing yet uses it to suppress a notification.
flipcash2 adds a standalone Reporting service (Report RPC) for filing a report against a user, chat, message, or blob, with an optional free-form description. Adds the full Api/Service/Repository/Controller quad following the existing per-domain layering (see ResolverApi/ResolverService for the same generated-class-name-collision pattern via an import alias), a ReportTarget domain sealed interface mirroring the request's oneof, placed flat under models/ like the existing ResolveIdentifier rather than in a new subpackage, and ReportError in the shared error taxonomy. Wired into FlipcashModule alongside the other repositories. No caller wires this up yet; that is UI work for a later change.
bmc08gt
marked this pull request as ready for review
September 18, 2026 22:56
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.
Moves Android onto flipcash2 contract
dd5e92dband scaffolds the seams it opens.Blocked on code-payments/flipcash2-client-protocol#16. This branch pins
flipcash2-client-protocol = "0.10.0", which is not published yet, so CI cannot resolve it — expectcom.flipcash:flipcash2-client-protocol:0.10.0 FAILEDuntil that PR merges andpublish.ymlruns. Draft until then. The work here was built against the client checkout throughprotoLocalRoot/protoLocalPackages, which CI never sees.The required migration
EmojiReaction.reacted_by_self(bool) is replaced in place byself_reactor(Reactor). Android had call sites across seven files; all of them now read the reactor, and a repo-wide grep forreactedBySelfcomes back empty.Reactorgained aversion, which is the reactor list's sort key now — descending, newest first — soreacted_tsis display-only.The watermark rule matters here: an emoji's version has to be kept after its count reaches zero, or a delayed lower-versioned
ADDEDresurrects an emptied emoji.Scaffolded, not implemented
Three commits ahead of the pin bump, in the order the contract makes sense in:
ViewModeplumbing on the read RPCs,MuteChat/UnmuteChatthrough the service and controller layers, and theViewerState/MuteStatedomain types.ReportTarget,ReportError, and DI wiring for the newflipcash.reporting.v1package.What is deliberately absent, because it is feature work rather than contract work: there is no mute-duration picker, no countdown for a lapsing timed mute, and no notification suppression on the new
ChatMetadata.mutedpush flag.ViewerStateChangedis handled inEventStreamDelegateas a documented no-op —chat_metadatahas no column for it, so persisting viewer state needs a Room schema migration that does not belong in a contract sync.Eight targeted compile tasks pass against the local override.