github-issue-tower-defence-management 1.69.0 → 1.69.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [1.69.1](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.69.0...v1.69.1) (2026-05-30)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **security:** make allowedIssueAuthors optional for backward compatibility ([f8785e7](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/f8785e76f7e944fca8de069b9624851240b71e04)), closes [#668](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/668)
7
+ * **security:** verify comment author in NotifyFinishedIssuePreparation rejection checks ([4042bdf](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/commit/4042bdfe66c8b4f74897f0d8138809f925c82fc7)), closes [#668](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/issues/668)
8
+
1
9
  # [1.69.0](https://github.com/HiromiShikata/npm-cli-github-issue-tower-defence-management/compare/v1.68.0...v1.69.0) (2026-05-30)
2
10
 
3
11
 
@@ -234,11 +234,19 @@ exports.program
234
234
  const issueCommentRepository = new GitHubIssueCommentRepository_1.GitHubIssueCommentRepository(token);
235
235
  const webhookRepository = new FetchWebhookRepository_1.FetchWebhookRepository();
236
236
  const useCase = new NotifyFinishedIssuePreparationUseCase_1.NotifyFinishedIssuePreparationUseCase(projectRepository, issueRepository, issueCommentRepository, webhookRepository);
237
+ const rawAllowedIssueAuthors = config.allowedIssueAuthors;
238
+ const allowedIssueAuthors = rawAllowedIssueAuthors
239
+ ? rawAllowedIssueAuthors
240
+ .split(',')
241
+ .map((s) => s.trim())
242
+ .filter(Boolean)
243
+ : null;
237
244
  await useCase.run({
238
245
  projectUrl,
239
246
  issueUrl: options.issueUrl,
240
247
  thresholdForAutoReject,
241
248
  workflowBlockerResolvedWebhookUrl,
249
+ allowedIssueAuthors,
242
250
  });
243
251
  });
244
252
  /* istanbul ignore next */
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapter/entry-points/cli/index.ts"],"names":[],"mappings":"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"}
@@ -77,16 +77,19 @@ class NotifyFinishedIssuePreparationUseCase {
77
77
  return;
78
78
  }
79
79
  const comments = await this.issueCommentRepository.getCommentsFromIssue(issue);
80
- const { rejections } = await this.collectRejections(issue, comments);
80
+ const isTrustedAuthor = (author) => this.isAuthorTrusted(author, params.allowedIssueAuthors ?? null);
81
+ const { rejections } = await this.collectRejections(issue, comments, isTrustedAuthor);
81
82
  const rejectionStatusMessage = rejections.length > 0
82
83
  ? `Auto Status Check: REJECTED\n${rejections.map((r) => `- ${r.detail}`).join('\n')}`
83
84
  : 'Auto Status Check: APPROVED';
84
85
  const lastTargetComments = comments.slice(-params.thresholdForAutoReject * 2);
85
86
  if (rejections.length > 0 &&
86
- lastTargetComments.filter((comment) => comment.content.startsWith('Auto Status Check: REJECTED')).length >= params.thresholdForAutoReject &&
87
+ lastTargetComments.filter((comment) => comment.content.startsWith('Auto Status Check: REJECTED') &&
88
+ isTrustedAuthor(comment.author)).length >= params.thresholdForAutoReject &&
87
89
  !lastTargetComments.some((comment) => comment.content
88
90
  .toLowerCase()
89
- .includes('failed to pass the check automatically'))) {
91
+ .includes('failed to pass the check automatically') &&
92
+ isTrustedAuthor(comment.author))) {
90
93
  issue.status = WorkflowStatus_1.FAILED_PREPARATION_STATUS_NAME;
91
94
  await this.issueRepository.update(issue, project);
92
95
  await this.issueRepository.updateStatus(project, issue, failedPreparationStatusOption.id);
@@ -109,10 +112,13 @@ class NotifyFinishedIssuePreparationUseCase {
109
112
  await this.setDependedIssueUrlForAllOpenPRs(issue, params.issueUrl, project);
110
113
  await this.issueCommentRepository.createComment(issue, rejectionStatusMessage);
111
114
  };
112
- this.collectRejections = async (issue, comments) => {
115
+ this.isAuthorTrusted = (author, allowedIssueAuthors) => allowedIssueAuthors === null || allowedIssueAuthors.includes(author);
116
+ this.collectRejections = async (issue, comments, isTrustedAuthor) => {
113
117
  const rejections = [];
114
118
  const lastComment = comments[comments.length - 1];
115
- if (!lastComment || !lastComment.content.startsWith('From: :robot:')) {
119
+ if (!lastComment ||
120
+ !isTrustedAuthor(lastComment.author) ||
121
+ !lastComment.content.startsWith('From: :robot:')) {
116
122
  rejections.push({
117
123
  type: 'NO_REPORT_FROM_AGENT_BOT',
118
124
  detail: 'NO_REPORT_FROM_AGENT_BOT',
@@ -1 +1 @@
1
- {"version":3,"file":"NotifyFinishedIssuePreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NotifyFinishedIssuePreparationUseCase.js","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "github-issue-tower-defence-management",
3
- "version": "1.69.0",
3
+ "version": "1.69.1",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "scripts": {
@@ -75,7 +75,7 @@
75
75
  "better-sqlite3": "12.10.0",
76
76
  "commander": "^14.0.0",
77
77
  "dotenv": "^17.0.0",
78
- "googleapis": "^171.0.0",
78
+ "googleapis": "^171.4.0",
79
79
  "ky": "^2.0.0",
80
80
  "typia": "^12.0.0",
81
81
  "yaml": "^2.6.0"
@@ -1083,6 +1083,7 @@ codexHomeCandidates:
1083
1083
  issueUrl: 'https://github.com/test/repo/issues/1',
1084
1084
  thresholdForAutoReject: 3,
1085
1085
  workflowBlockerResolvedWebhookUrl: null,
1086
+ allowedIssueAuthors: null,
1086
1087
  });
1087
1088
  });
1088
1089
 
@@ -1116,6 +1117,7 @@ codexHomeCandidates:
1116
1117
  issueUrl: 'https://github.com/test/repo/issues/1',
1117
1118
  thresholdForAutoReject: 3,
1118
1119
  workflowBlockerResolvedWebhookUrl: null,
1120
+ allowedIssueAuthors: null,
1119
1121
  });
1120
1122
  });
1121
1123
 
@@ -426,11 +426,20 @@ program
426
426
  webhookRepository,
427
427
  );
428
428
 
429
+ const rawAllowedIssueAuthors = config.allowedIssueAuthors;
430
+ const allowedIssueAuthors = rawAllowedIssueAuthors
431
+ ? rawAllowedIssueAuthors
432
+ .split(',')
433
+ .map((s) => s.trim())
434
+ .filter(Boolean)
435
+ : null;
436
+
429
437
  await useCase.run({
430
438
  projectUrl,
431
439
  issueUrl: options.issueUrl,
432
440
  thresholdForAutoReject,
433
441
  workflowBlockerResolvedWebhookUrl,
442
+ allowedIssueAuthors,
434
443
  });
435
444
  });
436
445
 
@@ -174,6 +174,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
174
174
  issueUrl: 'https://github.com/user/repo/issues/1',
175
175
  thresholdForAutoReject: 3,
176
176
  workflowBlockerResolvedWebhookUrl: null,
177
+ allowedIssueAuthors: null,
177
178
  });
178
179
 
179
180
  expect(mockIssueRepository.update).toHaveBeenCalledTimes(1);
@@ -229,6 +230,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
229
230
  issueUrl: 'https://github.com/user/repo/issues/1',
230
231
  thresholdForAutoReject: 3,
231
232
  workflowBlockerResolvedWebhookUrl: null,
233
+ allowedIssueAuthors: null,
232
234
  });
233
235
 
234
236
  expect(mockIssueRepository.setDependedIssueUrl).toHaveBeenCalledWith(
@@ -248,6 +250,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
248
250
  issueUrl: 'https://github.com/user/repo/issues/999',
249
251
  thresholdForAutoReject: 3,
250
252
  workflowBlockerResolvedWebhookUrl: null,
253
+ allowedIssueAuthors: null,
251
254
  }),
252
255
  ).rejects.toThrow(
253
256
  'Issue not found: https://github.com/user/repo/issues/999',
@@ -269,6 +272,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
269
272
  issueUrl: 'https://github.com/user/repo/issues/1',
270
273
  thresholdForAutoReject: 3,
271
274
  workflowBlockerResolvedWebhookUrl: null,
275
+ allowedIssueAuthors: null,
272
276
  }),
273
277
  ).rejects.toThrow(
274
278
  'Illegal issue status for https://github.com/user/repo/issues/1: expected Preparation, but got Done',
@@ -293,6 +297,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
293
297
  issueUrl: 'https://github.com/user/repo/issues/1',
294
298
  thresholdForAutoReject: 3,
295
299
  workflowBlockerResolvedWebhookUrl: null,
300
+ allowedIssueAuthors: null,
296
301
  });
297
302
 
298
303
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -345,6 +350,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
345
350
  issueUrl: 'https://github.com/user/repo/issues/1',
346
351
  thresholdForAutoReject: 3,
347
352
  workflowBlockerResolvedWebhookUrl: null,
353
+ allowedIssueAuthors: null,
348
354
  });
349
355
 
350
356
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -372,6 +378,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
372
378
  issueUrl: 'https://github.com/user/repo/issues/1',
373
379
  thresholdForAutoReject: 3,
374
380
  workflowBlockerResolvedWebhookUrl: null,
381
+ allowedIssueAuthors: null,
375
382
  });
376
383
 
377
384
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -404,6 +411,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
404
411
  issueUrl: 'https://github.com/user/repo/issues/1',
405
412
  thresholdForAutoReject: 3,
406
413
  workflowBlockerResolvedWebhookUrl: null,
414
+ allowedIssueAuthors: null,
407
415
  });
408
416
 
409
417
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -451,6 +459,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
451
459
  issueUrl: 'https://github.com/user/repo/issues/1',
452
460
  thresholdForAutoReject: 3,
453
461
  workflowBlockerResolvedWebhookUrl: null,
462
+ allowedIssueAuthors: null,
454
463
  });
455
464
 
456
465
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -500,6 +509,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
500
509
  issueUrl: 'https://github.com/user/repo/issues/1',
501
510
  thresholdForAutoReject: 3,
502
511
  workflowBlockerResolvedWebhookUrl: null,
512
+ allowedIssueAuthors: null,
503
513
  });
504
514
 
505
515
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -547,6 +557,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
547
557
  issueUrl: 'https://github.com/user/repo/issues/1',
548
558
  thresholdForAutoReject: 3,
549
559
  workflowBlockerResolvedWebhookUrl: null,
560
+ allowedIssueAuthors: null,
550
561
  });
551
562
 
552
563
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -589,6 +600,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
589
600
  issueUrl: 'https://github.com/user/repo/issues/1',
590
601
  thresholdForAutoReject: 3,
591
602
  workflowBlockerResolvedWebhookUrl: null,
603
+ allowedIssueAuthors: null,
592
604
  });
593
605
 
594
606
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -631,6 +643,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
631
643
  issueUrl: 'https://github.com/user/repo/issues/1',
632
644
  thresholdForAutoReject: 3,
633
645
  workflowBlockerResolvedWebhookUrl: null,
646
+ allowedIssueAuthors: null,
634
647
  });
635
648
 
636
649
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -673,6 +686,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
673
686
  issueUrl: 'https://github.com/user/repo/issues/1',
674
687
  thresholdForAutoReject: 3,
675
688
  workflowBlockerResolvedWebhookUrl: null,
689
+ allowedIssueAuthors: null,
676
690
  });
677
691
 
678
692
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -701,6 +715,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
701
715
  issueUrl: 'https://github.com/user/repo/issues/1',
702
716
  thresholdForAutoReject: 3,
703
717
  workflowBlockerResolvedWebhookUrl: null,
718
+ allowedIssueAuthors: null,
704
719
  });
705
720
 
706
721
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -762,6 +777,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
762
777
  issueUrl: 'https://github.com/user/repo/issues/1',
763
778
  thresholdForAutoReject: 3,
764
779
  workflowBlockerResolvedWebhookUrl: null,
780
+ allowedIssueAuthors: null,
765
781
  });
766
782
 
767
783
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -814,6 +830,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
814
830
  issueUrl: 'https://github.com/user/repo/issues/1',
815
831
  thresholdForAutoReject: 3,
816
832
  workflowBlockerResolvedWebhookUrl: null,
833
+ allowedIssueAuthors: null,
817
834
  });
818
835
 
819
836
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -858,6 +875,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
858
875
  issueUrl: 'https://github.com/user/repo/issues/1',
859
876
  thresholdForAutoReject: 3,
860
877
  workflowBlockerResolvedWebhookUrl: null,
878
+ allowedIssueAuthors: null,
861
879
  });
862
880
 
863
881
  expect(mockIssueRepository.update).not.toHaveBeenCalledWith(
@@ -904,6 +922,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
904
922
  issueUrl: 'https://github.com/user/repo/issues/1',
905
923
  thresholdForAutoReject: 3,
906
924
  workflowBlockerResolvedWebhookUrl: null,
925
+ allowedIssueAuthors: null,
907
926
  });
908
927
 
909
928
  expect(mockIssueRepository.update).not.toHaveBeenCalledWith(
@@ -948,6 +967,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
948
967
  issueUrl: 'https://github.com/user/repo/issues/1',
949
968
  thresholdForAutoReject: 3,
950
969
  workflowBlockerResolvedWebhookUrl: null,
970
+ allowedIssueAuthors: null,
951
971
  });
952
972
 
953
973
  expect(mockIssueRepository.update).not.toHaveBeenCalledWith(
@@ -974,6 +994,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
974
994
  issueUrl: 'https://github.com/user/repo/issues/1',
975
995
  thresholdForAutoReject: 3,
976
996
  workflowBlockerResolvedWebhookUrl: null,
997
+ allowedIssueAuthors: null,
977
998
  });
978
999
 
979
1000
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1027,6 +1048,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1027
1048
  issueUrl: 'https://github.com/user/repo/issues/1',
1028
1049
  thresholdForAutoReject: 3,
1029
1050
  workflowBlockerResolvedWebhookUrl: null,
1051
+ allowedIssueAuthors: null,
1030
1052
  });
1031
1053
 
1032
1054
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1071,6 +1093,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1071
1093
  issueUrl: 'https://github.com/user/repo/issues/1',
1072
1094
  thresholdForAutoReject: 3,
1073
1095
  workflowBlockerResolvedWebhookUrl: null,
1096
+ allowedIssueAuthors: null,
1074
1097
  });
1075
1098
 
1076
1099
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1115,6 +1138,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1115
1138
  issueUrl: 'https://github.com/user/repo/issues/1',
1116
1139
  thresholdForAutoReject: 3,
1117
1140
  workflowBlockerResolvedWebhookUrl: null,
1141
+ allowedIssueAuthors: null,
1118
1142
  });
1119
1143
 
1120
1144
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1159,6 +1183,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1159
1183
  issueUrl: 'https://github.com/user/repo/issues/1',
1160
1184
  thresholdForAutoReject: 3,
1161
1185
  workflowBlockerResolvedWebhookUrl: null,
1186
+ allowedIssueAuthors: null,
1162
1187
  });
1163
1188
 
1164
1189
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1209,6 +1234,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1209
1234
  issueUrl: 'https://github.com/user/repo/issues/1',
1210
1235
  thresholdForAutoReject: 3,
1211
1236
  workflowBlockerResolvedWebhookUrl: null,
1237
+ allowedIssueAuthors: null,
1212
1238
  });
1213
1239
 
1214
1240
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1259,6 +1285,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1259
1285
  issueUrl: 'https://github.com/user/repo/issues/1',
1260
1286
  thresholdForAutoReject: 3,
1261
1287
  workflowBlockerResolvedWebhookUrl: null,
1288
+ allowedIssueAuthors: null,
1262
1289
  });
1263
1290
 
1264
1291
  expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
@@ -1297,6 +1324,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1297
1324
  issueUrl: 'https://github.com/user/repo/issues/1',
1298
1325
  thresholdForAutoReject: 3,
1299
1326
  workflowBlockerResolvedWebhookUrl: null,
1327
+ allowedIssueAuthors: null,
1300
1328
  });
1301
1329
 
1302
1330
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1342,6 +1370,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1342
1370
  issueUrl: 'https://github.com/user/repo/issues/1',
1343
1371
  thresholdForAutoReject: 3,
1344
1372
  workflowBlockerResolvedWebhookUrl: null,
1373
+ allowedIssueAuthors: null,
1345
1374
  });
1346
1375
 
1347
1376
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1377,6 +1406,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1377
1406
  issueUrl: 'https://github.com/user/repo/issues/1',
1378
1407
  thresholdForAutoReject: 3,
1379
1408
  workflowBlockerResolvedWebhookUrl: null,
1409
+ allowedIssueAuthors: null,
1380
1410
  });
1381
1411
 
1382
1412
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1416,6 +1446,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1416
1446
  issueUrl: 'https://github.com/user/repo/issues/1',
1417
1447
  thresholdForAutoReject: 3,
1418
1448
  workflowBlockerResolvedWebhookUrl: null,
1449
+ allowedIssueAuthors: null,
1419
1450
  });
1420
1451
 
1421
1452
  expect(mockIssueRepository.findRelatedOpenPRs).toHaveBeenCalled();
@@ -1448,6 +1479,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1448
1479
  issueUrl: 'https://github.com/user/repo/issues/1',
1449
1480
  thresholdForAutoReject: 3,
1450
1481
  workflowBlockerResolvedWebhookUrl: null,
1482
+ allowedIssueAuthors: null,
1451
1483
  });
1452
1484
 
1453
1485
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1483,6 +1515,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1483
1515
  issueUrl: 'https://github.com/user/repo/issues/1',
1484
1516
  thresholdForAutoReject: 3,
1485
1517
  workflowBlockerResolvedWebhookUrl: null,
1518
+ allowedIssueAuthors: null,
1486
1519
  });
1487
1520
 
1488
1521
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1510,6 +1543,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1510
1543
  issueUrl: 'https://github.com/user/repo/issues/1',
1511
1544
  thresholdForAutoReject: 3,
1512
1545
  workflowBlockerResolvedWebhookUrl: null,
1546
+ allowedIssueAuthors: null,
1513
1547
  });
1514
1548
 
1515
1549
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1539,6 +1573,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1539
1573
  issueUrl: 'https://github.com/user/repo/issues/1',
1540
1574
  thresholdForAutoReject: 3,
1541
1575
  workflowBlockerResolvedWebhookUrl: null,
1576
+ allowedIssueAuthors: null,
1542
1577
  });
1543
1578
 
1544
1579
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -1578,6 +1613,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1578
1613
  issueUrl: 'https://github.com/user/repo/pull/10',
1579
1614
  thresholdForAutoReject: 3,
1580
1615
  workflowBlockerResolvedWebhookUrl: null,
1616
+ allowedIssueAuthors: null,
1581
1617
  });
1582
1618
 
1583
1619
  expect(mockIssueRepository.getOpenPullRequest).toHaveBeenCalledWith(
@@ -1620,6 +1656,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1620
1656
  issueUrl: 'https://github.com/user/repo/issues/1',
1621
1657
  thresholdForAutoReject: 3,
1622
1658
  workflowBlockerResolvedWebhookUrl: null,
1659
+ allowedIssueAuthors: null,
1623
1660
  });
1624
1661
 
1625
1662
  expect(mockIssueRepository.setDependedIssueUrl).toHaveBeenCalledWith(
@@ -1658,6 +1695,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1658
1695
  issueUrl: 'https://github.com/user/repo/issues/1',
1659
1696
  thresholdForAutoReject: 3,
1660
1697
  workflowBlockerResolvedWebhookUrl: null,
1698
+ allowedIssueAuthors: null,
1661
1699
  });
1662
1700
 
1663
1701
  expect(mockIssueRepository.setDependedIssueUrl).toHaveBeenCalledWith(
@@ -1706,6 +1744,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1706
1744
  issueUrl: 'https://github.com/user/repo/issues/1',
1707
1745
  thresholdForAutoReject: 3,
1708
1746
  workflowBlockerResolvedWebhookUrl: null,
1747
+ allowedIssueAuthors: null,
1709
1748
  });
1710
1749
 
1711
1750
  expect(mockIssueRepository.setDependedIssueUrl).toHaveBeenCalledWith(
@@ -1751,6 +1790,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1751
1790
  issueUrl: 'https://github.com/user/repo/issues/1',
1752
1791
  thresholdForAutoReject: 3,
1753
1792
  workflowBlockerResolvedWebhookUrl: null,
1793
+ allowedIssueAuthors: null,
1754
1794
  });
1755
1795
 
1756
1796
  expect(mockIssueRepository.setDependedIssueUrl).toHaveBeenCalledTimes(1);
@@ -1798,6 +1838,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1798
1838
  issueUrl: 'https://github.com/user/repo/issues/1',
1799
1839
  thresholdForAutoReject: 3,
1800
1840
  workflowBlockerResolvedWebhookUrl: null,
1841
+ allowedIssueAuthors: null,
1801
1842
  });
1802
1843
 
1803
1844
  expect(consoleWarnSpy).toHaveBeenCalledWith(
@@ -1880,6 +1921,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1880
1921
  thresholdForAutoReject: 3,
1881
1922
  workflowBlockerResolvedWebhookUrl:
1882
1923
  'https://example.com/webhook?url={URL}&msg={MESSAGE}',
1924
+ allowedIssueAuthors: null,
1883
1925
  });
1884
1926
 
1885
1927
  expect(mockWebhookRepository.sendGetRequest).toHaveBeenCalledWith(
@@ -1919,6 +1961,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1919
1961
  thresholdForAutoReject: 3,
1920
1962
  workflowBlockerResolvedWebhookUrl:
1921
1963
  'https://example.com/notify={MESSAGE}',
1964
+ allowedIssueAuthors: null,
1922
1965
  });
1923
1966
 
1924
1967
  expect(mockWebhookRepository.sendGetRequest).toHaveBeenCalledTimes(1);
@@ -1959,6 +2002,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1959
2002
  thresholdForAutoReject: 3,
1960
2003
  workflowBlockerResolvedWebhookUrl:
1961
2004
  'https://example.com/webhook?msg={MESSAGE}',
2005
+ allowedIssueAuthors: null,
1962
2006
  });
1963
2007
 
1964
2008
  expect(mockWebhookRepository.sendGetRequest).not.toHaveBeenCalled();
@@ -1992,6 +2036,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
1992
2036
  issueUrl: 'https://github.com/user/repo/issues/1',
1993
2037
  thresholdForAutoReject: 3,
1994
2038
  workflowBlockerResolvedWebhookUrl: null,
2039
+ allowedIssueAuthors: null,
1995
2040
  });
1996
2041
 
1997
2042
  expect(mockWebhookRepository.sendGetRequest).not.toHaveBeenCalled();
@@ -2036,6 +2081,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
2036
2081
  thresholdForAutoReject: 3,
2037
2082
  workflowBlockerResolvedWebhookUrl:
2038
2083
  'https://example.com/webhook?msg={MESSAGE}',
2084
+ allowedIssueAuthors: null,
2039
2085
  });
2040
2086
 
2041
2087
  expect(consoleWarnSpy).toHaveBeenCalledWith(
@@ -2086,6 +2132,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
2086
2132
  thresholdForAutoReject: 3,
2087
2133
  workflowBlockerResolvedWebhookUrl:
2088
2134
  'https://example.com/runTasker/notify=:={MESSAGE}',
2135
+ allowedIssueAuthors: null,
2089
2136
  });
2090
2137
 
2091
2138
  expect(mockWebhookRepository.sendGetRequest).toHaveBeenCalledTimes(1);
@@ -2137,6 +2184,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
2137
2184
  issueUrl: 'https://github.com/user/repo/issues/1',
2138
2185
  thresholdForAutoReject: 3,
2139
2186
  workflowBlockerResolvedWebhookUrl: null,
2187
+ allowedIssueAuthors: null,
2140
2188
  });
2141
2189
 
2142
2190
  expect(consoleWarnSpy).toHaveBeenCalledWith(
@@ -2170,6 +2218,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
2170
2218
  issueUrl: 'https://github.com/user/repo/pull/10',
2171
2219
  thresholdForAutoReject: 3,
2172
2220
  workflowBlockerResolvedWebhookUrl: null,
2221
+ allowedIssueAuthors: null,
2173
2222
  });
2174
2223
 
2175
2224
  expect(mockIssueRepository.getOpenPullRequest).toHaveBeenCalledWith(
@@ -2215,6 +2264,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
2215
2264
  issueUrl: 'https://github.com/user/repo/issues/1',
2216
2265
  thresholdForAutoReject: 3,
2217
2266
  workflowBlockerResolvedWebhookUrl: null,
2267
+ allowedIssueAuthors: null,
2218
2268
  });
2219
2269
 
2220
2270
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -2253,6 +2303,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
2253
2303
  issueUrl: 'https://github.com/user/repo/issues/1',
2254
2304
  thresholdForAutoReject: 3,
2255
2305
  workflowBlockerResolvedWebhookUrl: null,
2306
+ allowedIssueAuthors: null,
2256
2307
  });
2257
2308
 
2258
2309
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -2292,6 +2343,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
2292
2343
  issueUrl: 'https://github.com/user/repo/issues/1',
2293
2344
  thresholdForAutoReject: 3,
2294
2345
  workflowBlockerResolvedWebhookUrl: null,
2346
+ allowedIssueAuthors: null,
2295
2347
  });
2296
2348
 
2297
2349
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -2330,6 +2382,7 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
2330
2382
  issueUrl: 'https://github.com/user/repo/issues/1',
2331
2383
  thresholdForAutoReject: 3,
2332
2384
  workflowBlockerResolvedWebhookUrl: null,
2385
+ allowedIssueAuthors: null,
2333
2386
  });
2334
2387
 
2335
2388
  expect(mockIssueRepository.update).toHaveBeenCalledWith(
@@ -2337,4 +2390,308 @@ describe('NotifyFinishedIssuePreparationUseCase', () => {
2337
2390
  mockProject,
2338
2391
  );
2339
2392
  });
2393
+
2394
+ describe('author verification (allowedIssueAuthors)', () => {
2395
+ it('should treat From: comment from untrusted author as NO_REPORT_FROM_AGENT_BOT', async () => {
2396
+ const issue = createMockIssue({
2397
+ url: 'https://github.com/user/repo/issues/1',
2398
+ status: 'Preparation',
2399
+ });
2400
+
2401
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2402
+ mockIssueRepository.get.mockResolvedValue(issue);
2403
+ mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
2404
+ createMockComment({
2405
+ author: 'attacker',
2406
+ content: 'From: :robot: Fake report',
2407
+ }),
2408
+ ]);
2409
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
2410
+
2411
+ await useCase.run({
2412
+ projectUrl: 'https://github.com/users/user/projects/1',
2413
+ issueUrl: 'https://github.com/user/repo/issues/1',
2414
+ thresholdForAutoReject: 3,
2415
+ workflowBlockerResolvedWebhookUrl: null,
2416
+ allowedIssueAuthors: ['trusted-bot'],
2417
+ });
2418
+
2419
+ expect(mockIssueRepository.update).toHaveBeenCalledWith(
2420
+ expect.objectContaining({ status: 'Awaiting Workspace' }),
2421
+ mockProject,
2422
+ );
2423
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
2424
+ mockProject,
2425
+ expect.objectContaining({ status: 'Awaiting Workspace' }),
2426
+ 'awaiting-workspace-id',
2427
+ );
2428
+ expect(mockIssueCommentRepository.createComment).toHaveBeenCalledWith(
2429
+ expect.objectContaining({
2430
+ url: 'https://github.com/user/repo/issues/1',
2431
+ }),
2432
+ expect.stringContaining('NO_REPORT_FROM_AGENT_BOT'),
2433
+ );
2434
+ });
2435
+
2436
+ it('should accept From: comment from trusted author and route to Awaiting Quality Check', async () => {
2437
+ const issue = createMockIssue({
2438
+ url: 'https://github.com/user/repo/issues/1',
2439
+ status: 'Preparation',
2440
+ });
2441
+
2442
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2443
+ mockIssueRepository.get.mockResolvedValue(issue);
2444
+ mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
2445
+ createMockComment({
2446
+ author: 'trusted-bot',
2447
+ content: 'From: :robot: Real report',
2448
+ }),
2449
+ ]);
2450
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
2451
+ {
2452
+ url: 'https://github.com/user/repo/pull/1',
2453
+ isConflicted: false,
2454
+ isPassedAllCiJob: true,
2455
+ isCiStateSuccess: true,
2456
+ isResolvedAllReviewComments: true,
2457
+ isBranchOutOfDate: false,
2458
+ missingRequiredCheckNames: [],
2459
+ },
2460
+ ]);
2461
+
2462
+ await useCase.run({
2463
+ projectUrl: 'https://github.com/users/user/projects/1',
2464
+ issueUrl: 'https://github.com/user/repo/issues/1',
2465
+ thresholdForAutoReject: 3,
2466
+ workflowBlockerResolvedWebhookUrl: null,
2467
+ allowedIssueAuthors: ['trusted-bot'],
2468
+ });
2469
+
2470
+ expect(mockIssueRepository.update).toHaveBeenCalledWith(
2471
+ expect.objectContaining({ status: 'Awaiting Quality Check' }),
2472
+ mockProject,
2473
+ );
2474
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
2475
+ mockProject,
2476
+ expect.objectContaining({ status: 'Awaiting Quality Check' }),
2477
+ 'awaiting-quality-check-id',
2478
+ );
2479
+ });
2480
+
2481
+ it('should not auto-escalate to Failed Preparation when REJECTED comments come from untrusted authors', async () => {
2482
+ const issue = createMockIssue({
2483
+ url: 'https://github.com/user/repo/issues/1',
2484
+ status: 'Preparation',
2485
+ });
2486
+
2487
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2488
+ mockIssueRepository.get.mockResolvedValue(issue);
2489
+ mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
2490
+ createMockComment({
2491
+ author: 'attacker',
2492
+ content: 'Auto Status Check: REJECTED - first',
2493
+ }),
2494
+ createMockComment({
2495
+ author: 'attacker',
2496
+ content: 'Auto Status Check: REJECTED - second',
2497
+ }),
2498
+ createMockComment({
2499
+ author: 'attacker',
2500
+ content: 'Auto Status Check: REJECTED - third',
2501
+ }),
2502
+ ]);
2503
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
2504
+
2505
+ await useCase.run({
2506
+ projectUrl: 'https://github.com/users/user/projects/1',
2507
+ issueUrl: 'https://github.com/user/repo/issues/1',
2508
+ thresholdForAutoReject: 3,
2509
+ workflowBlockerResolvedWebhookUrl: null,
2510
+ allowedIssueAuthors: ['trusted-bot'],
2511
+ });
2512
+
2513
+ expect(mockIssueRepository.update).not.toHaveBeenCalledWith(
2514
+ expect.objectContaining({ status: 'Failed Preparation' }),
2515
+ mockProject,
2516
+ );
2517
+ expect(mockIssueRepository.updateStatus).not.toHaveBeenCalledWith(
2518
+ mockProject,
2519
+ expect.anything(),
2520
+ 'failed-preparation-id',
2521
+ );
2522
+ expect(mockIssueRepository.update).toHaveBeenCalledWith(
2523
+ expect.objectContaining({ status: 'Awaiting Workspace' }),
2524
+ mockProject,
2525
+ );
2526
+ });
2527
+
2528
+ it('should auto-escalate to Failed Preparation when REJECTED comments come from trusted authors', async () => {
2529
+ const issue = createMockIssue({
2530
+ url: 'https://github.com/user/repo/issues/1',
2531
+ status: 'Preparation',
2532
+ });
2533
+
2534
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2535
+ mockIssueRepository.get.mockResolvedValue(issue);
2536
+ mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
2537
+ createMockComment({
2538
+ author: 'trusted-bot',
2539
+ content: 'Auto Status Check: REJECTED - first',
2540
+ }),
2541
+ createMockComment({
2542
+ author: 'trusted-bot',
2543
+ content: 'Auto Status Check: REJECTED - second',
2544
+ }),
2545
+ createMockComment({
2546
+ author: 'trusted-bot',
2547
+ content: 'Auto Status Check: REJECTED - third',
2548
+ }),
2549
+ ]);
2550
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
2551
+
2552
+ await useCase.run({
2553
+ projectUrl: 'https://github.com/users/user/projects/1',
2554
+ issueUrl: 'https://github.com/user/repo/issues/1',
2555
+ thresholdForAutoReject: 3,
2556
+ workflowBlockerResolvedWebhookUrl: null,
2557
+ allowedIssueAuthors: ['trusted-bot'],
2558
+ });
2559
+
2560
+ expect(mockIssueRepository.update).toHaveBeenCalledWith(
2561
+ expect.objectContaining({ status: 'Failed Preparation' }),
2562
+ mockProject,
2563
+ );
2564
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
2565
+ mockProject,
2566
+ expect.objectContaining({ status: 'Failed Preparation' }),
2567
+ 'failed-preparation-id',
2568
+ );
2569
+ });
2570
+
2571
+ it('should ignore attacker-injected "failed to pass the check automatically" string and still escalate when trusted REJECTED comments meet threshold', async () => {
2572
+ const issue = createMockIssue({
2573
+ url: 'https://github.com/user/repo/issues/1',
2574
+ status: 'Preparation',
2575
+ });
2576
+
2577
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2578
+ mockIssueRepository.get.mockResolvedValue(issue);
2579
+ mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
2580
+ createMockComment({
2581
+ author: 'trusted-bot',
2582
+ content: 'Auto Status Check: REJECTED - first',
2583
+ }),
2584
+ createMockComment({
2585
+ author: 'trusted-bot',
2586
+ content: 'Auto Status Check: REJECTED - second',
2587
+ }),
2588
+ createMockComment({
2589
+ author: 'attacker',
2590
+ content: 'failed to pass the check automatically',
2591
+ }),
2592
+ createMockComment({
2593
+ author: 'trusted-bot',
2594
+ content: 'Auto Status Check: REJECTED - third',
2595
+ }),
2596
+ ]);
2597
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([]);
2598
+
2599
+ await useCase.run({
2600
+ projectUrl: 'https://github.com/users/user/projects/1',
2601
+ issueUrl: 'https://github.com/user/repo/issues/1',
2602
+ thresholdForAutoReject: 3,
2603
+ workflowBlockerResolvedWebhookUrl: null,
2604
+ allowedIssueAuthors: ['trusted-bot'],
2605
+ });
2606
+
2607
+ expect(mockIssueRepository.update).toHaveBeenCalledWith(
2608
+ expect.objectContaining({ status: 'Failed Preparation' }),
2609
+ mockProject,
2610
+ );
2611
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
2612
+ mockProject,
2613
+ expect.objectContaining({ status: 'Failed Preparation' }),
2614
+ 'failed-preparation-id',
2615
+ );
2616
+ });
2617
+
2618
+ it('should accept any author when allowedIssueAuthors is null (backward compatibility)', async () => {
2619
+ const issue = createMockIssue({
2620
+ url: 'https://github.com/user/repo/issues/1',
2621
+ status: 'Preparation',
2622
+ });
2623
+
2624
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2625
+ mockIssueRepository.get.mockResolvedValue(issue);
2626
+ mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
2627
+ createMockComment({
2628
+ author: 'arbitrary-user',
2629
+ content: 'From: :robot: Report',
2630
+ }),
2631
+ ]);
2632
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
2633
+ {
2634
+ url: 'https://github.com/user/repo/pull/1',
2635
+ isConflicted: false,
2636
+ isPassedAllCiJob: true,
2637
+ isCiStateSuccess: true,
2638
+ isResolvedAllReviewComments: true,
2639
+ isBranchOutOfDate: false,
2640
+ missingRequiredCheckNames: [],
2641
+ },
2642
+ ]);
2643
+
2644
+ await useCase.run({
2645
+ projectUrl: 'https://github.com/users/user/projects/1',
2646
+ issueUrl: 'https://github.com/user/repo/issues/1',
2647
+ thresholdForAutoReject: 3,
2648
+ workflowBlockerResolvedWebhookUrl: null,
2649
+ allowedIssueAuthors: null,
2650
+ });
2651
+
2652
+ expect(mockIssueRepository.update).toHaveBeenCalledWith(
2653
+ expect.objectContaining({ status: 'Awaiting Quality Check' }),
2654
+ mockProject,
2655
+ );
2656
+ });
2657
+
2658
+ it('should accept any author when allowedIssueAuthors is omitted (backward compatibility)', async () => {
2659
+ const issue = createMockIssue({
2660
+ url: 'https://github.com/user/repo/issues/1',
2661
+ status: 'Preparation',
2662
+ });
2663
+
2664
+ mockProjectRepository.getByUrl.mockResolvedValue(mockProject);
2665
+ mockIssueRepository.get.mockResolvedValue(issue);
2666
+ mockIssueCommentRepository.getCommentsFromIssue.mockResolvedValue([
2667
+ createMockComment({
2668
+ author: 'arbitrary-user',
2669
+ content: 'From: :robot: Report',
2670
+ }),
2671
+ ]);
2672
+ mockIssueRepository.findRelatedOpenPRs.mockResolvedValue([
2673
+ {
2674
+ url: 'https://github.com/user/repo/pull/1',
2675
+ isConflicted: false,
2676
+ isPassedAllCiJob: true,
2677
+ isCiStateSuccess: true,
2678
+ isResolvedAllReviewComments: true,
2679
+ isBranchOutOfDate: false,
2680
+ missingRequiredCheckNames: [],
2681
+ },
2682
+ ]);
2683
+
2684
+ await useCase.run({
2685
+ projectUrl: 'https://github.com/users/user/projects/1',
2686
+ issueUrl: 'https://github.com/user/repo/issues/1',
2687
+ thresholdForAutoReject: 3,
2688
+ workflowBlockerResolvedWebhookUrl: null,
2689
+ });
2690
+
2691
+ expect(mockIssueRepository.update).toHaveBeenCalledWith(
2692
+ expect.objectContaining({ status: 'Awaiting Quality Check' }),
2693
+ mockProject,
2694
+ );
2695
+ });
2696
+ });
2340
2697
  });
@@ -68,6 +68,7 @@ export class NotifyFinishedIssuePreparationUseCase {
68
68
  issueUrl: string;
69
69
  thresholdForAutoReject: number;
70
70
  workflowBlockerResolvedWebhookUrl: string | null;
71
+ allowedIssueAuthors?: string[] | null;
71
72
  }): Promise<void> => {
72
73
  const project = await this.projectRepository.getByUrl(params.projectUrl);
73
74
 
@@ -167,7 +168,14 @@ export class NotifyFinishedIssuePreparationUseCase {
167
168
  const comments =
168
169
  await this.issueCommentRepository.getCommentsFromIssue(issue);
169
170
 
170
- const { rejections } = await this.collectRejections(issue, comments);
171
+ const isTrustedAuthor = (author: string): boolean =>
172
+ this.isAuthorTrusted(author, params.allowedIssueAuthors ?? null);
173
+
174
+ const { rejections } = await this.collectRejections(
175
+ issue,
176
+ comments,
177
+ isTrustedAuthor,
178
+ );
171
179
 
172
180
  const rejectionStatusMessage =
173
181
  rejections.length > 0
@@ -179,13 +187,17 @@ export class NotifyFinishedIssuePreparationUseCase {
179
187
  );
180
188
  if (
181
189
  rejections.length > 0 &&
182
- lastTargetComments.filter((comment) =>
183
- comment.content.startsWith('Auto Status Check: REJECTED'),
190
+ lastTargetComments.filter(
191
+ (comment) =>
192
+ comment.content.startsWith('Auto Status Check: REJECTED') &&
193
+ isTrustedAuthor(comment.author),
184
194
  ).length >= params.thresholdForAutoReject &&
185
- !lastTargetComments.some((comment) =>
186
- comment.content
187
- .toLowerCase()
188
- .includes('failed to pass the check automatically'),
195
+ !lastTargetComments.some(
196
+ (comment) =>
197
+ comment.content
198
+ .toLowerCase()
199
+ .includes('failed to pass the check automatically') &&
200
+ isTrustedAuthor(comment.author),
189
201
  )
190
202
  ) {
191
203
  issue.status = FAILED_PREPARATION_STATUS_NAME;
@@ -253,9 +265,16 @@ export class NotifyFinishedIssuePreparationUseCase {
253
265
  );
254
266
  };
255
267
 
268
+ private isAuthorTrusted = (
269
+ author: string,
270
+ allowedIssueAuthors: string[] | null,
271
+ ): boolean =>
272
+ allowedIssueAuthors === null || allowedIssueAuthors.includes(author);
273
+
256
274
  private collectRejections = async (
257
275
  issue: { url: string; labels: string[]; isPr: boolean },
258
- comments: { content: string }[],
276
+ comments: { author: string; content: string }[],
277
+ isTrustedAuthor: (author: string) => boolean,
259
278
  ): Promise<{
260
279
  rejections: { type: RejectedReasonType; detail: string }[];
261
280
  approvedPrUrl: string | null;
@@ -263,7 +282,11 @@ export class NotifyFinishedIssuePreparationUseCase {
263
282
  const rejections: { type: RejectedReasonType; detail: string }[] = [];
264
283
 
265
284
  const lastComment = comments[comments.length - 1];
266
- if (!lastComment || !lastComment.content.startsWith('From: :robot:')) {
285
+ if (
286
+ !lastComment ||
287
+ !isTrustedAuthor(lastComment.author) ||
288
+ !lastComment.content.startsWith('From: :robot:')
289
+ ) {
267
290
  rejections.push({
268
291
  type: 'NO_REPORT_FROM_AGENT_BOT',
269
292
  detail: 'NO_REPORT_FROM_AGENT_BOT',
@@ -20,7 +20,9 @@ export declare class NotifyFinishedIssuePreparationUseCase {
20
20
  issueUrl: string;
21
21
  thresholdForAutoReject: number;
22
22
  workflowBlockerResolvedWebhookUrl: string | null;
23
+ allowedIssueAuthors?: string[] | null;
23
24
  }) => Promise<void>;
25
+ private isAuthorTrusted;
24
26
  private collectRejections;
25
27
  private reportBodyHasNextStep;
26
28
  private setDependedIssueUrlForAllOpenPRs;
@@ -1 +1 @@
1
- {"version":3,"file":"NotifyFinishedIssuePreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAY3E,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,QAAQ,EAAE,MAAM;CAI7B;AACD,qBAAa,uBAAwB,SAAQ,KAAK;gBAE9C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,cAAc,EAAE,MAAM,GAAG,IAAI;CAOhC;AAMD,qBAAa,qCAAqC;IAI9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAUhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAIvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAlBpC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;gBAG/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACtD,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,KAAK,GACL,QAAQ,GACR,cAAc,GACd,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,CACxB,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,sBAAsB,GAAG,eAAe,CACzC,EACgB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,gBAAgB,CACjB;IAKH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,iCAAiC,EAAE,MAAM,GAAG,IAAI,CAAC;KAClD,KAAG,OAAO,CAAC,IAAI,CAAC,CAuLf;IAEF,OAAO,CAAC,iBAAiB,CAyBvB;IAEF,OAAO,CAAC,qBAAqB,CAuB3B;IAEF,OAAO,CAAC,gCAAgC,CAiBtC;IAEF,OAAO,CAAC,uBAAuB,CAQ7B;IAEF,OAAO,CAAC,+BAA+B,CAkCrC;CACH"}
1
+ {"version":3,"file":"NotifyFinishedIssuePreparationUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/NotifyFinishedIssuePreparationUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAY3E,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,QAAQ,EAAE,MAAM;CAI7B;AACD,qBAAa,uBAAwB,SAAQ,KAAK;gBAE9C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GAAG,IAAI,EAC5B,cAAc,EAAE,MAAM,GAAG,IAAI;CAOhC;AAMD,qBAAa,qCAAqC;IAI9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAUhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAIvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAlBpC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;gBAG/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EACtD,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,KAAK,GACL,QAAQ,GACR,cAAc,GACd,oBAAoB,GACpB,mBAAmB,GACnB,oBAAoB,GACpB,qBAAqB,CACxB,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,sBAAsB,GAAG,eAAe,CACzC,EACgB,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,gBAAgB,CACjB;IAKH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,sBAAsB,EAAE,MAAM,CAAC;QAC/B,iCAAiC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjD,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACvC,KAAG,OAAO,CAAC,IAAI,CAAC,CAkMf;IAEF,OAAO,CAAC,eAAe,CAIgD;IAEvE,OAAO,CAAC,iBAAiB,CA8BvB;IAEF,OAAO,CAAC,qBAAqB,CAuB3B;IAEF,OAAO,CAAC,gCAAgC,CAiBtC;IAEF,OAAO,CAAC,uBAAuB,CAQ7B;IAEF,OAAO,CAAC,+BAA+B,CAkCrC;CACH"}