CPLAT-11790: show LIVE state in ccx search results and resume from a hit - #162
Merged
Merged
Conversation
Cross-session search found the right session and then dead-ended. A result row showed project name and age, Enter jumped to the matching message, and that was it — no way to get back to working in that session, and no way to tell whether it was still running. Show [LIVE]/[HERE] on result rows and bind the Actions resume key (r) to resumeSession on the hit. resumeSession already branches the way this needs: attach to the tmux pane when live, otherwise revive the transcript with `claude --resume` in a tmux window. It was simply not reachable from search — only from the session list. Live state is read from the session store, not from the search result. The result carries a snapshot from when the search ran, and a session can start or exit while the results sit on screen; since the badge is what the user makes the jump-or-revive decision from, a stale one is worse than none. The rows are also rebuilt on tick so a session coming up or going down is reflected while the modal is open, preserving the cursor so the refresh does not move the selection out from under the user. The resume case is ordered after the j/k navigation cases. Go's switch takes the first match, so a user who rebinds resume to a navigation key would otherwise lose the ability to scroll the results. Enter keeps its existing meaning (jump to the message); the two are different intents and both are worth having.
|
| CVE | Package | Version | Fix |
|---|---|---|---|
| CVE-2026-39824 | golang.org/x/sys |
v0.42.0 |
0.44.0 |
View full analysis in Upwind Console
Scan completed in 19s
Scan history (1 scan)
| Commit | Scanned at | New | Resolved | Net |
|---|---|---|---|---|
ed10b27 < |
2026-08-30 12:44 UTC | +1 | 0 | +1 |
Last scanned: ed10b27 · 2026-08-30 12:44 UTC
|
| Commit | Scanned at | New | Resolved | Net |
|---|---|---|---|---|
ed10b27 |
2026-08-30 12:44 UTC | — | — | — |
ed10b27 < |
2026-08-30 12:44 UTC | 0 | 0 | 0 |
Last scanned: ed10b27 · 2026-08-30 12:44 UTC
Kairo-Kim
approved these changes
Aug 30, 2026
gavin-jeong
added a commit
that referenced
this pull request
Aug 30, 2026
#160 added a SearchMode argument to updateSearchResults while #162 added tests that call it. Both were green on their own branches and neither touched the other's files, so git merged them without conflict — but the merged tree does not compile: vet: search_resume_test.go:17: not enough arguments in call to a.updateSearchResults have ([]session.SearchResult) want ([]session.SearchResult, session.SearchMode) Production code is unaffected (go build passes); only the test callers are stale. Pass SearchModeScan, which is what these tests were written against — they exercise live badges and resume, not index coverage. Co-authored-by: keyolk <keyolk@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
JIRA: https://sendbird.atlassian.net/browse/CPLAT-11790
Problem
Cross-session search finds the right session and then dead-ends. A result row shows project name and age,
Enterjumps to the matching message, and that is it — no way to get back to working in that session, and no way to tell whether it is even still running.resumeSessionalready does exactly the right thing (attach to the tmux pane when live, otherwiseclaude --resumein a tmux window). It was simply unreachable from search — only from the session list.What this adds
[LIVE]/[HERE]badges on result rows. Resolved from the session store, not from the search result. The result carries a snapshot from when the search ran, and a session can start or exit while the results sit on screen. Since the badge is what you make the jump-or-revive decision from, a stale one is worse than none. Rows are also rebuilt on tick so a session coming up or going down shows while the modal is open — with the cursor preserved, so the refresh doesn't move your selection.rin the results list resumes the hit.Enterkeeps its existing meaning (jump to the message) — the two are different intents and both are worth having.The flow that was missing: search globally → see which hits are live →
rto attach if live, or revive it if not.Detail worth flagging
The resume case is ordered after the
j/knavigation cases. Go's switch takes the first match, so a user who rebindsresumeto a navigation key would otherwise lose the ability to scroll their own search results. There's a test pinning this.Testing
go test ./...),go vet ./...clean.resumeSessionand closing the modal, badges tracking live changes while the modal is open, cursor preserved across refresh, rebound-resume not swallowing navigation, and the key being discoverable in the help line.Note
Verified by tests, not interactively — I can't drive the TUI. Worth a
make build && ./bin/ccx,Ctrl+S, and checking that the badges look right andrlands you where you expect on both a live and a dead session.Stacked context: this is independent of #160 (FTS index) and #161 (navigation freeze); all three branch off master.