Transcript Incremental Projection

Nucleic-Session: 0FFD007B-0696-4517-9429-129C7B0FD5AC
Co-authored-by: Nucleic <[email protected]>
This commit is contained in:
2026-07-06 18:50:43 -07:00
co-authored by Nucleic
parent ac965e3c6e
commit bbe193134a
@@ -11,9 +11,15 @@ struct SessionsView: View {
private var grouped: [(title: String, rows: [WireSessionSummary])] {
let pool = (showArchived ? store.sessions : store.liveSessions)
.sorted(by: StatusStyle.attentionThenRecency)
let needs = pool.filter { $0.status.needsYou($0.disposition) }
let running = pool.filter { $0.status == .running || $0.status == .provisioning || $0.status == .idle }
let done = pool.filter { !needs.contains($0) && !running.contains($0) }
// One pass, first bucket wins — the old `done = pool.filter { !needs.contains($0) … }`
// ran O(rows²) full-summary equality scans on every body evaluation.
var needs: [WireSessionSummary] = [], running: [WireSessionSummary] = [], done: [WireSessionSummary] = []
for summary in pool {
if summary.status.needsYou(summary.disposition) { needs.append(summary) }
else if summary.status == .running || summary.status == .provisioning || summary.status == .idle {
running.append(summary)
} else { done.append(summary) }
}
return [("Needs you", needs), ("Running", running), ("Done", done)].filter { !$0.rows.isEmpty }
}