crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

commit 681c1167a501aa2f35b856afec48480d776db43e
parent dd54c58cbc1993836b39ae625dd1c265d63dc5f1
Author: Michael Camilleri <[email protected]>
Date:   Mon,  1 Jun 2026 17:06:29 +0900

Reduce log noise regarding settled journals

Diffstat:
MCrossmate/Sync/SyncEngine.swift | 8++++++++
1 file changed, 8 insertions(+), 0 deletions(-)

diff --git a/Crossmate/Sync/SyncEngine.swift b/Crossmate/Sync/SyncEngine.swift @@ -1447,6 +1447,11 @@ actor SyncEngine { for failure in event.failedRecordSaves { let name = failure.record.recordID.recordName let err = failure.error as NSError + // A settled failure is one CloudKit rejected but we treat as + // success (the durable record already exists), so it skips the + // verbose "failed to save" log below — that line reads as an + // error and is pure noise next to the "settled" message. + var settled = false if err.domain == CKErrorDomain, err.code == CKError.zoneNotFound.rawValue { orphaned.insert(failure.record.recordID.zoneID) @@ -1461,6 +1466,7 @@ actor SyncEngine { // so this is success — drop the pending change so the // immutable record doesn't retry-loop forever. settledDecisions.insert(failure.record.recordID) + settled = true messages.append("send: decision \(name) already present — settled") } else if name.hasPrefix("journal-"), err.domain == CKErrorDomain, @@ -1478,12 +1484,14 @@ actor SyncEngine { // sweep and `Pending Changes` never drains. settledJournals.insert(failure.record.recordID) self.markJournalUploaded(gameID: gid, in: ctx) + settled = true messages.append("send: journal \(name) already present — settled") } else if self.recoverServerChangedSave(failure.error, failedRecordName: name, in: ctx) { messages.append( "send: recovered stale system fields for \(name) from CloudKit server record" ) } + guard !settled else { continue } let userInfo = err.userInfo .map { "\($0.key)=\($0.value)" } .joined(separator: " | ")