@humanbased/crosscheck 1.3.0-beta.93 → 1.3.0-beta.95

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=auto-fix-branch.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-fix-branch.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/auto-fix-branch.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,143 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { planAutoFixDelivery, forceWithLeaseArgs, parseLsRemoteOid, isLeaseRejection, assessFixBranchOwnership, isInvalidBaseError, } from '../lib/auto-fix-branch.js';
3
+ import { autoFixPRIntro } from '../github/superseded-fix-pr.js';
4
+ const SOURCE_PR = 2502;
5
+ const FIX_BRANCH = 'fix/cr-2502-review-issues';
6
+ const REMOTE_OID = 'e358bdba70c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5';
7
+ const CROSSCHECK_LOGIN = 'crosscheck-bot';
8
+ describe('planAutoFixDelivery', () => {
9
+ it('opens a follow-up PR against the source branch when it still exists', () => {
10
+ expect(planAutoFixDelivery(true, 'feat/campaign-chip')).toEqual({
11
+ kind: 'pull_request', base: 'feat/campaign-chip',
12
+ });
13
+ });
14
+ // The PR-branch push failing because the PR merged and GitHub deleted the branch is
15
+ // the fallback's most common trigger, and `pulls.create` rejects that missing base
16
+ // with `field: base, code: invalid` — 19 such failures in the logs behind this fix.
17
+ it('posts a diff instead when the source branch is gone', () => {
18
+ expect(planAutoFixDelivery(false, 'feat/campaign-chip')).toEqual({
19
+ kind: 'comment', reason: 'base_branch_gone',
20
+ });
21
+ });
22
+ });
23
+ describe('forceWithLeaseArgs', () => {
24
+ it('states the remote sha it expects to replace', () => {
25
+ expect(forceWithLeaseArgs(FIX_BRANCH, REMOTE_OID)).toEqual([
26
+ 'push',
27
+ `--force-with-lease=refs/heads/${FIX_BRANCH}:${REMOTE_OID}`,
28
+ 'origin',
29
+ `HEAD:${FIX_BRANCH}`,
30
+ ]);
31
+ });
32
+ it('expects the ref to be absent when the branch does not exist yet', () => {
33
+ expect(forceWithLeaseArgs(FIX_BRANCH, null)).toEqual([
34
+ 'push',
35
+ `--force-with-lease=refs/heads/${FIX_BRANCH}:`,
36
+ 'origin',
37
+ `HEAD:${FIX_BRANCH}`,
38
+ ]);
39
+ });
40
+ });
41
+ describe('parseLsRemoteOid', () => {
42
+ it('reads the sha out of ls-remote output', () => {
43
+ expect(parseLsRemoteOid(`${REMOTE_OID}\trefs/heads/${FIX_BRANCH}\n`)).toBe(REMOTE_OID);
44
+ });
45
+ it('returns null when the branch does not exist remotely', () => {
46
+ expect(parseLsRemoteOid('')).toBeNull();
47
+ expect(parseLsRemoteOid('\n \n')).toBeNull();
48
+ });
49
+ it('returns null rather than a bad lease value for unexpected output', () => {
50
+ expect(parseLsRemoteOid('fatal: could not read from remote repository')).toBeNull();
51
+ expect(parseLsRemoteOid('abc123\trefs/heads/short-sha')).toBeNull();
52
+ });
53
+ });
54
+ describe('isLeaseRejection', () => {
55
+ // Verbatim from the logged failures this fix addresses.
56
+ it('recognises the non-fast-forward rejection that lost 12 fixes', () => {
57
+ expect(isLeaseRejection(`Command failed: git push origin HEAD:${FIX_BRANCH}\n` +
58
+ ` ! [rejected] HEAD -> ${FIX_BRANCH} (fetch first)\n` +
59
+ 'hint: Updates were rejected because the remote contains work that you do not\n' +
60
+ "error: failed to push some refs to 'https://github.com/acme/web.git'")).toBe(true);
61
+ });
62
+ it('recognises a stale lease', () => {
63
+ expect(isLeaseRejection(`! [rejected] ${FIX_BRANCH} (stale info)`)).toBe(true);
64
+ });
65
+ it('does not treat an unrelated push failure as a lease rejection', () => {
66
+ expect(isLeaseRejection("fatal: unable to access 'https://github.com/acme/web.git/': " +
67
+ 'LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443')).toBe(false);
68
+ });
69
+ });
70
+ describe('assessFixBranchOwnership', () => {
71
+ const crosscheckPR = (over = {}) => ({
72
+ number: 2503,
73
+ body: `${autoFixPRIntro(SOURCE_PR)}\n\nReview: https://github.com/acme/web/pull/${SOURCE_PR}`,
74
+ user: { login: CROSSCHECK_LOGIN },
75
+ head: { ref: FIX_BRANCH },
76
+ ...over,
77
+ });
78
+ const assess = (candidates, login = CROSSCHECK_LOGIN) => assessFixBranchOwnership({ sourcePrNumber: SOURCE_PR, crosscheckLogin: login, candidates });
79
+ it('owns a branch it opened a PR from', () => {
80
+ expect(assess([crosscheckPR()])).toEqual({ owned: true, fixPrNumber: 2503 });
81
+ });
82
+ it('owns a branch whose fix PR has since been closed', () => {
83
+ expect(assess([crosscheckPR({ number: 2410 })])).toEqual({ owned: true, fixPrNumber: 2410 });
84
+ });
85
+ // The check this replaces read the branch tip's commit message, which whoever pushes
86
+ // the branch writes. Provenance has to come from something they cannot author.
87
+ it('does not accept a PR another account opened with crosscheck\'s body', () => {
88
+ expect(assess([crosscheckPR({ user: { login: 'contributor' } })]))
89
+ .toEqual({ owned: false, reason: 'no_crosscheck_fix_pr' });
90
+ });
91
+ it('does not accept a PR from crosscheck that is not an auto-fix PR', () => {
92
+ expect(assess([crosscheckPR({ body: 'Rebasing the release branch.' })]))
93
+ .toEqual({ owned: false, reason: 'no_crosscheck_fix_pr' });
94
+ });
95
+ it('does not accept an auto-fix PR cut from a different source PR', () => {
96
+ expect(assess([crosscheckPR({ body: autoFixPRIntro(SOURCE_PR + 1) })]))
97
+ .toEqual({ owned: false, reason: 'no_crosscheck_fix_pr' });
98
+ });
99
+ it('does not accept a PR whose head is a different branch', () => {
100
+ expect(assess([crosscheckPR({ head: { ref: 'fix/cr-2502-review-issues-v2' } })]))
101
+ .toEqual({ owned: false, reason: 'no_crosscheck_fix_pr' });
102
+ });
103
+ it('leaves a hand-created branch with no PR alone', () => {
104
+ expect(assess([])).toEqual({ owned: false, reason: 'no_crosscheck_fix_pr' });
105
+ });
106
+ it('refuses to claim ownership when the authenticated identity is unknown', () => {
107
+ expect(assess([crosscheckPR()], null)).toEqual({ owned: false, reason: 'identity_unknown' });
108
+ });
109
+ it('matches the login case-insensitively, as GitHub does', () => {
110
+ expect(assess([crosscheckPR({ user: { login: 'Crosscheck-Bot' } })]))
111
+ .toEqual({ owned: true, fixPrNumber: 2503 });
112
+ });
113
+ });
114
+ describe('isInvalidBaseError', () => {
115
+ // The rejection `pulls.create` returns once the base branch is gone — 19 of these in
116
+ // the logs behind this fix, and still reachable if the merge lands mid-run.
117
+ it('recognises the base rejection from a structured octokit error', () => {
118
+ expect(isInvalidBaseError({
119
+ status: 422,
120
+ message: 'Validation Failed',
121
+ response: { data: { errors: [{ resource: 'PullRequest', field: 'base', code: 'invalid' }] } },
122
+ })).toBe(true);
123
+ });
124
+ it('recognises the rejection embedded in the error message', () => {
125
+ expect(isInvalidBaseError({
126
+ status: 422,
127
+ message: 'Validation Failed: {"resource":"PullRequest","field":"base","code":"invalid"}',
128
+ })).toBe(true);
129
+ });
130
+ it('does not treat another validation failure as a missing base', () => {
131
+ expect(isInvalidBaseError({
132
+ status: 422,
133
+ message: 'Validation Failed',
134
+ response: { data: { errors: [{ resource: 'PullRequest', field: 'head', code: 'invalid' }] } },
135
+ })).toBe(false);
136
+ });
137
+ it('does not treat a permission or network failure as a missing base', () => {
138
+ expect(isInvalidBaseError({ status: 403, message: 'Resource not accessible by integration' })).toBe(false);
139
+ expect(isInvalidBaseError(new Error('socket hang up'))).toBe(false);
140
+ expect(isInvalidBaseError(undefined)).toBe(false);
141
+ });
142
+ });
143
+ //# sourceMappingURL=auto-fix-branch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-fix-branch.test.js","sourceRoot":"","sources":["../../src/__tests__/auto-fix-branch.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,kBAAkB,GAEnB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAE/D,MAAM,SAAS,GAAG,IAAI,CAAA;AACtB,MAAM,UAAU,GAAG,2BAA2B,CAAA;AAC9C,MAAM,UAAU,GAAG,0CAA0C,CAAA;AAC7D,MAAM,gBAAgB,GAAG,gBAAgB,CAAA;AAEzC,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9D,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB;SACjD,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,oFAAoF;IACpF,mFAAmF;IACnF,oFAAoF;IACpF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/D,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB;SAC5C,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YACzD,MAAM;YACN,iCAAiC,UAAU,IAAI,UAAU,EAAE;YAC3D,QAAQ;YACR,QAAQ,UAAU,EAAE;SACrB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,kBAAkB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACnD,MAAM;YACN,iCAAiC,UAAU,GAAG;YAC9C,QAAQ;YACR,QAAQ,UAAU,EAAE;SACrB,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,gBAAgB,CAAC,GAAG,UAAU,gBAAgB,UAAU,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACxF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACvC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,gBAAgB,CAAC,8CAA8C,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;QACnF,MAAM,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACrE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,wDAAwD;IACxD,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,CAAC,gBAAgB,CACrB,wCAAwC,UAAU,IAAI;YACtD,kCAAkC,UAAU,kBAAkB;YAC9D,gFAAgF;YAChF,sEAAsE,CACvE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,UAAU,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,gBAAgB,CACrB,8DAA8D;YAC9D,yEAAyE,CAC1E,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,MAAM,YAAY,GAAG,CAAC,OAA6B,EAAE,EAAe,EAAE,CAAC,CAAC;QACtE,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,gDAAgD,SAAS,EAAE;QAC7F,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE;QACjC,IAAI,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE;QACzB,GAAG,IAAI;KACR,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,CAAC,UAAyB,EAAE,QAAuB,gBAAgB,EAAE,EAAE,CACpF,wBAAwB,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAA;IAE7F,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEF,qFAAqF;IACrF,+EAA+E;IAC/E,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;aAC/D,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC,CAAC,CAAC,CAAC;aACrE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACpE,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;aAC9E,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC9F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;aAClE,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,qFAAqF;IACrF,4EAA4E;IAC5E,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,kBAAkB,CAAC;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,mBAAmB;YAC5B,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE;SAC9F,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,kBAAkB,CAAC;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,+EAA+E;SACzF,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,kBAAkB,CAAC;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,mBAAmB;YAC5B,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE;SAC9F,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,CAAC,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,wCAAwC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1G,MAAM,CAAC,kBAAkB,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnE,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=superseded-fix-pr.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superseded-fix-pr.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/superseded-fix-pr.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,225 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { autoFixBranchName, autoFixPRIntro, isCrosscheckAutoFixPR, buildSupersededComment, closeSupersededAutoFixPRs, sourcePRHasMerged, } from '../github/superseded-fix-pr.js';
3
+ const OWNER = 'humanbased-ai';
4
+ const REPO = 'monorepo';
5
+ // The pair from the reported regression: #2527 merged as 8ae3dc694, and the auto-fix
6
+ // PR #2532 cut from its pre-fix state stayed open and mergeable.
7
+ const SOURCE_PR = 2527;
8
+ const FIX_PR = 2532;
9
+ const MERGE_SHA = '8ae3dc694b1f2a3c5d7e9f0a1b2c3d4e5f60718a';
10
+ function makeOctokit(options = {}) {
11
+ const list = vi.fn(async () => {
12
+ if (options.listError)
13
+ throw options.listError;
14
+ return { data: options.open ?? [] };
15
+ });
16
+ const createComment = vi.fn(async () => {
17
+ if (options.commentError)
18
+ throw options.commentError;
19
+ return { data: { id: 1 } };
20
+ });
21
+ const update = vi.fn(async () => {
22
+ if (options.updateError)
23
+ throw options.updateError;
24
+ return { data: {} };
25
+ });
26
+ return {
27
+ octokit: {
28
+ rest: { pulls: { list, update }, issues: { createComment } },
29
+ },
30
+ list,
31
+ createComment,
32
+ update,
33
+ };
34
+ }
35
+ function autoFixPR(number = FIX_PR, sourcePrNumber = SOURCE_PR) {
36
+ return {
37
+ number,
38
+ body: [
39
+ autoFixPRIntro(sourcePrNumber),
40
+ '',
41
+ `Review: https://github.com/${OWNER}/${REPO}/pull/${sourcePrNumber}`,
42
+ ].join('\n'),
43
+ };
44
+ }
45
+ describe('autoFixBranchName', () => {
46
+ it('matches the branch the fix step pushes', () => {
47
+ expect(autoFixBranchName(SOURCE_PR)).toBe('fix/cr-2527-review-issues');
48
+ });
49
+ });
50
+ describe('isCrosscheckAutoFixPR', () => {
51
+ it('recognises the body the fix step writes', () => {
52
+ expect(isCrosscheckAutoFixPR(autoFixPR().body, SOURCE_PR)).toBe(true);
53
+ });
54
+ it('rejects a body naming a different source PR', () => {
55
+ expect(isCrosscheckAutoFixPR(autoFixPR(FIX_PR, 2444).body, SOURCE_PR)).toBe(false);
56
+ });
57
+ it('rejects a hand-written PR that only shares the branch name', () => {
58
+ expect(isCrosscheckAutoFixPR('Picking up the review findings from #2527 by hand.', SOURCE_PR)).toBe(false);
59
+ });
60
+ it('rejects an empty body', () => {
61
+ expect(isCrosscheckAutoFixPR(null, SOURCE_PR)).toBe(false);
62
+ });
63
+ });
64
+ describe('buildSupersededComment', () => {
65
+ it('names the merged source PR and links the merge commit', () => {
66
+ const body = buildSupersededComment({ owner: OWNER, repo: REPO, sourcePrNumber: SOURCE_PR, mergeCommitSha: MERGE_SHA });
67
+ expect(body).toContain('Superseded');
68
+ expect(body).toContain(`#${SOURCE_PR} merged`);
69
+ expect(body).toContain(`https://github.com/${OWNER}/${REPO}/commit/${MERGE_SHA}`);
70
+ });
71
+ it('omits the merge link when the merge commit is unknown', () => {
72
+ const body = buildSupersededComment({ owner: OWNER, repo: REPO, sourcePrNumber: SOURCE_PR, mergeCommitSha: null });
73
+ expect(body).toContain(`#${SOURCE_PR} merged,`);
74
+ expect(body).not.toContain('/commit/');
75
+ });
76
+ });
77
+ describe('closeSupersededAutoFixPRs', () => {
78
+ it('comments then closes the auto-fix PR cut from the merged PR', async () => {
79
+ const { octokit, list, createComment, update } = makeOctokit({ open: [autoFixPR()] });
80
+ const outcomes = await closeSupersededAutoFixPRs(octokit, OWNER, REPO, SOURCE_PR, MERGE_SHA);
81
+ expect(outcomes).toEqual([{ prNumber: FIX_PR, status: 'closed' }]);
82
+ expect(list).toHaveBeenCalledWith({
83
+ owner: OWNER, repo: REPO, state: 'open', head: `${OWNER}:fix/cr-2527-review-issues`,
84
+ });
85
+ expect(createComment).toHaveBeenCalledWith(expect.objectContaining({
86
+ issue_number: FIX_PR,
87
+ body: expect.stringContaining('Superseded'),
88
+ }));
89
+ expect(update).toHaveBeenCalledWith({ owner: OWNER, repo: REPO, pull_number: FIX_PR, state: 'closed' });
90
+ // The reason must land before the PR closes, or a reader sees a bare closed PR.
91
+ expect(createComment.mock.invocationCallOrder[0]).toBeLessThan(update.mock.invocationCallOrder[0]);
92
+ });
93
+ it('returns no outcomes when the merged PR had no auto-fix PR', async () => {
94
+ const { octokit, update } = makeOctokit({ open: [] });
95
+ const outcomes = await closeSupersededAutoFixPRs(octokit, OWNER, REPO, SOURCE_PR, MERGE_SHA);
96
+ expect(outcomes).toEqual([]);
97
+ expect(update).not.toHaveBeenCalled();
98
+ });
99
+ it('leaves a PR crosscheck did not author open', async () => {
100
+ const { octokit, createComment, update } = makeOctokit({
101
+ open: [{ number: 2540, body: 'Manual follow-up on the same branch name.' }],
102
+ });
103
+ const outcomes = await closeSupersededAutoFixPRs(octokit, OWNER, REPO, SOURCE_PR, MERGE_SHA);
104
+ expect(outcomes).toEqual([{ prNumber: 2540, status: 'not_crosscheck' }]);
105
+ expect(createComment).not.toHaveBeenCalled();
106
+ expect(update).not.toHaveBeenCalled();
107
+ });
108
+ it('reports a close failure instead of throwing', async () => {
109
+ const { octokit } = makeOctokit({ open: [autoFixPR()], updateError: new Error('Resource not accessible by integration') });
110
+ const outcomes = await closeSupersededAutoFixPRs(octokit, OWNER, REPO, SOURCE_PR, MERGE_SHA);
111
+ expect(outcomes).toEqual([
112
+ { prNumber: FIX_PR, status: 'failed', reason: 'Resource not accessible by integration' },
113
+ ]);
114
+ });
115
+ it('does not close the PR when the superseded comment could not be posted', async () => {
116
+ const { octokit, update } = makeOctokit({ open: [autoFixPR()], commentError: new Error('403 Forbidden') });
117
+ const outcomes = await closeSupersededAutoFixPRs(octokit, OWNER, REPO, SOURCE_PR, MERGE_SHA);
118
+ expect(outcomes[0].status).toBe('failed');
119
+ expect(update).not.toHaveBeenCalled();
120
+ });
121
+ });
122
+ describe('closeSupersededAutoFixPRs — concurrency', () => {
123
+ // AGENTS.md: never await inside a loop. Serialising the candidates makes every
124
+ // later one wait on the comment+close round-trips of the earlier ones.
125
+ it('processes candidates concurrently', async () => {
126
+ const started = [];
127
+ let releaseAll = () => { };
128
+ const gate = new Promise(resolve => { releaseAll = resolve; });
129
+ const createComment = vi.fn(async ({ issue_number }) => {
130
+ started.push(issue_number);
131
+ await gate;
132
+ return { data: { id: 1 } };
133
+ });
134
+ const octokit = {
135
+ rest: {
136
+ pulls: {
137
+ list: vi.fn(async () => ({ data: [autoFixPR(2532), autoFixPR(2533), autoFixPR(2534)] })),
138
+ update: vi.fn(async () => ({ data: {} })),
139
+ },
140
+ issues: { createComment },
141
+ },
142
+ };
143
+ const pending = closeSupersededAutoFixPRs(octokit, OWNER, REPO, SOURCE_PR, MERGE_SHA);
144
+ // Every candidate must be in flight before any of them is allowed to finish.
145
+ await Promise.resolve();
146
+ expect(started).toEqual([2532, 2533, 2534]);
147
+ releaseAll();
148
+ const outcomes = await pending;
149
+ expect(outcomes.map(o => o.prNumber)).toEqual([2532, 2533, 2534]);
150
+ expect(outcomes.every(o => o.status === 'closed')).toBe(true);
151
+ });
152
+ it('still comments before closing within each candidate', async () => {
153
+ const order = [];
154
+ const octokit = {
155
+ rest: {
156
+ pulls: {
157
+ list: vi.fn(async () => ({ data: [autoFixPR(2532), autoFixPR(2533)] })),
158
+ update: vi.fn(async ({ pull_number }) => {
159
+ order.push(`close:${pull_number}`);
160
+ return { data: {} };
161
+ }),
162
+ },
163
+ issues: {
164
+ createComment: vi.fn(async ({ issue_number }) => {
165
+ order.push(`comment:${issue_number}`);
166
+ return { data: { id: 1 } };
167
+ }),
168
+ },
169
+ },
170
+ };
171
+ await closeSupersededAutoFixPRs(octokit, OWNER, REPO, SOURCE_PR, MERGE_SHA);
172
+ expect(order.indexOf('comment:2532')).toBeLessThan(order.indexOf('close:2532'));
173
+ expect(order.indexOf('comment:2533')).toBeLessThan(order.indexOf('close:2533'));
174
+ });
175
+ it('keeps one candidate failing from taking down the others', async () => {
176
+ const octokit = {
177
+ rest: {
178
+ pulls: {
179
+ list: vi.fn(async () => ({ data: [autoFixPR(2532), autoFixPR(2533)] })),
180
+ update: vi.fn(async ({ pull_number }) => {
181
+ if (pull_number === 2532)
182
+ throw new Error('403 Forbidden');
183
+ return { data: {} };
184
+ }),
185
+ },
186
+ issues: { createComment: vi.fn(async () => ({ data: { id: 1 } })) },
187
+ },
188
+ };
189
+ const outcomes = await closeSupersededAutoFixPRs(octokit, OWNER, REPO, SOURCE_PR, MERGE_SHA);
190
+ expect(outcomes).toEqual([
191
+ { prNumber: 2532, status: 'failed', reason: '403 Forbidden' },
192
+ { prNumber: 2533, status: 'closed' },
193
+ ]);
194
+ });
195
+ });
196
+ describe('sourcePRHasMerged', () => {
197
+ // The merge handler sweeps once. A fallback auto-fix PR created after that
198
+ // sweep is never seen by it, so it stays open and mergeable — the exact
199
+ // stale-snapshot regression this feature exists to prevent. The fix step
200
+ // asks this immediately before it pushes and opens the PR.
201
+ const octokitWith = (result) => ({
202
+ rest: { pulls: { get: vi.fn(async () => {
203
+ if (result instanceof Error)
204
+ throw result;
205
+ return { data: result };
206
+ }) } },
207
+ });
208
+ it('is true once the source PR has merged', async () => {
209
+ expect(await sourcePRHasMerged(octokitWith({ merged: true, state: 'closed' }), OWNER, REPO, SOURCE_PR)).toBe(true);
210
+ });
211
+ it('is false while the source PR is still open', async () => {
212
+ expect(await sourcePRHasMerged(octokitWith({ merged: false, state: 'open' }), OWNER, REPO, SOURCE_PR)).toBe(false);
213
+ });
214
+ it('is false for a PR closed without merging', async () => {
215
+ // The source branch is still where that finding gets addressed.
216
+ expect(await sourcePRHasMerged(octokitWith({ merged: false, state: 'closed' }), OWNER, REPO, SOURCE_PR)).toBe(false);
217
+ });
218
+ it('fails open when the state cannot be read', async () => {
219
+ // A dropped fix is invisible; an unreadable lookup must not silently discard
220
+ // work. Today's behaviour is to always create, so failing open is no
221
+ // regression — the merge webhook remains the primary mechanism.
222
+ expect(await sourcePRHasMerged(octokitWith(new Error('502 Bad Gateway')), OWNER, REPO, SOURCE_PR)).toBe(false);
223
+ });
224
+ });
225
+ //# sourceMappingURL=superseded-fix-pr.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"superseded-fix-pr.test.js","sourceRoot":"","sources":["../../src/__tests__/superseded-fix-pr.test.ts"],"names":[],"mappings":"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"}
@@ -194,4 +194,64 @@ describe('createWebhookServer — issue_comment handling', () => {
194
194
  }
195
195
  });
196
196
  });
197
+ const closedPREvent = (merged) => ({
198
+ action: 'closed', number: 2527,
199
+ pull_request: {
200
+ title: 'feat: campaign chip', body: '', html_url: 'https://github.com/acme/repo/pull/2527',
201
+ head: { ref: 'feat/chip', sha: 'e358bdba7', repo: { full_name: 'acme/repo' } },
202
+ base: { ref: 'staging', repo: { full_name: 'acme/repo' } },
203
+ user: { login: 'bob' },
204
+ merged,
205
+ merge_commit_sha: merged ? '8ae3dc694' : null,
206
+ },
207
+ repository: { name: 'repo', owner: { login: 'acme' }, clone_url: '' },
208
+ });
209
+ describe('createWebhookServer — merged pull_request handling', () => {
210
+ it('calls onMerged for a PR closed as merged', async () => {
211
+ const merged = [];
212
+ const prReceived = [];
213
+ const server = createWebhookServer(config, secret, e => prReceived.push(e), () => { }, undefined, undefined, e => merged.push(e));
214
+ await startServer(server);
215
+ try {
216
+ const status = await postWebhook(server, 'pull_request', closedPREvent(true));
217
+ await new Promise(r => setImmediate(r));
218
+ expect(status).toBe(200);
219
+ expect(merged).toHaveLength(1);
220
+ expect(merged[0].pull_request.merge_commit_sha).toBe('8ae3dc694');
221
+ // A merge is not a review trigger.
222
+ expect(prReceived).toHaveLength(0);
223
+ }
224
+ finally {
225
+ await stopServer(server);
226
+ }
227
+ });
228
+ it('does not call onMerged for a PR closed unmerged', async () => {
229
+ const merged = [];
230
+ const server = createWebhookServer(config, secret, () => { }, () => { }, undefined, undefined, e => merged.push(e));
231
+ await startServer(server);
232
+ try {
233
+ const status = await postWebhook(server, 'pull_request', closedPREvent(false));
234
+ await new Promise(r => setImmediate(r));
235
+ expect(status).toBe(200);
236
+ expect(merged).toHaveLength(0);
237
+ }
238
+ finally {
239
+ await stopServer(server);
240
+ }
241
+ });
242
+ it('acknowledges a merged PR when no onMerged handler is provided', async () => {
243
+ const prReceived = [];
244
+ const server = createWebhookServer(config, secret, e => prReceived.push(e), () => { });
245
+ await startServer(server);
246
+ try {
247
+ const status = await postWebhook(server, 'pull_request', closedPREvent(true));
248
+ await new Promise(r => setImmediate(r));
249
+ expect(status).toBe(200);
250
+ expect(prReceived).toHaveLength(0);
251
+ }
252
+ finally {
253
+ await stopServer(server);
254
+ }
255
+ });
256
+ });
197
257
  //# sourceMappingURL=webhook.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhook.test.js","sourceRoot":"","sources":["../../src/__tests__/webhook.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhook.test.js","sourceRoot":"","sources":["../../src/__tests__/webhook.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AA2KA,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAuBD,wBAAsB,QAAQ,CAAC,IAAI,GAAE,SAAc,iBAy2ClD"}
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AA4KA,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAuBD,wBAAsB,QAAQ,CAAC,IAAI,GAAE,SAAc,iBAo4ClD"}
@@ -2,6 +2,7 @@ import { execSync, spawn } from 'child_process';
2
2
  import chalk from 'chalk';
3
3
  import { createWebhookServer } from '../github/webhook.js';
4
4
  import { createGithubClient, getCommitMessage, registerOrgWebhook, deleteOrgWebhook, registerRepoWebhook, deleteRepoWebhook, patchOrgWebhookEvents, patchRepoWebhookEvents, findOrgWebhook, findRepoWebhook, listUserRepos, checkRepoAccessible, } from '../github/client.js';
5
+ import { closeSupersededAutoFixPRs } from '../github/superseded-fix-pr.js';
5
6
  import { detectOriginFull, assignReviewer } from '../github/detector.js';
6
7
  import { loadConfig, getGithubToken, getWebhookSecret, resolveConfigPath, promptDeploymentMode, detectScopesForDeployment, patchDeploymentConfig, detectGitHubLogin, getLinearCredentials, } from '../config/loader.js';
7
8
  import { randomFortune } from '../lib/fortune.js';
@@ -872,6 +873,29 @@ export async function runWatch(opts = {}) {
872
873
  catch (err) {
873
874
  logError({ repo: `${owner}/${repoName}`, pr: prNumber, phase: 'comment_trigger' }, err);
874
875
  }
876
+ }, async (event) => {
877
+ const owner = event.repository.owner.login;
878
+ const repoName = event.repository.name;
879
+ const prNumber = event.number;
880
+ try {
881
+ const octokit = createGithubClient(token);
882
+ const outcomes = await closeSupersededAutoFixPRs(octokit, owner, repoName, prNumber, event.pull_request.merge_commit_sha ?? null);
883
+ for (const outcome of outcomes) {
884
+ fileLog({
885
+ level: outcome.status === 'failed' ? 'warn' : 'info',
886
+ event: 'auto_fix_pr_superseded',
887
+ repo: `${owner}/${repoName}`, pr: prNumber,
888
+ fix_pr: outcome.prNumber, status: outcome.status,
889
+ ...(outcome.reason && { reason: outcome.reason }),
890
+ });
891
+ if (outcome.status === 'closed') {
892
+ bLog(chalk.dim(fmtTime()) + ` closed superseded auto-fix PR ${owner}/${repoName}#${outcome.prNumber} (${prNumber} merged)`);
893
+ }
894
+ }
895
+ }
896
+ catch (err) {
897
+ logError({ repo: `${owner}/${repoName}`, pr: prNumber, phase: 'auto_fix_supersede' }, err);
898
+ }
875
899
  });
876
900
  await new Promise((resolve, reject) => {
877
901
  server.on('error', (err) => {