Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
0535a50
fix(vcs): watch untracked dirs that git lists no file in
rednafi Oct 25, 2026
ac9cd32
fix(tree): keep the row of an expanded ignored directory
rednafi Oct 25, 2026
1c48996
test(tui): wait twice the watcher pause in the watched tests
rednafi Oct 25, 2026
608ccac
fix(vcs): remote HEADs, forge by host, index errors, merge-base error
rednafi Oct 25, 2026
ad850b4
refactor(vcs): rename ErrNotFound and ForkPoint
rednafi Oct 25, 2026
2ae3fa2
refactor(rex): make the status of an Agent a named field
rednafi Oct 25, 2026
81e2925
feat(rex,turn,tui): report a reconnect of rex events as a gap
rednafi Oct 25, 2026
4d141e0
docs(vcs,rex,update,internal): fix unclear doc comments
rednafi Oct 25, 2026
3877713
fix(diff): save comments on files that are not UTF-8
rednafi Oct 25, 2026
a41ba11
fix(diff): walk grapheme clusters in Cell
rednafi Oct 25, 2026
cb9fb1f
fix(diff,diffview): move the content by the offset in a wide character
rednafi Oct 25, 2026
858ccdf
fix(diff,tui): give old resume comments the revision of their scope
rednafi Oct 25, 2026
a1211be
fix(rexdiff): reject arguments after the repo
rednafi Oct 25, 2026
f195686
refactor(diff,search): move Match to the search package
rednafi Oct 25, 2026
6b12e48
perf(diff): render the style of the line numbers once in RenderFile
rednafi Oct 25, 2026
b0ceb46
fix(tui): keep the view on failed or held reloads
rednafi Oct 25, 2026
9976a04
fix(tui): reset the cursor, the selection, and the arm where they go …
rednafi Oct 25, 2026
1e5a307
fix(tui): keep the comment box in view and on its line
rednafi Oct 25, 2026
f065aa4
fix(tui): size the file list as herdr-reviewr does
rednafi Oct 25, 2026
a886a2b
fix(tui): make Q answer only the quit prompt, and keep U free
rednafi Oct 25, 2026
5164cf9
feat(vcs,tui): give the code search a time budget of 80 ms
rednafi Oct 25, 2026
def4157
test(tui): shorten a line of the overlay click test
rednafi Oct 25, 2026
ce3b29f
refactor(tui,cmd): check the choices with one helper
rednafi Oct 25, 2026
b16c21b
refactor(tui): move the click on the main pane to clickMain
rednafi Oct 25, 2026
e08a6ef
refactor(tui): handle each message in one type switch
rednafi Oct 25, 2026
7cbd91e
refactor(tui): find the expanded ignored directories with one helper
rednafi Oct 25, 2026
d677664
perf(tui): find the hits of the find band once per frame
rednafi Oct 25, 2026
e011087
perf(tui): read the open file only when the watcher sees a change
rednafi Oct 25, 2026
bd8e4d7
refactor(editor,tui): pick the editor in internal/editor
rednafi Oct 25, 2026
b89c68e
refactor(tui): drop the focused field that nothing reads
rednafi Oct 25, 2026
f61a742
style: format with gofumpt
rednafi Oct 25, 2026
97f0a08
build(lint): adopt a stricter golangci-lint config and fix the findings
rednafi Oct 25, 2026
b6fc857
ci: tighten permissions, check drift, and add govulncheck and dependabot
rednafi Oct 25, 2026
9cf72b6
chore: fix the PATH of dev.sh, ignore more files, and document develo…
rednafi Oct 25, 2026
f0c8082
build(deps): go 1.27.3, x/text, and goldmark with security fixes
rednafi Oct 25, 2026
07dfc21
test: run git in a hermetic environment from internal/testgit
rednafi Oct 25, 2026
c114ef9
test(tui): drive the timers with a clock that the tests move
rednafi Oct 25, 2026
81f79fe
test: build each fixture repository once and run the tests in parallel
rednafi Oct 25, 2026
feec1cd
test(tui): make the weak tests fail when the behaviour breaks
rednafi Oct 25, 2026
21d4463
test: cover the URL opener, the agent picker, the forge hosts, and Re…
rednafi Oct 25, 2026
25e5e57
test: name the cases of the table loops that share an input
rednafi Oct 25, 2026
d30bb62
fix(vcs): send untracked dirs to check-ignore with a ./ prefix
rednafi Oct 25, 2026
a211bde
test: drop tests that add no confidence
rednafi Oct 25, 2026
8dc3a04
test: drop low-value test files and run every test that can in parallel
rednafi Oct 25, 2026
62aad83
fix: bugs from the second review
rednafi Oct 25, 2026
f0259bd
refactor: share the retry wait, keep work between reloads, and cache
rednafi Oct 25, 2026
d8b1279
refactor: name things by what they are
rednafi Oct 25, 2026
237656a
test(rex,update): run the tests of the rex client in parallel
rednafi Oct 25, 2026
30f8552
test: test the libraries only through their public API
rednafi Oct 25, 2026
0839aaf
fix(tui): open the fold of a line that a search or a comment jumps to
rednafi Oct 25, 2026
44019fa
test: test rexdiff as a user does, in a terminal
rednafi Oct 25, 2026
efc6349
fix(tui): copy to the clipboard in order
rednafi Oct 25, 2026
9adf88b
test: serve the recorded output of a real rex from the fake rex
rednafi Oct 25, 2026
a754646
test: run rexdiff in a real Rex when REXDIFF_REX is set
rednafi Oct 25, 2026
e94a930
test: add the recorded output of rex
rednafi Oct 25, 2026
0f42c66
fix: a hung clipboard tool fails after 2 s and does not freeze the UI
rednafi Oct 25, 2026
bc109e0
fix: a slow code search waits for its first line past the budget
rednafi Oct 25, 2026
fe3cc06
fix: draw nothing until the terminal tells its size
rednafi Oct 25, 2026
e449c31
test: run the black-box tests one at a time, and cut the scripts that…
rednafi Oct 25, 2026
177fa79
fix: give git the right PWD, show the stderr of git cat-file, and lea…
rednafi Oct 25, 2026
246bad6
refactor: use the stdlib where it has the code
rednafi Oct 25, 2026
ae89ea4
test: wait for rexdiff once, fail on an unknown script condition, and…
rednafi Oct 25, 2026
71d8433
docs: move the guides to .doc, describe the new tests, and add screen…
rednafi Oct 25, 2026
8a3a168
refactor: read the lines of init.lua with strings.Lines, and link the…
rednafi Oct 25, 2026
0e73e7c
fix(install): say that install adds the require line only when it doe…
rednafi Oct 25, 2026
9da5035
docs: shorten the test commands in dev.md
rednafi Oct 25, 2026
5c3238e
test: run the black-box tests one at a time
rednafi Oct 25, 2026
9643fd6
test: send keys and mouse through the terminal emulator, with no sleeps
rednafi Oct 25, 2026
86febb3
fix: drop a turn that starts right after a write, as herdr-reviewr does
rednafi Oct 25, 2026
6007c4f
fix: the bugs of the consistency report
rednafi Oct 25, 2026
18ee0ce
test: one style for tables, failure messages, fixtures, and helpers
rednafi Oct 25, 2026
601c3af
refactor: one style for errors, names, messages, and files
rednafi Oct 26, 2026
f7abd85
docs: update the guides and the screenshots to the current rexdiff
rednafi Oct 26, 2026
620c323
docs: record the demo video again
rednafi Oct 26, 2026
ac88d0e
fix: reload in the background, and the soundness review
rednafi Oct 26, 2026
baa21ae
refactor: run programs through internal/proc, and the conformance and…
rednafi Oct 26, 2026
24e4ea4
refactor: the libraries take their environment as a value
rednafi Oct 26, 2026
076e478
fix: the second soundness review
rednafi Oct 26, 2026
9fc1fdd
test: no process environment in the tests, and the second style review
rednafi Oct 26, 2026
fb358b4
docs: name internal/proc, and one idea per sentence
rednafi Oct 26, 2026
cae84a7
fix: every cancel has a cause, and the cause reaches the user
rednafi Oct 26, 2026
ef5baab
refactor: one WriteString for each part, as gopls suggests
rednafi Oct 26, 2026
f8200fe
test: Fprintf for one line of text
rednafi Oct 26, 2026
478b9aa
feat: keep the settings and the toggle action in separate Lua files
rednafi Oct 26, 2026
9be07cc
refactor: a lean diffview, derived from crush
rednafi Oct 26, 2026
6cbdf68
test: no git maintenance in the background
rednafi Oct 26, 2026
e92d737
refactor: the third whole-codebase review
rednafi Oct 26, 2026
301b598
docs: short guides, and new screenshots
rednafi Oct 26, 2026
a2e9489
feat(vcs,diff): list bases newest first, show CRLF-only changes, smar…
rednafi Oct 26, 2026
8099ef4
feat(vcs): keep at most 100 PR checks
rednafi Oct 26, 2026
44c3b68
feat(tui): align the picker, opener, keys, settings, wheel and PR tab…
rednafi Oct 26, 2026
0fb88c1
docs(user): say that file_list is navigator_position of herdr-reviewr
rednafi Oct 26, 2026
fa794ea
feat: add the direction setting of the toggle split
rednafi Oct 26, 2026
33bf0a1
feat(tui): open a markdown link with a click, as herdr-reviewr does
rednafi Oct 26, 2026
5bda463
feat(tui): open and close <details> blocks on the PR tab with right a…
rednafi Oct 26, 2026
db45095
feat(tui): copy the dragged span of code, not whole lines
rednafi Oct 26, 2026
e48f95f
feat(tui): comment on rendered markdown and mark its changed blocks
rednafi Oct 26, 2026
3ffb7df
fix(tui): name the fold hint expand fold, as herdr-reviewr does
rednafi Oct 26, 2026
5370d28
fix(tui): fold nested <details> blocks on the PR tab
rednafi Oct 26, 2026
685d4e0
refactor(tui): check bidi marks of a URL with unicode.Bidi_Control
rednafi Oct 26, 2026
76c12bb
fix(vcs,diffview): skip a dangling origin/HEAD, name an unborn branch…
rednafi Oct 26, 2026
86514ee
refactor: turn takes plain states, unexport shellQuote, fake clock in…
rednafi Oct 26, 2026
c2115da
docs(vcs,update): name FileStatus and PRState, explain Skip and the p…
rednafi Oct 26, 2026
f92b917
fix(tui): take the turn snapshots in commands
rednafi Oct 26, 2026
4f466a1
fix(tui): keep a comment that the user edits during a send
rednafi Oct 26, 2026
f549f88
fix(tui): copy and step through comments by the rendered markdown lines
rednafi Oct 26, 2026
37f1d71
fix(tui): time-limit the branch list, and keep the default base from …
rednafi Oct 26, 2026
df07d6c
fix(tui): name a missing URL opener, and rewrap stale comments
rednafi Oct 26, 2026
8d8d196
docs: fix the settings link, and map the setting names to herdr-reviewr
rednafi Oct 26, 2026
236c4e2
test: drop duplicate tests, test r on the PR tab, and keep PATH and b…
rednafi Oct 26, 2026
26f789e
ci: shuffle the library tests, lint their parallel tests, and pin gov…
rednafi Oct 26, 2026
21e2766
refactor: flatten the mouse-up and drag code, skip a needless CR copy…
rednafi Oct 26, 2026
b2e4079
fix(tui): mark rendered markdown blocks that render nothing or are re…
rednafi Oct 26, 2026
ef35e56
fix(tui): open a link on a release on its cell, and keep a drag in ra…
rednafi Oct 26, 2026
4019fdb
fix(tui): list the branches of the base picker in a command, and tag …
rednafi Oct 26, 2026
f073196
fix(vcs): give the last write up to a time, so a later write does not…
rednafi Oct 26, 2026
a74d9d1
chore: wrap a comment, guard a test message, give TestNoPR a git-only…
rednafi Oct 26, 2026
e060f8b
docs(user): add the new keys and the mouse to the steps
rednafi Oct 26, 2026
38b76c2
docs(asset): take the changes and split shots again
rednafi Oct 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,585 changes: 1,585 additions & 0 deletions .asset/arch.excalidraw

Large diffs are not rendered by default.

63 changes: 63 additions & 0 deletions .asset/arch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
[
{ "type": "text", "id": "title", "x": 360, "y": -100, "text": "The packages of rexdiff", "fontSize": 28 },

{ "type": "rectangle", "id": "action", "x": 380, "y": 0, "width": 280, "height": 80,
"strokeStyle": "dashed", "strokeColor": "muted",
"label": { "text": "Rex action\nShift+Cmd+R" } },
{ "type": "rectangle", "id": "cmd", "x": 380, "y": 160, "width": 280, "height": 80,
"label": { "text": "cmd/rexdiff\nflags, install" } },
{ "type": "rectangle", "id": "tui", "x": 380, "y": 320, "width": 280, "height": 80,
"strokeColor": "accent", "backgroundColor": "accent-fill",
"label": { "text": "tui\nBubble Tea model" } },
{ "type": "rectangle", "id": "helpers", "x": 760, "y": 320, "width": 280, "height": 80,
"label": { "text": "internal helpers\ntree, search, turn" } },

{ "type": "rectangle", "id": "diff", "x": 0, "y": 520, "width": 200, "height": 80,
"label": { "text": "diff\nrender, comments" } },
{ "type": "rectangle", "id": "vcs", "x": 280, "y": 520, "width": 200, "height": 80,
"label": { "text": "vcs\ntrees, files, PR" } },
{ "type": "rectangle", "id": "rex", "x": 560, "y": 520, "width": 200, "height": 80,
"label": { "text": "rex\nagents, paste" } },
{ "type": "rectangle", "id": "update", "x": 840, "y": 520, "width": 200, "height": 80,
"label": { "text": "update\nreleases" } },

{ "type": "rectangle", "id": "diffview", "x": 0, "y": 680, "width": 200, "height": 80,
"label": { "text": "internal/diffview\nchroma, lipgloss" } },
{ "type": "rectangle", "id": "git", "x": 280, "y": 680, "width": 200, "height": 80,
"strokeStyle": "dashed", "strokeColor": "muted",
"label": { "text": "git\ngh, glab, az" } },
{ "type": "rectangle", "id": "rexcli", "x": 560, "y": 680, "width": 200, "height": 80,
"strokeStyle": "dashed", "strokeColor": "muted",
"label": { "text": "rex command\nRex server" } },
{ "type": "rectangle", "id": "gh", "x": 840, "y": 680, "width": 200, "height": 80,
"strokeStyle": "dashed", "strokeColor": "muted",
"label": { "text": "GitHub releases\nbrew, go" } },

{ "type": "arrow", "id": "a-action", "x": 520, "y": 80, "points": [[0, 0], [0, 80]],
"start": { "id": "action" }, "end": { "id": "cmd" }, "strokeColor": "muted" },
{ "type": "arrow", "id": "a-cmd", "x": 520, "y": 240, "points": [[0, 0], [0, 80]],
"start": { "id": "cmd" }, "end": { "id": "tui" }, "strokeColor": "muted" },
{ "type": "arrow", "id": "a-helpers", "x": 660, "y": 360, "points": [[0, 0], [100, 0]],
"start": { "id": "tui" }, "end": { "id": "helpers" }, "strokeColor": "muted" },

{ "type": "arrow", "id": "a-diff", "x": 420, "y": 400, "points": [[0, 0], [-320, 120]],
"start": { "id": "tui" }, "end": { "id": "diff" }, "strokeColor": "accent" },
{ "type": "arrow", "id": "a-vcs", "x": 480, "y": 400, "points": [[0, 0], [-100, 120]],
"start": { "id": "tui" }, "end": { "id": "vcs" }, "strokeColor": "accent" },
{ "type": "arrow", "id": "a-rex", "x": 560, "y": 400, "points": [[0, 0], [100, 120]],
"start": { "id": "tui" }, "end": { "id": "rex" }, "strokeColor": "accent" },
{ "type": "arrow", "id": "a-update", "x": 620, "y": 400, "points": [[0, 0], [320, 120]],
"start": { "id": "tui" }, "end": { "id": "update" }, "strokeColor": "accent" },

{ "type": "arrow", "id": "b-diff", "x": 100, "y": 600, "points": [[0, 0], [0, 80]],
"start": { "id": "diff" }, "end": { "id": "diffview" }, "strokeColor": "muted" },
{ "type": "arrow", "id": "b-vcs", "x": 380, "y": 600, "points": [[0, 0], [0, 80]],
"start": { "id": "vcs" }, "end": { "id": "git" }, "strokeColor": "muted" },
{ "type": "arrow", "id": "b-rex", "x": 660, "y": 600, "points": [[0, 0], [0, 80]],
"start": { "id": "rex" }, "end": { "id": "rexcli" }, "strokeColor": "muted" },
{ "type": "arrow", "id": "b-update", "x": 940, "y": 600, "points": [[0, 0], [0, 80]],
"start": { "id": "update" }, "end": { "id": "gh" }, "strokeColor": "muted" },

{ "type": "text", "id": "note", "x": 0, "y": 800, "fontSize": 16, "strokeColor": "muted",
"text": "Dashed boxes are programs outside rexdiff. Arrows point from the caller to the callee." }
]
Binary file added .asset/arch.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions .asset/arch.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .asset/changes.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .asset/comment.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .asset/demo.mp4
Binary file not shown.
Binary file added .asset/files.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .asset/help.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .asset/list.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
Binary file added .asset/review.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .asset/search.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .asset/sent.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .asset/split.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading