CPLAT-11460: x-actions on output rows + fix the p preview-page combo - #156
Merged
Merged
Conversation
Output rows had three hardcoded keys (enter/o/y) and no way to discover what
any given row could actually do — a "Files Changed" row is a local file with
no way to open it in $EDITOR, and nothing said so. `x` now opens the same
actions menu the session browser uses, listing ONLY what applies to the row
under the cursor:
o open in browser when the row has a URL
enter jump to first mention when it has a message uuid (else: open the
session, when an anchor session is known)
e open in $EDITOR when it is a local file
y copy URL when there is one, else the path
An entry that cannot apply is not shown — that dishonesty is the thing being
fixed. $EDITOR goes through the existing openInEditor(), which wraps
tea.ExecProcess; a hand-rolled exec here corrupts the terminal. Both the
per-session digest and the day pane share one applicability table.
The `p` preview-page combo existed but sat behind `sp.Focus && sp.Show`, so
it did nothing in the two states you actually press it from: browsing the
list, and with the preview closed. Both gates are gone — and picking a mode
from a closed preview now opens the pane, matching what tab already does. On
day rows it stays suppressed, consistent with the number keys: those rows
always render what they produced, so a menu of eleven no-op modes would be
the same lie.
Also fixed:
- resize on a day-scoped project row clobbered its "Produced" list with an
arbitrary child session's digest (the guard checked selectedDay(), which is
date rows only, not selectedOwnsDayPane())
- sessPageMenu was missing from isInOverlay(), so a digit pressed while the
menu was open ALSO fired a top-level preview shortcut behind it
- x on an empty digest was swallowed silently; it now says why
JIRA: https://sendbird.atlassian.net/browse/CPLAT-11460
Kairo-Kim
approved these changes
Aug 13, 2026
|
| Commit | Scanned at | New | Resolved | Net |
|---|---|---|---|---|
c202534 < |
2026-08-13 16:40 UTC | 0 | 0 | 0 |
Last scanned: c202534 · 2026-08-13 16:40 UTC
|
| Commit | Scanned at | New | Resolved | Net |
|---|---|---|---|---|
c202534 < |
2026-08-13 16:40 UTC | 0 | 0 | 0 |
Last scanned: c202534 · 2026-08-13 16:40 UTC
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-11460
Follow-up to #155. Two interaction gaps that surfaced as soon as the daily view was in real use.
1. Output rows had no defined action set
The outputs digest bound three hardcoded keys —
enter,o,y— and nothing told you what any given row could actually do. A "Files Changed" or "Scratchpad" row is a local file, but there was no way to open it in$EDITORat all. A PR row and a plan-file row offered the same keys despite supporting completely different destinations.xnow opens the same actions menu the session browser uses, listing only what applies to the row under the cursor:oentere$EDITORyAn entry that cannot apply is not rendered — that dishonesty is the thing being fixed. The hint box also names the row you are acting on.
$EDITORreuses the existingopenInEditor(), which wrapstea.ExecProcess; a hand-rolled exec from inside Bubble Tea corrupts the terminal. Both the per-session digest and the day pane share one applicability table — the row types stay distinct, only the table is shared.The direct
enter/o/ykeys still work.xis an additional discoverable surface, not a replacement.Not included: reveal-in-file-manager.
internal/openerexposes onlyOpen(cfg, url)and has no directory helper, so this was skipped rather than adding a new external dependency.2. The
ppreview-page combo barely workedThe menu already existed (
p→v:conv s:stats m:mem x:scratch t:tasks a:agents w:workflows c:contexts r:refs o:outputs l:live), but its binding sat insideif sp.Focus && sp.Show {— so it fired in exactly one state. Measured by driving realtea.KeyMsgthroughUpdate:The second row is the normal position (you are browsing the list and want to change what the right pane shows). The third matters because ccx can start with the split hidden, and the adjacent
tabbinding does open the pane in that situation.Both gates are gone. Picking a mode from a closed preview now opens the pane. On day rows
pstays suppressed and says why — consistent withrowSupportsPreviewModes(), which already suppresses the number keys there; opening a menu of eleven no-op modes would be the same lie thexwork is fixing.Consumer audit before moving the binding: the filter/search input is intercepted at
app.go:1519and every overlay menu at1968-1996, both well before this handler, so typingpinto a search still typesp.km.Session.Pickis capitalP— no collision.Also fixed
renderSessionSplitcheckedselectedDay()— date rows only. A day-scoped project row owns the same pane but is aprojectItem, so a window resize fell through to the per-session path and overwrote its "Produced" list with an arbitrary child session's digest.sessPageMenuwas missing fromisInOverlay(), so a digit pressed while the menu was open also fired a top-level preview shortcut behind it.xon an empty digest was swallowed silently; it now says why.Testing
gofmtandgo vetclean; full suite green with an isolatedHOME, both before and after rebasing onto the merged #155.Every fix was verified by reverting it individually and confirming the corresponding test fails. Notably, reverting the honesty filter prints the dishonest box in the failure output — a "Files Changed" row advertising
o:open in browser, a PR advertisinge:open in $EDITOR— and reverting thepgates reproducesp from the list did not open the preview-page menuandexpected p to open the page menu with the preview closed.