@@ -359,7 +359,12 @@ struct LogTableView: View {
359359 sorted = enumerated.sorted { a, b in
360360 let aVal = a.element[col] ?? .null
361361 let bVal = b.element[col] ?? .null
362− return asc ? aVal < bVal : bVal < aVal
362+ // `sorted(by:)` is not guaranteed stable, so break ties on
363+ // the original index to keep equal-keyed rows in a fixed
364+ // order across re-sorts (otherwise low-cardinality columns
365+ // like `level`/`status` would reshuffle on every refresh).
366+ if aVal != bVal { return asc ? aVal < bVal : bVal < aVal }
367+ return a.offset < b.offset
363368 }
364369 } else {
365370 sorted = enumerated
@@ -403,7 +408,9 @@ struct LogTableView: View {
403408 sorted = enumerated.sorted { a, b in
404409 let aVal = a.element[sortColumn] ?? .null
405410 let bVal = b.element[sortColumn] ?? .null
406− return sortAscending ? aVal < bVal : bVal < aVal
411+ // Stable tiebreak on original index — see the async path above.
412+ if aVal != bVal { return sortAscending ? aVal < bVal : bVal < aVal }
413+ return a.offset < b.offset
407414 }
408415 } else {
409416 sorted = enumerated