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 +8 -4
- package/dist/pipeline.mjs +0 -1
- package/dist/prompts.mjs +1 -1
- package/dist/verdict.mjs +3 -12
- package/package.json +1 -1
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
|
|
47
|
-
or `minor`. The
|
|
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.
|
|
56
|
-
|
|
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:
|
|
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: ["
|
|
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 {
|
|
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 {
|
|
44
|
+
return { summary, findings: checked };
|
|
54
45
|
}
|
|
55
46
|
export function blockingFindings(verdict) {
|
|
56
47
|
return verdict.findings.filter((finding) => finding.severity === "blocking");
|