File the open thread to Set Aside and Reply Later with a and l - #371
Conversation
The web app's topic toolbar keeps its filing hotkeys live while a thread is on screen, so readers press a and l with an email open — and in the TUI those keys silently scrolled the viewport instead. Route a/A/l from the open thread through the same posting action the list uses, when the thread was opened from a list that files (a box or Previously Seen). Search results, bundles, and directly opened topics have no posting row to act on, so the key answers with a notice instead of silence, and the thread help advertises the keys only where they work.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
Pull request overview
Enables Set Aside and Reply Later actions while viewing an open TUI thread.
Changes:
- Routes
a/A/lthrough posting actions. - Adds contextual help and regression tests.
Tip
If you aren't ready for review, convert to a draft PR.
Click "Convert to draft" or run gh pr ready --undo.
Click "Ready for review" or run gh pr ready to reengage.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
internal/tui/mail.go |
Adds open-thread filing and help bindings. |
internal/tui/mail_test.go |
Tests filing, guards, and help. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 229851f0bb
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The mark-seen that opening an unseen thread triggers can resort the list and, with a cover configured, slide the row under the art and clamp the cursor onto another row — so a cursor-based guard rejected a and l in exactly the reported case. Carry the posting id the thread was opened from and file on that row by id, wherever the list has settled it.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c667cca618
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
A live refresh whose head no longer returns the opened row takes it out of the list entirely — refreshHead removes the old head row rather than merely resorting it — so the by-id lookup came up empty while the thread was still on screen. Snapshot the posting when the thread opens and file on that, independent of whatever the list has since done with the row.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c740c3a105
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
A move keeps the thread on screen, so a second filing key was still compared against the list under it: file a Set Aside thread to Reply Later and a then answered "Already in Set Aside" while the server had it in Reply Later. Pass the box kind a posting files out of down to the move — the list's own box for a row, the tracked kind for the open thread — and follow the thread's kind as successful moves land it somewhere new.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f38ff8afa7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Filing keys pressed faster than their requests answer complete in whatever order the responses arrive, so the last response could record a box the server had already filed past. Stamp each open-thread filing with a dispatch sequence and record the landing box only from the latest one — a failed or superseded move records nothing.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c4748bed77
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
All reported issues were addressed across 2 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
Filing the open thread out and back — Set Aside to Reply Later and home again — removed its row on the way out, and the return had nothing to reinsert, leaving the on-screen list missing a thread the server holds. When a move lands in the box on screen and the row is gone, re-read the head through the live-refresh lane instead of reconstructing the row from a stale snapshot.
Customer report on CLIs card 10240722474: Set Aside (
a) and Reply Later (l) "not doing anything" in the TUI.The list keys work (confirmed on the card for postings and bundles), but the web app's topic toolbar keeps its filing hotkeys live while a thread is on screen (
app/views/topics/toolbars/_action_bar.html.erbbindsl,Landa,Adocument-wide), so a web reader's habit is to pressa/lwith the email open — and in the TUI thread view those keys fell through to the viewport and silently scrolled.Now
a/A/lfrom an open thread route through the same posting action the list uses, when the thread was opened from a list that files (a box or Previously Seen):l reply later/a set asideonly where they work.Scope stays on the card's two keys: the rest of the list's action set (
e,u,d,t, …) is left alone becauseu/dare the viewport's half-page scroll keys in the open thread, so extending filing there is a keymap decision, not a bug fix.TMPDIR=/tmp/t make checkgreen.Summary by cubic
Fixes
a(Set Aside) andl(Reply Later) in the TUI thread view, which previously fell through to the viewport and silently scrolled. The keys now file the open thread the same way they do on the list, keeping the reader on the thread with the usual toast.Details
u/dare the viewport's half-page scroll keys in the open thread.Written for commit 0224bde. Summary will update on new commits.