github-issue-tower-defence-management 1.103.1 → 1.104.1

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.
Files changed (64) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +83 -58
  3. package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
  4. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +8 -1
  5. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  6. package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js +16 -0
  7. package/bin/adapter/repositories/issue/GraphqlProjectItemRepository.js.map +1 -1
  8. package/bin/domain/usecases/HandleScheduledEventUseCase.js +7 -2
  9. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  10. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +4 -5
  11. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
  12. package/bin/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.js +30 -4
  13. package/bin/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.js.map +1 -1
  14. package/bin/domain/usecases/StartPreparationUseCase.js +2 -1
  15. package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -1
  16. package/bin/domain/usecases/resolveAllowedIssueAuthors.js +8 -0
  17. package/bin/domain/usecases/resolveAllowedIssueAuthors.js.map +1 -0
  18. package/package.json +1 -1
  19. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +1 -0
  20. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +36 -0
  21. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +23 -1
  22. package/src/adapter/entry-points/handlers/InTmuxByHumanSessionTokenCountHandler.test.ts +1 -0
  23. package/src/adapter/entry-points/handlers/inTmuxByHumanDataWriter.test.ts +1 -0
  24. package/src/adapter/entry-points/handlers/inTmuxByHumanSessionReconciler.test.ts +1 -0
  25. package/src/adapter/entry-points/handlers/situationFileWriter.test.ts +1 -0
  26. package/src/adapter/repositories/GitHubIssueCommentRepository.test.ts +1 -0
  27. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +9 -0
  28. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +10 -0
  29. package/src/adapter/repositories/issue/GraphqlProjectItemRepository.ts +24 -0
  30. package/src/adapter/repositories/issue/RestIssueRepository.test.ts +1 -0
  31. package/src/domain/entities/Issue.ts +1 -0
  32. package/src/domain/usecases/CheckIssueReviewReadinessUseCase.test.ts +1 -0
  33. package/src/domain/usecases/GetStoryObjectMapUseCase.test.ts +1 -0
  34. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +109 -0
  35. package/src/domain/usecases/HandleScheduledEventUseCase.ts +8 -2
  36. package/src/domain/usecases/InTmuxByHumanSessionTokenCountUseCase.test.ts +1 -0
  37. package/src/domain/usecases/NotifyFinishedIssuePreparationUseCase.test.ts +1 -0
  38. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +110 -12
  39. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +5 -7
  40. package/src/domain/usecases/RevertOrphanedPreparationUseCase.test.ts +1 -0
  41. package/src/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.test.ts +148 -115
  42. package/src/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.ts +35 -10
  43. package/src/domain/usecases/SetupTowerDefenceProjectUseCase.test.ts +1 -0
  44. package/src/domain/usecases/StartPreparationUseCase.test.ts +203 -88
  45. package/src/domain/usecases/StartPreparationUseCase.ts +2 -1
  46. package/src/domain/usecases/console/GenerateConsoleListsUseCase.test.ts +1 -0
  47. package/src/domain/usecases/intmux/GenerateInTmuxByHumanDataUseCase.test.ts +1 -0
  48. package/src/domain/usecases/intmux/InTmuxByHumanSessionReconcileUseCase.test.ts +1 -0
  49. package/src/domain/usecases/resolveAllowedIssueAuthors.test.ts +51 -0
  50. package/src/domain/usecases/resolveAllowedIssueAuthors.ts +6 -0
  51. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  52. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  53. package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts +1 -0
  54. package/types/adapter/repositories/issue/GraphqlProjectItemRepository.d.ts.map +1 -1
  55. package/types/domain/entities/Issue.d.ts +1 -0
  56. package/types/domain/entities/Issue.d.ts.map +1 -1
  57. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +1 -0
  58. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  59. package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
  60. package/types/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.d.ts +3 -2
  61. package/types/domain/usecases/SetDependedIssueUrlForOpenTaskPRsUseCase.d.ts.map +1 -1
  62. package/types/domain/usecases/StartPreparationUseCase.d.ts.map +1 -1
  63. package/types/domain/usecases/resolveAllowedIssueAuthors.d.ts +5 -0
  64. package/types/domain/usecases/resolveAllowedIssueAuthors.d.ts.map +1 -0
@@ -51,6 +51,7 @@ const createMockIssue = (overrides: Partial<Issue> = {}): Issue => ({
51
51
  isClosed: false,
52
52
  createdAt: new Date(),
53
53
  author: 'testuser',
54
+ closingIssueReferenceUrls: [],
54
55
  ...overrides,
55
56
  });
56
57
 
@@ -152,7 +153,7 @@ describe('StartPreparationUseCase', () => {
152
153
  configFilePath: '/path/to/config.yml',
153
154
  maximumPreparingIssuesCount: null,
154
155
  utilizationPercentageThreshold: 90,
155
- allowedIssueAuthors: null,
156
+ allowedIssueAuthors: ['testuser'],
156
157
  codexHomeCandidates: null,
157
158
  allowIssueCacheMinutes: 0,
158
159
  labelsAsLlmAgentName: null,
@@ -218,7 +219,7 @@ describe('StartPreparationUseCase', () => {
218
219
  configFilePath: '/path/to/config.yml',
219
220
  maximumPreparingIssuesCount: null,
220
221
  utilizationPercentageThreshold: 90,
221
- allowedIssueAuthors: null,
222
+ allowedIssueAuthors: ['testuser'],
222
223
  codexHomeCandidates: null,
223
224
  allowIssueCacheMinutes: 0,
224
225
  labelsAsLlmAgentName: null,
@@ -276,7 +277,7 @@ describe('StartPreparationUseCase', () => {
276
277
  configFilePath: '/path/to/config.yml',
277
278
  maximumPreparingIssuesCount: null,
278
279
  utilizationPercentageThreshold: 90,
279
- allowedIssueAuthors: null,
280
+ allowedIssueAuthors: ['testuser'],
280
281
  codexHomeCandidates: null,
281
282
  allowIssueCacheMinutes: 0,
282
283
  labelsAsLlmAgentName: null,
@@ -325,7 +326,7 @@ describe('StartPreparationUseCase', () => {
325
326
  configFilePath: '/path/to/config.yml',
326
327
  maximumPreparingIssuesCount: null,
327
328
  utilizationPercentageThreshold: 90,
328
- allowedIssueAuthors: null,
329
+ allowedIssueAuthors: ['testuser'],
329
330
  codexHomeCandidates: null,
330
331
  allowIssueCacheMinutes: 0,
331
332
  labelsAsLlmAgentName: null,
@@ -375,7 +376,7 @@ describe('StartPreparationUseCase', () => {
375
376
  configFilePath: '/path/to/config.yml',
376
377
  maximumPreparingIssuesCount: null,
377
378
  utilizationPercentageThreshold: 90,
378
- allowedIssueAuthors: null,
379
+ allowedIssueAuthors: ['testuser'],
379
380
  codexHomeCandidates: null,
380
381
  allowIssueCacheMinutes: 0,
381
382
  labelsAsLlmAgentName: null,
@@ -424,7 +425,7 @@ describe('StartPreparationUseCase', () => {
424
425
  configFilePath: '/path/to/config.yml',
425
426
  maximumPreparingIssuesCount: null,
426
427
  utilizationPercentageThreshold: 90,
427
- allowedIssueAuthors: null,
428
+ allowedIssueAuthors: ['testuser'],
428
429
  codexHomeCandidates: null,
429
430
  allowIssueCacheMinutes: 0,
430
431
  labelsAsLlmAgentName: null,
@@ -491,7 +492,7 @@ describe('StartPreparationUseCase', () => {
491
492
  configFilePath: '/path/to/config.yml',
492
493
  maximumPreparingIssuesCount: null,
493
494
  utilizationPercentageThreshold: 90,
494
- allowedIssueAuthors: null,
495
+ allowedIssueAuthors: ['testuser'],
495
496
  codexHomeCandidates: null,
496
497
  allowIssueCacheMinutes: 0,
497
498
  labelsAsLlmAgentName: null,
@@ -581,7 +582,7 @@ describe('StartPreparationUseCase', () => {
581
582
  configFilePath: '/path/to/config.yml',
582
583
  maximumPreparingIssuesCount: null,
583
584
  utilizationPercentageThreshold: 90,
584
- allowedIssueAuthors: null,
585
+ allowedIssueAuthors: ['testuser'],
585
586
  codexHomeCandidates: null,
586
587
  allowIssueCacheMinutes: 0,
587
588
  labelsAsLlmAgentName: null,
@@ -645,7 +646,7 @@ describe('StartPreparationUseCase', () => {
645
646
  configFilePath: '/path/to/config.yml',
646
647
  maximumPreparingIssuesCount: null,
647
648
  utilizationPercentageThreshold: 90,
648
- allowedIssueAuthors: null,
649
+ allowedIssueAuthors: ['testuser'],
649
650
  codexHomeCandidates: null,
650
651
  allowIssueCacheMinutes: 0,
651
652
  labelsAsLlmAgentName: null,
@@ -690,7 +691,7 @@ describe('StartPreparationUseCase', () => {
690
691
  configFilePath: '/path/to/config.yml',
691
692
  maximumPreparingIssuesCount: null,
692
693
  utilizationPercentageThreshold: 90,
693
- allowedIssueAuthors: null,
694
+ allowedIssueAuthors: ['testuser'],
694
695
  codexHomeCandidates: null,
695
696
  allowIssueCacheMinutes: 0,
696
697
  labelsAsLlmAgentName: null,
@@ -748,7 +749,7 @@ describe('StartPreparationUseCase', () => {
748
749
  configFilePath: '/path/to/config.yml',
749
750
  maximumPreparingIssuesCount: null,
750
751
  utilizationPercentageThreshold: 90,
751
- allowedIssueAuthors: null,
752
+ allowedIssueAuthors: ['testuser'],
752
753
  codexHomeCandidates: null,
753
754
  allowIssueCacheMinutes: 0,
754
755
  labelsAsLlmAgentName: null,
@@ -784,7 +785,7 @@ describe('StartPreparationUseCase', () => {
784
785
  configFilePath: '/path/to/config.yml',
785
786
  maximumPreparingIssuesCount: null,
786
787
  utilizationPercentageThreshold: 90,
787
- allowedIssueAuthors: null,
788
+ allowedIssueAuthors: ['testuser'],
788
789
  codexHomeCandidates: null,
789
790
  allowIssueCacheMinutes: 0,
790
791
  labelsAsLlmAgentName: null,
@@ -830,7 +831,7 @@ describe('StartPreparationUseCase', () => {
830
831
  configFilePath: '/path/to/config.yml',
831
832
  maximumPreparingIssuesCount: null,
832
833
  utilizationPercentageThreshold: 90,
833
- allowedIssueAuthors: null,
834
+ allowedIssueAuthors: ['testuser'],
834
835
  codexHomeCandidates: null,
835
836
  allowIssueCacheMinutes: 0,
836
837
  labelsAsLlmAgentName: null,
@@ -876,7 +877,7 @@ describe('StartPreparationUseCase', () => {
876
877
  configFilePath: '/path/to/config.yml',
877
878
  maximumPreparingIssuesCount: null,
878
879
  utilizationPercentageThreshold: 90,
879
- allowedIssueAuthors: null,
880
+ allowedIssueAuthors: ['testuser'],
880
881
  codexHomeCandidates: null,
881
882
  allowIssueCacheMinutes: 0,
882
883
  labelsAsLlmAgentName: null,
@@ -922,7 +923,7 @@ describe('StartPreparationUseCase', () => {
922
923
  configFilePath: '/path/to/config.yml',
923
924
  maximumPreparingIssuesCount: null,
924
925
  utilizationPercentageThreshold: 90,
925
- allowedIssueAuthors: null,
926
+ allowedIssueAuthors: ['testuser'],
926
927
  codexHomeCandidates: null,
927
928
  allowIssueCacheMinutes: 0,
928
929
  labelsAsLlmAgentName: null,
@@ -968,7 +969,7 @@ describe('StartPreparationUseCase', () => {
968
969
  configFilePath: '/path/to/config.yml',
969
970
  maximumPreparingIssuesCount: null,
970
971
  utilizationPercentageThreshold: 90,
971
- allowedIssueAuthors: null,
972
+ allowedIssueAuthors: ['testuser'],
972
973
  codexHomeCandidates: null,
973
974
  allowIssueCacheMinutes: 0,
974
975
  labelsAsLlmAgentName: null,
@@ -1014,7 +1015,7 @@ describe('StartPreparationUseCase', () => {
1014
1015
  configFilePath: '/path/to/config.yml',
1015
1016
  maximumPreparingIssuesCount: null,
1016
1017
  utilizationPercentageThreshold: 90,
1017
- allowedIssueAuthors: null,
1018
+ allowedIssueAuthors: ['testuser'],
1018
1019
  codexHomeCandidates: null,
1019
1020
  allowIssueCacheMinutes: 0,
1020
1021
  labelsAsLlmAgentName: null,
@@ -1063,7 +1064,7 @@ describe('StartPreparationUseCase', () => {
1063
1064
  configFilePath: '/path/to/config.yml',
1064
1065
  maximumPreparingIssuesCount: null,
1065
1066
  utilizationPercentageThreshold: 90,
1066
- allowedIssueAuthors: null,
1067
+ allowedIssueAuthors: ['testuser'],
1067
1068
  codexHomeCandidates: null,
1068
1069
  allowIssueCacheMinutes: 0,
1069
1070
  labelsAsLlmAgentName: null,
@@ -1112,7 +1113,7 @@ describe('StartPreparationUseCase', () => {
1112
1113
  configFilePath: '/path/to/config.yml',
1113
1114
  maximumPreparingIssuesCount: null,
1114
1115
  utilizationPercentageThreshold: 90,
1115
- allowedIssueAuthors: null,
1116
+ allowedIssueAuthors: ['testuser'],
1116
1117
  codexHomeCandidates: null,
1117
1118
  allowIssueCacheMinutes: 0,
1118
1119
  labelsAsLlmAgentName: null,
@@ -1163,7 +1164,7 @@ describe('StartPreparationUseCase', () => {
1163
1164
  configFilePath: '/path/to/config.yml',
1164
1165
  maximumPreparingIssuesCount: null,
1165
1166
  utilizationPercentageThreshold: 90,
1166
- allowedIssueAuthors: null,
1167
+ allowedIssueAuthors: ['testuser'],
1167
1168
  codexHomeCandidates: null,
1168
1169
  allowIssueCacheMinutes: 0,
1169
1170
  labelsAsLlmAgentName: null,
@@ -1199,7 +1200,7 @@ describe('StartPreparationUseCase', () => {
1199
1200
  configFilePath: '/path/to/config.yml',
1200
1201
  maximumPreparingIssuesCount: 3,
1201
1202
  utilizationPercentageThreshold: 90,
1202
- allowedIssueAuthors: null,
1203
+ allowedIssueAuthors: ['testuser'],
1203
1204
  codexHomeCandidates: null,
1204
1205
  allowIssueCacheMinutes: 0,
1205
1206
  labelsAsLlmAgentName: null,
@@ -1234,7 +1235,7 @@ describe('StartPreparationUseCase', () => {
1234
1235
  configFilePath: '/path/to/config.yml',
1235
1236
  maximumPreparingIssuesCount: null,
1236
1237
  utilizationPercentageThreshold: 90,
1237
- allowedIssueAuthors: null,
1238
+ allowedIssueAuthors: ['testuser'],
1238
1239
  codexHomeCandidates: null,
1239
1240
  allowIssueCacheMinutes: 0,
1240
1241
  labelsAsLlmAgentName: null,
@@ -1296,7 +1297,7 @@ describe('StartPreparationUseCase', () => {
1296
1297
  configFilePath: '/path/to/config.yml',
1297
1298
  maximumPreparingIssuesCount: 12,
1298
1299
  utilizationPercentageThreshold: 90,
1299
- allowedIssueAuthors: null,
1300
+ allowedIssueAuthors: ['testuser'],
1300
1301
  codexHomeCandidates: null,
1301
1302
  allowIssueCacheMinutes: 0,
1302
1303
  labelsAsLlmAgentName: null,
@@ -1367,7 +1368,7 @@ describe('StartPreparationUseCase', () => {
1367
1368
  configFilePath: '/path/to/config.yml',
1368
1369
  maximumPreparingIssuesCount: 20,
1369
1370
  utilizationPercentageThreshold: 90,
1370
- allowedIssueAuthors: null,
1371
+ allowedIssueAuthors: ['testuser'],
1371
1372
  codexHomeCandidates: null,
1372
1373
  allowIssueCacheMinutes: 0,
1373
1374
  labelsAsLlmAgentName: null,
@@ -1432,7 +1433,7 @@ describe('StartPreparationUseCase', () => {
1432
1433
  configFilePath: '/path/to/config.yml',
1433
1434
  maximumPreparingIssuesCount: null,
1434
1435
  utilizationPercentageThreshold: 90,
1435
- allowedIssueAuthors: null,
1436
+ allowedIssueAuthors: ['testuser'],
1436
1437
  codexHomeCandidates: null,
1437
1438
  allowIssueCacheMinutes: 0,
1438
1439
  labelsAsLlmAgentName: null,
@@ -1481,7 +1482,7 @@ describe('StartPreparationUseCase', () => {
1481
1482
  configFilePath: '/path/to/config.yml',
1482
1483
  maximumPreparingIssuesCount: null,
1483
1484
  utilizationPercentageThreshold: 90,
1484
- allowedIssueAuthors: null,
1485
+ allowedIssueAuthors: ['testuser'],
1485
1486
  codexHomeCandidates: null,
1486
1487
  allowIssueCacheMinutes: 0,
1487
1488
  labelsAsLlmAgentName: null,
@@ -1537,7 +1538,7 @@ describe('StartPreparationUseCase', () => {
1537
1538
  configFilePath: '/path/to/config.yml',
1538
1539
  maximumPreparingIssuesCount: null,
1539
1540
  utilizationPercentageThreshold: 90,
1540
- allowedIssueAuthors: null,
1541
+ allowedIssueAuthors: ['testuser'],
1541
1542
  codexHomeCandidates: null,
1542
1543
  allowIssueCacheMinutes: 0,
1543
1544
  labelsAsLlmAgentName: null,
@@ -1596,7 +1597,7 @@ describe('StartPreparationUseCase', () => {
1596
1597
  configFilePath: '/path/to/config.yml',
1597
1598
  maximumPreparingIssuesCount: null,
1598
1599
  utilizationPercentageThreshold: 90,
1599
- allowedIssueAuthors: null,
1600
+ allowedIssueAuthors: ['testuser'],
1600
1601
  codexHomeCandidates: null,
1601
1602
  allowIssueCacheMinutes: 0,
1602
1603
  labelsAsLlmAgentName: null,
@@ -1645,7 +1646,7 @@ describe('StartPreparationUseCase', () => {
1645
1646
  configFilePath: '/path/to/config.yml',
1646
1647
  maximumPreparingIssuesCount: null,
1647
1648
  utilizationPercentageThreshold: 90,
1648
- allowedIssueAuthors: null,
1649
+ allowedIssueAuthors: ['testuser'],
1649
1650
  codexHomeCandidates: null,
1650
1651
  allowIssueCacheMinutes: 0,
1651
1652
  labelsAsLlmAgentName: null,
@@ -1694,7 +1695,7 @@ describe('StartPreparationUseCase', () => {
1694
1695
  configFilePath: '/path/to/config.yml',
1695
1696
  maximumPreparingIssuesCount: null,
1696
1697
  utilizationPercentageThreshold: 90,
1697
- allowedIssueAuthors: null,
1698
+ allowedIssueAuthors: ['testuser'],
1698
1699
  codexHomeCandidates: null,
1699
1700
  allowIssueCacheMinutes: 0,
1700
1701
  labelsAsLlmAgentName: null,
@@ -1743,7 +1744,7 @@ describe('StartPreparationUseCase', () => {
1743
1744
  configFilePath: '/path/to/config.yml',
1744
1745
  maximumPreparingIssuesCount: null,
1745
1746
  utilizationPercentageThreshold: 90,
1746
- allowedIssueAuthors: null,
1747
+ allowedIssueAuthors: ['testuser'],
1747
1748
  codexHomeCandidates: null,
1748
1749
  allowIssueCacheMinutes: 0,
1749
1750
  labelsAsLlmAgentName: null,
@@ -1812,7 +1813,7 @@ describe('StartPreparationUseCase', () => {
1812
1813
  expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
1813
1814
  });
1814
1815
 
1815
- it('should process all issues when allowedIssueAuthors is null', async () => {
1816
+ it('should process no issues when allowedIssueAuthors is null (fail-closed)', async () => {
1816
1817
  const issue1 = createMockIssue({
1817
1818
  url: 'https://github.com/user/repo/issues/1',
1818
1819
  title: 'Issue 1',
@@ -1853,8 +1854,122 @@ describe('StartPreparationUseCase', () => {
1853
1854
  labelsAsLlmAgentName: null,
1854
1855
  });
1855
1856
 
1856
- expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(2);
1857
- expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(2);
1857
+ expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(0);
1858
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(0);
1859
+ });
1860
+
1861
+ it('should process no issues when allowedIssueAuthors is an empty list (fail-closed)', async () => {
1862
+ const issue1 = createMockIssue({
1863
+ url: 'https://github.com/user/repo/issues/1',
1864
+ title: 'Issue 1',
1865
+ labels: [],
1866
+ status: 'Awaiting Workspace',
1867
+ author: 'user1',
1868
+ });
1869
+
1870
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
1871
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
1872
+ createMockStoryObjectMap([issue1]),
1873
+ );
1874
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
1875
+ stdout: '',
1876
+ stderr: '',
1877
+ exitCode: 0,
1878
+ });
1879
+
1880
+ await useCase.run({
1881
+ projectUrl: 'https://github.com/user/repo',
1882
+ defaultAgentName: 'agent1',
1883
+ defaultLlmModelName: 'claude-sonnet-4-6',
1884
+ fallbackLlmModelName: null,
1885
+ defaultLlmAgentName: null,
1886
+ configFilePath: '/path/to/config.yml',
1887
+ maximumPreparingIssuesCount: null,
1888
+ utilizationPercentageThreshold: 90,
1889
+ allowedIssueAuthors: [],
1890
+ codexHomeCandidates: null,
1891
+ allowIssueCacheMinutes: 0,
1892
+ labelsAsLlmAgentName: null,
1893
+ });
1894
+
1895
+ expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(0);
1896
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(0);
1897
+ });
1898
+
1899
+ it('should process a previously bot-bypassed author only when explicitly listed', async () => {
1900
+ const botIssue = createMockIssue({
1901
+ url: 'https://github.com/user/repo/issues/1',
1902
+ title: 'Bot issue',
1903
+ labels: [],
1904
+ status: 'Awaiting Workspace',
1905
+ author: 'dependabot[bot]',
1906
+ });
1907
+
1908
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
1909
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
1910
+ createMockStoryObjectMap([botIssue]),
1911
+ );
1912
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
1913
+ stdout: '',
1914
+ stderr: '',
1915
+ exitCode: 0,
1916
+ });
1917
+
1918
+ await useCase.run({
1919
+ projectUrl: 'https://github.com/user/repo',
1920
+ defaultAgentName: 'agent1',
1921
+ defaultLlmModelName: 'claude-sonnet-4-6',
1922
+ fallbackLlmModelName: null,
1923
+ defaultLlmAgentName: null,
1924
+ configFilePath: '/path/to/config.yml',
1925
+ maximumPreparingIssuesCount: null,
1926
+ utilizationPercentageThreshold: 90,
1927
+ allowedIssueAuthors: ['dependabot[bot]'],
1928
+ codexHomeCandidates: null,
1929
+ allowIssueCacheMinutes: 0,
1930
+ labelsAsLlmAgentName: null,
1931
+ });
1932
+
1933
+ expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(1);
1934
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(1);
1935
+ });
1936
+
1937
+ it('should not process a previously bot-bypassed author when not listed', async () => {
1938
+ const botIssue = createMockIssue({
1939
+ url: 'https://github.com/user/repo/issues/1',
1940
+ title: 'Bot issue',
1941
+ labels: [],
1942
+ status: 'Awaiting Workspace',
1943
+ author: 'dependabot[bot]',
1944
+ });
1945
+
1946
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
1947
+ mockIssueRepository.getStoryObjectMap.mockResolvedValue(
1948
+ createMockStoryObjectMap([botIssue]),
1949
+ );
1950
+ mockLocalCommandRunner.runCommand.mockResolvedValue({
1951
+ stdout: '',
1952
+ stderr: '',
1953
+ exitCode: 0,
1954
+ });
1955
+
1956
+ await useCase.run({
1957
+ projectUrl: 'https://github.com/user/repo',
1958
+ defaultAgentName: 'agent1',
1959
+ defaultLlmModelName: 'claude-sonnet-4-6',
1960
+ fallbackLlmModelName: null,
1961
+ defaultLlmAgentName: null,
1962
+ configFilePath: '/path/to/config.yml',
1963
+ maximumPreparingIssuesCount: null,
1964
+ utilizationPercentageThreshold: 90,
1965
+ allowedIssueAuthors: ['owner'],
1966
+ codexHomeCandidates: null,
1967
+ allowIssueCacheMinutes: 0,
1968
+ labelsAsLlmAgentName: null,
1969
+ });
1970
+
1971
+ expect(mockIssueRepository.updateStatus.mock.calls).toHaveLength(0);
1972
+ expect(mockLocalCommandRunner.runCommand.mock.calls).toHaveLength(0);
1858
1973
  });
1859
1974
 
1860
1975
  it('should skip issues with empty author when allowedIssueAuthors is configured (deny-by-default)', async () => {
@@ -1973,7 +2088,7 @@ describe('StartPreparationUseCase', () => {
1973
2088
  configFilePath: '/path/to/config.yml',
1974
2089
  maximumPreparingIssuesCount: null,
1975
2090
  utilizationPercentageThreshold: 90,
1976
- allowedIssueAuthors: null,
2091
+ allowedIssueAuthors: ['testuser'],
1977
2092
  codexHomeCandidates: null,
1978
2093
  allowIssueCacheMinutes: 0,
1979
2094
  labelsAsLlmAgentName: null,
@@ -2022,7 +2137,7 @@ describe('StartPreparationUseCase', () => {
2022
2137
  configFilePath: '/path/to/config.yml',
2023
2138
  maximumPreparingIssuesCount: null,
2024
2139
  utilizationPercentageThreshold: 90,
2025
- allowedIssueAuthors: null,
2140
+ allowedIssueAuthors: ['testuser'],
2026
2141
  codexHomeCandidates: [],
2027
2142
  allowIssueCacheMinutes: 0,
2028
2143
  labelsAsLlmAgentName: null,
@@ -2071,7 +2186,7 @@ describe('StartPreparationUseCase', () => {
2071
2186
  configFilePath: '/path/to/config.yml',
2072
2187
  maximumPreparingIssuesCount: null,
2073
2188
  utilizationPercentageThreshold: 90,
2074
- allowedIssueAuthors: null,
2189
+ allowedIssueAuthors: ['testuser'],
2075
2190
  codexHomeCandidates: ['.codex-dev1'],
2076
2191
  allowIssueCacheMinutes: 0,
2077
2192
  labelsAsLlmAgentName: null,
@@ -2140,7 +2255,7 @@ describe('StartPreparationUseCase', () => {
2140
2255
  configFilePath: '/path/to/config.yml',
2141
2256
  maximumPreparingIssuesCount: null,
2142
2257
  utilizationPercentageThreshold: 90,
2143
- allowedIssueAuthors: null,
2258
+ allowedIssueAuthors: ['testuser'],
2144
2259
  codexHomeCandidates: ['.codex-dev1', '.codex-dev2'],
2145
2260
  allowIssueCacheMinutes: 0,
2146
2261
  labelsAsLlmAgentName: null,
@@ -2206,7 +2321,7 @@ describe('StartPreparationUseCase', () => {
2206
2321
  configFilePath: '/path/to/config.yml',
2207
2322
  maximumPreparingIssuesCount: null,
2208
2323
  utilizationPercentageThreshold: 90,
2209
- allowedIssueAuthors: null,
2324
+ allowedIssueAuthors: ['testuser'],
2210
2325
  codexHomeCandidates: null,
2211
2326
  allowIssueCacheMinutes: 0,
2212
2327
  labelsAsLlmAgentName: null,
@@ -2266,7 +2381,7 @@ describe('StartPreparationUseCase', () => {
2266
2381
  configFilePath: '/path/to/config.yml',
2267
2382
  maximumPreparingIssuesCount: null,
2268
2383
  utilizationPercentageThreshold: 90,
2269
- allowedIssueAuthors: null,
2384
+ allowedIssueAuthors: ['testuser'],
2270
2385
  codexHomeCandidates: null,
2271
2386
  allowIssueCacheMinutes: 0,
2272
2387
  labelsAsLlmAgentName: null,
@@ -2295,7 +2410,7 @@ describe('StartPreparationUseCase', () => {
2295
2410
  configFilePath: '/path/to/config.yml',
2296
2411
  maximumPreparingIssuesCount: null,
2297
2412
  utilizationPercentageThreshold: 90,
2298
- allowedIssueAuthors: null,
2413
+ allowedIssueAuthors: ['testuser'],
2299
2414
  codexHomeCandidates: null,
2300
2415
  allowIssueCacheMinutes: 5,
2301
2416
  labelsAsLlmAgentName: null,
@@ -2343,7 +2458,7 @@ describe('StartPreparationUseCase', () => {
2343
2458
  configFilePath: '/path/to/config.yml',
2344
2459
  maximumPreparingIssuesCount: null,
2345
2460
  utilizationPercentageThreshold: 90,
2346
- allowedIssueAuthors: null,
2461
+ allowedIssueAuthors: ['testuser'],
2347
2462
  codexHomeCandidates: null,
2348
2463
  allowIssueCacheMinutes: 0,
2349
2464
  labelsAsLlmAgentName: null,
@@ -2396,7 +2511,7 @@ describe('StartPreparationUseCase', () => {
2396
2511
  configFilePath: '/path/to/config.yml',
2397
2512
  maximumPreparingIssuesCount: null,
2398
2513
  utilizationPercentageThreshold: 90,
2399
- allowedIssueAuthors: null,
2514
+ allowedIssueAuthors: ['testuser'],
2400
2515
  codexHomeCandidates: null,
2401
2516
  allowIssueCacheMinutes: 0,
2402
2517
  labelsAsLlmAgentName: null,
@@ -2487,7 +2602,7 @@ describe('StartPreparationUseCase', () => {
2487
2602
  configFilePath: '/path/to/config.yml',
2488
2603
  maximumPreparingIssuesCount: null,
2489
2604
  utilizationPercentageThreshold: 90,
2490
- allowedIssueAuthors: null,
2605
+ allowedIssueAuthors: ['testuser'],
2491
2606
  codexHomeCandidates: null,
2492
2607
  allowIssueCacheMinutes: 0,
2493
2608
  labelsAsLlmAgentName: null,
@@ -2545,7 +2660,7 @@ describe('StartPreparationUseCase', () => {
2545
2660
  configFilePath: '/path/to/config.yml',
2546
2661
  maximumPreparingIssuesCount: null,
2547
2662
  utilizationPercentageThreshold: 90,
2548
- allowedIssueAuthors: null,
2663
+ allowedIssueAuthors: ['testuser'],
2549
2664
  codexHomeCandidates: null,
2550
2665
  allowIssueCacheMinutes: 0,
2551
2666
  labelsAsLlmAgentName: null,
@@ -2621,7 +2736,7 @@ describe('StartPreparationUseCase', () => {
2621
2736
  configFilePath: '/path/to/config.yml',
2622
2737
  maximumPreparingIssuesCount: null,
2623
2738
  utilizationPercentageThreshold: 90,
2624
- allowedIssueAuthors: null,
2739
+ allowedIssueAuthors: ['testuser'],
2625
2740
  codexHomeCandidates: null,
2626
2741
  allowIssueCacheMinutes: 0,
2627
2742
  labelsAsLlmAgentName: null,
@@ -2700,7 +2815,7 @@ describe('StartPreparationUseCase', () => {
2700
2815
  configFilePath: '/path/to/config.yml',
2701
2816
  maximumPreparingIssuesCount: null,
2702
2817
  utilizationPercentageThreshold: 90,
2703
- allowedIssueAuthors: null,
2818
+ allowedIssueAuthors: ['testuser'],
2704
2819
  codexHomeCandidates: null,
2705
2820
  allowIssueCacheMinutes: 0,
2706
2821
  labelsAsLlmAgentName: null,
@@ -2778,7 +2893,7 @@ describe('StartPreparationUseCase', () => {
2778
2893
  configFilePath: '/path/to/config.yml',
2779
2894
  maximumPreparingIssuesCount: null,
2780
2895
  utilizationPercentageThreshold: 90,
2781
- allowedIssueAuthors: null,
2896
+ allowedIssueAuthors: ['testuser'],
2782
2897
  codexHomeCandidates: null,
2783
2898
  allowIssueCacheMinutes: 0,
2784
2899
  labelsAsLlmAgentName: null,
@@ -2853,7 +2968,7 @@ describe('StartPreparationUseCase', () => {
2853
2968
  configFilePath: '/path/to/config.yml',
2854
2969
  maximumPreparingIssuesCount: null,
2855
2970
  utilizationPercentageThreshold: 90,
2856
- allowedIssueAuthors: null,
2971
+ allowedIssueAuthors: ['testuser'],
2857
2972
  codexHomeCandidates: null,
2858
2973
  allowIssueCacheMinutes: 0,
2859
2974
  labelsAsLlmAgentName: null,
@@ -2941,7 +3056,7 @@ describe('StartPreparationUseCase', () => {
2941
3056
  configFilePath: '/path/to/config.yml',
2942
3057
  maximumPreparingIssuesCount: null,
2943
3058
  utilizationPercentageThreshold: 90,
2944
- allowedIssueAuthors: null,
3059
+ allowedIssueAuthors: ['testuser'],
2945
3060
  codexHomeCandidates: null,
2946
3061
  allowIssueCacheMinutes: 0,
2947
3062
  labelsAsLlmAgentName: null,
@@ -3008,7 +3123,7 @@ describe('StartPreparationUseCase', () => {
3008
3123
  configFilePath: '/path/to/config.yml',
3009
3124
  maximumPreparingIssuesCount: null,
3010
3125
  utilizationPercentageThreshold: 90,
3011
- allowedIssueAuthors: null,
3126
+ allowedIssueAuthors: ['testuser'],
3012
3127
  codexHomeCandidates: null,
3013
3128
  allowIssueCacheMinutes: 0,
3014
3129
  labelsAsLlmAgentName: null,
@@ -3076,7 +3191,7 @@ describe('StartPreparationUseCase', () => {
3076
3191
  configFilePath: '/path/to/config.yml',
3077
3192
  maximumPreparingIssuesCount: null,
3078
3193
  utilizationPercentageThreshold: 90,
3079
- allowedIssueAuthors: null,
3194
+ allowedIssueAuthors: ['testuser'],
3080
3195
  codexHomeCandidates: null,
3081
3196
  allowIssueCacheMinutes: 0,
3082
3197
  labelsAsLlmAgentName: null,
@@ -3146,7 +3261,7 @@ describe('StartPreparationUseCase', () => {
3146
3261
  configFilePath: '/path/to/config.yml',
3147
3262
  maximumPreparingIssuesCount: null,
3148
3263
  utilizationPercentageThreshold: 90,
3149
- allowedIssueAuthors: null,
3264
+ allowedIssueAuthors: ['testuser'],
3150
3265
  codexHomeCandidates: null,
3151
3266
  allowIssueCacheMinutes: 0,
3152
3267
  labelsAsLlmAgentName: null,
@@ -3219,7 +3334,7 @@ describe('StartPreparationUseCase', () => {
3219
3334
  configFilePath: '/path/to/config.yml',
3220
3335
  maximumPreparingIssuesCount: null,
3221
3336
  utilizationPercentageThreshold: 90,
3222
- allowedIssueAuthors: null,
3337
+ allowedIssueAuthors: ['testuser'],
3223
3338
  codexHomeCandidates: null,
3224
3339
  allowIssueCacheMinutes: 0,
3225
3340
  labelsAsLlmAgentName: null,
@@ -3334,7 +3449,7 @@ describe('StartPreparationUseCase', () => {
3334
3449
  configFilePath: '/path/to/config.yml',
3335
3450
  maximumPreparingIssuesCount: null,
3336
3451
  utilizationPercentageThreshold: 90,
3337
- allowedIssueAuthors: null,
3452
+ allowedIssueAuthors: ['testuser'],
3338
3453
  codexHomeCandidates: null,
3339
3454
  allowIssueCacheMinutes: 0,
3340
3455
  labelsAsLlmAgentName: null,
@@ -3420,7 +3535,7 @@ describe('StartPreparationUseCase', () => {
3420
3535
  configFilePath: '/path/to/config.yml',
3421
3536
  maximumPreparingIssuesCount: null,
3422
3537
  utilizationPercentageThreshold: 90,
3423
- allowedIssueAuthors: null,
3538
+ allowedIssueAuthors: ['testuser'],
3424
3539
  codexHomeCandidates: null,
3425
3540
  allowIssueCacheMinutes: 0,
3426
3541
  labelsAsLlmAgentName: null,
@@ -3481,7 +3596,7 @@ describe('StartPreparationUseCase', () => {
3481
3596
  configFilePath: '/path/to/config.yml',
3482
3597
  maximumPreparingIssuesCount: null,
3483
3598
  utilizationPercentageThreshold: 90,
3484
- allowedIssueAuthors: null,
3599
+ allowedIssueAuthors: ['testuser'],
3485
3600
  codexHomeCandidates: null,
3486
3601
  allowIssueCacheMinutes: 0,
3487
3602
  labelsAsLlmAgentName: null,
@@ -3548,7 +3663,7 @@ describe('StartPreparationUseCase', () => {
3548
3663
  configFilePath: '/path/to/config.yml',
3549
3664
  maximumPreparingIssuesCount: null,
3550
3665
  utilizationPercentageThreshold: 90,
3551
- allowedIssueAuthors: null,
3666
+ allowedIssueAuthors: ['testuser'],
3552
3667
  codexHomeCandidates: null,
3553
3668
  allowIssueCacheMinutes: 0,
3554
3669
  labelsAsLlmAgentName: null,
@@ -3615,7 +3730,7 @@ describe('StartPreparationUseCase', () => {
3615
3730
  configFilePath: '/path/to/config.yml',
3616
3731
  maximumPreparingIssuesCount: null,
3617
3732
  utilizationPercentageThreshold: 90,
3618
- allowedIssueAuthors: null,
3733
+ allowedIssueAuthors: ['testuser'],
3619
3734
  codexHomeCandidates: null,
3620
3735
  allowIssueCacheMinutes: 0,
3621
3736
  labelsAsLlmAgentName: null,
@@ -3682,7 +3797,7 @@ describe('StartPreparationUseCase', () => {
3682
3797
  configFilePath: '/path/to/config.yml',
3683
3798
  maximumPreparingIssuesCount: null,
3684
3799
  utilizationPercentageThreshold: 90,
3685
- allowedIssueAuthors: null,
3800
+ allowedIssueAuthors: ['testuser'],
3686
3801
  codexHomeCandidates: null,
3687
3802
  allowIssueCacheMinutes: 0,
3688
3803
  labelsAsLlmAgentName: null,
@@ -3752,7 +3867,7 @@ describe('StartPreparationUseCase', () => {
3752
3867
  configFilePath: '/path/to/config.yml',
3753
3868
  maximumPreparingIssuesCount: null,
3754
3869
  utilizationPercentageThreshold: 90,
3755
- allowedIssueAuthors: null,
3870
+ allowedIssueAuthors: ['testuser'],
3756
3871
  codexHomeCandidates: null,
3757
3872
  allowIssueCacheMinutes: 0,
3758
3873
  labelsAsLlmAgentName: null,
@@ -3800,7 +3915,7 @@ describe('StartPreparationUseCase', () => {
3800
3915
  configFilePath: '/path/to/config.yml',
3801
3916
  maximumPreparingIssuesCount: null,
3802
3917
  utilizationPercentageThreshold: 90,
3803
- allowedIssueAuthors: null,
3918
+ allowedIssueAuthors: ['testuser'],
3804
3919
  codexHomeCandidates: null,
3805
3920
  allowIssueCacheMinutes: 0,
3806
3921
  labelsAsLlmAgentName: null,
@@ -3870,7 +3985,7 @@ describe('StartPreparationUseCase', () => {
3870
3985
  configFilePath: '/path/to/config.yml',
3871
3986
  maximumPreparingIssuesCount: null,
3872
3987
  utilizationPercentageThreshold: 90,
3873
- allowedIssueAuthors: null,
3988
+ allowedIssueAuthors: ['testuser'],
3874
3989
  codexHomeCandidates: null,
3875
3990
  allowIssueCacheMinutes: 0,
3876
3991
  labelsAsLlmAgentName: null,
@@ -3940,7 +4055,7 @@ describe('StartPreparationUseCase', () => {
3940
4055
  configFilePath: '/path/to/config.yml',
3941
4056
  maximumPreparingIssuesCount: null,
3942
4057
  utilizationPercentageThreshold: 90,
3943
- allowedIssueAuthors: null,
4058
+ allowedIssueAuthors: ['testuser'],
3944
4059
  codexHomeCandidates: null,
3945
4060
  allowIssueCacheMinutes: 0,
3946
4061
  labelsAsLlmAgentName: null,
@@ -4010,7 +4125,7 @@ describe('StartPreparationUseCase', () => {
4010
4125
  configFilePath: '/path/to/config.yml',
4011
4126
  maximumPreparingIssuesCount: null,
4012
4127
  utilizationPercentageThreshold: 90,
4013
- allowedIssueAuthors: null,
4128
+ allowedIssueAuthors: ['testuser'],
4014
4129
  codexHomeCandidates: null,
4015
4130
  allowIssueCacheMinutes: 0,
4016
4131
  labelsAsLlmAgentName: null,
@@ -4088,7 +4203,7 @@ describe('StartPreparationUseCase', () => {
4088
4203
  configFilePath: '/path/to/config.yml',
4089
4204
  maximumPreparingIssuesCount: null,
4090
4205
  utilizationPercentageThreshold: 90,
4091
- allowedIssueAuthors: null,
4206
+ allowedIssueAuthors: ['testuser'],
4092
4207
  codexHomeCandidates: null,
4093
4208
  allowIssueCacheMinutes: 0,
4094
4209
  labelsAsLlmAgentName: null,
@@ -4166,7 +4281,7 @@ describe('StartPreparationUseCase', () => {
4166
4281
  configFilePath: '/path/to/config.yml',
4167
4282
  maximumPreparingIssuesCount: null,
4168
4283
  utilizationPercentageThreshold: 90,
4169
- allowedIssueAuthors: null,
4284
+ allowedIssueAuthors: ['testuser'],
4170
4285
  codexHomeCandidates: null,
4171
4286
  allowIssueCacheMinutes: 0,
4172
4287
  labelsAsLlmAgentName: null,
@@ -4249,7 +4364,7 @@ describe('StartPreparationUseCase', () => {
4249
4364
  configFilePath: '/path/to/config.yml',
4250
4365
  maximumPreparingIssuesCount: null,
4251
4366
  utilizationPercentageThreshold: 90,
4252
- allowedIssueAuthors: null,
4367
+ allowedIssueAuthors: ['testuser'],
4253
4368
  codexHomeCandidates: null,
4254
4369
  allowIssueCacheMinutes: 0,
4255
4370
  labelsAsLlmAgentName: null,
@@ -4361,7 +4476,7 @@ describe('StartPreparationUseCase', () => {
4361
4476
  configFilePath: '/path/to/config.yml',
4362
4477
  maximumPreparingIssuesCount: null,
4363
4478
  utilizationPercentageThreshold: 90,
4364
- allowedIssueAuthors: null,
4479
+ allowedIssueAuthors: ['testuser'],
4365
4480
  codexHomeCandidates: null,
4366
4481
  allowIssueCacheMinutes: 0,
4367
4482
  labelsAsLlmAgentName: null,
@@ -4437,7 +4552,7 @@ describe('StartPreparationUseCase', () => {
4437
4552
  configFilePath: '/path/to/config.yml',
4438
4553
  maximumPreparingIssuesCount: null,
4439
4554
  utilizationPercentageThreshold: 90,
4440
- allowedIssueAuthors: null,
4555
+ allowedIssueAuthors: ['testuser'],
4441
4556
  codexHomeCandidates: null,
4442
4557
  allowIssueCacheMinutes: 0,
4443
4558
  labelsAsLlmAgentName: null,
@@ -4510,7 +4625,7 @@ describe('StartPreparationUseCase', () => {
4510
4625
  configFilePath: '/path/to/config.yml',
4511
4626
  maximumPreparingIssuesCount: null,
4512
4627
  utilizationPercentageThreshold: 90,
4513
- allowedIssueAuthors: null,
4628
+ allowedIssueAuthors: ['testuser'],
4514
4629
  codexHomeCandidates: null,
4515
4630
  allowIssueCacheMinutes: 0,
4516
4631
  labelsAsLlmAgentName: null,
@@ -4558,7 +4673,7 @@ describe('StartPreparationUseCase', () => {
4558
4673
  configFilePath: '/path/to/config.yml',
4559
4674
  maximumPreparingIssuesCount: null,
4560
4675
  utilizationPercentageThreshold: 90,
4561
- allowedIssueAuthors: null,
4676
+ allowedIssueAuthors: ['testuser'],
4562
4677
  codexHomeCandidates: null,
4563
4678
  allowIssueCacheMinutes: 0,
4564
4679
  labelsAsLlmAgentName: params.labelsAsLlmAgentName,
@@ -4705,7 +4820,7 @@ describe('StartPreparationUseCase', () => {
4705
4820
  configFilePath: '/path/to/config.yml',
4706
4821
  maximumPreparingIssuesCount: null,
4707
4822
  utilizationPercentageThreshold: 90,
4708
- allowedIssueAuthors: null,
4823
+ allowedIssueAuthors: ['testuser'],
4709
4824
  codexHomeCandidates: null,
4710
4825
  allowIssueCacheMinutes: 0,
4711
4826
  labelsAsLlmAgentName: null,
@@ -4772,7 +4887,7 @@ describe('StartPreparationUseCase', () => {
4772
4887
  configFilePath: '/path/to/config.yml',
4773
4888
  maximumPreparingIssuesCount: null,
4774
4889
  utilizationPercentageThreshold: 90,
4775
- allowedIssueAuthors: null,
4890
+ allowedIssueAuthors: ['testuser'],
4776
4891
  codexHomeCandidates: null,
4777
4892
  allowIssueCacheMinutes: 0,
4778
4893
  labelsAsLlmAgentName: null,
@@ -4831,7 +4946,7 @@ describe('StartPreparationUseCase', () => {
4831
4946
  configFilePath: '/path/to/config.yml',
4832
4947
  maximumPreparingIssuesCount: null,
4833
4948
  utilizationPercentageThreshold: 90,
4834
- allowedIssueAuthors: null,
4949
+ allowedIssueAuthors: ['testuser'],
4835
4950
  codexHomeCandidates: null,
4836
4951
  allowIssueCacheMinutes: 0,
4837
4952
  labelsAsLlmAgentName: null,
@@ -4886,7 +5001,7 @@ describe('StartPreparationUseCase', () => {
4886
5001
  configFilePath: '/path/to/config.yml',
4887
5002
  maximumPreparingIssuesCount: null,
4888
5003
  utilizationPercentageThreshold: 90,
4889
- allowedIssueAuthors: null,
5004
+ allowedIssueAuthors: ['testuser'],
4890
5005
  codexHomeCandidates: null,
4891
5006
  allowIssueCacheMinutes: 0,
4892
5007
  labelsAsLlmAgentName: null,
@@ -4941,7 +5056,7 @@ describe('StartPreparationUseCase', () => {
4941
5056
  configFilePath: '/path/to/config.yml',
4942
5057
  maximumPreparingIssuesCount: null,
4943
5058
  utilizationPercentageThreshold: 90,
4944
- allowedIssueAuthors: null,
5059
+ allowedIssueAuthors: ['testuser'],
4945
5060
  codexHomeCandidates: null,
4946
5061
  allowIssueCacheMinutes: 0,
4947
5062
  labelsAsLlmAgentName: null,
@@ -4997,7 +5112,7 @@ describe('StartPreparationUseCase', () => {
4997
5112
  configFilePath: '/path/to/config.yml',
4998
5113
  maximumPreparingIssuesCount: null,
4999
5114
  utilizationPercentageThreshold: 90,
5000
- allowedIssueAuthors: null,
5115
+ allowedIssueAuthors: ['testuser'],
5001
5116
  codexHomeCandidates: null,
5002
5117
  allowIssueCacheMinutes: 0,
5003
5118
  labelsAsLlmAgentName: null,
@@ -5078,7 +5193,7 @@ describe('StartPreparationUseCase', () => {
5078
5193
  configFilePath: '/path/to/config.yml',
5079
5194
  maximumPreparingIssuesCount: null,
5080
5195
  utilizationPercentageThreshold: 90,
5081
- allowedIssueAuthors: null,
5196
+ allowedIssueAuthors: ['testuser'],
5082
5197
  codexHomeCandidates: null,
5083
5198
  allowIssueCacheMinutes: 0,
5084
5199
  labelsAsLlmAgentName: null,
@@ -5146,7 +5261,7 @@ describe('StartPreparationUseCase', () => {
5146
5261
  configFilePath: '/path/to/config.yml',
5147
5262
  maximumPreparingIssuesCount: null,
5148
5263
  utilizationPercentageThreshold: 90,
5149
- allowedIssueAuthors: null,
5264
+ allowedIssueAuthors: ['testuser'],
5150
5265
  codexHomeCandidates: null,
5151
5266
  allowIssueCacheMinutes: 0,
5152
5267
  labelsAsLlmAgentName: null,
@@ -5206,7 +5321,7 @@ describe('StartPreparationUseCase', () => {
5206
5321
  configFilePath: '/path/to/config.yml',
5207
5322
  maximumPreparingIssuesCount: null,
5208
5323
  utilizationPercentageThreshold: 90,
5209
- allowedIssueAuthors: null,
5324
+ allowedIssueAuthors: ['testuser'],
5210
5325
  codexHomeCandidates: null,
5211
5326
  allowIssueCacheMinutes: 0,
5212
5327
  labelsAsLlmAgentName: null,
@@ -5262,7 +5377,7 @@ describe('StartPreparationUseCase', () => {
5262
5377
  configFilePath: '/path/to/config.yml',
5263
5378
  maximumPreparingIssuesCount: null,
5264
5379
  utilizationPercentageThreshold: 90,
5265
- allowedIssueAuthors: null,
5380
+ allowedIssueAuthors: ['testuser'],
5266
5381
  codexHomeCandidates: null,
5267
5382
  allowIssueCacheMinutes: 0,
5268
5383
  labelsAsLlmAgentName: null,
@@ -5324,7 +5439,7 @@ describe('StartPreparationUseCase', () => {
5324
5439
  configFilePath: '/path/to/config.yml',
5325
5440
  maximumPreparingIssuesCount: null,
5326
5441
  utilizationPercentageThreshold: 90,
5327
- allowedIssueAuthors: null,
5442
+ allowedIssueAuthors: ['testuser'],
5328
5443
  codexHomeCandidates: null,
5329
5444
  allowIssueCacheMinutes: 0,
5330
5445
  labelsAsLlmAgentName: null,
@@ -5386,7 +5501,7 @@ describe('StartPreparationUseCase', () => {
5386
5501
  configFilePath: '/path/to/config.yml',
5387
5502
  maximumPreparingIssuesCount: null,
5388
5503
  utilizationPercentageThreshold: 90,
5389
- allowedIssueAuthors: null,
5504
+ allowedIssueAuthors: ['testuser'],
5390
5505
  codexHomeCandidates: null,
5391
5506
  allowIssueCacheMinutes: 0,
5392
5507
  labelsAsLlmAgentName: null,
@@ -5447,7 +5562,7 @@ describe('StartPreparationUseCase', () => {
5447
5562
  configFilePath: '/path/to/config.yml',
5448
5563
  maximumPreparingIssuesCount: null,
5449
5564
  utilizationPercentageThreshold: 90,
5450
- allowedIssueAuthors: null,
5565
+ allowedIssueAuthors: ['testuser'],
5451
5566
  codexHomeCandidates: null,
5452
5567
  allowIssueCacheMinutes: 0,
5453
5568
  labelsAsLlmAgentName: null,
@@ -5508,7 +5623,7 @@ describe('StartPreparationUseCase', () => {
5508
5623
  configFilePath: '/path/to/config.yml',
5509
5624
  maximumPreparingIssuesCount: null,
5510
5625
  utilizationPercentageThreshold: 90,
5511
- allowedIssueAuthors: null,
5626
+ allowedIssueAuthors: ['testuser'],
5512
5627
  codexHomeCandidates: null,
5513
5628
  allowIssueCacheMinutes: 0,
5514
5629
  labelsAsLlmAgentName: null,
@@ -5563,7 +5678,7 @@ describe('StartPreparationUseCase', () => {
5563
5678
  configFilePath: '/path/to/config.yml',
5564
5679
  maximumPreparingIssuesCount: null,
5565
5680
  utilizationPercentageThreshold: 90,
5566
- allowedIssueAuthors: null,
5681
+ allowedIssueAuthors: ['testuser'],
5567
5682
  codexHomeCandidates: null,
5568
5683
  allowIssueCacheMinutes: 0,
5569
5684
  labelsAsLlmAgentName: null,
@@ -5630,7 +5745,7 @@ describe('StartPreparationUseCase', () => {
5630
5745
  configFilePath: '/path/to/config.yml',
5631
5746
  maximumPreparingIssuesCount: null,
5632
5747
  utilizationPercentageThreshold: 90,
5633
- allowedIssueAuthors: null,
5748
+ allowedIssueAuthors: ['testuser'],
5634
5749
  codexHomeCandidates: null,
5635
5750
  allowIssueCacheMinutes: 0,
5636
5751
  labelsAsLlmAgentName: null,