prreviewbuddy 0.12.17 → 0.15.2

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 ADDED
@@ -0,0 +1,665 @@
1
+ # Changelog
2
+
3
+ ## 0.15.2
4
+
5
+ - A review that could not be completed now says so on every tab. The Guide and
6
+ the Assistant were still answering a failed review with "No analysis
7
+ available.", which reads as an absence, while the Issues and Questions tabs
8
+ named the failure. One review told two stories depending on which tab was
9
+ open.
10
+ - The Assistant no longer tells you an analysis is unavailable when you simply
11
+ have not run one yet.
12
+ - The release notes now ship with the CLI, so `prreviewbuddy` carries a
13
+ CHANGELOG.md you can read where it is installed rather than only in a
14
+ repository you may not have.
15
+
16
+ ## 0.15.1
17
+
18
+ - **A review that finds nothing now says so.** "No findings" with the analysis's own provenance
19
+ under it, rather than the same grey line a review with no analysis at all produced. A clean
20
+ review is a result, and it used to be rendered as an absence.
21
+ - **An unusable response from a coding agent now reads as a failure.** It ran, exited cleanly and
22
+ returned something PR Review Buddy could not parse, which has no findings in it either. Those two
23
+ outcomes rendered identically, so the worst case looked like the best one. The failure is
24
+ recorded as `agent_output_invalid` rather than left unclassified beside a git error, which is
25
+ also what tells the two apart when deciding whether a retry is worth offering.
26
+ - A review whose analysis failed no longer reports "Analysis in progress" forever. The session was
27
+ left mid-flight when its job died, so the tabs described a run that had already stopped.
28
+
29
+ ## 0.15.0
30
+
31
+ *A command says what to review, and what to do to it.*
32
+
33
+ ```
34
+ prreviewbuddy review --branch feat/foo review a branch you are not standing on
35
+ prreviewbuddy review --branch feat/foo --update bring that branch's review up to date
36
+ ```
37
+
38
+ Anything that names a target composes with anything that names an operation. `--branch` takes a
39
+ branch, local or remote, and the review is made in a worktree of its own as always, so nothing
40
+ touches your checkout and you do not have to leave the work you are in the middle of.
41
+
42
+ **Three things break.**
43
+
44
+ **The bare argument is gone.** `prreviewbuddy review <pr-url>` is `prreviewbuddy review --pr <url>`,
45
+ and `prreviewbuddy review develop` is `prreviewbuddy review --base develop`. That second one is why
46
+ the argument had to go rather than be extended: a bare word meant the base, so `review my-feature`
47
+ reviewed the branch you were on, *against* `my-feature`. Adding `--branch my-feature`, which means
48
+ review `my-feature`, would have put two spellings of one word in one command with opposite meanings.
49
+ Both old spellings are refused by name and the message says which flag replaces it.
50
+
51
+ **`prreviewbuddy update` is gone.** It is `prreviewbuddy review --update`, and `update --reanalyse`
52
+ is `prreviewbuddy review --reanalyse`. Typing the old command tells you where it went. The gain is
53
+ the reason it moved: `update` with no review took the newest review of the repository you were
54
+ standing in, so two branches reviewed in a row from one directory could only be updated in the order
55
+ they were made. An operation now acts on the review of the target it was given.
56
+
57
+ **A review follows the ref it was made from.** This is the one nobody notices until it matters, and
58
+ it is the reason it is written here. An update picks up commits you have not pushed, where before it
59
+ waited for the push. It no longer follows somebody else's push to the same branch, where before it
60
+ did. Those were not one behaviour: the freshness strip already read `refs/heads/<branch>` while the
61
+ update button read `<branch>@{upstream}`, so each was wrong in the opposite direction and they could
62
+ disagree with each other on the same page. They now answer the same question, and the shorthand
63
+ means your local branch. `--branch origin/feat/foo` follows the remote ref instead, and keeps
64
+ following it even if a local branch of that name appears later.
65
+
66
+ Two refs are two reviews. `feat/foo` and `origin/feat/foo` get a review each, told apart in the
67
+ listing by the ref each follows, because a review that follows one ref cannot honestly be handed
68
+ back to somebody who asked for the other. Reviews made before this release follow their local
69
+ branch, which is what they already did, so nothing you have is duplicated or lost.
70
+
71
+ **Also fixed.** A pull request is compared against the branch it targets. A PR onto `develop` was
72
+ diffed against `main`, which is not a missing feature but a wrong diff: it produced findings about
73
+ code the pull request does not touch. A branch that exists only on the remote can now be reviewed,
74
+ and the review can then be updated and can show its freshness, none of which worked before. And a
75
+ `--base` that does not exist is refused before the worktree is built rather than tens of seconds
76
+ later, as a job failure with a workspace already on disk.
77
+
78
+ ## 0.14.1
79
+
80
+ - `prreviewbuddy agents` said "Run `prreviewbuddy agents <id>`" on its last line, and three other
81
+ messages about agents said `<id>` too. 0.13.1 fixed that placeholder in the help screen and
82
+ nowhere else, so the fix missed the place a person is most likely to be reading about agents when
83
+ they meet it. The guard now covers every string in the module rather than the help alone.
84
+
85
+ ## 0.14.0
86
+
87
+ *PR Review Buddy is a command line tool. The Claude Code plugin is withdrawn.*
88
+
89
+ The plugin reviewed the same branches, in the same way, through a second set of commands that had
90
+ to be kept in step with the first. Everything it did is in the CLI:
91
+
92
+ ```
93
+ npm install -g prreviewbuddy
94
+ prreviewbuddy review
95
+ ```
96
+
97
+ Nothing you have already reviewed is affected. Reviews live in `~/.prreviewbuddy` and are served by
98
+ the same workspace server whichever way they were made. The plugin releases already published stay
99
+ downloadable, and there will be no further ones.
100
+
101
+ Release notes now live in `CHANGELOG.md` at the top of the repository. They were kept inside the
102
+ plugin's packaging, which made the history of the whole product look like the history of one way of
103
+ reaching it.
104
+
105
+ ## 0.13.1
106
+
107
+ - The help screen no longer writes `<id>` for two different things. A review is `<review>`, a
108
+ coding agent is `<agent>`, and the agent lines name what may be typed rather than sending you to
109
+ another command to find out. The names come from the registry, so a new agent cannot leave the
110
+ help behind.
111
+ - The help says where a review ID comes from, and that `update` does not usually need one.
112
+
113
+ ## 0.13.0
114
+
115
+ *A review can be made by Claude Code, Codex or Gemini CLI, and says which one made it.*
116
+
117
+ `prreviewbuddy agents` lists the coding agents this version can use and whether you have them.
118
+ `prreviewbuddy review --agent codex` reviews with one by name, and `prreviewbuddy config set agent
119
+ codex` remembers which to use when you do not. With several installed and nothing chosen, the
120
+ command asks you once, and offers to remember your answer rather than saving it quietly.
121
+
122
+ A review is not owned by an agent. It is a workspace that holds analyses, and each analysis names
123
+ the agent that produced it: `prreviewbuddy update <id> --agent gemini --reanalyse` analyses the same
124
+ commit again with a different agent, in the same review, and the analysis it replaces goes on saying
125
+ who made it. "Reviewed with Codex" appears in Analysis details, on the workspace page and in the
126
+ extension alike.
127
+
128
+ An agent is only listed once it can be confined to reading. That is a condition of being offered at
129
+ all rather than a setting: Codex runs under a read-only sandbox the operating system enforces and
130
+ without the MCP servers configured on your machine; Gemini runs with every writing tool removed from
131
+ the set the model is offered, and with a per-run token that blocks every MCP server, because Gemini's
132
+ own "allow none" setting allows everything.
133
+
134
+ Nothing here asks you for a credential, and there is still no account and no API key. Each agent uses
135
+ the authentication it already has, which is also why `agents` says an agent is installed rather than
136
+ saying it is signed in: finding out would mean spending your quota to draw a list.
137
+
138
+ Two fixes worth naming. A question asked of a review whose job had been swept was answered by the
139
+ default agent rather than by the agent that made the review, which on a Codex review meant Claude
140
+ answering as though it were the review's own. And a run that failed because an agent was not signed
141
+ in offered a Retry that would fail in exactly the same way, because a review keeps the profile it
142
+ was created under; it now says what would actually change it.
143
+
144
+ ## 0.12.18
145
+
146
+ *A review link from Claude Code now knows its way back to the list.*
147
+
148
+ The reviews index is opened by a credential that no single review page is allowed to carry, and the
149
+ only thing that puts that credential into your browser is arriving at the index with it once. A
150
+ review started from the command line has handed you a link that does that since 0.12.2. A review
151
+ started from Claude Code handed you a plain one, so "All reviews" in the left rail refused you on
152
+ the first click, and whether it worked depended on which surface you happened to have started from.
153
+ Every link the plugin gives you now carries the same way back.
154
+
155
+ ## 0.12.17
156
+
157
+ *The packages say which version of Node they need.*
158
+
159
+ Nothing in the product behaves differently. The published command has always declared that it needs
160
+ Node 20, because the release script writes that into the package it ships, but the packages in the
161
+ repository never said so themselves: someone building from source on an older Node got no warning at
162
+ install and a confusing failure somewhere later instead. They now declare it in the one place a
163
+ package manager reads. The version number moves with it so that what is on the registry and what is
164
+ in the repository are the same release.
165
+
166
+ ## 0.12.16
167
+
168
+ *Buddy AI can draw the change as a diagram, a question you have thought better of can be stopped,
169
+ updating a review keeps it describing the same change, the counts tell you what is left rather than what was ever found, you can close a
170
+ finding yourself, the notice about a moved branch appears only when that branch has moved and is a
171
+ status line rather than a page of explanation, your reviews list is reachable from the review you
172
+ are reading, and every way back is named for the product you installed.*
173
+
174
+ **You can stop a question.** Asking Buddy AI something committed you to it: the field and the button
175
+ went dead and there was no way out but reloading the page, for up to three minutes. **Ask** now
176
+ becomes **Stop** while an answer is being worked on, and pressing it ends the work rather than
177
+ merely the waiting: the question stops being read, the process reading it is signalled, and your
178
+ subscription stops being spent on an answer you no longer want. The question stays in the panel
179
+ marked `Stopped.` and its words go back into the box, so a question you meant to phrase differently
180
+ takes one edit rather than retyping. Closing the tab or reloading mid-answer stops it too, for the
181
+ same reason.
182
+
183
+ **Buddy AI can draw the change.** Some things are faster to see than to read. **Show implementation
184
+ diagram** on the Overview asks Buddy AI for a diagram of how the change works, and **Diagram this
185
+ theme** on a theme does the same for one slice of it. The drawing opens in the main pane rather than
186
+ in the assistant panel, so it is something to read the review beside rather than a message that
187
+ scrolls away, and it is kept with the review: reopen the review tomorrow and it is still there.
188
+ Buddy AI chooses the shape from the change itself, a flow, a set of modules, a sequence of calls.
189
+ **Regenerate** asks for another whenever the first is not the one you wanted, and the one you have
190
+ stays on screen until the new one arrives. Each diagram folds away from its title, so a review with
191
+ several of them stays readable. Updating a review leaves its diagrams alone and says
192
+ which commit each was drawn from, because a picture you asked for is not ours to delete.
193
+
194
+ **A question keeps the shape you typed it in.** A question written over several lines, or with a
195
+ pasted stack trace in it, came back in the panel as one run-on line: the line breaks were there in
196
+ what was asked and in what was stored, and only the display of them collapsed. Your questions now
197
+ read back exactly as you wrote them, live and after a reload.
198
+
199
+ **The counts say what you still have to do.** A review whose fifteen findings had all been fixed and
200
+ whose seven questions had all been answered still read `Issues 15 · Questions 7` in the sidebar, over
201
+ a page where every card said RESOLVED or ANSWERED, and the Questions heading claimed "7 of 7
202
+ unanswered" above seven answers. The sidebar now counts what is open, and shows a tick where nothing
203
+ is: a theme whose findings are all fixed, a review with nothing left to read. Issues and Questions
204
+ each split into the work still to do and, behind a disclosure below it, what has been dealt with, so
205
+ nothing is thrown away and nothing has to be scrolled past. The Overview keeps both numbers, the open
206
+ count and how many of the original findings were closed, because a review that fixed ten things did
207
+ more than one that found none. On the reviews list, a review with every finding resolved says so.
208
+
209
+ **You can dismiss a finding you have decided is fine.** Until now only a commit could close one, so
210
+ a finding you had read, thought about and decided needed no action sat in your sidebar until the
211
+ author happened to push something. Dismiss is on every finding, and a dismissed one stops counting
212
+ and moves in with the ones the commits fixed. Which of the two closed it is kept: the pile is called
213
+ "Resolved by the new commits" when they did all of it, "Dismissed by you" when you did, and "Dealt
214
+ with" when it is both, and each card says which. Your decisions now survive an update, too, rather
215
+ than coming back the next time you press Analyse new changes. The one thing that reopens a dismissal
216
+ is the analysis reporting that the code underneath it has changed: the finding returns to your list
217
+ marked "Changed since you dismissed this", with your decision still on it, and Dismiss again puts it
218
+ back once you have looked. Questions work the same way and always have, and Mark answered now moves
219
+ the question in with the answered ones rather than leaving it sitting among the open ones, taking the
220
+ theme heading with it when it was the last question under it, and un-answering one puts it back
221
+ under that heading rather than at the bottom of the tab. Answering the last one leaves a single
222
+ divider above the answered pile instead of two with a gap between them.
223
+
224
+ **The Files tab shows the code that was reviewed.** Opening a file said "That file is not in the
225
+ working tree. This change may have deleted it." on a row badged ADDED, which is two claims that
226
+ cannot both be true: the pane was reading your checkout, and a checkout on any other commit does not
227
+ have the files the change created. The subtler half was worse, because nothing announced it. A file
228
+ that still existed but had moved on since the review opened without complaint and showed you today's
229
+ code under the review's line numbers. A review is a description of one commit, so the pane now reads
230
+ that commit, says which version you are looking at, and reads your working tree only where that is
231
+ what was reviewed: a review of uncommitted work, or a commit this repository no longer has. Open in
232
+ editor still opens your own copy of the file, and where the two differ the pane says so, on that
233
+ file, before you press it. Where your working folder has no such file the button is disabled rather
234
+ than opening an empty buffer. A file the change really did delete is named as deleted.
235
+
236
+ **Updating a review no longer swells it to the whole of your default branch.** A pull request of
237
+ four files came back reporting three hundred after one update. The findings were right; everything
238
+ around them described a different change, including the Files tab, the count in the header and the
239
+ diff Buddy AI answers from. A review records what it was compared against by the name you would use
240
+ for it, `main`, and rebuilding it looked that name up again in your own clone, where `main` is your
241
+ local branch and is behind the remote from the first day you do not pull. Every upstream commit you
242
+ had not fetched arrived in the comparison. A review now records the exact ref it was compared
243
+ against and rebuilds against that one, and a review made before this release resolves the remote
244
+ branch first, which is the one it was made from.
245
+
246
+ **The freshness strip measures the branch your review is of, not whatever you have checked out.** A
247
+ pull request is reviewed in a checkout of its own and you never stand on its branch, so the strip was
248
+ comparing the review against some unrelated branch and announcing "Code rewritten", with a file count
249
+ to match, about a review that was exactly current. It now reads the pull request's own branch as this
250
+ repository last saw it, and a review of a local branch reads that branch by name, so wandering off to
251
+ look at something else no longer makes a review look stale. More details says which branch it
252
+ compared against, and where that is a copy fetched from the remote it says so, because Check review
253
+ status re-runs the comparison against what you already have and only Update review goes and fetches
254
+ a newer one. Where the branch is not in this repository at all, which is what a pull request from a fork
255
+ looks like, it says it cannot compare rather than measuring against something else and calling that
256
+ an answer.
257
+
258
+ **Where your own working folder is checked out is no longer treated as review news.** The header
259
+ said "Checkout differs" in amber over a review whose code was exactly current, and opening it showed
260
+ a panel headed "Up to date", which is two parts of the same page disagreeing. It was also
261
+ unanswerable: it compared the commit you personally have open against the pull request's, and
262
+ reading a pull request from your own `main` puts you on an earlier commit by definition, so nothing
263
+ you could press ever cleared it. The freshness panel is about the review now and says nothing about
264
+ your working folder at all. The one moment the difference has a consequence is opening a file in
265
+ your editor, and the Files tab answers that where it happens: it compares that one file, byte for
266
+ byte, and says "your editor will show a different version" only when it is true of the file you are
267
+ looking at. A folder on an earlier commit still holds an identical copy of everything the change did
268
+ not touch, and there was never anything to say about those.
269
+
270
+ **Re-checking the conversation no longer takes the panel with it.** The control is a phrase inside
271
+ a sentence now, and while it ran it was replacing its own words, leaving "Checking... 1s to refresh
272
+ comments and resolved threads" with the status message jammed onto the end of the line. The whole
273
+ line becomes the progress message for as long as the re-check runs, and the panel that control was
274
+ pressed in is open again when the page comes back, with its own fresh "Last checked".
275
+
276
+ **Less furniture between you and the review.** The rule under the count line on Issues and
277
+ Questions, and the one under the pull request title on PR context, are gone: the blocks below them
278
+ were already visibly blocks, so the line was drawing a boundary the layout had drawn. On PR context
279
+ the paragraph explaining Re-check the conversation now runs the full width of the view instead of
280
+ stopping short of its own right edge. And where the note above the Issues list tells you to use
281
+ Re-check the conversation, that phrase is now the control: it takes you to the view that holds it.
282
+
283
+ **The freshness panel says what it means in the words you would use.** The status is **Review up to
284
+ date**, because "Up to date" could have meant your local code was current when what is meant is that
285
+ the review has read the newest commit on the pull request. Check again and Start fresh are **Check
286
+ review status** and **Start a new review**, because the first checks whether the reviewed state
287
+ still matches and the second makes a separate review rather than updating this one. More details
288
+ lost the phrases that described our plumbing rather than your review: a branch "as current as your
289
+ last fetch" is now the version you already have locally, and re-checking the conversation is one
290
+ sentence with the control inside it rather than an explanation followed by a button repeating its
291
+ own name. A review that is current has no More details at all: the two sentences that were behind it,
292
+ the commit the review is of and when the conversation was last read, are simply on the panel, because
293
+ a disclosure over two lines makes a healthy review look like it is holding something back. The
294
+ summary stays where it earns its click, on a review that has changed, where it holds the explanation
295
+ of Update review and the way to dismiss the warning. Every control in the panel is legible without
296
+ being pointed at, Close is an icon at the end of the row rather than a word competing with the
297
+ decisions beside it, More details stays where you clicked it instead of jumping to the next line as
298
+ it opens, and the panel uses the width it has instead of stopping short of its own right edge.
299
+
300
+ **The strip that tells you a branch has moved is a third of the size.** It had one thing to say and
301
+ was taking five rows to say it: what happened, what that means, what you can do, a sentence about
302
+ what the button does, and a block of footnotes about your checkout and the pull request
303
+ conversation. All of that is still there. Only the first three lines are on the screen, ending in
304
+ `More details`, and the rest is one click away when you want it. The heading is bigger, the lines
305
+ are shorter, and the amber no longer runs the full width of the window.
306
+
307
+ **"All reviews" works from a review page now.** The list of your reviews is opened by its own
308
+ credential, separate from the ones that open a single review, and a browser is given that credential
309
+ by opening the list once. Nobody using the command line was ever sent there, so the first click of
310
+ that link refused them, every time. The link `prreviewbuddy review` prints now carries the browser
311
+ through the list on its way to your review, so the way back is already there when you look for it.
312
+ Nothing changed about what a review page can reach: it still holds only its own key.
313
+
314
+ **If you do land on that refusal, it now explains itself.** It used to be a line of raw JSON in the
315
+ address bar. It is a page, it says what happened, and it names the one command that fixes it.
316
+
317
+ **The way back to your reviews is named for the product you are actually running.** Every place that
318
+ told you how to reach your reviews again named a Claude Code slash command, including the places a
319
+ command line user is most likely to end up: the refusal above, the bookmark page, the notice after
320
+ you stop the server, and the confirmation before you stop it. Each of them now names the command
321
+ that exists on your machine.
322
+
323
+ ## 0.12.1
324
+
325
+ *Repositories with checkout hooks can be reviewed, and a failed review says why it failed.*
326
+
327
+ **A repository with its own checkout hooks no longer fails every review.** Setting up the isolated
328
+ checkout runs the same git machinery as switching branches, which meant your repository's
329
+ `post-checkout` hook ran inside it. Husky's hook asks git a question that a freshly made checkout
330
+ cannot answer, so it failed, and took the review down with it before any code was read.
331
+ Those hooks are now switched off for the review's checkout. They were written for a person about to
332
+ work in a directory, and nobody works in this one: it is read once and deleted.
333
+
334
+ **A review that stops now tells you what stopped it.** The progress block redraws itself in place,
335
+ and its last redraw was landing on top of the failure message and erasing most of it. What
336
+ disappeared was exactly the useful part: the underlying error, the line saying the review can be
337
+ resumed where it stopped, and the link to it. The block also miscounted its own height whenever a
338
+ line was too long for the window, which is most windows, since one of those lines is the path to
339
+ your repository.
340
+
341
+ **A checkout that failed halfway no longer blocks the next attempt.** Some failures leave the
342
+ directory behind, and the retry then failed on that instead, reporting a second problem that hid the
343
+ first.
344
+
345
+ ## 0.12.0
346
+
347
+ *Reviews read the pull request conversation now, and say why when they cannot.*
348
+
349
+ **Pull request conversations are now actually included in reviews.** Fetching one used to take a
350
+ little over four minutes against a budget of two, so it timed out every time, on every review, and
351
+ the review was quietly assembled from the code alone. It now uses the GitHub CLI you are already
352
+ signed in to, and comes back in about two seconds. Measured on four real pull requests: 1.5 to 2.1
353
+ seconds, against 242 seconds before.
354
+
355
+ That changes what a review can tell you. A finding can now say a colleague already raised this, and
356
+ whether their thread is still open, because there is a conversation to check it against.
357
+
358
+ **And it says so when it could not.** If the conversation is unavailable, the review now tells you
359
+ why instead of silently looking complete. A repository with no pull request stays quiet, because
360
+ nothing is missing from it.
361
+
362
+ **A second GitHub account no longer reports you as signed out.** If another account in your keyring
363
+ had an expired token, the check failed on that one, while the account it would really have used was
364
+ working perfectly.
365
+
366
+ **The freshness panel is one panel.** It was three warnings stacked, each with its own amber dot, so
367
+ a rewritten branch and a checkout that is merely behind shouted equally loudly and the action was
368
+ buried in the middle. It now reads as one thing: what the status is, one sentence on what that means
369
+ for the findings below, then **Update review** as the only control wearing a colour. About a third
370
+ shorter.
371
+
372
+ **Following a theme no longer loses the page.** Clicking a theme in the left rail could scroll the
373
+ header and the status banners off the top of the window, with no scrollbar to bring them back. The
374
+ page is one screen tall now and the panes inside it scroll, which is what was always intended.
375
+
376
+ **Reviewing a merged pull request explains itself.** It used to refuse with advice about switching
377
+ branches and committing your work, which is not something a person who pasted a link can act on. It
378
+ now says the request is already merged and there is nothing left to compare.
379
+
380
+ Smaller things: scrollbars are thinner and no longer disappear on macOS until you touch them; the
381
+ workspace and the terminal agree on what to call a paused review, a rewritten branch and starting
382
+ fresh, having drifted into two words for each; and an authentication failure now names which tool
383
+ could not sign in, since a review runs through two of them and only one is ever the problem.
384
+
385
+ ## 0.11.10
386
+
387
+ *A list of reviews now says what tells two of them apart.*
388
+
389
+ A review of a branch is titled by the subject of that branch's oldest commit, which is the
390
+ convention a forge uses, and it means a branch cut from the tip of another inherits that branch's
391
+ title. Two entries then read as one review listed twice. Reviewing a branch twice did the same
392
+ thing, and so did two repositories on one machine. Each entry now names the repository, what the
393
+ review was compared against, how big the change is, and which analysis of its branch it is, in the
394
+ terminal and in the list a Claude Code session is handed. The browser index has shown these since
395
+ it was rebuilt around branches; the two lists had not caught up.
396
+
397
+ ## 0.11.9
398
+
399
+ *A release now carries only the files its own build produced.*
400
+
401
+ The workspace page is the same on every surface, so every surface built it into one shared
402
+ directory and copied the whole of that directory into its own release. Nothing in there could be
403
+ cleared without one build deleting another's output, so a file left behind by an earlier build, or
404
+ by a different surface, stayed and was shipped, and the workspace server serves whatever it finds
405
+ beside it. Each copy is now built by one thing and cleared before it is written. The page itself is
406
+ unchanged.
407
+
408
+ ## 0.11.8
409
+
410
+ *Updates and re-reads use the account that made the review, and a refused prompt says where.*
411
+
412
+ The same fix as the Ask panel had in 0.11.7, applied to the two places that still read the
413
+ workspace server's own environment instead of the review's. Both put their result on the page under
414
+ the review's name, so both owed the reader the review's own agent and account rather than whichever
415
+ shell happened to start the server first. Reviews old enough to have lost their job record are
416
+ unaffected and behave as before.
417
+
418
+ A refused prompt now says where the problem is.
419
+
420
+ A review is refused rather than sent if its prompt names the repository the isolated checkout exists
421
+ to keep the agent away from. The refusal said that it had happened and nothing more, which left
422
+ nowhere to look in a prompt of several hundred kilobytes. It now names the position and quotes the
423
+ surrounding text, which is what says whether the path was written into the prompt or arrived quoted
424
+ inside a pull request comment. The rule itself is unchanged: exactly the same prompts are refused.
425
+
426
+ ## 0.11.7
427
+
428
+ *A failing agent no longer closes every open review, and the Ask panel uses the right account.*
429
+
430
+ A review prompt is hundreds of kilobytes, and an agent that exits before reading it closes the pipe
431
+ mid-write. That was an unhandled error in the workspace server, which is one long-lived process
432
+ serving every review on the machine, so a single agent that could not start closed all of them. The
433
+ failure now reports whatever the agent said on its way out, and everything else stays open.
434
+
435
+ Questions in the Ask panel are answered by the account that made the review.
436
+
437
+ Which Claude answers used to depend on which shell happened to start the workspace server first,
438
+ because the panel read the environment from there rather than from the review. A review made under
439
+ one account and asked about under another was answered by a Claude with different access, and
440
+ nothing on the page said so. Older reviews whose job records have aged out are unaffected and
441
+ behave as before.
442
+
443
+ ## 0.11.6
444
+
445
+ *`--base` decides which review you get, not only which one is made.*
446
+
447
+ `prreviewbuddy review --base develop` used to hand back the newest review of the branch whatever it
448
+ had been compared against, and say a review of what you asked for already existed. A review is of a
449
+ comparison rather than of a branch, so a base you name is now part of the question: you get the
450
+ review made against that base, or a new one, and never somebody else's comparison under your
451
+ branch's name.
452
+
453
+ Every review now says what it was compared against, in the same line that says how old it is. That
454
+ one is for the far commoner case, the plain command, where the comparison is the one thing about a
455
+ review you cannot see from the outside.
456
+
457
+ ## 0.11.5
458
+
459
+ *A finished review records what it actually covered.*
460
+
461
+ The Overview of a review made by the isolated pipeline showed a plain file count, because the
462
+ coverage, the pull request discussion counts and the time the analysis took were never written
463
+ down. The code that knew how to work them out was only ever reached by a preview script. Reviews
464
+ now carry all of it, so "50 of 482 files" reads as what it is, and a review that was given twelve
465
+ unresolved threads says so instead of looking identical to one that was given none.
466
+
467
+ "Update review" recounts the same facts against the change it just re-read, rather than carrying
468
+ forward numbers that described the analysis it replaced.
469
+
470
+ Older reviews are unaffected and keep rendering as they did; run a review again to get the fuller
471
+ Overview.
472
+
473
+ ## 0.11.4
474
+
475
+ *One review at a time, known to the machine rather than believed by each process.*
476
+
477
+ A review that had been running quietly for over half an hour was recorded as stopped, which put
478
+ Retry on the page. Pressing it started a second analysis in the checkout the first one was still
479
+ reading. Both are now refused: a review being made holds a claim that every surface can see, and
480
+ nothing offers to restart it while that claim is held. A review whose process really did stop
481
+ releases it, and Retry works exactly as before.
482
+
483
+ ## 0.11.3
484
+
485
+ *A review that had finished no longer shows as still being made.*
486
+
487
+ **A finished review opens.** Reviews made by this version's isolated pipeline were stored complete
488
+ but still marked as being made, so the workspace showed the right counts in the rail and "Analysis
489
+ in progress" in every pane, on a review that had actually finished. If you have a review stuck like
490
+ that, this version does not repair it: run the review again.
491
+
492
+ ## 0.11.2
493
+
494
+ *The link printed at the end of a review is one that still works.*
495
+
496
+ **The link at the end of a review is the one that works.** The command line printed the address it
497
+ had been given when the review started, and a review takes minutes: if the workspace server had
498
+ been restarted in between, that address no longer went anywhere. It is now worked out again at the
499
+ moment it is printed, on the finished review and on one that stopped.
500
+
501
+ ## 0.11.1
502
+
503
+ *Asking for a review while one is being made now says exactly that.*
504
+
505
+ **Asking for a review while one is being made now says so.** Running the review command again on a
506
+ branch whose review is still in progress used to report that a review already existed and offer to
507
+ bring it up to date or start a fresh one. Neither of those is a thing you can do to an analysis
508
+ that has not finished once. It now tells you it is being made right now, gives you the same link,
509
+ and leaves it at that.
510
+
511
+ ## 0.11.0
512
+
513
+ *Every review runs in a checkout of its own, made in the background, with a command line alongside.*
514
+
515
+ **Every review now runs in a checkout of its own.** A worktree is made under
516
+ `~/.prreviewbuddy/worktrees`, detached at exactly the commit being reviewed, and the analysis reads
517
+ that and only that. Your own checkout is never read and never written while a review runs, so you
518
+ can keep working, switch branch, rebase, or leave the tree dirty and none of it reaches the review.
519
+ The assistant answers from that same pinned checkout, so its answers describe the code you are
520
+ reviewing rather than whatever you happen to have open.
521
+
522
+ **One command does the whole thing.** `/prreviewbuddy:review` resolves what to review, records the
523
+ job and hands back a link, and the review is made in a separate process. Your session is free the
524
+ moment you have the link. Pass a pull request number or a link to one to review that instead of the
525
+ current branch, and use `/prreviewbuddy:fresh-review` to review a branch again alongside the review
526
+ you already have.
527
+
528
+ **A review that stops now says so.** If whatever was making a review goes away, a session you
529
+ closed or a terminal you killed, the page used to sit on a spinner forever. It now tells you the
530
+ review stopped, and offers Retry, which picks up from the step it had reached rather than starting
531
+ over.
532
+
533
+ **Nothing is left lying around.** The isolated checkouts are kept for six hours after a review
534
+ finishes, because that is what the assistant reads while you are still asking questions, and are
535
+ then removed. Your reviews themselves are untouched by this and are still kept for thirty days.
536
+
537
+ **A command line, if you would rather not open Claude Code.** `prreviewbuddy review` makes the same
538
+ review, through the same engine, into the same workspace, with no plugin loaded. There is still no
539
+ account, no API key and no configuration: it runs through the agent you have already installed and
540
+ signed in to.
541
+
542
+ **Two things are gone on purpose.** Reviewing uncommitted changes has been removed: PR Review Buddy
543
+ reviews committed code. And a dirty, diverged or detached checkout no longer blocks a review, since
544
+ the review is not made from your checkout any more and there is nothing left for that check to
545
+ protect.
546
+
547
+ ## 0.3.1
548
+
549
+ *A way back into a review after the server restarts, conversation intact.*
550
+
551
+ **Getting back into a review.** `/prreviewbuddy:start-server` starts the workspace server and lists
552
+ your recent reviews with working links. Stopping the server never deleted anything — the reviews
553
+ have always been on disk — but their links carry the port, and the server takes a new one each time
554
+ it starts, so the old link pointed at nothing. Now there is a way back.
555
+
556
+ **Your conversation comes back with it.** A reopened workspace shows the questions you already
557
+ asked and the answers you got. They were always stored, and the assistant was already using them to
558
+ ground new answers; the page simply was not showing them, which read as forgotten.
559
+
560
+ **Stopping now asks properly.** A dialog that says what happens, instead of a button that relabels
561
+ itself into a confirmation — that version could leave a stale label behind after the server had
562
+ already stopped. `/prreviewbuddy:stop` is now `/prreviewbuddy:stop-server`, to pair with
563
+ `start-server`.
564
+
565
+ ## 0.3.0
566
+
567
+ *The Files tab becomes a browser, the assistant resizes, and the server can be stopped.*
568
+
569
+ **The Files tab is now a file browser.** Every changed file, grouped under the theme that owns it,
570
+ with a search box and the finding counts each file carries. Click any file to read it in place —
571
+ the same viewer an issue or a question expands, because the point is that you can go and look at
572
+ whatever you like, not only at what the review pointed to.
573
+
574
+ **The assistant is resizable.** Drag its left edge; it remembers the width between sessions and
575
+ across reviews. Arrow keys move it too, and double-clicking the edge puts it back. It starts wider
576
+ than it used to, which is the honest position: it is a pane of the workspace, not a chat widget
577
+ docked to the side.
578
+
579
+ **A way to stop the workspace server.** It stays running after Claude Code closes, on purpose, so
580
+ your workspace keeps working — but until now nothing ever ended it. **Stop server** in the header,
581
+ or `/prreviewbuddy:stop` once the tab is closed.
582
+
583
+ Smaller things: "Explain in simple terms" now uses the fuller wording the extension uses, analogy
584
+ and all. The workspace has a favicon, so its tab is findable among twenty others.
585
+
586
+ ## 0.2.2
587
+
588
+ *Stops instead of building a review of nothing.*
589
+
590
+ **Says so when there is nothing to review.** Running the command on `main` straight after a pull
591
+ compared the branch against itself, found no changes, and went ahead and built a review of nothing
592
+ — a workspace with empty themes, or invented ones. It now stops and tells you what it compared:
593
+
594
+ > No changes found to review — main is the base it would be compared against. Switch to the branch
595
+ > containing your changes, or review uncommitted changes.
596
+
597
+ To review work you have not committed yet, ask for it: *"review my uncommitted changes"*.
598
+
599
+ ## 0.2.1
600
+
601
+ *Fixes the command name to `/prreviewbuddy:review`.*
602
+
603
+ **Fixes the command name.** The documented `/prreviewbuddy` never worked: Claude Code namespaces
604
+ plugin commands as `plugin:command`, so it answered `Unknown command`. The command is now
605
+ `/prreviewbuddy:review`, which reads better than the `/prreviewbuddy:prreviewbuddy` the old file
606
+ name would have produced.
607
+
608
+ If you downloaded 0.2.0, this is the only thing that changes for you — the review itself is
609
+ identical. Take 0.2.1 and use the new command.
610
+
611
+ ## 0.2.0 — first release
612
+
613
+ *The first release, described by what it does rather than what changed.*
614
+
615
+ > Shipped documenting the command as `/prreviewbuddy`, which does not resolve. Corrected below;
616
+ > 0.2.1 renames it to `/prreviewbuddy:review`.
617
+
618
+ The first build outside the workshop. Everything here is new to you, so this is what it does
619
+ rather than what changed.
620
+
621
+ **A review you work through, not a wall of text.** `/prreviewbuddy:review` in any git repository
622
+ turns the current branch into a workspace: a suggested path through the change in the order
623
+ worth reading it, findings that cite real lines, and questions worth putting to the author.
624
+ Claude Code does the analysing and reads the surrounding repository, so a finding can rest on
625
+ code the diff never showed.
626
+
627
+ **Citations open in place.** Click a file on a theme, or an issue's location, and the code
628
+ opens under it with the cited line marked. **Open in ...** hands it to your editor — VS Code
629
+ by default, configurable.
630
+
631
+ **An assistant that already has the context.** Ask about a finding without explaining the
632
+ change first. It answers from the guide, the diff and the repository, and it keeps working
633
+ after the Claude Code session that produced the review has closed.
634
+
635
+ **Every changed file is accounted for.** Large changes are prioritised, never truncated: the
636
+ review path says where to start, and the Files view lists everything else. On a big change not
637
+ every diff travels inline, and the analysis reads those files from the repository instead.
638
+
639
+ **Several reviews at once.** Two Claude Code sessions, or two worktrees, give you two
640
+ independent workspaces. A workspace opened from a linked worktree names the checkout in its
641
+ header and tab title, so near-identical branches stay tellable apart.
642
+
643
+ **Nothing leaves your machine.** No account, no API key, no server of ours. Reviews live in
644
+ `~/.prreviewbuddy/`, the workspace is served on `127.0.0.1` behind a per-review token, and the
645
+ local usage log has no network path out of it at all — `PRB_TELEMETRY=off` if you'd rather it
646
+ weren't written.
647
+
648
+ ### Known limits
649
+
650
+ Worth knowing before you hit them:
651
+
652
+ - **Stopping the workspace server** needs `pkill -f 'dist/server.js'`. There is no command yet.
653
+ - **Built and tested on macOS.** Linux and Windows should work — the browser launch handles
654
+ all three — but neither has been run in anger. Reports welcome.
655
+ - **The assistant needs `claude` on your `PATH`**, since it shells out to `claude -p`. If it
656
+ isn't there, the panel says so rather than failing quietly.
657
+ - **Reviews are local and private, which also means unshareable.** There is no link to send a
658
+ colleague.
659
+ - **The review path is a priority order, not a coverage claim.** A file it doesn't send you to
660
+ was not judged unimportant and was not hidden — it just isn't where you should start.
661
+
662
+ ### Feedback
663
+
664
+ **Send feedback** in the workspace header. It carries the version and your OS, and not your
665
+ repository, your code, or the review.