next-issue 0.12.1 → 0.12.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/README.md CHANGED
@@ -43,8 +43,11 @@ For each open issue, oldest first:
43
43
  reviewer reads files and runs commands in the worktree, so it can prove a
44
44
  finding with the tests or the type check. The harness then throws away every
45
45
  change that the reviewer left, so no such change can reach a later commit.
46
- The reviewer returns a structured verdict that rates each finding `blocking`
47
- or `minor`. The harness puts the result on the pull request.
46
+ The reviewer returns a structured verdict: a summary and one entry per
47
+ finding, each rated `blocking` or `minor`. The findings are the only ground
48
+ truth. The reviewer gives no approve or reject field, because such a field
49
+ can contradict the findings. The harness puts the result on the pull
50
+ request.
48
51
  9. An open finding is any finding, blocking or minor, while a review round is
49
52
  left. In the last round, only a blocking finding stays open: a minor finding
50
53
  there goes on the pull request but starts no fix, because a fix in the last
@@ -52,8 +55,9 @@ For each open issue, oldest first:
52
55
  finding.
53
56
  10. No open finding means approval: mark the pull request ready for review and
54
57
  set `status:done`. The merge stays with you. The worktree, the local branch
55
- and the state file go away. The remote branch stays. An open finding always
56
- stops the approval, even when the reviewer also says approve.
58
+ and the state file go away. The remote branch stays. A problem that the
59
+ reviewer leaves out of the findings thus gets an approval: only the findings
60
+ count.
57
61
  11. With an open finding, run the fixer agent and go to step 6 again. The
58
62
  budget is `maxReviewRounds`.
59
63
 
package/dist/pipeline.mjs CHANGED
@@ -245,7 +245,6 @@ async function work(context, issue, log, state) {
245
245
  const open = openFindings(verdict, state.reviewRounds >= config.maxReviewRounds);
246
246
  log.event("verdict", {
247
247
  round: state.reviewRounds,
248
- verdict: verdict.verdict,
249
248
  blocking: blocking.length,
250
249
  minor: verdict.findings.length - blocking.length,
251
250
  open: open.length,
package/dist/prompts.mjs CHANGED
@@ -48,7 +48,7 @@ export function reviewPrompt(issue, comments, diff, earlier) {
48
48
  "The harness discards each change that you make, so a change is only lost work.",
49
49
  scope,
50
50
  "Mark a finding blocking only for a wrong result, a missing part of the issue, a regression or a broken convention.",
51
- "Give the result as the structured output: the verdict, a short summary and one entry per finding.",
51
+ "Give the result as the structured output: a short summary and one entry per finding. The findings decide the outcome, so a problem that you leave out counts as no problem.",
52
52
  ].join("\n\n");
53
53
  }
54
54
  const UNRELATED_RULE = [
package/dist/verdict.mjs CHANGED
@@ -1,11 +1,6 @@
1
1
  export const VERDICT_SCHEMA = {
2
2
  type: "object",
3
3
  properties: {
4
- verdict: {
5
- type: "string",
6
- enum: ["approve", "request_changes"],
7
- description: "approve when no blocking problem is left",
8
- },
9
4
  summary: { type: "string", description: "Short summary of the review" },
10
5
  findings: {
11
6
  type: "array",
@@ -24,18 +19,14 @@ export const VERDICT_SCHEMA = {
24
19
  },
25
20
  },
26
21
  },
27
- required: ["verdict", "summary", "findings"],
22
+ required: ["summary", "findings"],
28
23
  };
29
24
  const SEVERITIES = ["blocking", "minor"];
30
- const VERDICTS = ["approve", "request_changes"];
31
25
  export function readVerdict(value) {
32
26
  if (typeof value !== "object" || value === null) {
33
27
  return undefined;
34
28
  }
35
- const { verdict, summary, findings } = value;
36
- if (typeof verdict !== "string" || !VERDICTS.includes(verdict)) {
37
- return undefined;
38
- }
29
+ const { summary, findings } = value;
39
30
  if (typeof summary !== "string" || !Array.isArray(findings)) {
40
31
  return undefined;
41
32
  }
@@ -50,7 +41,7 @@ export function readVerdict(value) {
50
41
  }
51
42
  checked.push({ severity: severity, detail });
52
43
  }
53
- return { verdict: verdict, summary, findings: checked };
44
+ return { summary, findings: checked };
54
45
  }
55
46
  export function blockingFindings(verdict) {
56
47
  return verdict.findings.filter((finding) => finding.severity === "blocking");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-issue",
3
- "version": "0.12.1",
3
+ "version": "0.12.2",
4
4
  "description": "Autonomous issue harness driven by the Claude Agent SDK",
5
5
  "keywords": [
6
6
  "github",