Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
309 commits
Select commit Hold shift + click to select a range
e95206e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 16, 2026
fb46661
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
70c47f0
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
5402316
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
8bbe67f
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
2acbac2
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
998244f
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
a212e83
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
79562a7
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
09971f9
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
9482931
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
aa8ae22
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
7517245
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
6cebe9b
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
9a809d3
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 17, 2026
9cdfd26
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
51a877d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
d65bcde
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
744fb6c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
e12e631
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
59b875c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
c26823b
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
251dab9
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
e80dd85
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
cc0fead
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
f4305a2
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
db8f090
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
b8d057b
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
859bc28
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
76f5cbc
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
02f0fbb
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 18, 2026
993ff8f
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 19, 2026
892987d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 19, 2026
82bc998
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 19, 2026
f6d9f55
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 19, 2026
7271ae0
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 19, 2026
210fb2e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 19, 2026
b780388
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 19, 2026
4b7c75c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 19, 2026
5e9ff5e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 20, 2026
349dbbb
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 20, 2026
c6ce165
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 20, 2026
c9c6b48
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 21, 2026
2ea7ef5
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 21, 2026
7f5164f
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 21, 2026
c0dd163
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
e23a5b0
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
de64d13
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
2d14ca4
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
b9dd75c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
6a08c38
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
a52039f
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
73d2b4e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
439f8a8
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
b3e07aa
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
2b72922
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
aad5cc9
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
d2b75eb
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 22, 2026
ad25dfe
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
aa1e942
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
ad4d81c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
046bff7
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
70f9230
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
275db92
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
efba450
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
4fc52cc
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
2908484
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
5b3dc0d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
dd6938c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
a910ae9
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 23, 2026
84e322c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
b49c8bc
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
01b36ac
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
37cfe08
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
e089ac5
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
6a0f648
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
a7a9f15
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
11d36ee
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
c1d22ec
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
6b250da
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
264732b
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 24, 2026
a8749eb
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 25, 2026
c47cb37
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 25, 2026
af98caf
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 25, 2026
86c586d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 25, 2026
0574a4c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 25, 2026
9abc3a3
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 25, 2026
15f216c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 25, 2026
99d36ae
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
5ad99d9
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
ad2a5d8
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
2c047da
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
235161c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
ae696df
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
1e4ab9b
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
463aa38
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
0087dc1
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
e8d7c19
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
7a61ec0
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
1a56ac3
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
593a02a
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
a6dc1ce
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
7668e7c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
c19f32a
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 26, 2026
4a926dc
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 27, 2026
1291610
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 27, 2026
607ae15
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 28, 2026
43364cd
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 28, 2026
39366ab
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 28, 2026
cb7e8d9
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 28, 2026
09fefe8
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 28, 2026
d64d700
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 28, 2026
5bd50bb
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
22caaca
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
304452e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
697cbcd
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
f5f1e78
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
339ad46
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
eee68ea
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
6dfa87b
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
04c7abb
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
b03a2b5
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
4a2c5e6
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
96706bc
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
1fe3d72
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
8dcfddb
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 29, 2026
b3a3d9f
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 30, 2026
2f596cd
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 30, 2026
68dae31
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 30, 2026
6e530b1
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 30, 2026
8bee284
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 30, 2026
01a2677
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 30, 2026
dcec58d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 30, 2026
4b02211
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 30, 2026
23c6cf1
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jun 30, 2026
1cbf145
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
dc1b945
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
f6f298d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
61fce4a
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
eace29d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
003e74b
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
ca4d7b8
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
a47bb56
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
d38f1b0
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
4b712e7
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
93a35ef
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
228d6f8
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 1, 2026
378f923
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
8e32ff5
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
bb9b4bf
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
6517f91
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
e509bce
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
da6ec07
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
f0d7cf6
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
8a7dfd1
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
29d3cc6
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
bd749a5
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
d8a0055
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
2442648
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
465624a
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
a33f14c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
c6a0b9e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
5045201
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 2, 2026
d2b5726
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
fb999ba
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
904955d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
d51677a
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
4f0c5c1
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
4d5e3b4
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
3e111b4
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
a6e06eb
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
684b187
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
fc27d55
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 3, 2026
1970dad
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 4, 2026
38071ad
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 4, 2026
3901019
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 4, 2026
e004c49
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 4, 2026
4dcc1c5
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 4, 2026
d30b6c1
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 4, 2026
ac1f1d9
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 4, 2026
398a18d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 4, 2026
dcc3abd
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 4, 2026
26865d9
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
0de9581
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
fbf4642
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
e2473be
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
c80711d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
fdeef1a
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
3d07a87
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
274c78e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
5e8bd20
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
d010d85
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
3ce3fe1
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
b8020fe
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
5bc2506
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 5, 2026
dcd4a15
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
148c238
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
506022d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
38aacd9
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
9a3cc7c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
6ba5afd
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
86023a3
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
30ca0dc
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
2d6c705
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
680fe18
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
5f6cd9e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
3006a35
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
0896863
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
7af97aa
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
28d0507
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
3a116a2
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
00b9b40
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
f516fc0
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
205d77e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
674705d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 6, 2026
a544663
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
ffd2eed
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
c7a9e5e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
3149a9e
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
863efd4
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
a88d511
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
c89ab23
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
ebef02c
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
4cafe99
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
7e96598
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
12079cc
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 7, 2026
19c70a2
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 8, 2026
fde6b4a
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 8, 2026
e5305cb
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 8, 2026
a421ef3
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 8, 2026
cc04156
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 8, 2026
e053814
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 8, 2026
2514a15
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 8, 2026
1f74c78
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 9, 2026
bda27e2
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 9, 2026
ddab746
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 9, 2026
db683c4
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 9, 2026
892dd48
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 9, 2026
f6cdb65
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 9, 2026
c36f088
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 9, 2026
d5eb9e8
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 10, 2026
1512985
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 10, 2026
ceccfb7
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 10, 2026
0806760
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 10, 2026
447678f
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 10, 2026
8f823c3
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 10, 2026
c4d966d
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 11, 2026
aec5d04
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 11, 2026
498117a
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 11, 2026
f421d0a
Merge branch 'master' into feature/CMQB5RUXV-add-repo-auto-merge-endp…
tomsmith8 Jul 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion scripts/helpers/seed-database.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1133,8 +1133,26 @@ export async function seedAutoMergeTestScenarios(
});

console.log(`✓ Created 4 edge case tasks with PR artifacts`);

// Stamp allowAutoMerge: true on the first repository in this workspace so the
// canvas auto-merge path is exercisable in dev without a live GitHub API call.
const firstRepo = await prisma.repository.findFirst({
where: { workspaceId: workspace.id },
select: { id: true, name: true },
});

if (firstRepo) {
await prisma.repository.update({
where: { id: firstRepo.id },
data: { allowAutoMerge: true },
});
console.log(`✓ Stamped allowAutoMerge: true on repository "${firstRepo.name}" (${firstRepo.id})`);
} else {
console.log("⚠ No repository found in workspace — skipping allowAutoMerge seed");
}

console.log(
`\n✓ Auto-merge test data seeding complete:\n - 2 features with dependency chains\n - 6 core tasks (4 with autoMerge: true, 2 with autoMerge: false)\n - 4 edge case tasks with PR artifacts\n - Total: 10 tasks for comprehensive testing`,
`\n✓ Auto-merge test data seeding complete:\n - 2 features with dependency chains\n - 6 core tasks (4 with autoMerge: true, 2 with autoMerge: false)\n - 4 edge case tasks with PR artifacts\n - 1 repository stamped with allowAutoMerge: true\n - Total: 10 tasks for comprehensive testing`,
);
}

Expand Down
207 changes: 207 additions & 0 deletions src/__tests__/unit/api/github/repository/auto-merge.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,207 @@
import { describe, it, expect, vi, beforeEach, Mock } from "vitest";
import { NextRequest } from "next/server";

// ── Hoisted mocks ─────────────────────────────────────────────────────────
const {
mockDbRepositoryFindUnique,
mockDbRepositoryUpdate,
mockDbWorkspaceMemberFindFirst,
} = vi.hoisted(() => ({
mockDbRepositoryFindUnique: vi.fn(),
mockDbRepositoryUpdate: vi.fn(),
mockDbWorkspaceMemberFindFirst: vi.fn(),
}));

vi.mock("@/lib/db", () => ({
db: {
repository: {
findUnique: mockDbRepositoryFindUnique,
update: mockDbRepositoryUpdate,
},
workspaceMember: {
findFirst: mockDbWorkspaceMemberFindFirst,
},
},
}));

vi.mock("next-auth/next", () => ({
getServerSession: vi.fn(),
}));

vi.mock("@/lib/auth/nextauth", () => ({
authOptions: {},
}));

vi.mock("@/lib/github", () => ({
parsePRUrl: vi.fn(),
getOctokitForWorkspace: vi.fn(),
checkRepoAllowsAutoMerge: vi.fn(),
}));

vi.mock("@/lib/logger", () => ({
logger: { info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() },
}));

// ── Imports after mocks ───────────────────────────────────────────────────
import { GET } from "@/app/api/github/repository/auto-merge/route";
import { getServerSession } from "next-auth/next";
import { parsePRUrl, getOctokitForWorkspace, checkRepoAllowsAutoMerge } from "@/lib/github";

const mockGetServerSession = getServerSession as Mock;
const mockParsePRUrl = parsePRUrl as Mock;
const mockGetOctokitForWorkspace = getOctokitForWorkspace as Mock;
const mockCheckRepoAllowsAutoMerge = checkRepoAllowsAutoMerge as Mock;

// ── Helpers ───────────────────────────────────────────────────────────────
const makeRequest = (repositoryId?: string) =>
new NextRequest(
`http://localhost/api/github/repository/auto-merge${repositoryId ? `?repositoryId=${repositoryId}` : ""}`
);

const SESSION = { user: { id: "user-123", email: "test@example.com" } };

const REPO_BASE = {
id: "repo-abc",
repositoryUrl: "https://github.com/acme/myrepo",
allowAutoMerge: false,
workspaceId: "ws-001",
workspace: { ownerId: "owner-999" },
};

// ── Tests ─────────────────────────────────────────────────────────────────
describe("GET /api/github/repository/auto-merge", () => {
beforeEach(() => {
vi.clearAllMocks();
mockGetServerSession.mockResolvedValue(SESSION);
mockDbWorkspaceMemberFindFirst.mockResolvedValue({ id: "mem-1" });
mockDbRepositoryUpdate.mockResolvedValue({});
mockParsePRUrl.mockReturnValue({ owner: "acme", repo: "myrepo", prNumber: 1 });
mockGetOctokitForWorkspace.mockResolvedValue({ rest: {} });
mockCheckRepoAllowsAutoMerge.mockResolvedValue({ allowed: true });
});

// ── Auth ────────────────────────────────────────────────────────────────
it("returns 401 when unauthenticated", async () => {
mockGetServerSession.mockResolvedValue(null);
const res = await GET(makeRequest("repo-abc"));
expect(res.status).toBe(401);
const body = await res.json();
expect(body.error).toMatch(/unauthorized/i);
});

// ── Validation ──────────────────────────────────────────────────────────
it("returns 400 when repositoryId is missing", async () => {
const res = await GET(makeRequest());
expect(res.status).toBe(400);
const body = await res.json();
expect(body.error).toMatch(/repositoryId/i);
});

// ── Not found ───────────────────────────────────────────────────────────
it("returns 404 when repository is not found", async () => {
mockDbRepositoryFindUnique.mockResolvedValue(null);
const res = await GET(makeRequest("repo-abc"));
expect(res.status).toBe(404);
const body = await res.json();
expect(body.error).toMatch(/not found/i);
});

// ── IDOR ────────────────────────────────────────────────────────────────
it("returns 403 when user is not a workspace member or owner", async () => {
mockDbRepositoryFindUnique.mockResolvedValue(REPO_BASE);
// user-123 is not the owner (owner-999) and not a member
mockDbWorkspaceMemberFindFirst.mockResolvedValue(null);
const res = await GET(makeRequest("repo-abc"));
expect(res.status).toBe(403);
const body = await res.json();
expect(body.error).toMatch(/forbidden/i);
});

it("allows workspace owner without a WorkspaceMember record", async () => {
mockDbRepositoryFindUnique.mockResolvedValue({
...REPO_BASE,
workspace: { ownerId: "user-123" }, // session user is the owner
});
mockDbWorkspaceMemberFindFirst.mockResolvedValue(null);
mockCheckRepoAllowsAutoMerge.mockResolvedValue({ allowed: false });

const res = await GET(makeRequest("repo-abc"));
expect(res.status).toBe(200);
// membership check should NOT have been called
expect(mockDbWorkspaceMemberFindFirst).not.toHaveBeenCalled();
});

// ── Cache hit ───────────────────────────────────────────────────────────
it("returns { allowed: true } immediately on cache hit without hitting GitHub", async () => {
mockDbRepositoryFindUnique.mockResolvedValue({ ...REPO_BASE, allowAutoMerge: true });

const res = await GET(makeRequest("repo-abc"));
expect(res.status).toBe(200);
const body = await res.json();
expect(body.allowed).toBe(true);

// No GitHub calls should have been made
expect(mockCheckRepoAllowsAutoMerge).not.toHaveBeenCalled();
expect(mockGetOctokitForWorkspace).not.toHaveBeenCalled();
});

// ── Cache miss, GitHub allows ────────────────────────────────────────────
it("returns { allowed: true } and caches the result when GitHub permits auto-merge", async () => {
mockDbRepositoryFindUnique.mockResolvedValue(REPO_BASE);
mockCheckRepoAllowsAutoMerge.mockResolvedValue({ allowed: true });

const res = await GET(makeRequest("repo-abc"));
expect(res.status).toBe(200);
const body = await res.json();
expect(body.allowed).toBe(true);

expect(mockCheckRepoAllowsAutoMerge).toHaveBeenCalledWith(
expect.anything(),
"acme",
"myrepo"
);
// Should cache the positive result
expect(mockDbRepositoryUpdate).toHaveBeenCalledWith({
where: { id: "repo-abc" },
data: { allowAutoMerge: true },
});
});

// ── Cache miss, GitHub denies ────────────────────────────────────────────
it("returns { allowed: false } and does NOT cache when GitHub denies auto-merge", async () => {
mockDbRepositoryFindUnique.mockResolvedValue(REPO_BASE);
mockCheckRepoAllowsAutoMerge.mockResolvedValue({ allowed: false });

const res = await GET(makeRequest("repo-abc"));
expect(res.status).toBe(200);
const body = await res.json();
expect(body.allowed).toBe(false);

// Should not cache a negative result
expect(mockDbRepositoryUpdate).not.toHaveBeenCalled();
});

// ── Fail-safe: no Octokit ────────────────────────────────────────────────
it("returns { allowed: false } when Octokit token is unavailable", async () => {
mockDbRepositoryFindUnique.mockResolvedValue(REPO_BASE);
mockGetOctokitForWorkspace.mockResolvedValue(null);

const res = await GET(makeRequest("repo-abc"));
expect(res.status).toBe(200);
const body = await res.json();
expect(body.allowed).toBe(false);
expect(mockCheckRepoAllowsAutoMerge).not.toHaveBeenCalled();
});

// ── Fail-safe: bad repo URL ──────────────────────────────────────────────
it("returns { allowed: false } when repositoryUrl cannot be parsed", async () => {
mockDbRepositoryFindUnique.mockResolvedValue(REPO_BASE);
mockParsePRUrl.mockReturnValue(null);

const res = await GET(makeRequest("repo-abc"));
expect(res.status).toBe(200);
const body = await res.json();
expect(body.allowed).toBe(false);
expect(mockCheckRepoAllowsAutoMerge).not.toHaveBeenCalled();
});
});
104 changes: 104 additions & 0 deletions src/app/api/github/repository/auto-merge/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import { authOptions } from "@/lib/auth/nextauth";
import { db } from "@/lib/db";
import { checkRepoAllowsAutoMerge, getOctokitForWorkspace, parsePRUrl } from "@/lib/github";
import { logger } from "@/lib/logger";
import { getServerSession } from "next-auth/next";
import { NextRequest, NextResponse } from "next/server";

export const runtime = "nodejs";

const LOG_PREFIX = "[AutoMergeRoute]";

export async function GET(request: NextRequest) {
try {
// 1. Authenticate
const session = await getServerSession(authOptions);
if (!session?.user?.id) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
const userId = session.user.id;

// 2. Parse repositoryId from query params
const { searchParams } = new URL(request.url);
const repositoryId = searchParams.get("repositoryId");
if (!repositoryId) {
return NextResponse.json(
{ error: "repositoryId query parameter is required" },
{ status: 400 }
);
}

// 3. Load repository from DB
const repository = await db.repository.findUnique({
where: { id: repositoryId },
select: {
id: true,
repositoryUrl: true,
allowAutoMerge: true,
workspaceId: true,
workspace: {
select: { ownerId: true },
},
},
});

if (!repository) {
return NextResponse.json({ error: "Repository not found" }, { status: 404 });
}

// 4. IDOR: verify the authenticated user belongs to repository's workspace
const isOwner = repository.workspace.ownerId === userId;
if (!isOwner) {
const membership = await db.workspaceMember.findFirst({
where: {
workspaceId: repository.workspaceId,
userId,
leftAt: null,
},
});
if (!membership) {
return NextResponse.json(
{ error: "Forbidden" },
{ status: 403 }
);
}
}

// 5. Cache hit — skip GitHub call
if (repository.allowAutoMerge === true) {
return NextResponse.json({ allowed: true });
}

// 6. Parse owner/repo from repositoryUrl
const parsed = parsePRUrl(`${repository.repositoryUrl}/pull/1`);
if (!parsed) {
logger.warn(`${LOG_PREFIX} Could not parse repository URL`, repository.repositoryUrl);
return NextResponse.json({ allowed: false });
}
const { owner, repo } = parsed;

// 7. Get authenticated Octokit client
const octokit = await getOctokitForWorkspace(userId, owner);
if (!octokit) {
logger.warn(`${LOG_PREFIX} No Octokit token for user`, userId, owner);
return NextResponse.json({ allowed: false });
}

// 8. Live GitHub check
const result = await checkRepoAllowsAutoMerge(octokit, owner, repo);

// 9. Cache positive result
if (result.allowed) {
await db.repository.update({
where: { id: repositoryId },
data: { allowAutoMerge: true },
});
}

// 10. Return result
return NextResponse.json({ allowed: result.allowed });
} catch (error) {
logger.error(`${LOG_PREFIX} Unexpected error`, undefined, { error });
return NextResponse.json({ error: "Internal server error" }, { status: 500 });
}
}
Loading