@humanbased/crosscheck 0.14.0 → 0.15.0-beta.145
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/ISSUE.md +1 -1
- package/LICENSE +1 -1
- package/README.md +191 -8
- package/README.zh.md +1 -1
- package/crosscheck.config.example.yml +4 -2
- package/dist/__tests__/backtrace.test.js +1 -1
- package/dist/__tests__/backtrace.test.js.map +1 -1
- package/dist/__tests__/diagnose.test.js +36 -0
- package/dist/__tests__/diagnose.test.js.map +1 -1
- package/dist/__tests__/durations.test.js +5 -1
- package/dist/__tests__/durations.test.js.map +1 -1
- package/dist/__tests__/error-classification.test.d.ts +2 -0
- package/dist/__tests__/error-classification.test.d.ts.map +1 -0
- package/dist/__tests__/error-classification.test.js +36 -0
- package/dist/__tests__/error-classification.test.js.map +1 -0
- package/dist/__tests__/fix.test.js +48 -1
- package/dist/__tests__/fix.test.js.map +1 -1
- package/dist/__tests__/issue.test.js +2 -2
- package/dist/__tests__/issue.test.js.map +1 -1
- package/dist/__tests__/kickass.test.js +362 -69
- package/dist/__tests__/kickass.test.js.map +1 -1
- package/dist/__tests__/optimize.test.js +3 -3
- package/dist/__tests__/optimize.test.js.map +1 -1
- package/dist/__tests__/pr-picker.test.js +8 -7
- package/dist/__tests__/pr-picker.test.js.map +1 -1
- package/dist/__tests__/pr-status.test.js +41 -20
- package/dist/__tests__/pr-status.test.js.map +1 -1
- package/dist/__tests__/pr-workflow-state.test.d.ts +2 -0
- package/dist/__tests__/pr-workflow-state.test.d.ts.map +1 -0
- package/dist/__tests__/pr-workflow-state.test.js +184 -0
- package/dist/__tests__/pr-workflow-state.test.js.map +1 -0
- package/dist/__tests__/review-models.test.js +18 -0
- package/dist/__tests__/review-models.test.js.map +1 -1
- package/dist/__tests__/run.test.d.ts +2 -0
- package/dist/__tests__/run.test.d.ts.map +1 -0
- package/dist/__tests__/run.test.js +81 -0
- package/dist/__tests__/run.test.js.map +1 -0
- package/dist/__tests__/runner.test.js +117 -1
- package/dist/__tests__/runner.test.js.map +1 -1
- package/dist/__tests__/scopes.test.js +11 -11
- package/dist/__tests__/scopes.test.js.map +1 -1
- package/dist/__tests__/smart-switch.test.js +1 -1
- package/dist/__tests__/smart-switch.test.js.map +1 -1
- package/dist/__tests__/tier-timeouts.test.d.ts +2 -0
- package/dist/__tests__/tier-timeouts.test.d.ts.map +1 -0
- package/dist/__tests__/tier-timeouts.test.js +23 -0
- package/dist/__tests__/tier-timeouts.test.js.map +1 -0
- package/dist/__tests__/webhook.test.d.ts +2 -0
- package/dist/__tests__/webhook.test.d.ts.map +1 -0
- package/dist/__tests__/webhook.test.js +197 -0
- package/dist/__tests__/webhook.test.js.map +1 -0
- package/dist/cli.js +38 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/detect-step.d.ts +5 -0
- package/dist/commands/detect-step.d.ts.map +1 -0
- package/dist/commands/detect-step.js +124 -0
- package/dist/commands/detect-step.js.map +1 -0
- package/dist/commands/diagnose.d.ts +1 -1
- package/dist/commands/diagnose.d.ts.map +1 -1
- package/dist/commands/diagnose.js +30 -1
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/kickass.d.ts +28 -10
- package/dist/commands/kickass.d.ts.map +1 -1
- package/dist/commands/kickass.js +295 -68
- package/dist/commands/kickass.js.map +1 -1
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +14 -5
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/run.d.ts +16 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +347 -44
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +41 -3
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +10 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +200 -6
- package/dist/commands/watch.js.map +1 -1
- package/dist/config/schema.d.ts +52 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +24 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/github/client.d.ts +40 -1
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +69 -9
- package/dist/github/client.js.map +1 -1
- package/dist/github/review-status.d.ts.map +1 -1
- package/dist/github/review-status.js +7 -4
- package/dist/github/review-status.js.map +1 -1
- package/dist/github/webhook.d.ts +25 -1
- package/dist/github/webhook.d.ts.map +1 -1
- package/dist/github/webhook.js +37 -1
- package/dist/github/webhook.js.map +1 -1
- package/dist/lib/annotation.d.ts +4 -0
- package/dist/lib/annotation.d.ts.map +1 -1
- package/dist/lib/annotation.js +5 -1
- package/dist/lib/annotation.js.map +1 -1
- package/dist/lib/board.d.ts.map +1 -1
- package/dist/lib/board.js +7 -5
- package/dist/lib/board.js.map +1 -1
- package/dist/lib/comment-bodies.d.ts.map +1 -1
- package/dist/lib/comment-bodies.js +3 -2
- package/dist/lib/comment-bodies.js.map +1 -1
- package/dist/lib/durations.d.ts.map +1 -1
- package/dist/lib/durations.js +5 -3
- package/dist/lib/durations.js.map +1 -1
- package/dist/lib/logger.d.ts +4 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/logger.js +41 -5
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/pr-picker.d.ts.map +1 -1
- package/dist/lib/pr-picker.js +5 -1
- package/dist/lib/pr-picker.js.map +1 -1
- package/dist/lib/pr-status.d.ts +4 -3
- package/dist/lib/pr-status.d.ts.map +1 -1
- package/dist/lib/pr-status.js +19 -13
- package/dist/lib/pr-status.js.map +1 -1
- package/dist/lib/pr-workflow-state.d.ts +68 -0
- package/dist/lib/pr-workflow-state.d.ts.map +1 -0
- package/dist/lib/pr-workflow-state.js +328 -0
- package/dist/lib/pr-workflow-state.js.map +1 -0
- package/dist/lib/product.d.ts +3 -0
- package/dist/lib/product.d.ts.map +1 -0
- package/dist/lib/product.js +5 -0
- package/dist/lib/product.js.map +1 -0
- package/dist/lib/repo-picker.d.ts +1 -0
- package/dist/lib/repo-picker.d.ts.map +1 -1
- package/dist/lib/repo-picker.js +50 -33
- package/dist/lib/repo-picker.js.map +1 -1
- package/dist/lib/review-models.d.ts +2 -2
- package/dist/lib/review-models.d.ts.map +1 -1
- package/dist/lib/review-models.js +6 -1
- package/dist/lib/review-models.js.map +1 -1
- package/dist/lib/runner.d.ts +19 -1
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/runner.js +338 -55
- package/dist/lib/runner.js.map +1 -1
- package/dist/lib/scopes.js +1 -1
- package/dist/lib/scopes.js.map +1 -1
- package/dist/lib/smart-switch.js +1 -1
- package/dist/lib/smart-switch.js.map +1 -1
- package/dist/lib/vendor.d.ts +4 -0
- package/dist/lib/vendor.d.ts.map +1 -0
- package/dist/lib/vendor.js +14 -0
- package/dist/lib/vendor.js.map +1 -0
- package/dist/lib/workflow.d.ts +5 -0
- package/dist/lib/workflow.d.ts.map +1 -1
- package/dist/lib/workflow.js.map +1 -1
- package/dist/reviewers/claude.d.ts +3 -1
- package/dist/reviewers/claude.d.ts.map +1 -1
- package/dist/reviewers/claude.js +15 -10
- package/dist/reviewers/claude.js.map +1 -1
- package/dist/reviewers/codex.d.ts +1 -1
- package/dist/reviewers/codex.d.ts.map +1 -1
- package/dist/reviewers/codex.js +7 -10
- package/dist/reviewers/codex.js.map +1 -1
- package/dist/reviewers/conflict-resolve.d.ts +1 -1
- package/dist/reviewers/conflict-resolve.d.ts.map +1 -1
- package/dist/reviewers/conflict-resolve.js +3 -2
- package/dist/reviewers/conflict-resolve.js.map +1 -1
- package/dist/reviewers/fix.d.ts +5 -1
- package/dist/reviewers/fix.d.ts.map +1 -1
- package/dist/reviewers/fix.js +68 -2
- package/dist/reviewers/fix.js.map +1 -1
- package/dist/reviewers/tier-timeouts.d.ts +5 -0
- package/dist/reviewers/tier-timeouts.d.ts.map +1 -0
- package/dist/reviewers/tier-timeouts.js +14 -0
- package/dist/reviewers/tier-timeouts.js.map +1 -0
- package/docs/fixture-pr.md +112 -0
- package/docs/proof-demo.md +102 -0
- package/get-started.md +128 -31
- package/get-started.zh.md +7 -1
- package/package.json +4 -2
package/dist/reviewers/fix.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { Config } from '../config/schema.js';
|
|
2
2
|
export declare function applyEdit(fileContent: string, oldText: string, newText: string): string | null;
|
|
3
|
-
export declare function runFixStep(tmpDir: string, baseRef: string, prTitle: string, reviewComment: string, instructions: string, config: Config, model?: string): Promise<{
|
|
3
|
+
export declare function runFixStep(tmpDir: string, baseRef: string, prTitle: string, reviewComment: string, instructions: string, config: Config, model?: string, timeoutMs?: number): Promise<{
|
|
4
|
+
appliedCount: number;
|
|
5
|
+
tokensUsed?: number;
|
|
6
|
+
}>;
|
|
7
|
+
export declare function runCodexFixStep(tmpDir: string, baseRef: string, prTitle: string, reviewComment: string, instructions: string, model?: string, timeoutMs?: number): Promise<{
|
|
4
8
|
appliedCount: number;
|
|
5
9
|
tokensUsed?: number;
|
|
6
10
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AA4DjD,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO9F;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,SAAY,
|
|
1
|
+
{"version":3,"file":"fix.d.ts","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AA4DjD,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO9F;AAED,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,KAAK,SAAY,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAmIxD;AA2BD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,KAAK,SAAY,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA6CxD"}
|
package/dist/reviewers/fix.js
CHANGED
|
@@ -62,7 +62,7 @@ export function applyEdit(fileContent, oldText, newText) {
|
|
|
62
62
|
return null;
|
|
63
63
|
return fileContent.slice(0, idx) + newText + fileContent.slice(idx + oldText.length);
|
|
64
64
|
}
|
|
65
|
-
export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, config, model = 'default') {
|
|
65
|
+
export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, config, model = 'default', timeoutMs) {
|
|
66
66
|
let diff = '';
|
|
67
67
|
try {
|
|
68
68
|
diff = execSync(`git diff origin/${baseRef}...HEAD`, { cwd: tmpDir, encoding: 'utf8' });
|
|
@@ -82,9 +82,10 @@ export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instru
|
|
|
82
82
|
let tokensUsed;
|
|
83
83
|
try {
|
|
84
84
|
const modelArgs = model !== 'default' ? ['--model', model] : [];
|
|
85
|
+
const resolvedTimeout = timeoutMs === undefined ? 180_000 : timeoutMs === 0 ? undefined : timeoutMs;
|
|
85
86
|
const { stdout } = await execa('claude', ['--print', '--output-format', 'json', ...modelArgs], {
|
|
86
87
|
input: prompt,
|
|
87
|
-
timeout:
|
|
88
|
+
timeout: resolvedTimeout,
|
|
88
89
|
env: { ...process.env },
|
|
89
90
|
});
|
|
90
91
|
const raw = stdout.trim();
|
|
@@ -194,4 +195,69 @@ export async function runFixStep(tmpDir, baseRef, prTitle, reviewComment, instru
|
|
|
194
195
|
}
|
|
195
196
|
return { appliedCount, tokensUsed };
|
|
196
197
|
}
|
|
198
|
+
// Codex fix: codex is an agentic tool that edits files directly on disk.
|
|
199
|
+
// We pass the fix context as a prompt, run codex in full-auto mode, then
|
|
200
|
+
// detect how many files changed via git diff rather than parsing edit blocks.
|
|
201
|
+
const CODEX_FIX_PROMPT = `You opened a pull request that received the following code review.
|
|
202
|
+
|
|
203
|
+
PR title: {PR_TITLE}
|
|
204
|
+
|
|
205
|
+
Code review comment:
|
|
206
|
+
---
|
|
207
|
+
{REVIEW_COMMENT}
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
Diff of your changes (base..head):
|
|
211
|
+
---
|
|
212
|
+
{DIFF}
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
{EXTRA_INSTRUCTIONS}
|
|
216
|
+
|
|
217
|
+
Please address the issues raised in the review. Rules:
|
|
218
|
+
- Only fix what the review explicitly calls out
|
|
219
|
+
- Do not refactor unrelated code, rename variables, or add tests unless asked
|
|
220
|
+
- If a comment requires deeper understanding of business logic, skip it
|
|
221
|
+
- If there are no actionable code changes, exit immediately without modifying any files`;
|
|
222
|
+
export async function runCodexFixStep(tmpDir, baseRef, prTitle, reviewComment, instructions, model = 'default', timeoutMs) {
|
|
223
|
+
let diff = '';
|
|
224
|
+
try {
|
|
225
|
+
diff = execSync(`git diff origin/${baseRef}...HEAD`, { cwd: tmpDir, encoding: 'utf8' });
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
try {
|
|
229
|
+
diff = execSync('git diff HEAD~1', { cwd: tmpDir, encoding: 'utf8' });
|
|
230
|
+
}
|
|
231
|
+
catch { /* proceed with empty diff */ }
|
|
232
|
+
}
|
|
233
|
+
const prompt = CODEX_FIX_PROMPT
|
|
234
|
+
.replace('{PR_TITLE}', prTitle)
|
|
235
|
+
.replace('{REVIEW_COMMENT}', reviewComment.slice(0, 8000))
|
|
236
|
+
.replace('{DIFF}', diff.slice(0, 16000))
|
|
237
|
+
.replace('{EXTRA_INSTRUCTIONS}', instructions ? `Additional instructions: ${instructions}` : '');
|
|
238
|
+
const resolvedTimeout = timeoutMs === undefined ? 300_000 : timeoutMs === 0 ? undefined : timeoutMs;
|
|
239
|
+
const modelArgs = model !== 'default' ? ['-c', `model="${model}"`] : [];
|
|
240
|
+
try {
|
|
241
|
+
await execa('codex', ['exec', ...modelArgs, prompt], {
|
|
242
|
+
cwd: tmpDir,
|
|
243
|
+
timeout: resolvedTimeout,
|
|
244
|
+
env: { ...process.env, CODEX_QUIET_MODE: '1', HOME: process.env.HOME ?? '' },
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
catch (err) {
|
|
248
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
249
|
+
if (/not logged in|auth|credential/i.test(msg)) {
|
|
250
|
+
throw new Error('codex auth failure during fix step — run: codex login');
|
|
251
|
+
}
|
|
252
|
+
throw err;
|
|
253
|
+
}
|
|
254
|
+
// Count all files codex touched: modified/deleted (git diff) + newly created (git ls-files --others)
|
|
255
|
+
const changedOutput = execSync('git diff --name-only', { cwd: tmpDir, encoding: 'utf8' }).trim();
|
|
256
|
+
const untrackedOutput = execSync('git ls-files --others --exclude-standard', { cwd: tmpDir, encoding: 'utf8' }).trim();
|
|
257
|
+
const changedFiles = [
|
|
258
|
+
...(changedOutput ? changedOutput.split('\n').filter(Boolean) : []),
|
|
259
|
+
...(untrackedOutput ? untrackedOutput.split('\n').filter(Boolean) : []),
|
|
260
|
+
];
|
|
261
|
+
return { appliedCount: changedFiles.length };
|
|
262
|
+
}
|
|
197
263
|
//# sourceMappingURL=fix.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAC3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAQ7B,mFAAmF;AACnF,yDAAyD;AACzD,MAAM,cAAc,GAAG,GAAG,CAAA;AAE1B,MAAM,eAAe,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wDAyCgC,CAAA;AAExD,SAAS,UAAU,CAAC,QAAgB;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;AAC9D,CAAC;AAED,yEAAyE;AACzE,mFAAmF;AACnF,MAAM,UAAU,SAAS,CAAC,WAAmB,EAAE,OAAe,EAAE,OAAe;IAC7E,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IACxC,IAAI,GAAG,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3B,gFAAgF;IAChF,mFAAmF;IACnF,IAAI,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IACzD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AACtF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAc,EACd,OAAe,EACf,OAAe,EACf,aAAqB,EACrB,YAAoB,EACpB,MAAc,EACd,KAAK,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"fix.js","sourceRoot":"","sources":["../../src/reviewers/fix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { QualityConfig } from '../config/schema.js';
|
|
2
|
+
export declare const TIER_TIMEOUT_MS: Record<QualityConfig['tier'], number>;
|
|
3
|
+
export declare const DEFAULT_TIER_TIMEOUT_MS: number;
|
|
4
|
+
export declare function tierTimeoutMs(tier: QualityConfig['tier']): number;
|
|
5
|
+
//# sourceMappingURL=tier-timeouts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier-timeouts.d.ts","sourceRoot":"","sources":["../../src/reviewers/tier-timeouts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAMxD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,CAIjE,CAAA;AAED,eAAO,MAAM,uBAAuB,QAA2B,CAAA;AAE/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Default reviewer subprocess timeouts per quality tier. Applied when
|
|
2
|
+
// neither --timeout nor vendor.timeout_sec is set. Both claude and codex
|
|
3
|
+
// reviewers share this table so that quality.tier has a consistent effect
|
|
4
|
+
// across vendors.
|
|
5
|
+
export const TIER_TIMEOUT_MS = {
|
|
6
|
+
fast: 300_000,
|
|
7
|
+
balanced: 600_000,
|
|
8
|
+
thorough: 1_200_000,
|
|
9
|
+
};
|
|
10
|
+
export const DEFAULT_TIER_TIMEOUT_MS = TIER_TIMEOUT_MS.balanced;
|
|
11
|
+
export function tierTimeoutMs(tier) {
|
|
12
|
+
return TIER_TIMEOUT_MS[tier] ?? DEFAULT_TIER_TIMEOUT_MS;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=tier-timeouts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tier-timeouts.js","sourceRoot":"","sources":["../../src/reviewers/tier-timeouts.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,yEAAyE;AACzE,0EAA0E;AAC1E,kBAAkB;AAClB,MAAM,CAAC,MAAM,eAAe,GAA0C;IACpE,IAAI,EAAE,OAAO;IACb,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,SAAS;CACpB,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,eAAe,CAAC,QAAQ,CAAA;AAE/D,MAAM,UAAU,aAAa,CAAC,IAA2B;IACvD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAA;AACzD,CAAC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Fixture PR Plan
|
|
2
|
+
|
|
3
|
+
The fixture PR gives new users a safe, inspectable way to understand Crosscheck before trying it on production code.
|
|
4
|
+
|
|
5
|
+
## Repository
|
|
6
|
+
|
|
7
|
+
Create:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
humanbased-ai/crosscheck-proof-fixture
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Use a small TypeScript service with:
|
|
14
|
+
|
|
15
|
+
- account transaction listing
|
|
16
|
+
- authenticated user context
|
|
17
|
+
- pagination
|
|
18
|
+
- one regression test covering tenant/user scoping
|
|
19
|
+
|
|
20
|
+
## Pull request
|
|
21
|
+
|
|
22
|
+
Title:
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
Add account transaction pagination
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The PR should look useful and plausible. It should add pagination to a transaction query while accidentally removing the authenticated user scope.
|
|
29
|
+
|
|
30
|
+
Bug shape:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
// secure baseline
|
|
34
|
+
where: { accountId, ownerId: ctx.user.id }
|
|
35
|
+
|
|
36
|
+
// buggy PR
|
|
37
|
+
where: { accountId }
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Expected risk:
|
|
41
|
+
|
|
42
|
+
```text
|
|
43
|
+
Any authenticated user can read another account's transactions by guessing accountId.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## PR timeline
|
|
47
|
+
|
|
48
|
+
The public timeline should contain:
|
|
49
|
+
|
|
50
|
+
1. Initial agent-authored feature commit.
|
|
51
|
+
2. Crosscheck review comment with `VERDICT: BLOCK`.
|
|
52
|
+
3. Crosscheck fix commit restoring user scope.
|
|
53
|
+
4. Regression test proving cross-user access is blocked.
|
|
54
|
+
5. Crosscheck recheck comment with `VERDICT: APPROVE`.
|
|
55
|
+
|
|
56
|
+
## User-facing first-run path
|
|
57
|
+
|
|
58
|
+
The first-run docs should recommend:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
npm install -g @humanbased/crosscheck
|
|
62
|
+
gh auth login
|
|
63
|
+
codex login --device-auth
|
|
64
|
+
crosscheck status
|
|
65
|
+
crosscheck review https://github.com/humanbased-ai/crosscheck-proof-fixture/pull/1 --reviewer codex
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Use `--reviewer claude` when Claude Code is the authenticated reviewer.
|
|
69
|
+
|
|
70
|
+
After review succeeds, the user can try:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
crosscheck run https://github.com/humanbased-ai/crosscheck-proof-fixture/pull/1 --steps fix,recheck --fixer claude --reviewer codex
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Acceptance criteria
|
|
77
|
+
|
|
78
|
+
- The PR is public.
|
|
79
|
+
- The bug is realistic and easy to explain.
|
|
80
|
+
- The first review produces a merge-relevant finding.
|
|
81
|
+
- The fix is small and inspectable.
|
|
82
|
+
- The recheck closes the loop.
|
|
83
|
+
- The demo does not require `watch`, `serve`, tunnels, or webhooks.
|
|
84
|
+
|
|
85
|
+
## Publish commands
|
|
86
|
+
|
|
87
|
+
From the prepared fixture repository:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cd "/Users/beingzy/Documents/New project 2/crosscheck-proof-fixture"
|
|
91
|
+
|
|
92
|
+
gh repo create humanbased-ai/crosscheck-proof-fixture \
|
|
93
|
+
--public \
|
|
94
|
+
--source . \
|
|
95
|
+
--remote origin \
|
|
96
|
+
--description "Proof fixture for Crosscheck's review-fix-recheck demo" \
|
|
97
|
+
--push
|
|
98
|
+
|
|
99
|
+
git push origin add-transaction-pagination
|
|
100
|
+
|
|
101
|
+
gh pr create \
|
|
102
|
+
--base main \
|
|
103
|
+
--head add-transaction-pagination \
|
|
104
|
+
--title "Add account transaction pagination" \
|
|
105
|
+
--body "This fixture PR intentionally adds pagination while dropping authenticated-user scoping, so Crosscheck can demonstrate a BLOCK -> fix -> recheck loop."
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
If GitHub CLI keyring auth times out, refresh auth with:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
gh auth login
|
|
112
|
+
```
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Proof Demo: BLOCK to APPROVE
|
|
2
|
+
|
|
3
|
+
The first public proof asset should be a real GitHub PR timeline plus a 60-90 second narrated screen recording. The video creates attention, but the public PR is the evidence.
|
|
4
|
+
|
|
5
|
+
The intended chain is:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
agent PR opened -> Crosscheck BLOCK finding -> [crosscheck] fix commit -> recheck APPROVE -> merge-ready
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Demo fixture
|
|
12
|
+
|
|
13
|
+
Repository:
|
|
14
|
+
|
|
15
|
+
```text
|
|
16
|
+
https://github.com/humanbased-ai/crosscheck-proof-fixture
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
PR title:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
Add account transaction pagination
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Seed bug:
|
|
26
|
+
|
|
27
|
+
The PR adds pagination but accidentally drops tenant/user scoping.
|
|
28
|
+
|
|
29
|
+
```ts
|
|
30
|
+
// before: scoped to the authenticated user
|
|
31
|
+
where: { accountId, ownerId: ctx.user.id }
|
|
32
|
+
|
|
33
|
+
// buggy PR: ownerId dropped
|
|
34
|
+
where: { accountId }
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Expected Crosscheck finding:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
BLOCK: Any authenticated user can read another account's transactions by guessing accountId.
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Demo commands
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
export PR_URL=https://github.com/humanbased-ai/crosscheck-proof-fixture/pull/1
|
|
47
|
+
|
|
48
|
+
crosscheck detect-step "$PR_URL"
|
|
49
|
+
|
|
50
|
+
crosscheck run "$PR_URL" \
|
|
51
|
+
--steps review \
|
|
52
|
+
--reviewer codex \
|
|
53
|
+
--timeout 10m
|
|
54
|
+
|
|
55
|
+
crosscheck detect-step "$PR_URL"
|
|
56
|
+
|
|
57
|
+
crosscheck run "$PR_URL" \
|
|
58
|
+
--steps fix,recheck \
|
|
59
|
+
--fixer claude \
|
|
60
|
+
--reviewer codex \
|
|
61
|
+
--timeout 10m
|
|
62
|
+
|
|
63
|
+
crosscheck scan --force --tidy
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Video beats
|
|
67
|
+
|
|
68
|
+
1. Open the PR: "An agent shipped a plausible feature."
|
|
69
|
+
2. Show the diff where `ownerId` was removed.
|
|
70
|
+
3. Run the review command.
|
|
71
|
+
4. Open Crosscheck's GitHub comment with the `BLOCK` finding.
|
|
72
|
+
5. Run fix and recheck.
|
|
73
|
+
6. Show the `[crosscheck] fix:` commit restoring authorization scope and adding or repairing a regression test.
|
|
74
|
+
7. Show the recheck comment with `APPROVE`.
|
|
75
|
+
8. End on `crosscheck scan` showing the PR as approved and ready for a human merge decision.
|
|
76
|
+
|
|
77
|
+
## Assets to produce
|
|
78
|
+
|
|
79
|
+
- `assets/demo-block-to-approve.mp4`
|
|
80
|
+
- `assets/demo-block-to-approve.gif`
|
|
81
|
+
- `assets/demo-pr-timeline.png`
|
|
82
|
+
- `assets/demo-crosscheck-comment-block.png`
|
|
83
|
+
- `assets/demo-recheck-approve.png`
|
|
84
|
+
|
|
85
|
+
## Launch-ready rubric
|
|
86
|
+
|
|
87
|
+
- A viewer understands the bug in under 15 seconds.
|
|
88
|
+
- The Crosscheck finding is genuinely blocking, not cosmetic.
|
|
89
|
+
- The finding explains the production risk.
|
|
90
|
+
- The fix commit is inspectable and clearly tied to the finding.
|
|
91
|
+
- The recheck comment closes the loop with `APPROVE`.
|
|
92
|
+
- The PR timeline is public and reproducible.
|
|
93
|
+
- The video is 60-90 seconds with no setup detours.
|
|
94
|
+
- The README first screen includes the proof before asking users to install.
|
|
95
|
+
- A skeptical engineer can say: "Yes, this would have prevented a bad merge."
|
|
96
|
+
|
|
97
|
+
## Trust guardrails
|
|
98
|
+
|
|
99
|
+
- Do not imply automatic merge.
|
|
100
|
+
- Do not imply guaranteed correctness.
|
|
101
|
+
- Say "merge-ready" as a human decision state, not a machine guarantee.
|
|
102
|
+
- Show review-only mode as the conservative first step when discussing team adoption.
|