Turtle
3c08ca3606
perf(tui): open the /resume selector from one batch projection
...
The selector called readSession per listed session under an unbounded
Promise.all: each call re-listed the whole persistence store (O(N^2)
listings), decompressed and parsed the complete log, replay-validated
every event, and deep-cloned it up to three times, only to derive one
row's title, activity time, turn label, route, and goal phase. On a
real 185-session / 87 MB store the selector took tens of seconds.
Candidate rows now come from one projectSessions batch over borrowed
logs; a rejected projection degrades to the same disabled unreadable
row. Preflight still replay-validates the single chosen session through
readSession, which is already live-preferred, so its redundant live
shortcut is gone.
2026-07-31 16:09:17 +08:00
..
2026-07-25 16:43:07 +08:00
2026-07-25 16:43:07 +08:00
2026-07-25 16:43:07 +08:00
2026-07-22 17:50:45 +08:00
2026-07-22 17:50:45 +08:00
2026-07-22 17:50:45 +08:00
2026-07-27 17:38:42 +08:00
2026-07-27 17:38:42 +08:00
2026-07-27 17:38:42 +08:00
2026-07-25 15:11:17 +08:00
2026-07-25 15:11:17 +08:00
2026-07-25 15:11:17 +08:00
2026-07-24 22:38:50 +08:00
2026-07-24 22:38:50 +08:00
2026-07-24 22:38:50 +08:00
2026-07-27 23:41:27 +08:00
2026-07-27 23:41:27 +08:00
2026-07-27 23:41:27 +08:00
2026-07-27 18:53:29 +08:00
2026-07-27 18:53:29 +08:00
2026-07-27 18:53:29 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-25 16:05:05 +08:00
2026-07-25 16:05:05 +08:00
2026-07-25 16:05:05 +08:00
2026-07-24 12:21:10 +08:00
2026-07-24 12:21:10 +08:00
2026-07-24 12:21:10 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-30 21:14:03 +08:00
2026-07-30 21:14:03 +08:00
2026-07-30 21:14:03 +08:00
2026-07-27 21:11:15 +08:00
2026-07-27 21:11:15 +08:00
2026-07-27 21:11:15 +08:00
2026-07-27 15:46:40 +08:00
2026-07-27 15:46:40 +08:00
2026-07-27 15:46:40 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-27 18:55:13 +08:00
2026-07-28 22:16:43 +08:00
2026-07-28 22:16:43 +08:00
2026-07-28 22:16:43 +08:00
2026-07-30 18:08:22 +08:00
2026-07-30 18:08:22 +08:00
2026-07-30 18:08:22 +08:00
2026-07-28 12:36:29 +08:00
2026-07-28 12:36:29 +08:00
2026-07-28 12:36:29 +08:00
2026-07-29 18:28:47 +08:00
2026-07-29 18:28:47 +08:00
2026-07-29 18:28:47 +08:00
2026-07-29 00:45:52 +08:00
2026-07-29 00:45:52 +08:00
2026-07-29 00:45:52 +08:00
2026-07-29 21:03:40 +08:00
2026-07-29 21:03:40 +08:00
2026-07-29 21:03:40 +08:00
2026-07-30 14:42:39 +08:00
2026-07-30 14:42:39 +08:00
2026-07-30 14:42:39 +08:00
2026-07-30 18:35:20 +08:00
2026-07-30 18:35:20 +08:00
2026-07-30 18:35:20 +08:00
2026-07-30 17:26:44 +08:00
2026-07-30 17:26:44 +08:00
2026-07-30 17:26:44 +08:00
2026-07-31 15:11:24 +08:00
2026-07-31 15:11:24 +08:00
2026-07-31 15:11:24 +08:00
2026-07-30 14:42:39 +08:00
2026-07-30 14:42:39 +08:00
2026-07-30 14:42:39 +08:00
2026-07-31 13:13:50 +08:00
2026-07-31 13:13:50 +08:00
2026-07-31 13:13:50 +08:00
2026-07-31 16:09:17 +08:00
2026-07-31 16:09:17 +08:00
2026-07-31 16:09:17 +08:00