Repository navigation
Conversation
added 8 commits
August 28, 2026 08:42
Adds a GitHub Actions workflow that archives the Signal scheme without code signing and packages an unsigned .ipa artifact, intended to be re-signed off-CI with a personal certificate before installing.
Adds a centralized ForkFlags config and suppresses our own outgoing read/viewed receipts and typing indicators while still receiving and displaying others'. Read/viewed receipts are gated at the single ReceiptSender.enqueueReceipt chokepoint (delivery receipts and the incoming/display paths are untouched); typing is gated at the outgoing send site only, so incoming typing is still shown.
When a disappearing message's timer fires, keep the row and its content instead of deleting it. markAsExpiredAndRetain clears expiresInSeconds and expiresAt (so the finder never re-selects it and the timer can't re-arm) while keeping expireStartedAt > 0 as an isMarkedExpired marker -- a state that's otherwise unreachable, so no schema change is needed. The conversation view renders such messages normally with a grey label.
When someone deletes a message for everyone (including a group admin), retain the original body, attachments, quote, and reactions instead of wiping them, recording only the wasRemotelyDeleted flag. Such retained messages render normally in the conversation and chat list with a grey 'deleted' annotation, and stay replyable/forwardable -- the component and item-view accessors treat a retained message as non-deleted, keyed off the annotation label the state builder sets after a tx-based content check.
Make view-once completion a no-op so an incoming view-once message is never consumed: its attachment stays intact and the message remains re-openable indefinitely. This single chokepoint covers the viewer, the linked-device transcript sync, and the auto-complete path. The view-once viewer gains a save button that writes the retained image or video to the photo library.
Never treat the build as expired, removing the 'version expired' warning and the associated send block.
Optionally keep processing incoming messages from blocked senders so they are still stored and shown, instead of dropping them at the receive gate.
Switch the boolean fork toggles from let to nonisolated(unsafe) var so a settings UI can flip them at runtime and so the -warnings-as-errors build never sees a constant condition. Matches the codebase's existing nonisolated(unsafe) convention.
ghost
deleted the
fork-port
branch
August 28, 2026 00:22
This pull request was closed.
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.
Contributor checklist
Administrative:
Commits and testing:
Description