Skip to content

Show a Timeline commit's own diff on the Code tab - #71

Merged
krishhgg merged 15 commits into
masterfrom
t3term/pull-request-timeline-commit
Oct 18, 2026
Merged

krishhgg merged 15 commits into
masterfrom
t3term/pull-request-timeline-commit

Conversation

@krishhgg

@krishhgg krishhgg commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

Where the host gives a diff, a commit on the Timeline opens its own diff on the Code tab, as the desktop's View commit button does.

  • Each commit's two rows on the Timeline are a control. ↑ and ↓ choose it, the status line reads Enter view commit 9dc565a, and Enter or a click shows the Code with that commit picked in its list of commits.
  • The same commit again shows the Code where the reader left it, and reads nothing. Another commit reads its first slice and starts the Code at its top, with the list off the diff closed, as a pick from the list of commits does.
  • Where the host gives no diff, the rows stay plain text.
  • docs/pull-request-panel.md's commit row describes it and drops the known limit. The README's keys, clicks and Timeline paragraph mention it.
  • The Code recipe clicks a Timeline commit and checks the read of its diff, comes back to it by key and finds the Code as it was with nothing read, opens the other commit at its top, and finds the rows plain where the host gives no diff. The page recipe names the new status text (0e5c0b2).

Stacked on #70.

The Timeline of #7 in the thread details: 6 comments · 2 commits, Newest first, then › 2 comments, the chosen commit Reuse the parsed config on reload with +30 -2 and 9dc565a · fixture-dev · 1h ago on a lighter background, › 4 comments, Split the config reader with +90 -6, and Pull request opened. The status line reads Enter view commit 9dc565a.

After Enter: the Code tab is underlined and reads › Reuse the parsed config on reload · 9dc565a, 2 files, › 4 conversations not on the current diff, then M src/config/reader.rs +2 -1 and A tests/config_reload.rs +8 -0, folded. The status line reads ← timeline.

After ← and a click on Split the config reader on the Timeline: the Code tab reads › Split the config reader · 1f3e2a9, 1 file, › 4 conversations not on the current diff, then M src/config/schema.rs +7 -0.

All three come from the fixture server with #7's invented commits at 120x40.

Decision log

What I noticed. #70 added the Code tab's list of commits, and its docs left one known limit: a commit on the Timeline didn't open its diff, where the desktop's does.

How I confirmed it. In the pinned T3 source (f570bd2):

  • PullRequestTimelineTab.tsx:369-407 draws CommitEvent as a <button aria-label="View commit {id}"> that calls onOpen(event.id), and 599 passes it onOpenCommit.
  • PullRequestDetailPanel.tsx:516-519 has openCommit(oid) pick the commit for the Code tab and show that tab, and 2778 hands it to the Timeline.
  • 1447-1455 drops the Code tab where capabilities.diff is false and moves a reader on it to the Summary. The commit stays a button there, so a click lands on the Summary.

Options.

  • Chosen: no control where the host gives no diff. Rejected: the desktop's button that moves the reader to the Summary, which reads as a click that did the wrong thing.
  • Chosen: a commit is a control by its place among the commits as T3 sent them, the same index the list of commits and the Timeline already use. Rejected: carrying the id in the control, which would make Control hold a String and lose Copy.
  • Chosen: another commit starts the Code at its top, since its files are new and the old scroll would point into them. The same commit keeps the scroll, as the desktop keeps the tab mounted.
  • Chosen: the Code shows with nothing chosen, as a tab switch does. Rejected: choosing the commit list's toggle, which would make the next Enter open the list.
  • Chosen: view commit for the status line, from the desktop's label. The list of commits says show commit, which keeps its own wording.

What review changed.

  • The mutation run below found that no test checked a commit before the Timeline exists, and a conversation test now does.
  • Greptile found that the Timeline's Keys and clicks row in docs/pull-request-panel.md still said a commit does nothing. It now says ↑ and ↓ choose each commit where the host gives a diff, and that the status line reads view commit 9dc565a.

d25e836 and bdf01da merge #70 at b7d2adc and cebb4a4, which bring #66's fix for a hunk that removes nothing at the highest line number (8073497) and its test, with the same patch.

11720bf and 7dccbaf merge #70 at f14b610 and 4eb3fbe, which bring the fixes that lay a thread's comments and its loaded pages out again when the theme changes (#68's ad1590c and #69's 942dad5).

Known limits.

Tests

  • conversation/tests.rs: the Timeline's targets with and without the Code tab, each commit's action with its id, no control past the last commit, and none before the detail lays the Timeline out.
  • pull_requests.rs: ↓ choosing the newest commit, Enter showing the Code with nothing chosen and asking for that commit's first slice, the same commit keeping the scroll and the open list off the diff and asking nothing, a click on the other resetting both and asking for it, a place past the commits doing nothing, and a host without a diff giving no control.
  • 16 mutations of the new code: the tests fail all 16. The first run left one alive, which removed the check that the Timeline exists, and the conversation test above now fails it.
  • On bdf01da, fmt, clippy and all 842 tests pass (761 lib, 2 main, 31 CLI, 48 RPC). The Code recipe passes on bdf01da's build and fails on Pick a commit on the Code tab to read its own diff #70's (cebb4a4) at recipe line 186, the click on a Timeline commit, which should open its diff on the Code.
  • On 7dccbaf, fmt, clippy and all 843 tests pass (762 lib, 2 main, 31 CLI, 48 RPC), and the Code recipe passes on its build.

🤖 Generated with Claude Code

RetriggerView in GreptileConfidence Score: 5/5

This PR appears safe to merge; no actionable issues remain.

Summary

Timeline commits now open their own diff on the Code tab when the host supports diffs.

  • Timeline commits open their own diff in the Code tab.

No new actionable issues found. Tests and terminal captures were not run during this review.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  A[Choose a Timeline commit] --> B{Host offers a diff?}
  B -->|No| C[Rows stay plain text]
  B -->|Yes| D{Same commit?}
  D -->|Yes| E[Restore Code reading position]
  D -->|No| F[Reset Code and request commit diff]
  E --> G[Show Code tab]
  F --> G
Loading

Reviews (9) · Last reviewed commit: "Merge the commit-scope branch at 4eb3fbe..." · Reviewed by Greptile

krishhgg and others added 3 commits October 15, 2026 04:40
Where the host gives a diff, each commit's rows on the Timeline are a
control. Enter or a click picks that commit on the Code tab and shows it,
as the desktop's View commit button does. The same commit keeps the
Code's scroll, and another starts it at the top with the list off the
diff closed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…anch

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@krishhgg
krishhgg marked this pull request as ready for review October 15, 2026 11:48
Comment thread docs/pull-request-panel.md
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
krishhgg added a commit that referenced this pull request Oct 15, 2026
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
krishhgg and others added 3 commits October 17, 2026 14:04
…7e50cd

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… again after a theme change

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… page recipe

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Comment thread src/tui/pull_requests.rs
krishhgg and others added 6 commits October 18, 2026 00:24
…r in the Code recipe

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Code recipe clicks a Timeline commit and checks the read of its diff, comes back to it by
key and finds the Code as it was with nothing read, opens the other commit at its top, and
finds the rows plain where the host gives no diff. The page file names the new status text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… past u64::MAX and reads the Code's diff again each time it shows a minute after it came

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…043b63, the environment switcher

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ine count at the highest line number

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…act in the boundary unfold test

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@krishhgg

Copy link
Copy Markdown
Owner Author

PASS for head bdf01dae979fd7b520aedcfafada422437bba7f4, patch id efa6d57bc3c33e2ea144ca685a31510735d78111.
Verifier: GPT-6.1 Sol (xhigh), not the author. Base cebb4a497fec1af5594de3cf155861de0b52ffd5, the #70 parent. Scenario links, 100x30 and 80x24, truecolor.

Claim Base Head
A Timeline commit opens its own diff by key or click The head recipe fails at line 186 when the click leaves the Timeline open Both commits open the correct scope; clicking either the headline or the short-id row works
Returning to the same commit preserves the Code view and reads nothing No Timeline commit action Unfolded files, scroll and the off-diff state survive; the event log records no new diff request
Another commit starts at the top with folded files and a closed off-diff list No Timeline commit action The other commit reads its first slice with the correct commit id and resets the Code view
A host without a diff offers no commit action Timeline rows are plain Rows remain plain, clicks read nothing and no view-commit action is offered

Regression sweep: 13/13 own recipes and master's 12/12 recipes pass on both builds. The base results are reused from the independently driven #70 head under /tmp/t3v-verdict/70/round1/. The head's new Code section fails on the parent and passes on head. Matched 87 own-recipe capture pairs and 70 master-recipe pairs. Differences outside the intended flow were transient reconnect or saved-stack states; settled stack and reviewer captures match.

Rules: all completed runs pass check before and after stop. Same-step rpcRequestsByTag match outside the changed flow, including a settled repeat of the linked-list recipe on all four builds. HTTP pr.diff events confirm the requested commit and absence of a cursor, no read for the same commit and no read from an unsupported host. No file-contents request occurs.

Tests: local cargo test --locked passes all 842 tests, including the Timeline targets, no-diff capability, same-commit preservation, other-commit reset and inherited highest-line-number test. This layer adds a feature and documentation corrections; it introduces no separate bug fix requiring a non-test reversion. #70's two fix reversion checks are recorded with that parent's verdict.

CI: all four checks completed successfully on this exact head, including macOS and E2E smoke. Greptile: two resolved threads; no unanswered finding. Both relevant feature files are updated. Compared the cited Timeline button and openCommit behavior at f570bd2. Suppressing the unsupported-host action is the documented departure.

Binary identities, LC_UUID from otool -l:

  • Base /tmp/t3v-bin/cebb4a497fec1af5594de3cf155861de0b52ffd5/t3term: 10A90647-7A88-38E0-96DA-CAC5F594508C.
  • Head /tmp/t3v-bin/bdf01dae979fd7b520aedcfafada422437bba7f4/t3term: C3DFAAC9-E91B-3112-AAF5-69B68E575EBD.

Both build logs confirm Compiling t3term. Evidence: /tmp/t3v-verdict/71/round1/, especially smoke-head, master-smoke-head, head-recipe-on-base, focused-80x24-v3, comparison JSON files and cargo-test-head.log, plus the parent's sweep paths above. Rendered captures were inspected. All servers and data were invented and local.

Notes: no product finding. No pull request or branch was changed.

krishhgg and others added 2 commits October 18, 2026 05:51
… lays review threads out again when the theme changes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…comments out again when the theme changes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@krishhgg

Copy link
Copy Markdown
Owner Author

PASS+NOTES for head 7dccbaf6bf0046b81c974b47c457063997bf0200, patch id efa6d57bc3c33e2ea144ca685a31510735d78111.
Verifier: GPT-6.1 Sol (xhigh), not the author. Base 4eb3fbe989fd3533d08b73addc63cd31c876ab88. Scenario links, truecolor. The Code recipe runs at 100x30 and includes 80x24; other recipes use their documented sizes. This verdict covers this layer against the named parent.

Claim Base Head
Open a Timeline commit's own Code diff by click or Enter 4eb3fbe leaves the commit inert; clicking it sends no diff request Click opens 9dc565a0's diff, the keyboard selects view commit 9dc565a, and Enter opens it
Reopen the same commit without a read; start another commit at the top Timeline commits expose no action The unfolded test stays unfolded on returning to the same commit and no request is sent; choosing 1f3e2a90 starts at the top and reads its first slice
Leave commits inert where the host offers no diff No Timeline action The updated Code recipe verifies no commit control without the Code tab
Preserve round 1's layer patch Round 1 patch id efa6d57bc3c33e2ea144ca685a31510735d78111 The full verbatim patch id is identical

Regression sweep: all 13 checkout recipes pass on 4eb3fbe and 7dccbaf after the timed refresh rerun. Every current-master recipe was attempted on both binaries; 11 of 13 pass after that rerun, with the two shared baseline limits below. Every unchanged feature has matching settled rpcRequestsByTag. The Code recipes have identical RPC counts. Head has 34 HTTP diff reads against base's 32; the two added reads are the two Timeline commit selections, and reopening the same commit sends none.

Rules: doctor passed. Successful drives and recipes passed check before and after stop. No scope, unknown-RPC, fixture, secret or session-lifecycle failure.
CI: macOS, E2E smoke (macOS), Linux build and Greptile Review all passed on 7dccbaf. Both Greptile threads are resolved; the feature guide now names the Timeline controls. No new finding on this head.

Evidence: /tmp/t3v-verdict/71/round2/. Direct comparisons are claim-base/ and claim-head-proof/; smoke-head/pull-request-code/ records both Timeline picks, same-commit reuse and the no-diff host. I inspected timeline-commit-100x30.png, rendered from that recipe's capture. Base checkout and master sweeps reuse the identical 4eb3fbe evidence in /tmp/t3v-verdict/70/round2/{smoke-head,master-smoke-head,live-refresh-awake-head}/; head sweeps are {smoke-head,master-smoke-head,live-refresh-awake-head}/ under #71. comparison.json, summary-comparison.json and runs.json retain counters, screen comparisons and run paths.

Binaries driven, recorded LC_UUID values:

Commit LC_UUID
4eb3fbe989fd3533d08b73addc63cd31c876ab88 01712FC3-BF10-372D-A7D2-C9D4CECAC49C
7dccbaf6bf0046b81c974b47c457063997bf0200 E15CE4FD-F01F-3D16-859B-4BC2FA25B643

All newly built binaries showed Compiling t3term. The cached parent binary was reused. t3v and smoke came from origin/master at 90d4de7; each checkout supplied its own feature recipes. No pull request code, branch or commit was changed.

Notes, shared baseline limits:

The first timed refresh attempts crossed a wall-clock gap from 13:34 UTC to 17:10 UTC and timed out on all builds. Fresh runs with idle sleep prevented pass the unchanged recipe. The original failures and successful reruns are retained. Screens differ only in fixture ports, ages, elapsed times, spinner frames and intermediate network/read states outside the intended change. Settled Summary and reviewer captures at 200x69 and 80x24 match, and settled requests match.

@krishhgg
krishhgg changed the base branch from t3term/pull-request-commit-scope to master October 18, 2026 18:32
@krishhgg
krishhgg merged commit e0afbf5 into master Oct 18, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant