@humanbased/crosscheck 1.3.0-beta.96 → 1.3.0-beta.98
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/crosscheck.config.example.yml +11 -0
- package/dist/__tests__/codex-env.test.d.ts +2 -0
- package/dist/__tests__/codex-env.test.d.ts.map +1 -0
- package/dist/__tests__/codex-env.test.js +70 -0
- package/dist/__tests__/codex-env.test.js.map +1 -0
- package/dist/__tests__/codex.test.js +89 -1
- package/dist/__tests__/codex.test.js.map +1 -1
- package/dist/__tests__/credential-free-origin.test.d.ts +2 -0
- package/dist/__tests__/credential-free-origin.test.d.ts.map +1 -0
- package/dist/__tests__/credential-free-origin.test.js +59 -0
- package/dist/__tests__/credential-free-origin.test.js.map +1 -0
- package/dist/__tests__/fix.test.js +37 -1
- package/dist/__tests__/fix.test.js.map +1 -1
- package/dist/__tests__/optimize.test.js +1 -1
- package/dist/__tests__/optimize.test.js.map +1 -1
- package/dist/__tests__/pr-workflow-state.test.js +64 -6
- package/dist/__tests__/pr-workflow-state.test.js.map +1 -1
- package/dist/__tests__/repository-guidance.test.js +21 -21
- package/dist/__tests__/repository-guidance.test.js.map +1 -1
- package/dist/__tests__/skill-broker.test.js +44 -2
- package/dist/__tests__/skill-broker.test.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +1 -1
- package/dist/commands/review.js.map +1 -1
- package/dist/config/schema.d.ts +8 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +8 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/lib/clone.d.ts +1 -0
- package/dist/lib/clone.d.ts.map +1 -1
- package/dist/lib/clone.js +38 -0
- package/dist/lib/clone.js.map +1 -1
- package/dist/lib/pr-workflow-state.d.ts.map +1 -1
- package/dist/lib/pr-workflow-state.js +25 -2
- package/dist/lib/pr-workflow-state.js.map +1 -1
- package/dist/lib/runner.js +2 -2
- package/dist/lib/runner.js.map +1 -1
- package/dist/reviewers/codex-env.d.ts +12 -0
- package/dist/reviewers/codex-env.d.ts.map +1 -0
- package/dist/reviewers/codex-env.js +54 -0
- package/dist/reviewers/codex-env.js.map +1 -0
- package/dist/reviewers/codex.d.ts +16 -1
- package/dist/reviewers/codex.d.ts.map +1 -1
- package/dist/reviewers/codex.js +110 -33
- package/dist/reviewers/codex.js.map +1 -1
- package/dist/reviewers/fix.d.ts +1 -1
- package/dist/reviewers/fix.d.ts.map +1 -1
- package/dist/reviewers/fix.js +16 -6
- package/dist/reviewers/fix.js.map +1 -1
- package/dist/skills/broker.d.ts +2 -1
- package/dist/skills/broker.d.ts.map +1 -1
- package/dist/skills/broker.js +28 -2
- package/dist/skills/broker.js.map +1 -1
- package/get-started.md +11 -0
- package/package.json +1 -1
|
@@ -104,6 +104,17 @@ skills:
|
|
|
104
104
|
# - code-review # preloaded, opt-in · @mattpocock (MIT)
|
|
105
105
|
# - codebase-design # preloaded, opt-in · @mattpocock (MIT)
|
|
106
106
|
|
|
107
|
+
# Codex only. Codex reaches the skill broker (an MCP server) only when its
|
|
108
|
+
# sandbox is disabled: under -s read-only, -s workspace-write, -a never and
|
|
109
|
+
# --full-auto alike it cancels every tool call, so skills silently do nothing.
|
|
110
|
+
# Turning this on lets codex run unsandboxed against the PR checkout — which is
|
|
111
|
+
# untrusted code — in exchange for skills actually working. Crosscheck removes
|
|
112
|
+
# the git credential from the checkout and passes codex an allowlisted
|
|
113
|
+
# environment (no GITHUB_TOKEN) either way, but a prompt injection can still
|
|
114
|
+
# read the working tree and reach the network. Claude needs none of this: its
|
|
115
|
+
# broker works sandboxed.
|
|
116
|
+
codex_full_access: false
|
|
117
|
+
|
|
107
118
|
# ─── Budget ──────────────────────────────────────────────────────────────────
|
|
108
119
|
budget:
|
|
109
120
|
codex_monthly_usd: 20 # null = unlimited (use if on subscription)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-env.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/codex-env.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { buildCodexEnv, isAllowedCodexEnvKey } from '../reviewers/codex-env.js';
|
|
3
|
+
// Codex reads attacker-controlled text and, with skills.codex_full_access, runs
|
|
4
|
+
// unsandboxed. Every codex subprocess used to inherit the whole of process.env,
|
|
5
|
+
// so a prompt-injected shell command could print GITHUB_TOKEN. Six BLOCK reviews
|
|
6
|
+
// on #298 named this. The guarantee under test: what is not in the process cannot
|
|
7
|
+
// be taken out of it.
|
|
8
|
+
describe('buildCodexEnv', () => {
|
|
9
|
+
const source = {
|
|
10
|
+
PATH: '/usr/bin',
|
|
11
|
+
HOME: '/home/dev',
|
|
12
|
+
LANG: 'en_US.UTF-8',
|
|
13
|
+
LC_ALL: 'en_US.UTF-8',
|
|
14
|
+
HTTPS_PROXY: 'http://proxy:8080',
|
|
15
|
+
OPENAI_API_KEY: 'sk-real',
|
|
16
|
+
// None of these may survive.
|
|
17
|
+
GITHUB_TOKEN: 'ghp_secret',
|
|
18
|
+
GH_TOKEN: 'gho_secret',
|
|
19
|
+
ANTHROPIC_API_KEY: 'sk-ant-secret',
|
|
20
|
+
LINEAR_API_KEY: 'lin_secret',
|
|
21
|
+
CROSSCHECK_WEBHOOK_SECRET: 'whsec',
|
|
22
|
+
AWS_SECRET_ACCESS_KEY: 'aws_secret',
|
|
23
|
+
NPM_TOKEN: 'npm_secret',
|
|
24
|
+
};
|
|
25
|
+
it('keeps what codex needs to run and authenticate', () => {
|
|
26
|
+
const env = buildCodexEnv({}, source);
|
|
27
|
+
expect(env.PATH).toBe('/usr/bin');
|
|
28
|
+
expect(env.HOME).toBe('/home/dev');
|
|
29
|
+
expect(env.OPENAI_API_KEY).toBe('sk-real');
|
|
30
|
+
expect(env.HTTPS_PROXY).toBe('http://proxy:8080');
|
|
31
|
+
expect(env.LC_ALL).toBe('en_US.UTF-8');
|
|
32
|
+
});
|
|
33
|
+
it('drops every credential that is not codex\'s own', () => {
|
|
34
|
+
const env = buildCodexEnv({}, source);
|
|
35
|
+
for (const key of ['GITHUB_TOKEN', 'GH_TOKEN', 'ANTHROPIC_API_KEY', 'LINEAR_API_KEY',
|
|
36
|
+
'CROSSCHECK_WEBHOOK_SECRET', 'AWS_SECRET_ACCESS_KEY', 'NPM_TOKEN']) {
|
|
37
|
+
expect(env).not.toHaveProperty(key);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// The property that matters more than any single name: a secret nobody thought
|
|
41
|
+
// to denylist is still absent, because the default is to drop.
|
|
42
|
+
it('drops an unknown variable it has never heard of', () => {
|
|
43
|
+
const env = buildCodexEnv({}, { PATH: '/usr/bin', SOME_FUTURE_INTEGRATION_TOKEN: 'nope' });
|
|
44
|
+
expect(env).not.toHaveProperty('SOME_FUTURE_INTEGRATION_TOKEN');
|
|
45
|
+
expect(env.PATH).toBe('/usr/bin');
|
|
46
|
+
});
|
|
47
|
+
it('applies overrides last and without filtering them', () => {
|
|
48
|
+
const env = buildCodexEnv({ PATH: '/repo/node_modules/.bin:/usr/bin', CODEX_QUIET_MODE: '1' }, source);
|
|
49
|
+
expect(env.PATH).toBe('/repo/node_modules/.bin:/usr/bin');
|
|
50
|
+
// Deliberately set by the caller, so it is not subject to the allowlist.
|
|
51
|
+
expect(env.CODEX_QUIET_MODE).toBe('1');
|
|
52
|
+
});
|
|
53
|
+
it('omits an allowed key that is simply unset', () => {
|
|
54
|
+
const env = buildCodexEnv({}, { PATH: '/usr/bin' });
|
|
55
|
+
expect(env).not.toHaveProperty('HOME');
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('isAllowedCodexEnvKey', () => {
|
|
59
|
+
it('allows exact names and the LC_ prefix', () => {
|
|
60
|
+
expect(isAllowedCodexEnvKey('HOME')).toBe(true);
|
|
61
|
+
expect(isAllowedCodexEnvKey('LC_TIME')).toBe(true);
|
|
62
|
+
expect(isAllowedCodexEnvKey('no_proxy')).toBe(true);
|
|
63
|
+
});
|
|
64
|
+
it('rejects near-misses rather than pattern-matching loosely', () => {
|
|
65
|
+
expect(isAllowedCodexEnvKey('HOMEBREW_GITHUB_API_TOKEN')).toBe(false);
|
|
66
|
+
expect(isAllowedCodexEnvKey('PATH_TO_SECRET')).toBe(false);
|
|
67
|
+
expect(isAllowedCodexEnvKey('MY_LC_KEY')).toBe(false);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=codex-env.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex-env.test.js","sourceRoot":"","sources":["../../src/__tests__/codex-env.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
|
2
2
|
import { mkdtempSync, rmSync, realpathSync } from 'fs';
|
|
3
3
|
import { tmpdir } from 'os';
|
|
4
4
|
import { join } from 'path';
|
|
5
|
-
import { codexReasoningEffort, inferVerdictFromCodexOutput, stripRepoDirPaths } from '../reviewers/codex.js';
|
|
5
|
+
import { buildCodexReviewPrompt, codexReasoningEffort, inferVerdictFromCodexOutput, parseCodexTokensUsed, stripRepoDirPaths } from '../reviewers/codex.js';
|
|
6
6
|
const CODEX_FOOTER = '\n\n---\n_Reviewed with [OpenAI Codex](https://openai.com/codex)_';
|
|
7
7
|
describe('inferVerdictFromCodexOutput', () => {
|
|
8
8
|
it('returns BLOCK when P0 is present alone', () => {
|
|
@@ -107,4 +107,92 @@ describe('codexReasoningEffort', () => {
|
|
|
107
107
|
expect(codexReasoningEffort('')).toBe('medium');
|
|
108
108
|
});
|
|
109
109
|
});
|
|
110
|
+
describe('buildCodexReviewPrompt', () => {
|
|
111
|
+
const base = {
|
|
112
|
+
prTitle: 'feat: add lineage drawer',
|
|
113
|
+
baseBranch: 'staging',
|
|
114
|
+
behaviorInstructions: 'Structure your output as: ## Summary.\nVERDICT: APPROVE',
|
|
115
|
+
};
|
|
116
|
+
// `codex review --base` scoped the diff itself. `codex exec` does not, so the
|
|
117
|
+
// prompt has to say what to review — same two opening lines claude gets, so a
|
|
118
|
+
// PR reviewed by either vendor is given the same brief.
|
|
119
|
+
it('names the PR and the base branch, and scopes the review to the PR', () => {
|
|
120
|
+
const prompt = buildCodexReviewPrompt(base);
|
|
121
|
+
expect(prompt).toContain('feat: add lineage drawer');
|
|
122
|
+
expect(prompt).toContain('`staging` is the base');
|
|
123
|
+
expect(prompt).toContain('Review only the changes introduced in this PR');
|
|
124
|
+
});
|
|
125
|
+
// The clone creates refs/remotes/origin/<base> and no local <base> branch
|
|
126
|
+
// (see clonePRForReview), so `git diff staging...HEAD` — the obvious reading of
|
|
127
|
+
// a bare branch name — fails on any non-default base and can leave the agent
|
|
128
|
+
// reviewing an empty diff. Review on #298 caught this. Naming the exact command
|
|
129
|
+
// is the fix: `codex exec review --base` cannot be used instead, because there
|
|
130
|
+
// --base and a custom prompt are mutually exclusive.
|
|
131
|
+
it('names a diff command whose ref actually exists in the clone', () => {
|
|
132
|
+
const prompt = buildCodexReviewPrompt(base);
|
|
133
|
+
expect(prompt).toContain('git diff origin/staging...HEAD');
|
|
134
|
+
expect(prompt).not.toMatch(/git diff staging\.\.\.HEAD/);
|
|
135
|
+
});
|
|
136
|
+
it('scopes the diff command to the PR\'s own base, not a hardcoded one', () => {
|
|
137
|
+
const prompt = buildCodexReviewPrompt({ ...base, baseBranch: 'release/2.1' });
|
|
138
|
+
expect(prompt).toContain('git diff origin/release/2.1...HEAD');
|
|
139
|
+
});
|
|
140
|
+
it('always ends with the behaviour block so the verdict rule is last', () => {
|
|
141
|
+
// The verdict rule is the final line of behaviorInstructions and is
|
|
142
|
+
// machine-parsed. Repository guidance is reference material, so it is the
|
|
143
|
+
// one block allowed after it.
|
|
144
|
+
const prompt = buildCodexReviewPrompt({ ...base, skillInstructions: '## Agent Skills\nCall list_enabled_skills.' });
|
|
145
|
+
expect(prompt.indexOf('## Agent Skills')).toBeLessThan(prompt.indexOf('VERDICT: APPROVE'));
|
|
146
|
+
});
|
|
147
|
+
it('places skill instructions before the behaviour block', () => {
|
|
148
|
+
// Activation has to happen before the review starts; after the verdict rule
|
|
149
|
+
// it reads as boilerplate past the end of the prompt.
|
|
150
|
+
const prompt = buildCodexReviewPrompt({
|
|
151
|
+
...base,
|
|
152
|
+
skillInstructions: '## Agent Skills\nCall list_enabled_skills.',
|
|
153
|
+
repositoryGuidance: '## Repo guidance\nPrefer X.',
|
|
154
|
+
});
|
|
155
|
+
expect(prompt.indexOf('## Agent Skills')).toBeLessThan(prompt.indexOf('## Summary'));
|
|
156
|
+
expect(prompt.indexOf('## Repo guidance')).toBeGreaterThan(prompt.indexOf('VERDICT: APPROVE'));
|
|
157
|
+
});
|
|
158
|
+
it('includes focus, custom prompt and issue context when supplied', () => {
|
|
159
|
+
const prompt = buildCodexReviewPrompt({
|
|
160
|
+
...base,
|
|
161
|
+
issueContext: 'Tracker: IN-3243 — show lineage.',
|
|
162
|
+
focusLine: 'Focus areas: security, types.',
|
|
163
|
+
customPrompt: 'Be concise.',
|
|
164
|
+
});
|
|
165
|
+
expect(prompt).toContain('IN-3243');
|
|
166
|
+
expect(prompt).toContain('Focus areas: security, types.');
|
|
167
|
+
expect(prompt).toContain('Be concise.');
|
|
168
|
+
});
|
|
169
|
+
it('omits absent blocks without leaving blank runs', () => {
|
|
170
|
+
const prompt = buildCodexReviewPrompt(base);
|
|
171
|
+
expect(prompt).not.toMatch(/\n{3,}/);
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
describe('parseCodexTokensUsed', () => {
|
|
175
|
+
// `codex exec` reports usage as a "tokens used" heading with the count on the
|
|
176
|
+
// next line; `codex review` used an inline "tokens: N". Both are accepted so
|
|
177
|
+
// the telemetry survived the move between subcommands.
|
|
178
|
+
it('reads the codex exec two-line form', () => {
|
|
179
|
+
expect(parseCodexTokensUsed('codex\nreview text\ntokens used\n15,646\n')).toBe(15646);
|
|
180
|
+
});
|
|
181
|
+
it('reads the inline form', () => {
|
|
182
|
+
expect(parseCodexTokensUsed('some output\ntokens: 4,200')).toBe(4200);
|
|
183
|
+
});
|
|
184
|
+
it('is case-insensitive and tolerates no thousands separator', () => {
|
|
185
|
+
expect(parseCodexTokensUsed('Tokens Used\n900')).toBe(900);
|
|
186
|
+
});
|
|
187
|
+
it('returns undefined when no usage line is present', () => {
|
|
188
|
+
expect(parseCodexTokensUsed('just a review, no usage line')).toBeUndefined();
|
|
189
|
+
});
|
|
190
|
+
it('returns undefined rather than reading an unrelated number', () => {
|
|
191
|
+
// "tokens" appearing in review prose must not be mistaken for usage.
|
|
192
|
+
expect(parseCodexTokensUsed('The parser splits tokens by whitespace, all 12 of them.')).toBeUndefined();
|
|
193
|
+
});
|
|
194
|
+
it('takes the last report when a run retried', () => {
|
|
195
|
+
expect(parseCodexTokensUsed('tokens used\n100\nretry\ntokens used\n250')).toBe(250);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
110
198
|
//# sourceMappingURL=codex.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.test.js","sourceRoot":"","sources":["../../src/__tests__/codex.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"codex.test.js","sourceRoot":"","sources":["../../src/__tests__/codex.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-free-origin.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/credential-free-origin.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { execFileSync } from 'child_process';
|
|
3
|
+
import { mkdtempSync, rmSync } from 'fs';
|
|
4
|
+
import { tmpdir } from 'os';
|
|
5
|
+
import { join } from 'path';
|
|
6
|
+
import { withCredentialFreeOrigin } from '../lib/clone.js';
|
|
7
|
+
// An HTTPS clone stores https://x-access-token:<token>@github.com/... in
|
|
8
|
+
// .git/config, so the checkout carries a writable GitHub token as a plain file.
|
|
9
|
+
// Once a vendor agent runs shell commands in that checkout — which is what
|
|
10
|
+
// skills.codex_full_access permits — reading .git/config or running `git push`
|
|
11
|
+
// is enough to act on the repository. Flagged by review on #298.
|
|
12
|
+
describe('withCredentialFreeOrigin', () => {
|
|
13
|
+
let dir;
|
|
14
|
+
const originUrl = () => execFileSync('git', ['remote', 'get-url', 'origin'], { cwd: dir, encoding: 'utf8' }).trim();
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
dir = mkdtempSync(join(tmpdir(), 'crosscheck-origin-'));
|
|
17
|
+
execFileSync('git', ['init', '-q'], { cwd: dir });
|
|
18
|
+
});
|
|
19
|
+
afterEach(() => rmSync(dir, { force: true, recursive: true }));
|
|
20
|
+
const setOrigin = (url) => {
|
|
21
|
+
execFileSync('git', ['remote', 'add', 'origin', url], { cwd: dir });
|
|
22
|
+
};
|
|
23
|
+
it('strips the token for the duration and restores it after', async () => {
|
|
24
|
+
const withToken = 'https://x-access-token:ghs_secret@github.com/o/r.git';
|
|
25
|
+
setOrigin(withToken);
|
|
26
|
+
let seen = '';
|
|
27
|
+
await withCredentialFreeOrigin(dir, async () => { seen = originUrl(); });
|
|
28
|
+
expect(seen).toBe('https://github.com/o/r.git');
|
|
29
|
+
expect(seen).not.toContain('ghs_secret');
|
|
30
|
+
expect(originUrl()).toBe(withToken);
|
|
31
|
+
});
|
|
32
|
+
it('restores the token even when the body throws', async () => {
|
|
33
|
+
const withToken = 'https://x-access-token:ghs_secret@github.com/o/r.git';
|
|
34
|
+
setOrigin(withToken);
|
|
35
|
+
await expect(withCredentialFreeOrigin(dir, async () => { throw new Error('vendor failed'); }))
|
|
36
|
+
.rejects.toThrow('vendor failed');
|
|
37
|
+
// The fix step pushes through this remote after the agent exits, so a lost
|
|
38
|
+
// restore would turn a vendor error into a failed push.
|
|
39
|
+
expect(originUrl()).toBe(withToken);
|
|
40
|
+
});
|
|
41
|
+
it('returns the body result', async () => {
|
|
42
|
+
setOrigin('https://x-access-token:ghs_secret@github.com/o/r.git');
|
|
43
|
+
await expect(withCredentialFreeOrigin(dir, async () => 'value')).resolves.toBe('value');
|
|
44
|
+
});
|
|
45
|
+
it('leaves an SSH remote untouched — it carries no credential', async () => {
|
|
46
|
+
const ssh = 'git@github.com:o/r.git';
|
|
47
|
+
setOrigin(ssh);
|
|
48
|
+
let seen = '';
|
|
49
|
+
await withCredentialFreeOrigin(dir, async () => { seen = originUrl(); });
|
|
50
|
+
expect(seen).toBe(ssh);
|
|
51
|
+
expect(originUrl()).toBe(ssh);
|
|
52
|
+
});
|
|
53
|
+
it('runs the body when there is no origin at all', async () => {
|
|
54
|
+
let ran = false;
|
|
55
|
+
await withCredentialFreeOrigin(dir, async () => { ran = true; });
|
|
56
|
+
expect(ran).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=credential-free-origin.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-free-origin.test.js","sourceRoot":"","sources":["../../src/__tests__/credential-free-origin.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -175,7 +175,7 @@ describe('runCodexFixStep', () => {
|
|
|
175
175
|
const { loadBundledSkills } = await import('../skills/catalog.js');
|
|
176
176
|
const session = createSkillActivationSession('fix', ['code-review-skill'], loadBundledSkills());
|
|
177
177
|
try {
|
|
178
|
-
await runCodexFixStep('/tmp/repo', 'main', 'My PR', 'Fix the bug', '', 'default', undefined, session);
|
|
178
|
+
await runCodexFixStep('/tmp/repo', 'main', 'My PR', 'Fix the bug', '', 'default', undefined, session, undefined, true);
|
|
179
179
|
const args = execaMock.mock.calls[0][1];
|
|
180
180
|
expect(args).toContainEqual(expect.stringContaining('mcp_servers.crosscheck.command='));
|
|
181
181
|
expect(args.at(-1)).toContain('Call `list_enabled_skills`');
|
|
@@ -184,6 +184,42 @@ describe('runCodexFixStep', () => {
|
|
|
184
184
|
session.close();
|
|
185
185
|
}
|
|
186
186
|
});
|
|
187
|
+
// Without skills.codex_full_access the broker is unreachable — codex cancels
|
|
188
|
+
// every tools/call under a sandbox — so neither the registration nor the
|
|
189
|
+
// instruction to call it should be there. Obliging codex to call a tool that is
|
|
190
|
+
// always cancelled is the original 0-activations bug, not a graceful fallback.
|
|
191
|
+
it('offers codex no skills when full access was not granted', async () => {
|
|
192
|
+
const { runCodexFixStep } = await import('../reviewers/fix.js');
|
|
193
|
+
const { createSkillActivationSession } = await import('../skills/broker.js');
|
|
194
|
+
const { loadBundledSkills } = await import('../skills/catalog.js');
|
|
195
|
+
const session = createSkillActivationSession('fix', ['code-review-skill'], loadBundledSkills());
|
|
196
|
+
try {
|
|
197
|
+
await runCodexFixStep('/tmp/repo', 'main', 'My PR', 'Fix the bug', '', 'default', undefined, session);
|
|
198
|
+
const args = execaMock.mock.calls[0][1];
|
|
199
|
+
expect(args.join(' ')).not.toContain('mcp_servers.crosscheck');
|
|
200
|
+
expect(args.join(' ')).not.toContain('danger-full-access');
|
|
201
|
+
expect(args.at(-1)).not.toContain('list_enabled_skills');
|
|
202
|
+
}
|
|
203
|
+
finally {
|
|
204
|
+
session.close();
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
// The operator's own MCP servers and plugins must not be loaded into a run that
|
|
208
|
+
// reads an untrusted diff.
|
|
209
|
+
it('ignores user config on every codex fix run', async () => {
|
|
210
|
+
const { runCodexFixStep } = await import('../reviewers/fix.js');
|
|
211
|
+
await runCodexFixStep('/tmp/repo', 'main', 'My PR', 'Fix the bug', '', 'default');
|
|
212
|
+
const args = execaMock.mock.calls[0][1];
|
|
213
|
+
expect(args).toContain('--ignore-user-config');
|
|
214
|
+
});
|
|
215
|
+
// Nothing that is not in the process can be exfiltrated from it.
|
|
216
|
+
it('hands codex an allowlisted environment, not the operator\'s', async () => {
|
|
217
|
+
const { runCodexFixStep } = await import('../reviewers/fix.js');
|
|
218
|
+
await runCodexFixStep('/tmp/repo', 'main', 'My PR', 'Fix the bug', '', 'default');
|
|
219
|
+
const opts = execaMock.mock.calls[0][2];
|
|
220
|
+
expect(opts.extendEnv).toBe(false);
|
|
221
|
+
expect(opts.env).not.toHaveProperty('GITHUB_TOKEN');
|
|
222
|
+
});
|
|
187
223
|
});
|
|
188
224
|
describe('runFixStep timeout defaults', () => {
|
|
189
225
|
let execSyncMock;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.test.js","sourceRoot":"","sources":["../../src/__tests__/fix.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAE/C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG,mCAAmC,CAAA;QACnD,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;QACzD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,OAAO,GAAG,mCAAmC,CAAA;QACnD,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAChE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,OAAO,GAAG,WAAW,CAAA;QAC3B,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,OAAO,GAAG,8BAA8B,CAAA;QAC9C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,CAAC,CAAA;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG,4BAA4B,CAAA;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;QACpD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,2EAA2E;QAC3E,yEAAyE;QACzE,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACpD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAI,MAAc,CAAA;IAElB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,2CAA2C;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QAChD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAA;QACxC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;QACvF,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAEjC,yFAAyF;QACzF,MAAM,SAAS,GAAG,uBAAuB,CAAA;QAEzC,qEAAqE;QACrE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;QAC7C,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;QAC7C,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;QAE9C,qEAAqE;QACrE,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;QACvF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;QAE7F,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;QAC7C,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;QAC/C,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,OAAO,GAAG,oBAAoB,CAAA;QACpC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAE,CAAA;QACnD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAE,CAAA;QAClD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,yFAAyF;QACzF,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,0CAA0C,CAAA;QAC3D,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAEjC,iFAAiF;QACjF,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,wBAAwB,EAAE,UAAU,CAAC,CAAA;QACxE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAEzB,iCAAiC;QACjC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,mFAAmF;QACnF,+FAA+F;QAC/F,MAAM,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACpE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,IAAI,MAAc,CAAA;IAElB,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,sBAAsB,CAAA;QACvC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAEjC,qFAAqF;QACrF,wEAAwE;QACxE,8EAA8E;QAC9E,MAAM,OAAO,GAAG,EAAE,CAAA;QAClB,MAAM,UAAU,GAAG,IAAI,CAAA,CAAE,oBAAoB;QAC7C,MAAM,cAAc,GAAG,UAAU,IAAI,OAAO,KAAK,EAAE,CAAA;QACnD,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACjC,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,CAAA;QAExD,2EAA2E;QAC3E,MAAM,UAAU,GAAG,6BAA6B,CAAA;QAChD,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA,CAAE,yCAAyC;QACjF,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;IAC5C,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;QAChD,MAAM,IAAI,GAAG,MAAM,cAAc,EAAkC,CAAA;QACnE,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,IAAI,YAAsC,CAAA;IAC1C,IAAI,SAAmC,CAAA;IAEvC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,CAAC,YAAY,EAAE,CAAA;QACjB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;QAClD,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAA6B,CAAA;QAC3E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;QACnC,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAA6B,CAAA;QAC9D,sDAAsD;QACtD,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAChC,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAW,CAAC,CAAA;IAClE,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;IAEvC,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC/D,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAChC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;QACrF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC/D,YAAY,CAAC,kBAAkB,CAAC,CAAC,GAAY,EAAE,EAAE;YAC/C,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAAE,OAAO,wBAAwB,CAAA;YACxE,OAAO,EAAE,CAAA;QACX,CAAC,CAAC,CAAA;QACF,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;QACrF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC/D,SAAS,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAA;QACpE,MAAM,MAAM,CACV,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CACjE,CAAC,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC/D,SAAS,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAA;QAC7D,MAAM,MAAM,CACV,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,CAAC,CACjE,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC/D,MAAM,EAAE,4BAA4B,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC5E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,4BAA4B,CAAC,KAAK,EAAE,CAAC,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAA;QAC/F,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;YACrG,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAa,CAAA;YACnD,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,iCAAiC,CAAC,CAAC,CAAA;YACvF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QAC7D,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,YAAsC,CAAA;IAC1C,IAAI,SAAmC,CAAA;IAEvC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,CAAC,YAAY,EAAE,CAAA;QACjB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;QAClD,YAAY,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAA6B,CAAA;QAC3E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;QACnC,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAA6B,CAAA;QAC9D,YAAY,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QAChC,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAW,CAAC,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;IAEvC,MAAM,aAAa,GAAG,CAAC,IAAsC,EAAE,EAAE,CAC/D,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,CAAyC,CAAA;IAEjE,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC1D,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAA;QACvF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAyB,CAAA;QAC/D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC1D,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAA;QACvF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAyB,CAAA;QAC/D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC1D,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;YAC7B,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;SACC,CAAA;QACzC,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAA;QACvF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAa,CAAA;QACnD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAA;QACzC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC/B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC1D,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAA;QACnF,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAyB,CAAA;QAC/D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC1D,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QAC1G,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAyB,CAAA;QAC/D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC1D,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QACrG,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAyB,CAAA;QAC/D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC1D,MAAM,EAAE,4BAA4B,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;QAC5E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAA;QAClE,MAAM,OAAO,GAAG,4BAA4B,CAAC,KAAK,EAAE,CAAC,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAA;QAC/F,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;YACtH,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAa,CAAA;YACnD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAuB,CAAA;YAC7D,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;YACtC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;YACxC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAA;YACnE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QAC5D,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,KAAK,EAAE,CAAA;QACjB,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"fix.test.js","sourceRoot":"","sources":["../../src/__tests__/fix.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ function makeConfig(claudeEnabled, codexEnabled) {
|
|
|
10
10
|
routing: { codex_reviews_patterns: [], claude_reviews_patterns: [], claude_branch_prefixes: [], codex_branch_prefixes: [], allowed_authors: [], author_routes: {}, fallback_reviewer: 'auto' },
|
|
11
11
|
server: { port: 7892, webhook_path: '/webhook' },
|
|
12
12
|
quality: { tier: 'balanced', mode: 'fixed', focus: [], custom_prompt: undefined },
|
|
13
|
-
skills: { enabled: [] },
|
|
13
|
+
skills: { enabled: [], codex_full_access: false },
|
|
14
14
|
budget: { codex_monthly_usd: null, per_review_usd: 1 },
|
|
15
15
|
vendors: {
|
|
16
16
|
claude: { enabled: claudeEnabled, model: null, auth: 'subscription', effort: 'medium', timeout_sec: null },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optimize.test.js","sourceRoot":"","sources":["../../src/__tests__/optimize.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,yBAAyB,CAAA;AAIhC,SAAS,UAAU,CAAC,aAAsB,EAAE,YAAqB;IAC/D,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,cAAc,EAAE,KAAK;QACrB,IAAI,EAAE,EAAE;QACR,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,uBAAuB,EAAE,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,qBAAqB,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE;QAC9L,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE;QAChD,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE;QACjF,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"optimize.test.js","sourceRoot":"","sources":["../../src/__tests__/optimize.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,14 +53,56 @@ describe('identifyNextWorkflowStep', () => {
|
|
|
53
53
|
expect(next.step?.type).toBe('review');
|
|
54
54
|
expect(next.round).toBe(1);
|
|
55
55
|
});
|
|
56
|
-
it('routes a non-APPROVE
|
|
56
|
+
it('routes a non-APPROVE review to fix while HEAD is still the reviewed commit', () => {
|
|
57
57
|
const next = identifyNextWorkflowStep([
|
|
58
58
|
record({ type: 'review', verdict: 'BLOCK', sha: 'reviewed-sha' }),
|
|
59
|
-
], workflow, '
|
|
59
|
+
], workflow, 'reviewed-sha');
|
|
60
60
|
expect(next.step?.type).toBe('fix');
|
|
61
61
|
expect(next.reviewComment?.id).toBe(100);
|
|
62
62
|
expect(next.round).toBe(1);
|
|
63
63
|
});
|
|
64
|
+
// Previously this routed to fix regardless of HEAD ("even when HEAD has moved").
|
|
65
|
+
// That is monorepo#2548: the author addressed the BLOCK themselves, the fix ran
|
|
66
|
+
// against a review of a tree that no longer existed, applied nothing, and — since
|
|
67
|
+
// a no-op fix records nothing — every later event replayed the same decision, so
|
|
68
|
+
// the PR sat on a stale BLOCK with no way to advance. The workflow already routes
|
|
69
|
+
// a moved HEAD to a fresh review when crosscheck's own fix moved it (see 'routes a
|
|
70
|
+
// stale fix followed by a new HEAD back to review'); who pushed says nothing about
|
|
71
|
+
// whether the reviewed tree still exists.
|
|
72
|
+
it('routes a non-APPROVE review to a fresh review once HEAD moves past it', () => {
|
|
73
|
+
const next = identifyNextWorkflowStep([
|
|
74
|
+
record({ type: 'review', verdict: 'BLOCK', sha: 'reviewed-sha' }),
|
|
75
|
+
], workflow, 'new-head-sha');
|
|
76
|
+
expect(next.step?.type).toBe('review');
|
|
77
|
+
expect(next.round).toBe(2);
|
|
78
|
+
});
|
|
79
|
+
it('treats the short and long forms of the reviewed SHA as the same commit', () => {
|
|
80
|
+
const next = identifyNextWorkflowStep([
|
|
81
|
+
record({ type: 'review', verdict: 'BLOCK', sha: '59abeb6' }),
|
|
82
|
+
], workflow, '59abeb630af4efbc874650db88ecf3dcb02724fb');
|
|
83
|
+
expect(next.step?.type).toBe('fix');
|
|
84
|
+
});
|
|
85
|
+
// A record that cannot say which commit it describes cannot prove it is stale.
|
|
86
|
+
// Legacy comments carry no `sha=`, and trading their working fix step for a
|
|
87
|
+
// re-review on every push would be a regression, so absence keeps the old path.
|
|
88
|
+
it('routes to fix when the review carries no SHA at all', () => {
|
|
89
|
+
const next = identifyNextWorkflowStep([
|
|
90
|
+
record({ type: 'review', verdict: 'BLOCK' }),
|
|
91
|
+
], workflow, 'new-head-sha');
|
|
92
|
+
expect(next.step?.type).toBe('fix');
|
|
93
|
+
expect(next.reviewComment?.id).toBe(100);
|
|
94
|
+
});
|
|
95
|
+
// The fix loop still re-engages: the fresh review posts on the new HEAD, and the
|
|
96
|
+
// fix step runs off that. One extra review is the price of never fixing against a
|
|
97
|
+
// tree that no longer exists — and unlike the old path, it always terminates.
|
|
98
|
+
it('reaches fix again after the fresh review lands on the new HEAD', () => {
|
|
99
|
+
const next = identifyNextWorkflowStep([
|
|
100
|
+
record({ type: 'review', verdict: 'BLOCK', sha: 'reviewed-sha' }),
|
|
101
|
+
record({ type: 'review', verdict: 'BLOCK', sha: 'new-head-sha', round: 2, commentId: 103 }),
|
|
102
|
+
], workflow, 'new-head-sha');
|
|
103
|
+
expect(next.step?.type).toBe('fix');
|
|
104
|
+
expect(next.reviewComment?.id).toBe(103);
|
|
105
|
+
});
|
|
64
106
|
it('routes a non-APPROVE recheck to fix', () => {
|
|
65
107
|
const next = identifyNextWorkflowStep([
|
|
66
108
|
record({ type: 'review', verdict: 'BLOCK', sha: 'first-sha' }),
|
|
@@ -71,15 +113,17 @@ describe('identifyNextWorkflowStep', () => {
|
|
|
71
113
|
expect(next.reviewComment?.id).toBe(102);
|
|
72
114
|
expect(next.round).toBe(1);
|
|
73
115
|
});
|
|
74
|
-
|
|
116
|
+
// Same rule one round deeper: a recheck is a verdict on a specific tree too, so a
|
|
117
|
+
// commit pushed past it re-opens the review rather than feeding a stale findings
|
|
118
|
+
// list to fix. The round carries forward from the recheck.
|
|
119
|
+
it('routes a non-APPROVE recheck followed by an unannotated HEAD commit to review', () => {
|
|
75
120
|
const next = identifyNextWorkflowStep([
|
|
76
121
|
record({ type: 'review', verdict: 'BLOCK', sha: 'first-sha', commentId: 100 }),
|
|
77
122
|
record({ type: 'fix', commentId: 101, pushedSha: 'first-fix-sha' }),
|
|
78
123
|
record({ type: 'recheck', verdict: 'NEEDS_WORK', sha: 'rechecked-sha', round: 7, commentId: 102 }),
|
|
79
124
|
], workflow, 'new-unannotated-head-sha');
|
|
80
|
-
expect(next.step?.type).toBe('
|
|
81
|
-
expect(next.
|
|
82
|
-
expect(next.round).toBe(7);
|
|
125
|
+
expect(next.step?.type).toBe('review');
|
|
126
|
+
expect(next.round).toBe(8);
|
|
83
127
|
});
|
|
84
128
|
it('routes a current-head fix after review to recheck', () => {
|
|
85
129
|
const next = identifyNextWorkflowStep([
|
|
@@ -310,6 +354,20 @@ describe('identifyNextWorkflowStep', () => {
|
|
|
310
354
|
});
|
|
311
355
|
// One attempt per review round: a successful resolve pushes a merge commit, which gets
|
|
312
356
|
// reviewed, and that new review makes the PR eligible again if it re-conflicts.
|
|
357
|
+
// The merge commit a resolve pushes moves HEAD off the reviewed tree and brings
|
|
358
|
+
// in base content the review never saw. The changelog says this case gets a
|
|
359
|
+
// fresh review, but the fix step's `when` was still satisfied on a non-APPROVE
|
|
360
|
+
// verdict, so it took the fix branch first and fixed against the pre-merge
|
|
361
|
+
// review. Gating that branch on the reviewed SHA makes the code agree with the
|
|
362
|
+
// documented behaviour.
|
|
363
|
+
it('routes the merge commit a resolve pushed to a fresh review, not fix', () => {
|
|
364
|
+
const next = identifyNextWorkflowStep([
|
|
365
|
+
record({ type: 'review', verdict: 'BLOCK', sha: 'sha-A' }),
|
|
366
|
+
record({ type: 'conflict-resolve', commentId: 101, pushedSha: 'merge-sha' }),
|
|
367
|
+
], workflow, 'merge-sha');
|
|
368
|
+
expect(next.step?.type).toBe('review');
|
|
369
|
+
expect(next.round).toBe(2);
|
|
370
|
+
});
|
|
313
371
|
it('does not re-offer conflict-resolve when one already ran since the last review', () => {
|
|
314
372
|
const next = identifyNextWorkflowStep([
|
|
315
373
|
record({ type: 'review', verdict: 'APPROVE', sha: 'sha-A' }),
|