@tokenfactory/acc-runner 0.42.0 → 0.43.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/dist/engines/account-probe.d.ts +24 -0
- package/dist/engines/account-probe.d.ts.map +1 -1
- package/dist/engines/account-probe.js +18 -1
- package/dist/engines/account-probe.js.map +1 -1
- package/dist/machine-capabilities/index.d.ts +21 -0
- package/dist/machine-capabilities/index.d.ts.map +1 -0
- package/dist/machine-capabilities/index.js +21 -0
- package/dist/machine-capabilities/index.js.map +1 -0
- package/dist/machine-capabilities/probe.d.ts +61 -0
- package/dist/machine-capabilities/probe.d.ts.map +1 -0
- package/dist/machine-capabilities/probe.js +243 -0
- package/dist/machine-capabilities/probe.js.map +1 -0
- package/dist/machine-capabilities/redact.d.ts +42 -0
- package/dist/machine-capabilities/redact.d.ts.map +1 -0
- package/dist/machine-capabilities/redact.js +160 -0
- package/dist/machine-capabilities/redact.js.map +1 -0
- package/dist/machine-capabilities/report.d.ts +107 -0
- package/dist/machine-capabilities/report.d.ts.map +1 -0
- package/dist/machine-capabilities/report.js +211 -0
- package/dist/machine-capabilities/report.js.map +1 -0
- package/dist/machine-capabilities/types.d.ts +115 -0
- package/dist/machine-capabilities/types.d.ts.map +1 -0
- package/dist/machine-capabilities/types.js +11 -0
- package/dist/machine-capabilities/types.js.map +1 -0
- package/dist/migration-seq-guard.d.ts +78 -0
- package/dist/migration-seq-guard.d.ts.map +1 -0
- package/dist/migration-seq-guard.js +304 -0
- package/dist/migration-seq-guard.js.map +1 -0
- package/dist/node-version.d.ts +132 -0
- package/dist/node-version.d.ts.map +1 -0
- package/dist/node-version.js +318 -0
- package/dist/node-version.js.map +1 -0
- package/dist/prepr-gate.d.ts +120 -0
- package/dist/prepr-gate.d.ts.map +1 -1
- package/dist/prepr-gate.js +202 -3
- package/dist/prepr-gate.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +13 -0
- package/dist/program.js.map +1 -1
- package/dist/runtime/review-chunking.d.ts +101 -0
- package/dist/runtime/review-chunking.d.ts.map +1 -0
- package/dist/runtime/review-chunking.js +192 -0
- package/dist/runtime/review-chunking.js.map +1 -0
- package/dist/runtime/review-diff.d.ts +30 -0
- package/dist/runtime/review-diff.d.ts.map +1 -0
- package/dist/runtime/review-diff.js +59 -0
- package/dist/runtime/review-diff.js.map +1 -0
- package/dist/runtime/reviewer.d.ts +40 -19
- package/dist/runtime/reviewer.d.ts.map +1 -1
- package/dist/runtime/reviewer.js +252 -51
- package/dist/runtime/reviewer.js.map +1 -1
- package/dist/serve-scope/command.d.ts +12 -0
- package/dist/serve-scope/command.d.ts.map +1 -0
- package/dist/serve-scope/command.js +89 -0
- package/dist/serve-scope/command.js.map +1 -0
- package/dist/serve-scope/index.d.ts +130 -0
- package/dist/serve-scope/index.d.ts.map +1 -0
- package/dist/serve-scope/index.js +148 -0
- package/dist/serve-scope/index.js.map +1 -0
- package/dist/task-runner.d.ts +11 -0
- package/dist/task-runner.d.ts.map +1 -1
- package/dist/task-runner.js +69 -0
- package/dist/task-runner.js.map +1 -1
- package/dist/watch.d.ts +8 -0
- package/dist/watch.d.ts.map +1 -1
- package/dist/watch.js +28 -0
- package/dist/watch.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* REVIEWER-DIFF-CAP — make a large PR REVIEWABLE instead of unreviewable.
|
|
3
|
+
*
|
|
4
|
+
* MEASURED FAULT (PR #1815, 140,456 chars / 13 files against a 60,000-char cap):
|
|
5
|
+
* the runner-local reviewer truncated the diff, then spent three review cycles
|
|
6
|
+
* turning that truncation into code verdicts —
|
|
7
|
+
* 1. an advisory hold (infra),
|
|
8
|
+
* 2. a reject citing files "not present in the reviewable diff",
|
|
9
|
+
* 3. a reject stating "more than half the PR is not visible and cannot be
|
|
10
|
+
* verified".
|
|
11
|
+
* Zero defects were ever demonstrated, the PR deadlocked mergeable, and the
|
|
12
|
+
* rework loop it triggered could never succeed — reworking code does not shrink
|
|
13
|
+
* a diff. A reviewer must never convert its own tooling limitation into a code
|
|
14
|
+
* verdict.
|
|
15
|
+
*
|
|
16
|
+
* This module is the pure half of the fix. It provides:
|
|
17
|
+
*
|
|
18
|
+
* 1. `planReviewChunks` — split an over-cap diff into whole-file chunks that
|
|
19
|
+
* each fit under the cap, so EVERY file is actually read by some pass. The
|
|
20
|
+
* split is BYTE-EXACT: `chunks.map(c => c.text).join("") === diff`, which is
|
|
21
|
+
* what makes "nothing was withheld" a provable property rather than a claim.
|
|
22
|
+
* 2. The ABSENCE-CLAIM guard — patterns + partitioner that recognise a reason
|
|
23
|
+
* asserting content is missing/invisible/unverifiable. The runner had no such
|
|
24
|
+
* guard (the server path has had one since the #1665/#1679/#1690 wave); that
|
|
25
|
+
* absence is why #1815's two rejects stood.
|
|
26
|
+
*
|
|
27
|
+
* The absence-claim half is a MIRROR of `api/_lib/reviewer/absence-claims.ts` —
|
|
28
|
+
* the runner is a standalone published package and cannot import from `api/_lib`.
|
|
29
|
+
* // keep in sync with api/_lib/reviewer/absence-claims.ts
|
|
30
|
+
*
|
|
31
|
+
* PURE. No I/O, no clock, no client. The wiring lives in `reviewer.ts`.
|
|
32
|
+
*/
|
|
33
|
+
import { splitDiffByFile } from "./review-diff.js";
|
|
34
|
+
/**
|
|
35
|
+
* Hard ceiling on chunk count. A diff needing more passes than this is not a
|
|
36
|
+
* review problem the runner can solve by spending more subscription budget — it
|
|
37
|
+
* is reported as an INFRA outcome by the caller (never a reject), so the
|
|
38
|
+
* escalation path owns it. 8 chunks × 60,000 chars ≈ 480 KB of diff.
|
|
39
|
+
*/
|
|
40
|
+
export const MAX_REVIEW_CHUNKS = 8;
|
|
41
|
+
/**
|
|
42
|
+
* Split `diff` into chunks that each fit within `maxChars`, cutting at whole-file
|
|
43
|
+
* boundaries wherever possible.
|
|
44
|
+
*
|
|
45
|
+
* INVARIANTS (all asserted by the wave's tests):
|
|
46
|
+
* - byte-exact: `chunks.map(c => c.text).join("") === diff`;
|
|
47
|
+
* - every chunk's `text.length <= maxChars` (except the degenerate `maxChars <= 0`);
|
|
48
|
+
* - a diff at or under the cap yields exactly ONE chunk holding the whole diff,
|
|
49
|
+
* so the caller's single-pass path stays byte-identical to before.
|
|
50
|
+
*
|
|
51
|
+
* A file larger than `maxChars` on its own is sliced into contiguous parts rather
|
|
52
|
+
* than dropped — a partly-shown file across two passes still gets fully read,
|
|
53
|
+
* which a truncating cap never achieved.
|
|
54
|
+
*/
|
|
55
|
+
export function planReviewChunks(diff, maxChars) {
|
|
56
|
+
const src = diff ?? "";
|
|
57
|
+
const cap = Number.isFinite(maxChars) && maxChars > 0 ? Math.floor(maxChars) : src.length;
|
|
58
|
+
if (src.length === 0)
|
|
59
|
+
return [];
|
|
60
|
+
if (src.length <= cap) {
|
|
61
|
+
return [{ index: 1, total: 1, paths: diffPathsOf(src), text: src, partial: false }];
|
|
62
|
+
}
|
|
63
|
+
// Units are the atoms we pack: the (usually empty) pre-first-file preamble,
|
|
64
|
+
// then one unit per `diff --git` file block. Concatenating every unit in order
|
|
65
|
+
// reproduces `src` exactly, which is what carries the byte-exactness invariant
|
|
66
|
+
// through the packing below.
|
|
67
|
+
const { preamble, files } = splitDiffByFile(src);
|
|
68
|
+
const units = files.length === 0
|
|
69
|
+
? [{ path: null, text: src }]
|
|
70
|
+
: [
|
|
71
|
+
...(preamble.length > 0 ? [{ path: null, text: preamble }] : []),
|
|
72
|
+
...files.map((f) => ({ path: f.path, text: f.text })),
|
|
73
|
+
];
|
|
74
|
+
const chunks = [];
|
|
75
|
+
let open = null;
|
|
76
|
+
const flush = () => {
|
|
77
|
+
if (open && open.text.length > 0) {
|
|
78
|
+
chunks.push({ paths: open.paths, text: open.text, partial: false });
|
|
79
|
+
}
|
|
80
|
+
open = null;
|
|
81
|
+
};
|
|
82
|
+
for (const unit of units) {
|
|
83
|
+
if (unit.text.length > cap) {
|
|
84
|
+
// Oversized single unit: close the open chunk, then emit contiguous slices.
|
|
85
|
+
flush();
|
|
86
|
+
for (let at = 0; at < unit.text.length; at += cap) {
|
|
87
|
+
chunks.push({
|
|
88
|
+
paths: unit.path ? [unit.path] : [],
|
|
89
|
+
text: unit.text.slice(at, at + cap),
|
|
90
|
+
partial: true,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (open && open.text.length + unit.text.length > cap)
|
|
96
|
+
flush();
|
|
97
|
+
if (!open)
|
|
98
|
+
open = { paths: [], text: "" };
|
|
99
|
+
if (unit.path)
|
|
100
|
+
open.paths.push(unit.path);
|
|
101
|
+
open.text += unit.text;
|
|
102
|
+
}
|
|
103
|
+
flush();
|
|
104
|
+
const total = chunks.length;
|
|
105
|
+
return chunks.map((c, i) => ({ ...c, index: i + 1, total }));
|
|
106
|
+
}
|
|
107
|
+
/** File paths a diff slice names, used to label a chunk. */
|
|
108
|
+
function diffPathsOf(diff) {
|
|
109
|
+
return splitDiffByFile(diff).files.map((f) => f.path);
|
|
110
|
+
}
|
|
111
|
+
/* ─────────────────────────── absence-claim detection ─────────────────────────
|
|
112
|
+
*
|
|
113
|
+
* // keep in sync with api/_lib/reviewer/absence-claims.ts ABSENCE_CLAIM_PATTERNS
|
|
114
|
+
*
|
|
115
|
+
* Each pattern is anchored on a visibility verb ("present", "visible", "shown",
|
|
116
|
+
* "included", "listed") or on an explicit diff subject, so a BEHAVIOURAL finding
|
|
117
|
+
* ("the handler does not rethrow") is never matched. Callers gate on
|
|
118
|
+
* not-full-coverage, which is what makes keeping these broad safe: on a complete
|
|
119
|
+
* single-pass review nothing here fires and the verdict is unchanged.
|
|
120
|
+
*/
|
|
121
|
+
export const ABSENCE_CLAIM_PATTERNS = [
|
|
122
|
+
/\bnot\s+shown\s+to\s+(?:exist|be)\b/i,
|
|
123
|
+
/\bnot\s+(?:fully\s+|clearly\s+|actually\s+|explicitly\s+|anywhere\s+)?(?:present|visible|shown|included|listed)\b/i,
|
|
124
|
+
/\b(?:absent|missing)\s+from\s+(?:the\s+)?(?:visible\s+|provided\s+|supplied\s+|shown\s+|reviewable\s+)?(?:diff|patch|changeset|pull\s+request|PR)\b/i,
|
|
125
|
+
/\b(?:diff|patch|changeset|pull\s+request)\b[^.;]{0,80}?\b(?:does|do|did)\s+not\s+(?:show|contain|include|reveal)\b/i,
|
|
126
|
+
/\bnowhere\s+(?:in|within)\s+(?:the\s+)?(?:visible\s+|provided\s+)?(?:diff|patch|changeset|PR)\b/i,
|
|
127
|
+
/\b(?:no|neither)\s+(?:such\s+)?(?:file|test|test\s+file|symbol|function|export|import|definition|proof)\b[^.;]{0,60}?\b(?:in|within)\s+the\s+(?:visible\s+|provided\s+)?(?:diff|patch|changeset|PR)\b/i,
|
|
128
|
+
/\bnot\s+(?:seen|observed)\s+in\s+the\s+(?:visible\s+|provided\s+)?(?:diff|patch|changeset|PR)\b/i,
|
|
129
|
+
/\bcould\s+not\s+(?:find|locate)\b[^.;]{0,60}?\b(?:in|within)\s+the\s+(?:visible\s+|provided\s+)?(?:diff|patch|changeset|PR)\b/i,
|
|
130
|
+
];
|
|
131
|
+
/**
|
|
132
|
+
* RUNNER-ONLY addition (no server counterpart): #1815's second reject read
|
|
133
|
+
* "more than half the PR is not visible and cannot be verified". The
|
|
134
|
+
* "cannot be verified" half is the class the task names explicitly, and the
|
|
135
|
+
* server patterns above only catch it via the "not visible" clause that happened
|
|
136
|
+
* to sit next to it. These two regexes catch it on its own — but ONLY in
|
|
137
|
+
* conjunction (both must match the same reason), so "the migration cannot be
|
|
138
|
+
* verified without a rollback plan" is a defect claim and stays a defect claim.
|
|
139
|
+
*/
|
|
140
|
+
const UNVERIFIABLE_RE = /\b(?:cannot|can\s?not|can't|could\s?not|couldn't|unable\s+to|no\s+way\s+to)\s+(?:be\s+)?(?:verif|confirm|assess|evaluat|review|read|inspect|judge|check)/i;
|
|
141
|
+
const VISIBILITY_SUBJECT_RE = /\b(?:truncat\w*|withheld|(?:in)?visible|not\s+shown|beyond\s+the\s+\w+|review\s+size\s+limit|diff\s+size|size\s+limit|reviewable\s+diff|60[,_]?000|60\s?k)\b/i;
|
|
142
|
+
/**
|
|
143
|
+
* True when one reviewer reason asserts that content is ABSENT from — or
|
|
144
|
+
* unverifiable within — what the reviewer was shown, rather than describing a
|
|
145
|
+
* defect in what it read. Only meaningful when coverage was incomplete; callers
|
|
146
|
+
* MUST gate on that before acting on it.
|
|
147
|
+
*/
|
|
148
|
+
export function isAbsenceClaimReason(reason) {
|
|
149
|
+
const text = reason ?? "";
|
|
150
|
+
if (text.trim().length === 0)
|
|
151
|
+
return false;
|
|
152
|
+
if (ABSENCE_CLAIM_PATTERNS.some((re) => re.test(text)))
|
|
153
|
+
return true;
|
|
154
|
+
return UNVERIFIABLE_RE.test(text) && VISIBILITY_SUBJECT_RE.test(text);
|
|
155
|
+
}
|
|
156
|
+
/** Sub-marker identifying this class inside the escalation headline. */
|
|
157
|
+
export const TRUNCATED_ABSENCE_MARKER = "truncated-diff absence claim";
|
|
158
|
+
/**
|
|
159
|
+
* Headline stamped on a verdict the absence guard escalates. Opens with RR-3's
|
|
160
|
+
* `reviewer tooling failure:` marker so every existing consumer
|
|
161
|
+
* (`isToolingFailureReviewerOutcome`, the budget exemption in
|
|
162
|
+
* `countReviewerErrors`, the neutral `acc/review` publish) routes it as INFRA.
|
|
163
|
+
*
|
|
164
|
+
* Phrased to match none of the patterns above (asserted by the wave's test), so
|
|
165
|
+
* a re-scan of a stored row can never re-classify our own headline as a claim.
|
|
166
|
+
*/
|
|
167
|
+
export const REVIEWER_ABSENCE_ESCALATION_REASON = `reviewer tooling failure: ${TRUNCATED_ABSENCE_MARKER} — every blocking reason this ` +
|
|
168
|
+
"review produced was a statement about what the harness did or did not show it, not a " +
|
|
169
|
+
"defect in the code. A reviewer may not convert its own read-coverage limit into a " +
|
|
170
|
+
"verdict: reworking the branch cannot shrink a diff, so such a reject deadlocks a " +
|
|
171
|
+
"mergeable PR (see #1815). Escalated to a budget-exempt infra outcome with acc/review " +
|
|
172
|
+
"held neutral. Remedy: widen review coverage; never re-assert the claim.";
|
|
173
|
+
/** Prefix marking a discarded claim in the audit trail (never re-emitted as a finding). */
|
|
174
|
+
export const DISCARDED_CLAIM_PREFIX = "discarded (unsound — a read-coverage claim, not a defect): ";
|
|
175
|
+
/** True when a completed review row is an absence-guard escalation. */
|
|
176
|
+
export function isAbsenceEscalatedOutcome(decision, reasons) {
|
|
177
|
+
if (decision !== "reviewer_error")
|
|
178
|
+
return false;
|
|
179
|
+
return (reasons ?? []).some((r) => typeof r === "string" && r.includes(TRUNCATED_ABSENCE_MARKER));
|
|
180
|
+
}
|
|
181
|
+
/** Split a reason list into the substantive findings and the absence claims. */
|
|
182
|
+
export function partitionAbsenceClaims(reasons) {
|
|
183
|
+
const substantive = [];
|
|
184
|
+
const absence = [];
|
|
185
|
+
for (const r of reasons ?? []) {
|
|
186
|
+
if (typeof r !== "string")
|
|
187
|
+
continue;
|
|
188
|
+
(isAbsenceClaimReason(r) ? absence : substantive).push(r);
|
|
189
|
+
}
|
|
190
|
+
return { substantive, absence };
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=review-chunking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-chunking.js","sourceRoot":"","sources":["../../src/runtime/review-chunking.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified-diff structure helpers shared by the reviewer's truncation path
|
|
3
|
+
* (`reviewer.ts`) and its chunk planner (`review-chunking.ts`).
|
|
4
|
+
*
|
|
5
|
+
* Extracted verbatim from `reviewer.ts` so the two consumers share ONE parser
|
|
6
|
+
* instead of a copy each — `reviewer.ts` re-exports both names, so its public
|
|
7
|
+
* surface (and every test importing them from there) is unchanged.
|
|
8
|
+
*
|
|
9
|
+
* PURE. No I/O.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* RF-3: the file paths a unified diff touches, in order, from its
|
|
13
|
+
* `diff --git a/<path> b/<path>` headers (falling back to `+++ b/<path>`).
|
|
14
|
+
* Pure; tolerant of malformed headers (skips what it can't parse).
|
|
15
|
+
* // keep in sync with api/_lib/reviewer-agent.ts diffFilePaths
|
|
16
|
+
*/
|
|
17
|
+
export declare function diffFilePaths(diff: string): string[];
|
|
18
|
+
/**
|
|
19
|
+
* RF-3: split a unified diff into its per-file blocks. Byte-exact —
|
|
20
|
+
* `preamble + files.map(f => f.text).join("")` reproduces the input — so a
|
|
21
|
+
* reordered diff is still the same bytes, just in a different file order.
|
|
22
|
+
*/
|
|
23
|
+
export declare function splitDiffByFile(diff: string): {
|
|
24
|
+
preamble: string;
|
|
25
|
+
files: Array<{
|
|
26
|
+
path: string;
|
|
27
|
+
text: string;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=review-diff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-diff.d.ts","sourceRoot":"","sources":["../../src/runtime/review-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBpD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GACX;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAcpE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified-diff structure helpers shared by the reviewer's truncation path
|
|
3
|
+
* (`reviewer.ts`) and its chunk planner (`review-chunking.ts`).
|
|
4
|
+
*
|
|
5
|
+
* Extracted verbatim from `reviewer.ts` so the two consumers share ONE parser
|
|
6
|
+
* instead of a copy each — `reviewer.ts` re-exports both names, so its public
|
|
7
|
+
* surface (and every test importing them from there) is unchanged.
|
|
8
|
+
*
|
|
9
|
+
* PURE. No I/O.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* RF-3: the file paths a unified diff touches, in order, from its
|
|
13
|
+
* `diff --git a/<path> b/<path>` headers (falling back to `+++ b/<path>`).
|
|
14
|
+
* Pure; tolerant of malformed headers (skips what it can't parse).
|
|
15
|
+
* // keep in sync with api/_lib/reviewer-agent.ts diffFilePaths
|
|
16
|
+
*/
|
|
17
|
+
export function diffFilePaths(diff) {
|
|
18
|
+
const paths = [];
|
|
19
|
+
const seen = new Set();
|
|
20
|
+
for (const line of (diff ?? "").split("\n")) {
|
|
21
|
+
let p = null;
|
|
22
|
+
const git = /^diff --git a\/(.+?) b\/(.+)$/.exec(line);
|
|
23
|
+
if (git)
|
|
24
|
+
p = git[2];
|
|
25
|
+
else {
|
|
26
|
+
const plus = /^\+\+\+ b\/(.+)$/.exec(line);
|
|
27
|
+
if (plus && plus[1] !== "/dev/null")
|
|
28
|
+
p = plus[1];
|
|
29
|
+
}
|
|
30
|
+
if (p && !seen.has(p)) {
|
|
31
|
+
seen.add(p);
|
|
32
|
+
paths.push(p);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return paths;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* RF-3: split a unified diff into its per-file blocks. Byte-exact —
|
|
39
|
+
* `preamble + files.map(f => f.text).join("")` reproduces the input — so a
|
|
40
|
+
* reordered diff is still the same bytes, just in a different file order.
|
|
41
|
+
*/
|
|
42
|
+
export function splitDiffByFile(diff) {
|
|
43
|
+
const src = diff ?? "";
|
|
44
|
+
const headerRe = /^diff --git a\/(.+?) b\/(.+)$/gm;
|
|
45
|
+
const starts = [];
|
|
46
|
+
let m;
|
|
47
|
+
while ((m = headerRe.exec(src)) !== null)
|
|
48
|
+
starts.push({ index: m.index, path: m[2] });
|
|
49
|
+
if (starts.length === 0)
|
|
50
|
+
return { preamble: src, files: [] };
|
|
51
|
+
return {
|
|
52
|
+
preamble: src.slice(0, starts[0].index),
|
|
53
|
+
files: starts.map((s, i) => ({
|
|
54
|
+
path: s.path,
|
|
55
|
+
text: src.slice(s.index, i + 1 < starts.length ? starts[i + 1].index : src.length),
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=review-diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-diff.js","sourceRoot":"","sources":["../../src/runtime/review-diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,GAAkB,IAAI,CAAC;QAC5B,MAAM,GAAG,GAAG,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,IAAI,GAAG;YAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;aACf,CAAC;YACJ,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW;gBAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY;IAEZ,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,iCAAiC,CAAC;IACnD,MAAM,MAAM,GAA2C,EAAE,CAAC;IAC1D,IAAI,CAAyB,CAAC;IAC9B,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC7D,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;SACnF,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { type ExecaChildProcess } from "execa";
|
|
18
18
|
import { type ReviewerProbeResult } from "../failure-classifier.js";
|
|
19
|
+
import { type ReviewChunk } from "./review-chunking.js";
|
|
19
20
|
import { type TolerantRemoveResult } from "../review-worktree-cleanup.js";
|
|
20
21
|
import type { RunnerSupabaseClient } from "../supabase.js";
|
|
21
22
|
export interface ReviewAssignment {
|
|
@@ -102,25 +103,7 @@ export declare function normalizeReportHeading(line: string): string | null;
|
|
|
102
103
|
*/
|
|
103
104
|
export declare function scanCompletionSignals(prBody: string): CompletionSignalHit[];
|
|
104
105
|
export declare const REVIEWER_MAX_DIFF_CHARS = 60000;
|
|
105
|
-
|
|
106
|
-
* RF-3: the file paths a unified diff touches, in order, from its
|
|
107
|
-
* `diff --git a/<path> b/<path>` headers (falling back to `+++ b/<path>`).
|
|
108
|
-
* Pure; tolerant of malformed headers (skips what it can't parse).
|
|
109
|
-
* // keep in sync with api/_lib/reviewer-agent.ts diffFilePaths
|
|
110
|
-
*/
|
|
111
|
-
export declare function diffFilePaths(diff: string): string[];
|
|
112
|
-
/**
|
|
113
|
-
* RF-3: split a unified diff into its per-file blocks. Byte-exact —
|
|
114
|
-
* `preamble + files.map(f => f.text).join("")` reproduces the input — so a
|
|
115
|
-
* reordered diff is still the same bytes, just in a different file order.
|
|
116
|
-
*/
|
|
117
|
-
export declare function splitDiffByFile(diff: string): {
|
|
118
|
-
preamble: string;
|
|
119
|
-
files: Array<{
|
|
120
|
-
path: string;
|
|
121
|
-
text: string;
|
|
122
|
-
}>;
|
|
123
|
-
};
|
|
106
|
+
export { diffFilePaths, splitDiffByFile } from "./review-diff.js";
|
|
124
107
|
/**
|
|
125
108
|
* RF-3: the file paths the acceptance criteria explicitly NAME. These are the
|
|
126
109
|
* reviewer's proof files — an AC that says "a test proves X" and names the test
|
|
@@ -222,6 +205,44 @@ export declare function renderReviewerPrompt(args: {
|
|
|
222
205
|
pr_body: string;
|
|
223
206
|
pr_diff: string;
|
|
224
207
|
}): string;
|
|
208
|
+
/** The chunk-scope override appended to a PART pass's prompt. */
|
|
209
|
+
export declare function chunkScopeNotice(chunk: ReviewChunk): string;
|
|
210
|
+
/** The synthesis override appended to the FINAL pass's prompt. */
|
|
211
|
+
export declare function synthesisScopeNotice(totalChunks: number): string;
|
|
212
|
+
/**
|
|
213
|
+
* The evidence block the synthesis pass reads in place of a diff: the complete
|
|
214
|
+
* file inventory (so every path the PR touches is named) followed by each part
|
|
215
|
+
* pass's decision and findings.
|
|
216
|
+
*/
|
|
217
|
+
export declare function renderSynthesisEvidence(chunks: ReviewChunk[], passes: Array<{
|
|
218
|
+
decision: string;
|
|
219
|
+
reasons: string[];
|
|
220
|
+
confidence: number;
|
|
221
|
+
}>, allPaths: string[]): string;
|
|
222
|
+
/**
|
|
223
|
+
* REVIEWER-DIFF-CAP: one machine-readable coverage line, appended to every
|
|
224
|
+
* verdict a chunked review produces. Deliberately word-free of every
|
|
225
|
+
* absence-claim pattern (asserted by the wave's test) so this telemetry can
|
|
226
|
+
* never be re-read as a finding.
|
|
227
|
+
*/
|
|
228
|
+
export declare function chunkedCoverageReason(chunkCount: number, fileCount: number, diffChars: number): string;
|
|
229
|
+
/**
|
|
230
|
+
* REVIEWER-DIFF-CAP — the guard that makes the measured #1815 verdict
|
|
231
|
+
* IMPOSSIBLE: a reject whose reasons are exclusively read-coverage claims
|
|
232
|
+
* becomes an INFRA outcome (`reviewer_error`), never a code verdict.
|
|
233
|
+
*
|
|
234
|
+
* Applied ONLY when coverage was not a single full-diff pass, so a normal
|
|
235
|
+
* small-diff review is byte-identical to before (pinned by test). Within that
|
|
236
|
+
* gate:
|
|
237
|
+
* - reject, all reasons are coverage claims → `reviewer_error` (infra retry,
|
|
238
|
+
* budget-exempt via the RR-3 tooling-failure marker), claims kept as a
|
|
239
|
+
* DISCARDED audit trail rather than re-emitted as findings;
|
|
240
|
+
* - reject with at least one substantive defect → the reject STANDS on the
|
|
241
|
+
* substantive reasons alone (the coverage claims are still discarded);
|
|
242
|
+
* - approve → coverage claims stripped; the approve stands, because on the
|
|
243
|
+
* chunked path everything really was read.
|
|
244
|
+
*/
|
|
245
|
+
export declare function guardCoverageClaims(outcome: ReviewerOutcome): ReviewerOutcome;
|
|
225
246
|
export declare function extractReviewerDecision(text: string): {
|
|
226
247
|
decision: "approve" | "reject";
|
|
227
248
|
reasons: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/runtime/reviewer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAS,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAMtD,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"reviewer.d.ts","sourceRoot":"","sources":["../../src/runtime/reviewer.ts"],"names":[],"mappings":"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"}
|