Skip to content

Commit 77167df

Browse files
committed
Fail fast on write errors to keep offline sync consistent
https://github.com/pH-7/GoodJsCode?tab=readme-ov-file#fail-fast-principle
1 parent 58bfc08 commit 77167df

File tree

2 files changed

+19
-22
lines changed

2 files changed

+19
-22
lines changed

CortexOSApp/Shared/Services/CortexEngine.swift

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ final class CortexEngine: ObservableObject {
154154
}
155155
} catch {
156156
isConnected = false
157-
// Fall back to cached snapshot — app still works offline
157+
// Fall back to locally generated snapshot — app still works offline
158158
snapshot = await OfflineStore.shared.snapshot()
159159
if let snapshot { await SnapshotCache.shared.save(snapshot) }
160160
errorMessage = nil
@@ -202,19 +202,8 @@ final class CortexEngine: ObservableObject {
202202
errorMessage = nil
203203
return true
204204
} catch {
205-
_ = await OfflineStore.shared.recordDecision(request)
206-
// Queue for offline sync — decisions always save
207-
await CaptureQueue.shared.enqueueDecision(
208-
decision: request.decision,
209-
reason: request.reason,
210-
project: request.project,
211-
assumptions: request.assumptions
212-
)
213-
if snapshot != nil {
214-
await sync()
215-
}
216-
errorMessage = nil
217-
return true
205+
errorMessage = error.localizedDescription
206+
return false
218207
}
219208
}
220209

@@ -241,13 +230,8 @@ final class CortexEngine: ObservableObject {
241230
errorMessage = nil
242231
return true
243232
} catch {
244-
let request = SummaryIngestRequest(content: content, source: source, tags: tags)
245-
lastIngestResult = await OfflineStore.shared.ingestSummary(request)
246-
if snapshot != nil {
247-
await sync()
248-
}
249-
errorMessage = nil
250-
return true
233+
errorMessage = error.localizedDescription
234+
return false
251235
}
252236
}
253237
}

CortexOSApp/Shared/Services/OfflineStore.swift

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,20 @@ actor OfflineStore {
168168

169169
func recordOutcome(_ request: OutcomeCreateRequest) -> SyncDecision? {
170170
guard let idx = decisions.firstIndex(where: { $0.id == request.decisionId }) else {
171-
return nil
171+
let synthesized = SyncDecision(
172+
id: request.decisionId,
173+
decision: "Decision",
174+
reason: "",
175+
project: "",
176+
assumptions: [],
177+
contextTags: [],
178+
createdAt: iso.string(from: Date()),
179+
outcome: request.outcome,
180+
impactScore: request.impactScore
181+
)
182+
decisions.insert(synthesized, at: 0)
183+
persistDecisions()
184+
return synthesized
172185
}
173186

174187
let existing = decisions[idx]

0 commit comments

Comments
 (0)