Merge main hotfixes into dev for 1.1.0 release#522
Conversation
- Update Quickname detail copy from 'You always start anonymous' to 'You control how you show up' - Simplify join event message to always say 'You joined as [Name]' instead of 'You joined anonymously as [Name]'
The default iOS soft limit of 256 file descriptors is insufficient for users with ~50 conversations, as each XMTP conversation requires database connections and sockets. Raises the soft limit to 512 at app launch before any XMTP clients are created. Also bumps build number to 3 for hotfix resubmission.
The 1.0.6 train is closed on App Store Connect. Bumps marketing version to 1.0.7 and resets build number to 1 for the hotfix submission.
- Add maxAwakePendingInvites (default 3) to limit how many pending invite XMTP clients are active simultaneously. Previously, all pending invite inboxes were force-woken on app launch regardless of the maxAwakeInboxes limit, which could result in 50+ active clients for users who scanned many invite codes without approval. - Detect stale pending invites older than 7 days on app launch. Automatic deletion is temporarily disabled — stale invites are logged but not removed, pending validation via the debug view. - Only consider invites with <= 1 conversation member as deletable. Invites where the user has actually been added to the group (more than 1 member) are never deleted, preventing accidental data loss. Additionally, inboxes with any other conversations are preserved. - Update sleep() to allow sleeping over-cap pending invite inboxes while still protecting inboxes under the cap. - Update attemptWake() to enforce the pending invite cap when both the pending cap and overall capacity are exceeded. - Add PendingInviteDebugView accessible from Settings (temporarily visible in production) showing all pending invites with creation date, wait duration, member count, and client/inbox IDs. Expired invites (> 7 days) are highlighted in a separate section with a hold-to-delete button that fully cleans up the inbox record, keychain identity, and lifecycle manager tracking. - Inbox and keychain deletion failures are caught individually so one failure does not prevent cleanup of remaining invites. - Add PendingInviteDetail model (with memberCount) and repository methods for the debug view and stale invite queries. - Add 17 new tests: 6 for pending invite cap behavior, 4 for stale expiry detection, and 7 for deleteExpiredPendingInvites covering basic deletion, multi-member protection, other-conversations protection, recent invite preservation, lifecycle manager cleanup, partial failure resilience, and empty state.
|
Claude finished @yewreeka's task —— View job Code Review Complete ✅Tasks
SummaryThis PR successfully merges main hotfixes into dev. The two post-merge commits ( Detailed Review✅ Code Quality & Best PracticesPositive observations:
String interpolation fix (53f7708): // Before (broken):
Log.debug("Skipped \\((clientIdsToKeep.count\)) inbox(es)...")
// After (fixed):
Log.debug("Skipped \(clientIdsToKeep.count) inbox(es)...")This correctly fixes the escaped backslash issue that would have printed literal text instead of the count value. ✅ Bug FixesDuplicate function call removal (7ed6d32):
Both issues were properly identified by Macroscope and correctly resolved. ✅ Test CoverageThe
Test suite comprehensiveness:
✅ Performance Considerations
✅ Security ConcernsSQLite files (
Logging considerations:
💡 Suggestions (Optional)
🎯 Merge Recommendation✅ APPROVED - This PR is ready to merge after addressing the security verification: Before merging:
Strengths:
Risk level: Low - changes are minimal post-merge fixes with good test coverage. |
Incorporates hotfixes from main: - Removed 'anonymous' terminology from UI copy - Raised FD soft limit to 512 Kept dev's original values: - 24-hour stalePendingInviteInterval (not 7 days from hotfix) - Log.debug levels for pending invite operations (not Log.info from hotfix) - Asset renewal manager - Pending invites in debug view (not settings) - Full deletion logic for stale pending invites
14e25db to
671fe5f
Compare
Incorporates hotfixes from main branch before promoting release 1.1.0.
Changes from main hotfixes:
Kept from dev (unchanged):
This PR must be merged before running
make promote-releaseto enable fast-forward merge from dev to main.Note
Merge main hotfixes into dev for 1.1.0 and adjust
ConvosCoreTests.DeleteExpiredPendingInvitesTests.testSkipsRecentInvitesto seedcreatedAtas 2 hours agoUpdate the test to use a 2-hour threshold for recent invites and add redacted QA SQLite assets in qa/cxdb.
📍Where to Start
Start with the test change in DeleteExpiredPendingInvitesTests.swift.
Macroscope summarized a74424e.