prreviewbuddy 0.19.0 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,253 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.25.0
4
+
5
+ **PR Review Buddy no longer guesses which `main` you meant.** A repository usually holds two
6
+ branches by that name, your own and `origin/main`, and they are the same commit until somebody
7
+ commits without pushing or pushes from somewhere else. Whichever of the two is stale is still an
8
+ ancestor of your branch, so the comparison succeeds and the review is quietly of the wrong thing:
9
+ one report was a 107 file review of a 23 file change.
10
+
11
+ When the two are different commits, the review now stops before it starts and says so, showing both
12
+ commits, how far apart they are, and the two commands that pick one:
13
+
14
+ ```
15
+ prreviewbuddy review --base refs/heads/main
16
+ prreviewbuddy review --base origin/main
17
+ ```
18
+
19
+ It stops for `--base main` and for a plain `prreviewbuddy review` alike, since the default base is
20
+ worked out the same way. A base you have already been specific about is never questioned:
21
+ `origin/main`, `refs/heads/main` and `refs/remotes/origin/main` each mean exactly what they say, and
22
+ a commit, a tag or `HEAD~3` is passed to git as it always was.
23
+
24
+ There is deliberately no rule picking the newer one, or the local one, or the one with fewer files.
25
+ Any of those is still a guess, and a review of the wrong base is worse than being asked which base
26
+ you meant.
27
+
28
+ **A file the review read is no longer reported as one it invented.** The review runs inside a real
29
+ checkout, so it reads beyond the diff: the caller of a changed function, the interface a changed
30
+ class implements. Naming one of those used to produce an amber correction box saying the path could
31
+ not be found and had been removed, and the finding that rested on it lost its location.
32
+
33
+ Those files are now kept. They appear under **Referenced files** at the foot of the Files tab, with
34
+ the sections that brought them in, and they open in the code viewer like anything else. They are
35
+ deliberately not mixed into the changed-file groups and are not counted as files in this change,
36
+ because the pull request did not touch them.
37
+
38
+ A finding that rests on one now reads **Related file: path · not changed** rather than showing no
39
+ location at all.
40
+
41
+ The correction box now only reports a path that is in neither the change nor the reviewed version
42
+ of the repository, and says the removal and the finding it cost in one sentence rather than two
43
+ bullets that read as two problems.
44
+
45
+ **A KISS review keeps the files it read, too.** The same fix as above, for the other review type.
46
+ A recommendation about complexity that lives partly outside the diff, in the interface a new class
47
+ implements or the caller that already did this, used to lose every location it had and be shown as
48
+ having nowhere to look. Those locations are kept now, marked **not changed** on the row so they
49
+ cannot be read as part of the pull request, and they open like any other.
50
+
51
+ The KISS correction box now reports only a path that is in neither the change nor the reviewed
52
+ version of the repository.
53
+
54
+ **A review id no longer has to be typed in full.** `--review a8a9a058` finds the review that id
55
+ starts, in `open`, in `--update` and in `--delete`. A shorthand that matches two reviews is refused
56
+ with both ids and what each is of, rather than one of them being picked for you.
57
+
58
+ **Analysis details moved to the top of the review.** It now sits opposite the pane's title, on
59
+ **Review overview** and on **KISS review**, as a small **Analysis details** button that opens a
60
+ panel under itself rather than a strip across the page. Nothing moves when you open it, and it
61
+ shuts on Escape or a click elsewhere.
62
+
63
+ It describes the whole analysis: which commit, which model, how much of the change it saw. Those
64
+ are the things you want before deciding how much to trust the verdict, and they were at the bottom
65
+ of the page, after it.
66
+
67
+ A KISS review now names its audience the way you chose it. **Reviewing my code** and **Reviewing
68
+ someone else's code**, in the words on the buttons that start a run, rather than "Written for the
69
+ author of this change", which asked you to work out whether you were that author.
70
+
71
+ ## 0.24.0
72
+
73
+ **A failed review now shows what the agent actually said.** When a run fails because the reply
74
+ could not be used, the reply is kept with the run and folded away under **What the agent replied**
75
+ on the failure panel, for both standard and KISS reviews.
76
+
77
+ "Could not be parsed as JSON" is the same sentence whether the model ignored the schema or wrote a
78
+ paragraph in front of a perfectly good answer, and until now the reply that would settle it was
79
+ discarded. It is kept whole, deleted with the review like everything else, and never sent anywhere.
80
+
81
+ ## 0.23.1
82
+
83
+ **A review is no longer lost to a sentence in front of it.** If the agent answered with a paragraph
84
+ before its JSON and no code fence around it, the whole review was discarded as unparseable. This
85
+ happens when your own Claude Code configuration asks for a particular style of reply, which the
86
+ review has no way to switch off. The answer is now cut out of whatever surrounds it, for both
87
+ standard and KISS reviews.
88
+
89
+ ## 0.23.0
90
+
91
+ **Act on several reviews at once.** The reviews list has a **Select** button beside its count.
92
+ Pressing it puts a checkbox on every row, and ticking rows brings up a bar with three things to do
93
+ with them: **Mark reviewed**, **Mark in progress**, and **Delete**.
94
+
95
+ A selection survives searching, filtering and turning the page, so you can gather rows from
96
+ anywhere in the list. When some of what you have ticked is not on screen, the bar says so
97
+ ("5 selected · 2 not shown") before you act on it.
98
+
99
+ Deleting takes the whole branch: a row is a branch and holds every review of it, so the question
100
+ names both counts before anything goes. A branch that is being analysed right now is refused by
101
+ name, and everything else in the selection is still deleted.
102
+
103
+ The button inside a review now reads **Mark reviewed** rather than "Mark review complete", so the
104
+ list and the review say the same thing about the same act.
105
+
106
+ ## 0.22.1
107
+
108
+ **A way out of Settings.** The settings page had one link back to the reviews list, sitting in the
109
+ top right among the version number and the feedback link, where it read as page furniture rather
110
+ than as navigation. It is now a proper control at the top left of the page, above the first setting.
111
+
112
+ When you reached Settings from the rail of a review, it takes you back to that review rather than to
113
+ the list.
114
+
115
+ ## 0.22.0
116
+
117
+ *The reviews page is a list you can work through, not a wall of tiles.*
118
+
119
+ **One column.** Every review was a card in a two-up grid, which meant each one had about 420px to
120
+ hold a title, a summary, a repository, a branch, an author, a risk, a size, what was outstanding and
121
+ how long ago you were last there. The title ellipsed, the branch ellipsed, and the measurements
122
+ stacked four rows deep, while the page kept empty space down both sides. The same content is now one
123
+ row per branch: the summary has room to be read, everything measured sits on a single line, and the
124
+ ages line up down the right edge so a screenful can be scanned rather than read.
125
+
126
+ **Pages.** Fifteen reviews at a time, with ordinary numbered pagination. These are saved pieces of
127
+ work rather than a feed, and a page you can return to is worth more here than a scroll position you
128
+ cannot. Searching and filtering still cover everything stored, not just the page in front of you.
129
+
130
+ **Where you were is in the address.** Search text, the filter and the page are all in the URL, so
131
+ refreshing keeps them, Back out of a review returns to the page you opened it from, and a link to a
132
+ search is a link to that search.
133
+
134
+ **Pull request numbers.** A review of a pull request shows its number, and you can find it by typing
135
+ either `#412` or `412`.
136
+
137
+ ## 0.21.0
138
+
139
+ *Your workspace has an address now, and a place to change it.*
140
+
141
+ **PR Review Buddy lives at http://localhost:7726.** It used to take whatever port the machine had
142
+ spare, which was free by construction and useless by consequence: every link into a review died the
143
+ next time the server started. So a review was something you had to go and find again rather than
144
+ something you could keep a link to. The port is fixed, review addresses do not move, and a link to a
145
+ review is worth bookmarking.
146
+
147
+ 7726 is P-R-B on a telephone keypad. It is not 4173, which is what `vite preview` takes, and
148
+ choosing a port a developer's own tools already want would have made the collision the common case
149
+ rather than the rare one.
150
+
151
+ **Nothing moves quietly.** If something else is already on that port, PR Review Buddy says so and
152
+ names both ways out. It does not try 7727. An address that shifts whenever it is inconvenienced is
153
+ not an address, and finding an available port would have cost the one property this is for.
154
+
155
+ **Settings, in the workspace.** A page at the level of the product rather than a tab inside a
156
+ review, holding the workspace port, the coding agent used when a review does not name one, and
157
+ whether anonymous usage counts are sent. All three already existed and were already settable from
158
+ the command line; what was missing was anywhere to see them.
159
+
160
+ They are three interfaces over one file, not three stores. `prreviewbuddy config set port 7726`, the
161
+ field on the settings page, and editing `~/.prreviewbuddy/config.json` by hand all write the same
162
+ key, and `prreviewbuddy config path` prints where that file is.
163
+
164
+ **A change of port says when it takes effect.** A workspace that is already running keeps the port
165
+ it started on, so the page tells you both: the one you are reading this on, and the one the next
166
+ start will use. Claiming the change had already happened would be sending you to an address nothing
167
+ is answering at.
168
+
169
+ **A port it cannot use is an error, not a shrug.** A hand-edited `70000` used to be the kind of
170
+ thing a program quietly ignores in favour of its default, which makes a configuration file look like
171
+ it is not being read. It now names the file, the value and the range. A missing setting still means
172
+ the default, because not saying anything is different from saying something impossible.
173
+
174
+ **Saved links survive a restart.** The credential that opens your list of reviews used to be minted
175
+ fresh on every start, so a browser that had been authorised yesterday was not authorised today. It
176
+ is generated once and kept, which means the browser you already use keeps working across restarts.
177
+ A review link was always the stronger case and still is: it carries its own credential, so it opens
178
+ anywhere.
179
+
180
+ That retires `~/.prreviewbuddy/reviews.html`, the page that existed only to be an address that did
181
+ not move, rewritten on every start and stop because nothing else stayed still. There is a real one
182
+ now.
183
+
184
+ ## 0.20.0
185
+
186
+ *A second question you can ask of the same change: is all this machinery necessary?*
187
+
188
+ **A review lens.** `prreviewbuddy review --lens kiss` runs a review that asks something the standard
189
+ one only ever answers by accident: not whether the change is correct, but whether the complexity it
190
+ introduces is justified, or whether the same requirements could be met with materially less
191
+ machinery. It runs against everything the ordinary command reviews, a branch, another branch, or a
192
+ pull request, and it needs no standard review to have been made first.
193
+
194
+ It is a review of its own rather than a mode of the standard one. Its own prompt, its own run, its
195
+ own result, its own staleness, and its own section in the left rail sitting beside `Review` rather
196
+ than under it. Run both and you get two readings of one change in one workspace, at one link, on
197
+ one card in your list of reviews.
198
+
199
+ **Every run says who it is for, and is never guessed.** `--audience author` writes to the person
200
+ who wrote the code, before they ask anyone to look: direct, specific, what to collapse or remove or
201
+ defer, with enough of the trade-off that nothing load-bearing gets flattened. `--audience reviewer`
202
+ writes for somebody reading another person's work, and adds the question a reviewer actually has,
203
+ which is not whether an observation is true but whether it is worth spending a comment on. Where
204
+ one is, it drafts the comment, and the draft can be copied as the Markdown it was written as.
205
+
206
+ Nothing infers this from what you are reviewing, because there is nothing to infer it from: a
207
+ reviewer checks out somebody else's branch and an author reviews their own pull request. In a
208
+ terminal it asks. Anywhere else, leaving it out is a refusal that names both values rather than a
209
+ default that writes comments about somebody else's work to its author.
210
+
211
+ **A run that finds nothing is an answer.** "No material simplifications were identified" is a
212
+ result the page states plainly, not an empty list. The rubric asks just as hard for complexity that
213
+ is doing a job, and says so: transaction boundaries, permission checks, an adapter at a real
214
+ external seam. A review that could only ever come back with something to change would be worth
215
+ nothing when it came back with something to change.
216
+
217
+ **Every recommendation points at the code it is about.** The files and lines are on the
218
+ recommendation itself, and open the diff where you are reading, so there is no separate index to
219
+ consult for a list that fits on one screen. A path the analysis named that is not in the change is
220
+ withdrawn and disclosed rather than quietly rendered as a link to nothing.
221
+
222
+ **Running it again keeps the answer it gave before.** Each run is kept whole, with the commit it was
223
+ made from, the audience it was written for and the version of the prompt that produced it. New
224
+ commits mark a run stale on its own terms, so bringing one up to date says nothing about the other,
225
+ and dismissing that notice on one leaves the other's alone.
226
+
227
+ ## 0.19.1
228
+
229
+ *An answer worth keeping can now be taken out whole.*
230
+
231
+ **Every Buddy AI answer carries a copy control.** It sits under the answer, and it copies the
232
+ Markdown the assistant actually wrote, not the text on the screen: the backticks, the fenced
233
+ blocks and the lists survive, so an answer pasted into a pull request comment arrives formatted
234
+ rather than flattened into one run of prose. The question above it does not get one, because the
235
+ question is yours and you still have it.
236
+
237
+ Per-block copy is unchanged and still there. The two answer different questions: that one lifts a
238
+ snippet out of an answer, this one lifts the answer.
239
+
240
+ If the clipboard is unavailable, the control says so and does nothing else. It deliberately does
241
+ not fall back to selecting the answer on the page and asking you to press ⌘C, because what that
242
+ would put on the clipboard is the rendered text, which is the one thing this control exists to
243
+ avoid handing you.
244
+
245
+ **The strips at the top of a review use the whole width of the page.** The notice that you are
246
+ reading an older review, the list of the other reviews of that branch, and the sentence that says
247
+ new commits have landed were each capped part-way across, so on a wide window they stopped
248
+ two-thirds of the way along a band that visibly carried on. They now run to the edge of the
249
+ section they sit in, which puts each row's `Open review` where the eye already expects it.
250
+
3
251
  ## 0.19.0
4
252
 
5
253
  *It asks before it sends anything, and the npm page stops reading like a manual.*