prreviewbuddy 0.91.1 → 0.93.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,58 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.93.0
4
+
5
+ **Re-check reconciles your findings with the PR discussion.** **Re-check in PR context** used to
6
+ fetch the latest comments and correct who raised what, and leave every issue and question as it
7
+ was until Update or a card's own Reassess ran. It now runs the same discussion pass as Update,
8
+ against the commit the review read: a comment that answers a question answers it, a comment that
9
+ settles an issue resolves it, and a concern a comment raises becomes a new issue once it is
10
+ confirmed in the reviewed code. A claim that something was fixed is never taken on trust, and a
11
+ thread resolved on the forge is not, by itself, a fix: either stays open for Update to check against
12
+ newer commits, which remain Update's job. Reassess on a single card is unchanged.
13
+
14
+ The steps show while it runs (fetching the discussion, preparing the reviewed code, reassessing
15
+ issues and questions), and Cancel stops it. The result says what happened: the findings that
16
+ changed, that no findings changed, or, when the comments were fetched but the reassessment failed,
17
+ that the discussion was refreshed and the findings were not, with **Try again**. When nothing in
18
+ the discussion is new since the findings were last assessed, no model is asked.
19
+
20
+ The discussion counts as analysed only once a Re-check or an Update has finished reassessing it,
21
+ and only as far as it read, so a comment that arrives during a Re-check is still new to the next
22
+ one. A Re-check never stands in for an Update, and the last update's outcome is left as it was.
23
+
24
+ ## 0.92.0
25
+
26
+ **Older issues catch up on Update.** An issue from an earlier review that is still outstanding now
27
+ gains its summary the next time Update finds new commits or new discussion. The summary is written
28
+ from the evidence the review already holds plus what the update read, and may land in any of the
29
+ four groups. It is a rewording, not a re-check: confidence, severity and the technical account stay
30
+ as they were. Resolved, dismissed and closed issues keep the card they had, and an Update that finds
31
+ nothing new still makes no analysis and changes nothing.
32
+
33
+ **To fix.** Besides **To verify** and **To decide**, a card can now name the change that would
34
+ correct it, marked **To fix**, when the evidence supports one. The line above the issues counts
35
+ fixes separately. Issues are grouped by what they cause and how well that is shown, never by the
36
+ kind of file: a wrong step in a recovery runbook can be a failure.
37
+
38
+ **Questions lead with what they mean.** Each question from a new analysis opens with the question in
39
+ plain terms, why the answer matters, and what is needed. The original question, its reasoning and its
40
+ files are under **Technical context** on the card. Answers so far, including a partial one, stay in
41
+ view. Updates keep each question's framing true, restate it to name only what is still open when part
42
+ of it is answered, and write one for an older question still open.
43
+
44
+ **No leftover notes.** When an update answers a question or changes an issue's status without
45
+ saying anything new about it, the card no longer shows the previous round's note beside the new
46
+ status. Before, a question could read as answered with "this commit did not change it" underneath.
47
+
48
+ **Quieter cards.** The age of the pull request discussion is one line, "PR discussion checked 2 days
49
+ ago", with its explanation one click away and **Re-check in PR context** beside it. Cards are
50
+ tighter, and **Technical details** shares a row with the card's actions.
51
+
52
+ For coding agents, `list_findings` and `findings --json` now carry each issue's `confidence` and
53
+ each question's `framing`, and `next.kind` may be `fix`. `get_finding` carries the same, beside the
54
+ original technical text.
55
+
3
56
  ## 0.91.1
4
57
 
5
58
  **Issues lead with what they mean.** Each issue from a new analysis now opens with its consequence:
package/dist/main.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { $ as readAskRequest, $a as runnableAgents, $i as explanationOf, Aa as TargetError, Ar as attemptIdOf, At as UpdateAlreadyRunningError, Ba as agentIdOf, Bt as append, Da as resolveTarget, Dt as parkedUpdateRefusal, E as relativeTime, Ea as kissOutcome, Er as forgeResolver, F as spawnRunner, Ft as prepareReview, G as reviewTag, Ga as STORE_ROOT, Gr as isClaimed, Gt as recordTelemetryUploadConsent, H as findingRef, Ha as readAgentPreference, Hr as purposeOf, I as applyUpdate, Ia as git, It as settleReview, J as forgetAskRequest, Ji as reviewerDispositions, Jr as followedRefName, Jt as BUILD_VERSION, Ka as AGENT_IDS, Kt as telemetryUploadConsent, L as modelProvenanceOf, Lr as PHASES, Lt as reanalyseReview, Mt as runningJobs, Na as AmbiguousRefError, Nr as isTerminal$1, Nt as failureOf, P as runDetached, Pr as loadJob, Qa as parkedReason, Ra as resolveAgent, T as runBatch, Ta as WITHHELD_REASON, Ua as writeAgentPreference, Ui as isIssueOutstanding, Ur as clearClaim, Ut as stamp, Vr as progressSteps, Wa as CONFIG_PATH, Wi as isQuestionOutstanding, Wr as driverGone, Wt as deliver, Xa as detectAgents, Y as interruption, Ya as agentIdentityOf, Yi as verdictClosure, Yt as PACKAGE_NAME, Z as isTerminalAsk, Za as isAgentId, _t as parseWorkspacePort, at as healthyPort, br as findExistingReview, bt as writePortPreference, ca as findingAssessment, di as reviewedRepositories, dr as MANAGED_ROOT, dt as stopServer, et as recordAskAccepted, fi as summarise, ft as workspaceUrl, gr as removeWorktree, gt as MIN_WORKSPACE_PORT, hr as readMarker, ht as MAX_WORKSPACE_PORT, i as deleteReview$1, ii as matchingWorkspaceIds, it as ensureServer, j as RUNNER_KINDS, jt as liveUpdateFor, k as queueForReview, kr as allJobs, li as recentWorkspaces, mi as workspaceRevision, mt as DEFAULT_WORKSPACE_PORT, ni as lineagePosition, nt as bootstrapUrl, o as liveJobsFor, oi as positionInLineage, ot as readServerRecord, q as endAskRequest, qa as agentById, qt as telemetryUploadEnabled, ri as loadWorkspace, s as wasBlocked, sr as modelHelpLines, st as reviewsUrl, t as MCP_SERVER_INFO_NAME, tt as readIndexToken, u as recordKissRun, ua as findingStatus, ui as reviewedCommit, vr as describeMovement, x as batchIdentity, xt as COMMIT_REVIEW_CANNOT_UPDATE, yr as describeSubject, yt as statedWorkspacePort, za as resolveModel, zt as startJob } from "./mcp_tools-BR7_XprF.js";
2
+ import { $ as readAskRequest, Br as progressSteps, Dt as parkedUpdateRefusal, E as relativeTime, Ea as resolveTarget, F as spawnRunner, Fa as git, Ft as failureOf, G as reviewTag, Ga as AGENT_IDS, Gt as stamp, H as findingRef, Ha as writeAgentPreference, Hi as isIssueOutstanding, Hr as clearClaim, Ht as append, I as applyUpdate, Ir as PHASES, J as forgetAskRequest, Ja as agentIdentityOf, Ji as verdictClosure, Jt as telemetryUploadConsent, Ka as agentById, Kt as deliver, L as modelProvenanceOf, La as resolveAgent, Lt as prepareReview, Ma as AmbiguousRefError, Mr as isTerminal$1, Mt as UpdateAlreadyRunningError, Nr as loadJob, Nt as liveUpdateFor, Or as allJobs, P as runDetached, Pt as runningJobs, Qa as runnableAgents, Qi as explanationOf, Ra as resolveModel, Rt as settleReview, T as runBatch, Ta as kissOutcome, Tr as forgeResolver, Ua as CONFIG_PATH, Ui as isQuestionOutstanding, Ur as driverGone, Va as readAgentPreference, Vr as purposeOf, Vt as startJob, Wa as STORE_ROOT, Wr as isClaimed, Xa as isAgentId, Xt as BUILD_VERSION, Y as interruption, Ya as detectAgents, Yt as telemetryUploadEnabled, Z as isTerminalAsk, Za as parkedReason, Zt as PACKAGE_NAME, _r as describeMovement, _t as parseWorkspacePort, ai as positionInLineage, at as healthyPort, bt as writePortPreference, ci as recentWorkspaces, di as summarise, dt as stopServer, et as recordAskAccepted, ft as workspaceUrl, gt as MIN_WORKSPACE_PORT, hr as removeWorktree, ht as MAX_WORKSPACE_PORT, i as deleteReview$1, it as ensureServer, j as RUNNER_KINDS, k as queueForReview, ka as TargetError, kr as attemptIdOf, la as findingStatus, li as reviewedCommit, mr as readMarker, mt as DEFAULT_WORKSPACE_PORT, ni as loadWorkspace, nt as bootstrapUrl, o as liveJobsFor, or as modelHelpLines, ot as readServerRecord, pi as workspaceRevision, q as endAskRequest, qi as reviewerDispositions, qr as followedRefName, qt as recordTelemetryUploadConsent, ri as matchingWorkspaceIds, s as wasBlocked, sa as findingAssessment, st as reviewsUrl, t as MCP_SERVER_INFO_NAME, ti as lineagePosition, tt as readIndexToken, u as recordKissRun, ui as reviewedRepositories, ur as MANAGED_ROOT, vr as describeSubject, wa as WITHHELD_REASON, x as batchIdentity, xt as COMMIT_REVIEW_CANNOT_UPDATE, yr as findExistingReview, yt as statedWorkspacePort, za as agentIdOf, zt as reanalyseReview } from "./mcp_tools-DbFR9Z90.js";
3
3
  import { basename, dirname, isAbsolute, join, resolve } from "node:path";
4
4
  import { spawn } from "node:child_process";
5
5
  import { existsSync, mkdirSync, readdirSync, realpathSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -1051,7 +1051,13 @@ function summaryOf(tag, entry, judge) {
1051
1051
  ...issue.consequence.group ? { group: issue.consequence.group } : {},
1052
1052
  ...issue.consequence.next ? { next: { ...issue.consequence.next } } : {}
1053
1053
  } } : {},
1054
- ...issue?.resolvedBehaviour && status === "resolved" ? { resolved_behaviour: issue.resolvedBehaviour } : {}
1054
+ ...issue?.resolvedBehaviour && status === "resolved" ? { resolved_behaviour: issue.resolvedBehaviour } : {},
1055
+ ...issue?.confidence ? { confidence: issue.confidence } : {},
1056
+ ...question?.framing ? { framing: {
1057
+ question: question.framing.question,
1058
+ why: question.framing.why,
1059
+ ...question.framing.needed ? { needed: question.framing.needed } : {}
1060
+ } } : {}
1055
1061
  };
1056
1062
  }
1057
1063
  /** A question can run to a paragraph. The list carries its first line; `get_finding` has the rest. */
@@ -1088,7 +1094,6 @@ function detailOf(workspace, tag, entry, judge) {
1088
1094
  ...section ? { title: section.title } : {}
1089
1095
  } } : {},
1090
1096
  ...finding.relatedFiles?.length ? { related_files: finding.relatedFiles } : {},
1091
- ...issue?.confidence ? { confidence: issue.confidence } : {},
1092
1097
  ...question?.category ? { category: question.category } : {},
1093
1098
  ...issue?.existingDiscussion ? { existing_discussion: {
1094
1099
  thread_id: issue.existingDiscussion.threadId,
@@ -1521,7 +1526,7 @@ async function requestUpdate(id, source, deps = defaultDeps) {
1521
1526
  };
1522
1527
  const latest = loadWorkspace(workspace.id)?.lastUpdate;
1523
1528
  if (latest && latest.at !== before) {
1524
- const finished = jobsOf(workspace.id).find((candidate) => purposeOf(candidate) === "update" && candidate.startedAt >= (before ?? 0));
1529
+ const finished = jobsOf(workspace.id).find((candidate) => purposeOf(candidate) === "update" && !candidate.scope && candidate.startedAt >= (before ?? 0));
1525
1530
  return {
1526
1531
  review: await getReview(workspace.id, deps),
1527
1532
  job: finished ? toJobRecord(finished, false) : null,