revu-ai 0.2.2 → 0.4.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 +35 -0
- package/README.md +14 -3
- package/dist/cli.js +23 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +14 -0
- package/dist/config.js.map +1 -1
- package/dist/discovery.d.ts +1 -0
- package/dist/discovery.js +35 -4
- package/dist/discovery.js.map +1 -1
- package/dist/forges/post-cmd.js +7 -4
- package/dist/forges/post-cmd.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/mcp/aggregator.d.ts +23 -1
- package/dist/mcp/aggregator.js +71 -0
- package/dist/mcp/aggregator.js.map +1 -1
- package/dist/mcp/server.js +59 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools.d.ts +50 -2
- package/dist/mcp/tools.js +47 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/output/pretty.d.ts +17 -1
- package/dist/output/pretty.js +68 -1
- package/dist/output/pretty.js.map +1 -1
- package/dist/prompts/review-system.js +31 -3
- package/dist/prompts/review-system.js.map +1 -1
- package/dist/providers/claude-code.js +2 -0
- package/dist/providers/claude-code.js.map +1 -1
- package/dist/runner.d.ts +9 -1
- package/dist/runner.js +153 -100
- package/dist/runner.js.map +1 -1
- package/dist/types.d.ts +55 -2
- package/package.json +1 -1
package/dist/runner.js
CHANGED
|
@@ -50,6 +50,12 @@ export async function run(cwd, config, hooks = {}, inputs = {}) {
|
|
|
50
50
|
const unsubscribeFindings = hooks.onFinding
|
|
51
51
|
? sidecar.aggregator.onAdd(hooks.onFinding)
|
|
52
52
|
: () => { };
|
|
53
|
+
const unsubscribeSummaries = hooks.onSummary
|
|
54
|
+
? sidecar.aggregator.onSummary(hooks.onSummary)
|
|
55
|
+
: () => { };
|
|
56
|
+
const unsubscribeChecks = hooks.onCheck
|
|
57
|
+
? sidecar.aggregator.onCheck(hooks.onCheck)
|
|
58
|
+
: () => { };
|
|
53
59
|
const factory = getHarnessFactory(config.harness);
|
|
54
60
|
const provider = factory({
|
|
55
61
|
...(config.model ? { model: config.model } : {}),
|
|
@@ -58,120 +64,119 @@ export async function run(cwd, config, hooks = {}, inputs = {}) {
|
|
|
58
64
|
const concurrency = config.concurrency ?? Math.min(8, rules.length);
|
|
59
65
|
const limit = createLimiter(concurrency);
|
|
60
66
|
const ruleResults = [];
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
if (rule.filePatterns.length === 0) {
|
|
74
|
-
const failed = {
|
|
75
|
-
id: rule.ruleId,
|
|
76
|
-
path: rule.relPath,
|
|
77
|
-
ok: false,
|
|
78
|
-
durationMs: Date.now() - ruleStart,
|
|
79
|
-
findingCount: 0,
|
|
80
|
-
errorMessage: "files: pattern list is empty — add at least one glob pattern or remove the key",
|
|
81
|
-
};
|
|
82
|
-
ruleResults.push(failed);
|
|
83
|
-
hooks.onRuleEnd?.(failed);
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
let matchingFiles;
|
|
87
|
-
try {
|
|
88
|
-
matchingFiles = micromatch(resolved.changedFiles, rule.filePatterns);
|
|
89
|
-
}
|
|
90
|
-
catch (e) {
|
|
91
|
-
const msg = e?.message ?? String(e);
|
|
92
|
-
const failed = {
|
|
93
|
-
id: rule.ruleId,
|
|
94
|
-
path: rule.relPath,
|
|
95
|
-
ok: false,
|
|
96
|
-
durationMs: Date.now() - ruleStart,
|
|
97
|
-
findingCount: 0,
|
|
98
|
-
errorMessage: `invalid files: pattern — ${msg}`,
|
|
99
|
-
};
|
|
100
|
-
ruleResults.push(failed);
|
|
101
|
-
hooks.onRuleEnd?.(failed);
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
if (matchingFiles.length === 0) {
|
|
105
|
-
const skipped = {
|
|
106
|
-
id: rule.ruleId,
|
|
107
|
-
path: rule.relPath,
|
|
108
|
-
ok: true,
|
|
109
|
-
durationMs: 0,
|
|
110
|
-
findingCount: 0,
|
|
111
|
-
skipped: true,
|
|
112
|
-
};
|
|
113
|
-
ruleResults.push(skipped);
|
|
114
|
-
hooks.onRuleEnd?.(skipped);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
67
|
+
// Runs a single rule end-to-end (pre-flight file filtering + provider) and returns its
|
|
68
|
+
// result. Pure w.r.t. ruleResults — the caller pushes and fires onRuleEnd.
|
|
69
|
+
const executeRule = async (rule) => {
|
|
70
|
+
const priorForRule = priorByRule.get(rule.ruleId);
|
|
71
|
+
const ruleStart = Date.now();
|
|
72
|
+
if (rule.filePatterns !== undefined) {
|
|
73
|
+
if (rule.filePatterns.length === 0) {
|
|
74
|
+
return {
|
|
75
|
+
id: rule.ruleId, path: rule.relPath, ok: false,
|
|
76
|
+
durationMs: Date.now() - ruleStart, findingCount: 0, summaryCount: 0, checkCount: 0,
|
|
77
|
+
errorMessage: "files: pattern list is empty — add at least one glob pattern or remove the key",
|
|
78
|
+
};
|
|
117
79
|
}
|
|
118
|
-
|
|
119
|
-
// error, anything we didn't anticipate) must not abort the
|
|
120
|
-
// whole run. Catch here, convert to an errored RuleResult, and
|
|
121
|
-
// let the other rules finish. The provider's own contract is
|
|
122
|
-
// already to return ReviewResult with `ok:false` on expected
|
|
123
|
-
// failures — this is the safety net for unexpected ones.
|
|
124
|
-
let ruleResult;
|
|
80
|
+
let matchingFiles;
|
|
125
81
|
try {
|
|
126
|
-
|
|
127
|
-
ruleId: rule.ruleId,
|
|
128
|
-
rulesFilePath: rule.absPath,
|
|
129
|
-
rulesContent: rule.content,
|
|
130
|
-
reviewTarget: resolved.target,
|
|
131
|
-
repoRoot,
|
|
132
|
-
mcp: { url: sidecar.url, authToken: sidecar.authToken },
|
|
133
|
-
timeoutMs: config.timeoutMs,
|
|
134
|
-
...(hooks.onActivity
|
|
135
|
-
? { onActivity: (a) => hooks.onActivity?.(rule.ruleId, a) }
|
|
136
|
-
: {}),
|
|
137
|
-
...(priorForRule && priorForRule.length > 0 ? { priorFindings: priorForRule } : {}),
|
|
138
|
-
...(priorHeadSha ? { priorHeadSha } : {}),
|
|
139
|
-
...(rule.filePatterns ? { filePatterns: rule.filePatterns } : {}),
|
|
140
|
-
});
|
|
141
|
-
ruleResult = {
|
|
142
|
-
id: result.ruleId,
|
|
143
|
-
path: rule.relPath,
|
|
144
|
-
ok: result.ok,
|
|
145
|
-
durationMs: result.durationMs,
|
|
146
|
-
findingCount: sidecar.aggregator.countFor(result.ruleId),
|
|
147
|
-
...(result.errorMessage ? { errorMessage: result.errorMessage } : {}),
|
|
148
|
-
...(result.timedOut ? { timedOut: true } : {}),
|
|
149
|
-
...(result.diagnostics ? { diagnostics: result.diagnostics } : {}),
|
|
150
|
-
};
|
|
82
|
+
matchingFiles = micromatch(resolved.changedFiles, rule.filePatterns);
|
|
151
83
|
}
|
|
152
84
|
catch (e) {
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
id: rule.ruleId,
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
durationMs: Date.now() - ruleStart,
|
|
159
|
-
findingCount: sidecar.aggregator.countFor(rule.ruleId),
|
|
160
|
-
errorMessage: `unexpected error: ${message.split("\n")[0]}`,
|
|
85
|
+
const msg = e?.message ?? String(e);
|
|
86
|
+
return {
|
|
87
|
+
id: rule.ruleId, path: rule.relPath, ok: false,
|
|
88
|
+
durationMs: Date.now() - ruleStart, findingCount: 0, summaryCount: 0, checkCount: 0,
|
|
89
|
+
errorMessage: `invalid files: pattern — ${msg}`,
|
|
161
90
|
};
|
|
162
91
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
92
|
+
if (matchingFiles.length === 0) {
|
|
93
|
+
return {
|
|
94
|
+
id: rule.ruleId, path: rule.relPath, ok: true,
|
|
95
|
+
durationMs: 0, findingCount: 0, summaryCount: 0, checkCount: 0, skipped: true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
const result = await provider.run({
|
|
101
|
+
ruleId: rule.ruleId,
|
|
102
|
+
rulesFilePath: rule.absPath,
|
|
103
|
+
rulesContent: rule.content,
|
|
104
|
+
reviewTarget: resolved.target,
|
|
105
|
+
repoRoot,
|
|
106
|
+
mcp: { url: sidecar.url, authToken: sidecar.authToken },
|
|
107
|
+
timeoutMs: config.timeoutMs,
|
|
108
|
+
...(hooks.onActivity ? { onActivity: (a) => hooks.onActivity?.(rule.ruleId, a) } : {}),
|
|
109
|
+
...(priorForRule && priorForRule.length > 0 ? { priorFindings: priorForRule } : {}),
|
|
110
|
+
...(priorHeadSha ? { priorHeadSha } : {}),
|
|
111
|
+
...(rule.filePatterns ? { filePatterns: rule.filePatterns } : {}),
|
|
112
|
+
});
|
|
113
|
+
return {
|
|
114
|
+
id: result.ruleId, path: rule.relPath, ok: result.ok, durationMs: result.durationMs,
|
|
115
|
+
findingCount: sidecar.aggregator.countFor(result.ruleId),
|
|
116
|
+
summaryCount: sidecar.aggregator.summaryCountFor(result.ruleId),
|
|
117
|
+
checkCount: sidecar.aggregator.checkCountFor(result.ruleId),
|
|
118
|
+
...(result.errorMessage ? { errorMessage: result.errorMessage } : {}),
|
|
119
|
+
...(result.timedOut ? { timedOut: true } : {}),
|
|
120
|
+
...(result.diagnostics ? { diagnostics: result.diagnostics } : {}),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
const message = e?.stack ?? e?.message ?? String(e);
|
|
125
|
+
return {
|
|
126
|
+
id: rule.ruleId, path: rule.relPath, ok: false,
|
|
127
|
+
durationMs: Date.now() - ruleStart,
|
|
128
|
+
findingCount: sidecar.aggregator.countFor(rule.ruleId),
|
|
129
|
+
summaryCount: sidecar.aggregator.summaryCountFor(rule.ruleId),
|
|
130
|
+
checkCount: sidecar.aggregator.checkCountFor(rule.ruleId),
|
|
131
|
+
errorMessage: `unexpected error: ${message.split("\n")[0]}`,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
};
|
|
135
|
+
const gateThreshold = SEVERITY_ORDER[config.gateOn];
|
|
136
|
+
try {
|
|
137
|
+
const groups = groupRulesByStage(rules);
|
|
138
|
+
let gated = false;
|
|
139
|
+
for (const group of groups) {
|
|
140
|
+
if (gated) {
|
|
141
|
+
for (const rule of group.rules) {
|
|
142
|
+
const result = {
|
|
143
|
+
id: rule.ruleId, path: rule.relPath, ok: true,
|
|
144
|
+
durationMs: 0, findingCount: 0, summaryCount: 0, checkCount: 0, gated: true,
|
|
145
|
+
};
|
|
146
|
+
ruleResults.push(result);
|
|
147
|
+
hooks.onRuleEnd?.(result);
|
|
148
|
+
}
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
hooks.onStageStart?.(group.label, group.rules.length);
|
|
152
|
+
await Promise.all(group.rules.map((rule) => limit(async () => {
|
|
153
|
+
hooks.onRuleStart?.(rule.ruleId, rule.relPath);
|
|
154
|
+
const result = await executeRule(rule);
|
|
155
|
+
ruleResults.push(result);
|
|
156
|
+
hooks.onRuleEnd?.(result);
|
|
157
|
+
})));
|
|
158
|
+
const maxSev = maxFindingSeverity(sidecar.aggregator.all());
|
|
159
|
+
if (maxSev !== undefined && maxSev >= gateThreshold) {
|
|
160
|
+
gated = true;
|
|
161
|
+
const gatingCount = sidecar.aggregator.all().filter((f) => SEVERITY_ORDER[f.severity] >= gateThreshold).length;
|
|
162
|
+
hooks.onGate?.(group.label, gatingCount, config.gateOn);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
166
165
|
}
|
|
167
166
|
finally {
|
|
168
167
|
unsubscribeFindings();
|
|
168
|
+
unsubscribeSummaries();
|
|
169
|
+
unsubscribeChecks();
|
|
169
170
|
await sidecar.shutdown();
|
|
170
171
|
}
|
|
171
172
|
const findings = sidecar.aggregator.all();
|
|
172
173
|
const resolutions = sidecar.aggregator.allResolutions();
|
|
174
|
+
const summaries = sidecar.aggregator
|
|
175
|
+
.allSummaries()
|
|
176
|
+
.sort((a, b) => a.ruleId.localeCompare(b.ruleId));
|
|
177
|
+
const checks = sidecar.aggregator.allChecks().sort(checkSort);
|
|
173
178
|
const report = {
|
|
174
|
-
schemaVersion:
|
|
179
|
+
schemaVersion: 3,
|
|
175
180
|
runId,
|
|
176
181
|
startedAt,
|
|
177
182
|
completedAt: new Date().toISOString(),
|
|
@@ -179,6 +184,8 @@ export async function run(cwd, config, hooks = {}, inputs = {}) {
|
|
|
179
184
|
rules: ruleResults.sort((a, b) => a.id.localeCompare(b.id)),
|
|
180
185
|
findings: findings.sort(findingSort),
|
|
181
186
|
resolutions,
|
|
187
|
+
summaries,
|
|
188
|
+
checks,
|
|
182
189
|
};
|
|
183
190
|
const exitCode = computeExitCode(findings, ruleResults, config.failOn);
|
|
184
191
|
return { report, exitCode };
|
|
@@ -198,6 +205,52 @@ function findingSort(a, b) {
|
|
|
198
205
|
return a.path.localeCompare(b.path);
|
|
199
206
|
return (a.line ?? 0) - (b.line ?? 0);
|
|
200
207
|
}
|
|
208
|
+
function checkSort(a, b) {
|
|
209
|
+
if (a.ruleId !== b.ruleId)
|
|
210
|
+
return a.ruleId.localeCompare(b.ruleId);
|
|
211
|
+
if (a.path !== b.path)
|
|
212
|
+
return a.path.localeCompare(b.path);
|
|
213
|
+
return (a.line ?? 0) - (b.line ?? 0);
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Group rules into ordered execution stages.
|
|
217
|
+
* - Numbered stages run in ascending order, rules within a stage in parallel.
|
|
218
|
+
* - Unstaged rules (no `stage:`) form a single final group that runs after all numbered stages.
|
|
219
|
+
* - If NO rule declares a stage, the result is one group containing everything — byte-for-byte
|
|
220
|
+
* today's single-pass behavior.
|
|
221
|
+
*/
|
|
222
|
+
function groupRulesByStage(rules) {
|
|
223
|
+
const numbered = new Map();
|
|
224
|
+
const unstaged = [];
|
|
225
|
+
for (const rule of rules) {
|
|
226
|
+
if (rule.stage === undefined) {
|
|
227
|
+
unstaged.push(rule);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
const list = numbered.get(rule.stage);
|
|
231
|
+
if (list)
|
|
232
|
+
list.push(rule);
|
|
233
|
+
else
|
|
234
|
+
numbered.set(rule.stage, [rule]);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
const groups = [...numbered.keys()]
|
|
238
|
+
.sort((a, b) => a - b)
|
|
239
|
+
.map((n) => ({ label: `stage ${n}`, rules: numbered.get(n) }));
|
|
240
|
+
if (unstaged.length > 0) {
|
|
241
|
+
groups.push({ label: groups.length > 0 ? "unstaged" : "all", rules: unstaged });
|
|
242
|
+
}
|
|
243
|
+
return groups;
|
|
244
|
+
}
|
|
245
|
+
function maxFindingSeverity(findings) {
|
|
246
|
+
let max;
|
|
247
|
+
for (const f of findings) {
|
|
248
|
+
const s = SEVERITY_ORDER[f.severity];
|
|
249
|
+
if (max === undefined || s > max)
|
|
250
|
+
max = s;
|
|
251
|
+
}
|
|
252
|
+
return max;
|
|
253
|
+
}
|
|
201
254
|
export async function listRules(cwd, pattern) {
|
|
202
255
|
const repoRoot = findRepoRoot(cwd);
|
|
203
256
|
const rules = await discoverRules(repoRoot, pattern);
|
package/dist/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -11,6 +11,10 @@ export interface RuleFile {
|
|
|
11
11
|
/** Glob patterns (repo-root-relative) specifying which changed files this rule applies to.
|
|
12
12
|
* Parsed from the YAML frontmatter `files:` field. When absent, the rule applies to all changed files. */
|
|
13
13
|
filePatterns?: string[];
|
|
14
|
+
/** Execution stage from the frontmatter `stage:` field. Rules sharing a stage run in
|
|
15
|
+
* parallel; stages run in ascending order with fail-fast gating between them. When absent,
|
|
16
|
+
* the rule runs in a final implicit stage after all numbered stages. */
|
|
17
|
+
stage?: number;
|
|
14
18
|
}
|
|
15
19
|
export interface RuleResult {
|
|
16
20
|
id: string;
|
|
@@ -18,11 +22,26 @@ export interface RuleResult {
|
|
|
18
22
|
ok: boolean;
|
|
19
23
|
durationMs: number;
|
|
20
24
|
findingCount: number;
|
|
25
|
+
/** Count of `report_review_summary` calls the agent emitted via the MCP sidecar.
|
|
26
|
+
* Expected to be exactly 1 for a healthy review. 0 means the agent never
|
|
27
|
+
* signed off — usually a symptom of a broken / silent agent — and surfaces
|
|
28
|
+
* as an "incomplete review" warning. >1 means the agent called it multiple
|
|
29
|
+
* times; only the first is kept. Always present on non-skipped rules. */
|
|
30
|
+
summaryCount: number;
|
|
31
|
+
/** Count of `report_check` calls the agent emitted — incremental compliance
|
|
32
|
+
* notes. No required minimum; high values just mean the agent showed its
|
|
33
|
+
* working. */
|
|
34
|
+
checkCount: number;
|
|
21
35
|
errorMessage?: string;
|
|
22
36
|
/** True if this rule was stopped by the per-rule timeout. */
|
|
23
37
|
timedOut?: boolean;
|
|
24
38
|
/** True if this rule was skipped because no changed files matched its `files:` patterns. */
|
|
25
39
|
skipped?: boolean;
|
|
40
|
+
/** True if this rule never ran because an earlier stage tripped the gate. Distinct from
|
|
41
|
+
* `skipped` (which means "ran the pre-flight, nothing to review"). Gated rules emit no
|
|
42
|
+
* findings and no resolutions, so any prior findings they own are carried forward as
|
|
43
|
+
* still-open by the cross-run reconciliation. */
|
|
44
|
+
gated?: boolean;
|
|
26
45
|
/** Observability counters from the provider — text chars emitted and
|
|
27
46
|
* report_finding tool calls observed. The pretty output surfaces a warning
|
|
28
47
|
* when textChars is high but findingCount is 0 (model wrote findings as
|
|
@@ -77,10 +96,34 @@ export interface Resolution {
|
|
|
77
96
|
/** Commit at which the agent considered the finding resolved. */
|
|
78
97
|
resolvedAtSha: string;
|
|
79
98
|
}
|
|
99
|
+
export interface Check {
|
|
100
|
+
ruleId: string;
|
|
101
|
+
/** Repo-relative file path the agent verified. */
|
|
102
|
+
path: string;
|
|
103
|
+
line?: number;
|
|
104
|
+
lineEnd?: number;
|
|
105
|
+
/** What was verified and the evidence that it complies with the rule. */
|
|
106
|
+
message: string;
|
|
107
|
+
category?: string;
|
|
108
|
+
}
|
|
109
|
+
export interface ReviewSummary {
|
|
110
|
+
ruleId: string;
|
|
111
|
+
/** Agent's explicit declaration. "pass" = no findings reported for this rule;
|
|
112
|
+
* "concerns" = one or more findings reported. The runner cross-checks this
|
|
113
|
+
* against the recorded finding count. */
|
|
114
|
+
outcome: "pass" | "concerns";
|
|
115
|
+
/** Concrete description of what the agent examined (files, behaviours, areas). */
|
|
116
|
+
checked: string;
|
|
117
|
+
/** Why the outcome holds, tied to what was checked. */
|
|
118
|
+
rationale: string;
|
|
119
|
+
}
|
|
80
120
|
export interface RunReport {
|
|
81
121
|
/** Bumped to 2 when prior-run-aware features (resolutions, fingerprint, commentId) were added.
|
|
82
|
-
*
|
|
83
|
-
|
|
122
|
+
* Bumped to 3 when the review-summary protocol arrived: required `summaryCount`/`checkCount`
|
|
123
|
+
* on each RuleResult, and required `summaries: ReviewSummary[]` / `checks: Check[]` arrays
|
|
124
|
+
* on the report.
|
|
125
|
+
* Readers SHOULD accept v1, v2, and v3 reports and treat missing fields as defaults. */
|
|
126
|
+
schemaVersion: 3;
|
|
84
127
|
runId: string;
|
|
85
128
|
startedAt: string;
|
|
86
129
|
completedAt: string;
|
|
@@ -91,6 +134,12 @@ export interface RunReport {
|
|
|
91
134
|
findings: Finding[];
|
|
92
135
|
/** Resolutions emitted by reviewers this run, OR carried forward from `--prior-report`. */
|
|
93
136
|
resolutions: Resolution[];
|
|
137
|
+
/** Per-rule review summaries — one per rule that called `report_review_summary`.
|
|
138
|
+
* A rule with no entry here is flagged as a possibly-incomplete review. */
|
|
139
|
+
summaries: ReviewSummary[];
|
|
140
|
+
/** All compliance checks the agents emitted via `report_check`. Granular
|
|
141
|
+
* positive evidence; not findings, not subject to resolution. */
|
|
142
|
+
checks: Check[];
|
|
94
143
|
}
|
|
95
144
|
export interface RevuConfig {
|
|
96
145
|
pattern: string;
|
|
@@ -108,6 +157,10 @@ export interface RevuConfig {
|
|
|
108
157
|
output: "pretty" | "json" | "github" | "auto";
|
|
109
158
|
outputFile?: string;
|
|
110
159
|
failOn: Severity;
|
|
160
|
+
/** Severity at/above which a completed stage stops the run (later stages don't spawn).
|
|
161
|
+
* Defaults to the `failOn` value when `--gate-on` is not supplied. Orthogonal to `failOn`:
|
|
162
|
+
* `failOn` sets the exit code, `gateOn` sets whether later stages run. */
|
|
163
|
+
gateOn: Severity;
|
|
111
164
|
force: boolean;
|
|
112
165
|
/** Per-agent wall-clock timeout in ms. Default 300_000 (5 minutes). */
|
|
113
166
|
timeoutMs: number;
|