Repository navigation
Keep a link's details current while you use t3term - #58
Conversation
The details read the detail they show again 5 minutes after their last read was asked for, if a key, click, wheel or paste came in the 6 minutes before then, as the desktop's useLiveRefresh does. After an idle spell the next input reads them at once. The conversation is read again only when the detail's updatedAt changed. A read that failed is read again in full. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The first key, click, wheel or paste after 6 minutes without one reads the detail the details show at once, unless its last read was asked for under 10 seconds ago, as the desktop's useLiveRefresh does when its reader returns. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A mouse move that reads the open details again, as after an idle spell, changes nothing on screen by itself, so the TUI drew Refreshing from github.com… only once an answer came. read_opened_pull now says whether it asked for a read, and on_terminal_event counts that as a change. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A read that keeps a link's details current now skips the conversation only when both answers came and the last read missed neither. Before, a conversation that failed stayed stale until the detail changed again. The idle cutoff counts from the time the read would run, as the desktop's interval does, so a Mac that wakes after a long sleep reads nothing until a key. A new test drives the reader against a fake T3 on 127.0.0.1. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…an't fail it The key and the read it asks for each read the clock. When it ticked between them, the read was due 5 minutes and 1 ms after the key, and the test's bound failed on CI. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…key into t3term/pull-request-live-refresh
Both branches added a test after the refresh key's test, so the merge keeps both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e50cd Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> # Conflicts: # README.md
|
PASS+NOTES for head
The recipe waits five real minutes without terminal input. Regression sweep: 10 of 10 on base, 11 of 11 on head. Nine unchanged feature recipes have identical Tests: 483 TUI tests passed from a fresh compilation of this head. Separately removing the failed-conversation retry guard, the current-time deadline guard and the current-time read guard in a scratch worktree made each corresponding test fail assertions. The real socket reader test passed. Binary provenance, Rust 1.95.0. Each build log contains
Notes: master's page recipe line 66 expects Evidence: |
A link's details now keep their pull request current while you use t3term, as the desktop's live refresh does. Stacked on #57.
pullRequests.detailalone, thenpullRequests.activityonly when the detail'supdatedAtchanged, as the desktop does. A detail that stayed the same keeps the last conversation.Refreshing from github.com…shows meanwhile, as for any read again.A new verify-t3term file, features/pull-request-live-refresh.md, maps this, and features/README.md lists it. Its recipe opens #60 and sends no input for 5 minutes, then checks
Refreshing from github.com…and that the read asked for the detail alone. Aftert3v reviseand over 6 minutes without input, it checks that nothing read, then clicks and checks a read at once that asks for the conversation too and shows its new remark. It takes about 6 minutes and 20 seconds, since the 5 and 6 minutes can't be shortened, so it lives in its own file. The links scenario needed no change.Fixture server, #60's Summary tab during the second live read and after it. The pull request changed on the host without a refresh number, so the read asked for the conversation too, and a new remark from
fixture-devtops Comments:Decision log
What I noticed
#56 and #57 left out the desktop's live refresh, as their Known limits say. A pull request that changed on its host without T3 hearing of it, such as a review given on GitHub, showed the old answer for as long as its details stayed open.
How I confirmed it
In T3 Code at f570bd2,
useLiveRefresh(apps/web/src/hooks/useLiveRefresh.ts) reads every 5 minutes (LIVE_REFRESH_INTERVAL_MS) while the window shows, unless nopointerdown,pointermove,keydownorwheelcame in the last 6 minutes (LIVE_REFRESH_IDLE_AFTER_MS). The first input after those 6 minutes reads at once throughonArrival, at most once in 10 seconds (LIVE_REFRESH_MIN_INTERVAL_MS). The panel passes itdetailQuery.refresh()alone (PullRequestDetailPanel.tsx:851-856), whether or not a detail came. It reads the activity again only when the detail'supdatedAtchanges (836-847,shouldRefreshPullRequestActivityin pullRequestDetail.logic.ts:163-168).On a fixture server whose
revisecommand changes a pull request'supdatedAtand #60's conversation without a refresh number, I opened #60's details and timed the reads from the server's log:updatedAtthe samerevise, then +10:00revise, then +16:40No control text reached the screen.
Options
setIntervaldoes, which reads again a moment after a refresh number's read.r, where the desktop tries again.What review changed
Greptile found three gaps, fixed in 7bdeb1e and documented in 38812a5.
updatedAtbeside the old conversation, so later live reads skipped the conversation until the detail changed again. A first read whose conversation failed had the same gap. A live read now skips the conversation only when both answers came and the last read missed neither.onIntervaldoes, and the event loop drops a deadline that passed while idle.read_pull_requestover a socket to a fake T3 on 127.0.0.1. It checks the request order, that no conversation is asked for after a detail that stayed the same or failed, and that every read ends withDone. Each new assert fails with its fix taken out.Later, CI on #64 failed
the_open_details_read_their_detail_again_while_you_use_t3term. The key and the read it asks for each read the clock, and when the clock ticked between them the read was due 5 minutes and 1 ms after the key, past the test's bound. 12bfdd2 sets the test's clock ahead of the real one, so both read the same time, and the test now checks the exact 5 minutes. The fix is merged forward through #65.For verify-pr, the refresh key branch was merged in at 09f6907 (643cf7e), which brings master's verify skills and #56's fix for a failed detail read again. The merge kept both branches' new tests where each added one after the refresh key's test. a0975f1 adds the live refresh feature file.
Merged the refresh key branch at 04add82 (ced4934), which brings master at 47e50cd. The README's unit test sentence keeps both sides' additions. Every added or removed line outside Markdown matches the patch at a0975f1 against its old base.
Known limits
🤖 Generated with Claude Code


Confidence Score: 5/5
The PR appears safe to merge; no new actionable issues remain.Summary
Adds live refresh while a link’s details are open.
All three earlier, unnumbered review findings are addressed: failed conversations are retried, overdue reads respect the current idle time, and a fake-server test covers request order and completion.
Diagram
%%{init: {'theme': 'neutral'}}%% flowchart TD A[Five-minute deadline or return from idle] --> B{Details visible and no read running?} B -->|No| C[Wait] B -->|Yes| D[Read detail] D --> E{Saved answers good and updatedAt unchanged?} E -->|Yes| F[Keep conversation] E -->|No| G[Read conversation] F --> H[Finish read] G --> HReviews (6) · Last reviewed commit: "Merge the refresh key branch at 04add82,..." · Reviewed by Greptile