github-issue-tower-defence-management 1.153.5 → 1.154.0

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 (35) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js +187 -6
  3. package/bin/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.js.map +1 -1
  4. package/bin/adapter/repositories/issue/RestIssueRepository.js +6 -0
  5. package/bin/adapter/repositories/issue/RestIssueRepository.js.map +1 -1
  6. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js +10 -16
  7. package/bin/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.js.map +1 -1
  8. package/bin/domain/usecases/IssueRejectionEvaluator.js +28 -11
  9. package/bin/domain/usecases/IssueRejectionEvaluator.js.map +1 -1
  10. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +15 -3
  11. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
  12. package/package.json +1 -1
  13. package/src/adapter/entry-points/console/ui/e2e/consoleTestHarness.ts +14 -0
  14. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.test.ts +252 -0
  15. package/src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts +288 -6
  16. package/src/adapter/repositories/issue/RestIssueRepository.test.ts +19 -0
  17. package/src/adapter/repositories/issue/RestIssueRepository.ts +13 -0
  18. package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.test.ts +211 -200
  19. package/src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.ts +13 -18
  20. package/src/domain/usecases/IssueRejectionEvaluator.ts +49 -15
  21. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +154 -0
  22. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +33 -5
  23. package/src/domain/usecases/adapter-interfaces/IssueRepository.ts +8 -0
  24. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts +9 -2
  25. package/types/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.d.ts.map +1 -1
  26. package/types/adapter/repositories/issue/RestIssueRepository.d.ts +1 -0
  27. package/types/adapter/repositories/issue/RestIssueRepository.d.ts.map +1 -1
  28. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts +2 -2
  29. package/types/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.d.ts.map +1 -1
  30. package/types/domain/usecases/IssueRejectionEvaluator.d.ts +6 -1
  31. package/types/domain/usecases/IssueRejectionEvaluator.d.ts.map +1 -1
  32. package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts +1 -1
  33. package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
  34. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts +3 -0
  35. package/types/domain/usecases/adapter-interfaces/IssueRepository.d.ts.map +1 -1
@@ -11,9 +11,10 @@ export class ConvertCheckboxToIssueInStoryIssueUseCase {
11
11
  readonly issueRepository: Pick<
12
12
  IssueRepository,
13
13
  | 'createNewIssue'
14
- | 'updateIssue'
14
+ | 'updateIssueBody'
15
15
  | 'updateStory'
16
16
  | 'getIssueByUrl'
17
+ | 'getIssueBodyByUrl'
17
18
  | 'addIssueToProject'
18
19
  >,
19
20
  ) {}
@@ -62,25 +63,22 @@ export class ConvertCheckboxToIssueInStoryIssueUseCase {
62
63
  if (noCheckboxWorkFollows && storyViewLinkAlreadyOnFirstLine) {
63
64
  continue;
64
65
  }
65
- const freshStoryIssue = await this.issueRepository.getIssueByUrl(
66
+ const freshStoryBody = await this.issueRepository.getIssueBodyByUrl(
66
67
  storyIssue.url,
67
68
  );
68
- if (!freshStoryIssue) {
69
+ if (freshStoryBody === null) {
69
70
  console.warn(
70
71
  `ConvertCheckboxToIssueInStoryIssueUseCase: story issue not found by URL (possibly deleted), skipping story. storyIssueUrl: ${storyIssue.url}`,
71
72
  );
72
73
  continue;
73
74
  }
74
75
  let newBody = this.bodyWithStoryViewLinkOnFirstLine(
75
- freshStoryIssue.body,
76
+ freshStoryBody,
76
77
  input.urlOfStoryView,
77
78
  storyOption.name,
78
79
  );
79
- if (newBody !== freshStoryIssue.body) {
80
- await this.issueRepository.updateIssue({
81
- ...freshStoryIssue,
82
- body: newBody,
83
- });
80
+ if (newBody !== freshStoryBody) {
81
+ await this.issueRepository.updateIssueBody(storyIssue, newBody);
84
82
  }
85
83
  if (iced || !input.createTaskFromStoryBodyCheckboxEnabled) {
86
84
  continue;
@@ -93,26 +91,23 @@ export class ConvertCheckboxToIssueInStoryIssueUseCase {
93
91
  for (const checkboxText of checkboxTextsNotCreatedIssue) {
94
92
  const issueTitle = checkboxText.replace(
95
93
  'STORYNAME',
96
- `${storyOption.name} #${freshStoryIssue.number}`,
94
+ `${storyOption.name} #${storyIssue.number}`,
97
95
  );
98
- const newIssueBody = `- Parent issue: ${freshStoryIssue.url}`;
96
+ const newIssueBody = `- Parent issue: ${storyIssue.url}`;
99
97
  const newIssueNumber = await this.issueRepository.createNewIssue(
100
- freshStoryIssue.org,
101
- freshStoryIssue.repo,
98
+ storyIssue.org,
99
+ storyIssue.repo,
102
100
  issueTitle,
103
101
  newIssueBody,
104
102
  [input.manager],
105
103
  [],
106
104
  );
107
- const newIssueUrl = `https://github.com/${freshStoryIssue.org}/${freshStoryIssue.repo}/issues/${newIssueNumber}`;
105
+ const newIssueUrl = `https://github.com/${storyIssue.org}/${storyIssue.repo}/issues/${newIssueNumber}`;
108
106
  newBody = newBody.replace(
109
107
  `- [ ] ${checkboxText}`,
110
108
  `- [ ] ${newIssueUrl}`,
111
109
  );
112
- await this.issueRepository.updateIssue({
113
- ...freshStoryIssue,
114
- body: newBody,
115
- });
110
+ await this.issueRepository.updateIssueBody(storyIssue, newBody);
116
111
  await this.issueRepository.addIssueToProject(
117
112
  input.project,
118
113
  newIssueUrl,
@@ -27,6 +27,12 @@ export type EvaluateOptions = {
27
27
  // closingIssueReferenceUrls, eliminating the per-issue timeline fan-out.
28
28
  // When null or undefined, behaviour is unchanged: findRelatedOpenPRs runs.
29
29
  relatedOpenPrUrls?: string[] | null;
30
+ // Pull request states the caller already resolved in one batched query for
31
+ // the whole cycle. A URL present as a key is taken from here and costs no
32
+ // further request; a URL absent from the map falls back to the per-URL
33
+ // getOpenPullRequest call, which keeps the transient-failure handling that
34
+ // distinguishes an unknown state from an absent pull request.
35
+ resolvedOpenPrByUrl?: ReadonlyMap<string, RelatedPullRequest | null> | null;
30
36
  };
31
37
 
32
38
  export class IssueRejectionEvaluator {
@@ -53,26 +59,16 @@ export class IssueRejectionEvaluator {
53
59
  const rejections: { type: PrRejectedReasonType; detail: string }[] = [];
54
60
  let approvedPrUrl: string | null = null;
55
61
 
56
- const categoryLabels = issue.labels.filter((label) =>
57
- label.startsWith('category:'),
58
- );
59
- const hasLlmAgentLabel = issue.labels.some(
60
- (l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
61
- );
62
- const hasLabelNotRequiringPullRequest = issue.labels.some((label) =>
63
- labelsNotRequiringPullRequest.includes(label),
64
- );
65
-
66
62
  if (
67
- !hasLlmAgentLabel &&
68
- !hasLabelNotRequiringPullRequest &&
69
- this.isPullRequestRequiredByBody(issue.body) &&
70
- (categoryLabels.length <= 0 || categoryLabels.includes('category:e2e'))
63
+ this.requiresPullRequestEvaluation(issue, labelsNotRequiringPullRequest)
71
64
  ) {
72
65
  let prsToCheck: RelatedPullRequest[];
73
66
  let anyPrResolutionFailed = false;
74
67
  if (issue.isPr) {
75
- const resolved = await this.resolveOpenPrsForPrItem(issue.url);
68
+ const resolved = await this.resolveOpenPrsForPrItem(
69
+ issue.url,
70
+ options.resolvedOpenPrByUrl ?? null,
71
+ );
76
72
  if (resolved === null) {
77
73
  // getOpenPullRequest failed transiently: the PR's state is unknown
78
74
  // for this cycle, so skip it without emitting any rejection.
@@ -82,6 +78,7 @@ export class IssueRejectionEvaluator {
82
78
  } else if (options.relatedOpenPrUrls != null) {
83
79
  const resolved = await this.resolveOpenPrsFromUrls(
84
80
  options.relatedOpenPrUrls,
81
+ options.resolvedOpenPrByUrl ?? null,
85
82
  );
86
83
  prsToCheck = resolved.prs;
87
84
  anyPrResolutionFailed = resolved.anyResolutionFailed;
@@ -185,12 +182,41 @@ export class IssueRejectionEvaluator {
185
182
  return { rejections, approvedPrUrl };
186
183
  };
187
184
 
185
+ // Whether this item's pull requests are looked at at all. A caller that
186
+ // resolves pull request state in one batch for a whole cycle asks this first,
187
+ // so the batch covers exactly the items evaluate would have resolved.
188
+ requiresPullRequestEvaluation = (
189
+ issue: { labels: string[]; body?: string | null },
190
+ labelsNotRequiringPullRequest: string[] = [],
191
+ ): boolean => {
192
+ const categoryLabels = issue.labels.filter((label) =>
193
+ label.startsWith('category:'),
194
+ );
195
+ const hasLlmAgentLabel = issue.labels.some(
196
+ (l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
197
+ );
198
+ const hasLabelNotRequiringPullRequest = issue.labels.some((label) =>
199
+ labelsNotRequiringPullRequest.includes(label),
200
+ );
201
+ return (
202
+ !hasLlmAgentLabel &&
203
+ !hasLabelNotRequiringPullRequest &&
204
+ this.isPullRequestRequiredByBody(issue.body) &&
205
+ (categoryLabels.length <= 0 || categoryLabels.includes('category:e2e'))
206
+ );
207
+ };
208
+
188
209
  // Returns null when getOpenPullRequest throws (e.g. a transient GitHub
189
210
  // GraphQL server error): the PR's state is unknown for this cycle and the
190
211
  // caller skips it instead of letting the error abort the schedule cycle.
191
212
  private resolveOpenPrsForPrItem = async (
192
213
  prUrl: string,
214
+ resolvedOpenPrByUrl: ReadonlyMap<string, RelatedPullRequest | null> | null,
193
215
  ): Promise<RelatedPullRequest[] | null> => {
216
+ if (resolvedOpenPrByUrl?.has(prUrl)) {
217
+ const alreadyResolved = resolvedOpenPrByUrl.get(prUrl) ?? null;
218
+ return alreadyResolved === null ? [] : [alreadyResolved];
219
+ }
194
220
  let pr: RelatedPullRequest | null;
195
221
  try {
196
222
  pr = await this.issueRepository.getOpenPullRequest(prUrl);
@@ -220,11 +246,19 @@ export class IssueRejectionEvaluator {
220
246
  // PULL_REQUEST_NOT_FOUND.
221
247
  private resolveOpenPrsFromUrls = async (
222
248
  prUrls: string[],
249
+ resolvedOpenPrByUrl: ReadonlyMap<string, RelatedPullRequest | null> | null,
223
250
  ): Promise<{ prs: RelatedPullRequest[]; anyResolutionFailed: boolean }> => {
224
251
  const uniquePrUrls = Array.from(new Set(prUrls));
225
252
  const resolvedPrs: RelatedPullRequest[] = [];
226
253
  let anyResolutionFailed = false;
227
254
  for (const prUrl of uniquePrUrls) {
255
+ if (resolvedOpenPrByUrl?.has(prUrl)) {
256
+ const alreadyResolved = resolvedOpenPrByUrl.get(prUrl) ?? null;
257
+ if (alreadyResolved !== null) {
258
+ resolvedPrs.push(alreadyResolved);
259
+ }
260
+ continue;
261
+ }
228
262
  let pr: RelatedPullRequest | null;
229
263
  try {
230
264
  pr = await this.issueRepository.getOpenPullRequest(prUrl);
@@ -160,6 +160,7 @@ describe('RevertNotReadyReviewQueueIssueUseCase', () => {
160
160
  updateStory: jest.Mock;
161
161
  findRelatedOpenPRs: jest.Mock;
162
162
  getOpenPullRequest: jest.Mock;
163
+ getOpenPullRequests: jest.Mock;
163
164
  getPullRequestChangedFilePaths: jest.Mock;
164
165
  approvePullRequest: jest.Mock;
165
166
  requestChangesWithInlineComment: jest.Mock;
@@ -191,6 +192,7 @@ describe('RevertNotReadyReviewQueueIssueUseCase', () => {
191
192
  updateStory: jest.fn().mockResolvedValue(undefined),
192
193
  findRelatedOpenPRs: jest.fn().mockResolvedValue([]),
193
194
  getOpenPullRequest: jest.fn().mockResolvedValue(null),
195
+ getOpenPullRequests: jest.fn().mockResolvedValue(new Map()),
194
196
  getPullRequestChangedFilePaths: jest.fn().mockResolvedValue([]),
195
197
  approvePullRequest: jest.fn().mockResolvedValue(undefined),
196
198
  requestChangesWithInlineComment: jest.fn().mockResolvedValue(undefined),
@@ -2200,4 +2202,156 @@ describe('RevertNotReadyReviewQueueIssueUseCase', () => {
2200
2202
  );
2201
2203
  });
2202
2204
  });
2205
+
2206
+ describe('batched pull request state resolution', () => {
2207
+ const projectUrl = 'https://github.com/users/user/projects/1';
2208
+
2209
+ const buildAwaitingQualityCheckBoard = (
2210
+ issueCount: number,
2211
+ ): { boardIssues: Issue[]; relatedPrs: RelatedPrLike[] } => {
2212
+ const boardIssues: Issue[] = [];
2213
+ const relatedPrs: RelatedPrLike[] = [];
2214
+ for (let index = 0; index < issueCount; index += 1) {
2215
+ const issueUrl = `https://github.com/user/repo/issues/${200 + index}`;
2216
+ const prUrl = `https://github.com/user/repo/pull/${300 + index}`;
2217
+ boardIssues.push(
2218
+ createMockIssue({
2219
+ url: issueUrl,
2220
+ number: 200 + index,
2221
+ itemId: `item-issue-${index}`,
2222
+ }),
2223
+ );
2224
+ boardIssues.push(
2225
+ createMockPullRequest({
2226
+ url: prUrl,
2227
+ number: 300 + index,
2228
+ itemId: `item-pr-${index}`,
2229
+ status: 'In Progress',
2230
+ closingIssueReferenceUrls: [issueUrl],
2231
+ }),
2232
+ );
2233
+ relatedPrs.push(createReadyPr(prUrl));
2234
+ }
2235
+ return { boardIssues, relatedPrs };
2236
+ };
2237
+
2238
+ const resolveBatchFrom = (relatedPrs: RelatedPrLike[]): void => {
2239
+ const prByUrl = new Map(relatedPrs.map((pr) => [pr.url, pr]));
2240
+ mockIssueRepository.getOpenPullRequests.mockImplementation(
2241
+ (prUrls: string[]) =>
2242
+ Promise.resolve(
2243
+ new Map(prUrls.map((prUrl) => [prUrl, prByUrl.get(prUrl) ?? null])),
2244
+ ),
2245
+ );
2246
+ };
2247
+
2248
+ it('resolves every related pull request in one batched call and makes no per-pull-request call', async () => {
2249
+ const { boardIssues, relatedPrs } = buildAwaitingQualityCheckBoard(3);
2250
+ mockIssueRepository.getAllIssues.mockResolvedValue({
2251
+ project: mockProject,
2252
+ issues: boardIssues,
2253
+ cacheUsed: false,
2254
+ });
2255
+ resolveBatchFrom(relatedPrs);
2256
+
2257
+ await useCase.run({
2258
+ projectUrl,
2259
+ manager: 'manager-user',
2260
+ allowedIssueAuthors: ['owner'],
2261
+ });
2262
+
2263
+ expect(mockIssueRepository.getOpenPullRequests).toHaveBeenCalledTimes(1);
2264
+ expect(mockIssueRepository.getOpenPullRequests).toHaveBeenCalledWith(
2265
+ relatedPrs.map((pr) => pr.url),
2266
+ );
2267
+ expect(mockIssueRepository.getOpenPullRequest).not.toHaveBeenCalled();
2268
+ expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
2269
+ });
2270
+
2271
+ it('includes the unread pull requests in the same batched call', async () => {
2272
+ const unreadPrUrl = 'https://github.com/user/repo/pull/400';
2273
+ const { boardIssues, relatedPrs } = buildAwaitingQualityCheckBoard(1);
2274
+ mockIssueRepository.getAllIssues.mockResolvedValue({
2275
+ project: mockProject,
2276
+ issues: [
2277
+ ...boardIssues,
2278
+ createMockPullRequest({
2279
+ url: unreadPrUrl,
2280
+ number: 400,
2281
+ itemId: 'item-pr-unread',
2282
+ }),
2283
+ ],
2284
+ cacheUsed: false,
2285
+ });
2286
+ resolveBatchFrom([...relatedPrs, createReadyPr(unreadPrUrl)]);
2287
+
2288
+ await useCase.run({
2289
+ projectUrl,
2290
+ manager: 'manager-user',
2291
+ allowedIssueAuthors: ['owner'],
2292
+ });
2293
+
2294
+ expect(mockIssueRepository.getOpenPullRequests).toHaveBeenCalledTimes(1);
2295
+ expect(mockIssueRepository.getOpenPullRequests).toHaveBeenCalledWith([
2296
+ relatedPrs[0].url,
2297
+ unreadPrUrl,
2298
+ ]);
2299
+ expect(mockIssueRepository.getOpenPullRequest).not.toHaveBeenCalled();
2300
+ });
2301
+
2302
+ it('falls back to the single pull request query only for a url the batch left unresolved', async () => {
2303
+ const { boardIssues, relatedPrs } = buildAwaitingQualityCheckBoard(2);
2304
+ const resolvedPr = relatedPrs[0];
2305
+ const omittedPr = relatedPrs[1];
2306
+ mockIssueRepository.getAllIssues.mockResolvedValue({
2307
+ project: mockProject,
2308
+ issues: boardIssues,
2309
+ cacheUsed: false,
2310
+ });
2311
+ mockIssueRepository.getOpenPullRequests.mockResolvedValue(
2312
+ new Map([[resolvedPr.url, resolvedPr]]),
2313
+ );
2314
+ mockIssueRepository.getOpenPullRequest.mockImplementation(
2315
+ (prUrl: string) =>
2316
+ Promise.resolve(prUrl === omittedPr.url ? omittedPr : null),
2317
+ );
2318
+
2319
+ await useCase.run({
2320
+ projectUrl,
2321
+ manager: 'manager-user',
2322
+ allowedIssueAuthors: ['owner'],
2323
+ });
2324
+
2325
+ expect(mockIssueRepository.getOpenPullRequest).toHaveBeenCalledTimes(1);
2326
+ expect(mockIssueRepository.getOpenPullRequest).toHaveBeenCalledWith(
2327
+ omittedPr.url,
2328
+ );
2329
+ expect(mockIssueRepository.updateStatus).not.toHaveBeenCalled();
2330
+ });
2331
+
2332
+ it('reverts the issue whose pull request the batch resolved as absent', async () => {
2333
+ const { boardIssues, relatedPrs } = buildAwaitingQualityCheckBoard(1);
2334
+ mockIssueRepository.getAllIssues.mockResolvedValue({
2335
+ project: mockProject,
2336
+ issues: boardIssues,
2337
+ cacheUsed: false,
2338
+ });
2339
+ mockIssueRepository.getOpenPullRequests.mockResolvedValue(
2340
+ new Map([[relatedPrs[0].url, null]]),
2341
+ );
2342
+
2343
+ await useCase.run({
2344
+ projectUrl,
2345
+ manager: 'manager-user',
2346
+ allowedIssueAuthors: ['owner'],
2347
+ });
2348
+
2349
+ expect(mockIssueRepository.getOpenPullRequest).not.toHaveBeenCalled();
2350
+ expect(mockIssueRepository.updateStatus).toHaveBeenCalledWith(
2351
+ mockProject,
2352
+ expect.objectContaining({ url: boardIssues[0].url }),
2353
+ 'awaiting-workspace-id',
2354
+ );
2355
+ });
2356
+ });
2203
2357
  });
@@ -42,6 +42,7 @@ export class RevertNotReadyReviewQueueIssueUseCase {
42
42
  | 'updateStory'
43
43
  | 'findRelatedOpenPRs'
44
44
  | 'getOpenPullRequest'
45
+ | 'getOpenPullRequests'
45
46
  | 'getPullRequestChangedFilePaths'
46
47
  | 'approvePullRequest'
47
48
  | 'requestChangesWithInlineComment'
@@ -95,6 +96,34 @@ export class RevertNotReadyReviewQueueIssueUseCase {
95
96
  const relatedOpenPrUrlsByIssueUrl =
96
97
  this.buildRelatedOpenPrUrlsByIssueUrl(issues);
97
98
 
99
+ const unreadPullRequests = issues.filter(
100
+ (issue) => issue.status === DEFAULT_STATUS_NAME && issue.isPr,
101
+ );
102
+
103
+ const labelsNotRequiringPullRequest =
104
+ resolveLabelsNotRequiringPullRequest(params);
105
+ const willBeEvaluated = (item: Issue): boolean =>
106
+ isAuthorAuthorizedForAutoStatusCheck(item.author, allowedIssueAuthors) &&
107
+ this.issueRejectionEvaluator.requiresPullRequestEvaluation(
108
+ item,
109
+ labelsNotRequiringPullRequest,
110
+ );
111
+
112
+ const resolvedOpenPrByUrl = await this.issueRepository.getOpenPullRequests(
113
+ Array.from(
114
+ new Set([
115
+ ...awaitingQualityCheckIssues
116
+ .filter(willBeEvaluated)
117
+ .flatMap(
118
+ (issue) => relatedOpenPrUrlsByIssueUrl.get(issue.url) ?? [],
119
+ ),
120
+ ...unreadPullRequests
121
+ .filter(willBeEvaluated)
122
+ .map((pullRequest) => pullRequest.url),
123
+ ]),
124
+ ),
125
+ );
126
+
98
127
  for (const issue of awaitingQualityCheckIssues) {
99
128
  const hasLlmAgentLabel = issue.labels.some(
100
129
  (l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
@@ -113,10 +142,11 @@ export class RevertNotReadyReviewQueueIssueUseCase {
113
142
  const { rejections, approvedPrUrl } =
114
143
  await this.issueRejectionEvaluator.evaluate(
115
144
  issue,
116
- resolveLabelsNotRequiringPullRequest(params),
145
+ labelsNotRequiringPullRequest,
117
146
  {
118
147
  relatedOpenPrUrls:
119
148
  relatedOpenPrUrlsByIssueUrl.get(issue.url) ?? null,
149
+ resolvedOpenPrByUrl,
120
150
  },
121
151
  );
122
152
  if (
@@ -173,9 +203,6 @@ export class RevertNotReadyReviewQueueIssueUseCase {
173
203
  }
174
204
 
175
205
  const projectStory = project.story;
176
- const unreadPullRequests = issues.filter(
177
- (issue) => issue.status === DEFAULT_STATUS_NAME && issue.isPr,
178
- );
179
206
 
180
207
  for (const pullRequest of unreadPullRequests) {
181
208
  const hasLlmAgentLabel = pullRequest.labels.some(
@@ -197,7 +224,8 @@ export class RevertNotReadyReviewQueueIssueUseCase {
197
224
  try {
198
225
  const { rejections } = await this.issueRejectionEvaluator.evaluate(
199
226
  pullRequest,
200
- resolveLabelsNotRequiringPullRequest(params),
227
+ labelsNotRequiringPullRequest,
228
+ { resolvedOpenPrByUrl },
201
229
  );
202
230
  if (rejections.length > 0) {
203
231
  if (!pullRequest.assignees.includes(params.manager)) {
@@ -66,6 +66,7 @@ export interface IssueRepository {
66
66
  projectId: Project['id'],
67
67
  ) => Promise<{ issues: Issue[]; project: Project; cacheUsed: boolean }>;
68
68
  getIssueByUrl: (url: string) => Promise<Issue | null>;
69
+ getIssueBodyByUrl: (url: string) => Promise<string | null>;
69
70
  createNewIssue: (
70
71
  org: string,
71
72
  repo: string,
@@ -90,6 +91,10 @@ export interface IssueRepository {
90
91
  }[]
91
92
  >;
92
93
  updateIssue: (issue: Issue) => Promise<void>;
94
+ updateIssueBody: (
95
+ issue: Pick<Issue, 'org' | 'repo' | 'number'>,
96
+ body: string,
97
+ ) => Promise<void>;
93
98
  updateNextActionDate: (
94
99
  issueUrl: string,
95
100
  project: Project,
@@ -136,6 +141,9 @@ export interface IssueRepository {
136
141
  update: (issue: Issue, project: Project) => Promise<void>;
137
142
  findRelatedOpenPRs: (issueUrl: string) => Promise<RelatedPullRequest[]>;
138
143
  getOpenPullRequest: (prUrl: string) => Promise<RelatedPullRequest | null>;
144
+ getOpenPullRequests: (
145
+ prUrls: string[],
146
+ ) => Promise<Map<string, RelatedPullRequest | null>>;
139
147
  getPullRequestChangedFilePaths: (prUrl: string) => Promise<string[]>;
140
148
  approvePullRequest: (prUrl: string) => Promise<void>;
141
149
  requestChangesWithInlineComment: (
@@ -18,7 +18,7 @@ export declare const INCREMENTAL_FETCH_SKEW_BUFFER_MS: number;
18
18
  export declare const REQUIRED_CHECKS_CACHE_TTL_MS: number;
19
19
  export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepository implements IssueRepository {
20
20
  readonly apiV3IssueRepository: Pick<ApiV3IssueRepository, 'searchIssue'>;
21
- readonly restIssueRepository: Pick<RestIssueRepository, 'createNewIssue' | 'updateIssue' | 'createComment' | 'getIssue' | 'updateLabels' | 'removeLabel' | 'updateAssigneeList' | 'searchIssues'>;
21
+ readonly restIssueRepository: Pick<RestIssueRepository, 'createNewIssue' | 'updateIssue' | 'updateIssueBody' | 'createComment' | 'getIssue' | 'updateLabels' | 'removeLabel' | 'updateAssigneeList' | 'searchIssues'>;
22
22
  readonly graphqlProjectItemRepository: Pick<GraphqlProjectItemRepository, 'fetchProjectItems' | 'fetchProjectItemsLight' | 'fetchProjectItemsByIds' | 'fetchProjectItemByUrl' | 'updateProjectField' | 'clearProjectField' | 'updateProjectTextField' | 'addIssueToProject'>;
23
23
  readonly localStorageCacheRepository: Pick<LocalStorageCacheRepository, 'getSingle' | 'setSingle'>;
24
24
  readonly projectRepository: Pick<ProjectRepository, 'getProject'>;
@@ -26,7 +26,7 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
26
26
  readonly localStorageRepository: LocalStorageRepository;
27
27
  readonly ghToken: string;
28
28
  readonly sleep: Sleep;
29
- constructor(apiV3IssueRepository: Pick<ApiV3IssueRepository, 'searchIssue'>, restIssueRepository: Pick<RestIssueRepository, 'createNewIssue' | 'updateIssue' | 'createComment' | 'getIssue' | 'updateLabels' | 'removeLabel' | 'updateAssigneeList' | 'searchIssues'>, graphqlProjectItemRepository: Pick<GraphqlProjectItemRepository, 'fetchProjectItems' | 'fetchProjectItemsLight' | 'fetchProjectItemsByIds' | 'fetchProjectItemByUrl' | 'updateProjectField' | 'clearProjectField' | 'updateProjectTextField' | 'addIssueToProject'>, localStorageCacheRepository: Pick<LocalStorageCacheRepository, 'getSingle' | 'setSingle'>, projectRepository: Pick<ProjectRepository, 'getProject'>, dateRepository: DateRepository, localStorageRepository: LocalStorageRepository, ghToken?: string, sleep?: Sleep);
29
+ constructor(apiV3IssueRepository: Pick<ApiV3IssueRepository, 'searchIssue'>, restIssueRepository: Pick<RestIssueRepository, 'createNewIssue' | 'updateIssue' | 'updateIssueBody' | 'createComment' | 'getIssue' | 'updateLabels' | 'removeLabel' | 'updateAssigneeList' | 'searchIssues'>, graphqlProjectItemRepository: Pick<GraphqlProjectItemRepository, 'fetchProjectItems' | 'fetchProjectItemsLight' | 'fetchProjectItemsByIds' | 'fetchProjectItemByUrl' | 'updateProjectField' | 'clearProjectField' | 'updateProjectTextField' | 'addIssueToProject'>, localStorageCacheRepository: Pick<LocalStorageCacheRepository, 'getSingle' | 'setSingle'>, projectRepository: Pick<ProjectRepository, 'getProject'>, dateRepository: DateRepository, localStorageRepository: LocalStorageRepository, ghToken?: string, sleep?: Sleep);
30
30
  private readonly projectIssuesCacheRepository;
31
31
  private readonly getAllIssuesRefreshMemo;
32
32
  private readonly lastIssuesFetchedAtByProjectId;
@@ -59,6 +59,7 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
59
59
  number: string;
60
60
  }[]>;
61
61
  updateIssue: (issue: Issue) => Promise<void>;
62
+ updateIssueBody: (issue: Pick<Issue, "org" | "repo" | "number">, body: string) => Promise<void>;
62
63
  getIssueByUrl: (url: string) => Promise<Issue | null>;
63
64
  addIssueToProject: (project: Project, issueUrl: string) => Promise<void>;
64
65
  setDependedIssueUrl: (prUrl: string, project: Project, issueUrl: string) => Promise<void>;
@@ -91,6 +92,9 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
91
92
  getAllOpened: (project: Project) => Promise<Issue[]>;
92
93
  getStoryObjectMap: (project: Project) => Promise<StoryObjectMap>;
93
94
  getOpenPullRequest: (prUrl: string) => Promise<RelatedPullRequest | null>;
95
+ getOpenPullRequests: (prUrls: string[]) => Promise<Map<string, RelatedPullRequest | null>>;
96
+ private requireParsedPullRequest;
97
+ private fetchSlimPullRequestsInOneQuery;
94
98
  closePullRequest: (prUrl: string) => Promise<void>;
95
99
  closeIssueByUrl: (issueUrl: string, stateReason: "completed" | "not_planned") => Promise<void>;
96
100
  getPullRequestChangedFilePaths: (prUrl: string) => Promise<string[]>;
@@ -103,7 +107,10 @@ export declare class ApiV3CheerioRestIssueRepository extends BaseGitHubRepositor
103
107
  private formatGitHubErrorWithStatus;
104
108
  deletePullRequestBranch: (prUrl: string, branchName: string) => Promise<void>;
105
109
  createCommentByUrl: (issueOrPrUrl: string, commentBody: string) => Promise<void>;
110
+ private fetchIssueBodyResponse;
111
+ private parseIssueBodyResponse;
106
112
  getIssueOrPullRequestBody: (url: string) => Promise<string>;
113
+ getIssueBodyByUrl: (url: string) => Promise<string | null>;
107
114
  getIssueOrPullRequestComments: (url: string) => Promise<IssueComment[]>;
108
115
  getPullRequestDetail: (prUrl: string) => Promise<PullRequestDetail | null>;
109
116
  private fetchPullRequestFiles;
@@ -1 +1 @@
1
- {"version":3,"file":"ApiV3CheerioRestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ApiV3CheerioRestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/ApiV3CheerioRestIssueRepository.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,7 @@ export declare class RestIssueRepository extends BaseGitHubRepository implements
16
16
  created_at: string;
17
17
  }>;
18
18
  updateIssue: (issue: Issue) => Promise<void>;
19
+ updateIssueBody: (issue: Pick<Issue, "org" | "repo" | "number">, body: string) => Promise<void>;
19
20
  updateLabels: (issue: Issue, labels: Issue["labels"]) => Promise<void>;
20
21
  removeLabel: (issue: Issue, label: string) => Promise<void>;
21
22
  updateAssigneeList: (issue: Pick<Issue, "org" | "repo" | "number">, assigneeList: Member["name"][]) => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"RestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/RestIssueRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAcvE,qBAAa,mBACX,SAAQ,oBACR,YACE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,aAAa,GAAG,cAAc,CAAC;IAE9E,aAAa,GAAU,UAAU,MAAM,EAAE,SAAS,MAAM,mBAStD;IACF,cAAc,GACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,WAAW,MAAM,EAAE,EACnB,QAAQ,MAAM,EAAE,KACf,OAAO,CAAC,MAAM,CAAC,CAQhB;IACF,QAAQ,GACN,UAAU,MAAM,KACf,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CA8BA;IACF,WAAW,GAAU,OAAO,KAAK,mBAc/B;IAEF,YAAY,GACV,OAAO,KAAK,EACZ,QAAQ,KAAK,CAAC,QAAQ,CAAC,KACtB,OAAO,CAAC,IAAI,CAAC,CAYd;IAEF,WAAW,GAAU,OAAO,KAAK,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAiB9D;IAEF,kBAAkB,GAChB,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC7C,cAAc,MAAM,CAAC,MAAM,CAAC,EAAE,KAC7B,OAAO,CAAC,IAAI,CAAC,CAQd;IAEF,YAAY,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B5D;IAEF,OAAO,CAAC,kBAAkB,CAsBxB;CACH"}
1
+ {"version":3,"file":"RestIssueRepository.d.ts","sourceRoot":"","sources":["../../../../src/adapter/repositories/issue/RestIssueRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,6DAA6D,CAAC;AAC9F,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAcvE,qBAAa,mBACX,SAAQ,oBACR,YACE,IAAI,CAAC,eAAe,EAAE,oBAAoB,GAAG,aAAa,GAAG,cAAc,CAAC;IAE9E,aAAa,GAAU,UAAU,MAAM,EAAE,SAAS,MAAM,mBAStD;IACF,cAAc,GACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,OAAO,MAAM,EACb,MAAM,MAAM,EACZ,WAAW,MAAM,EAAE,EACnB,QAAQ,MAAM,EAAE,KACf,OAAO,CAAC,MAAM,CAAC,CAQhB;IACF,QAAQ,GACN,UAAU,MAAM,KACf,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CA8BA;IACF,WAAW,GAAU,OAAO,KAAK,mBAc/B;IAEF,eAAe,GACb,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC7C,MAAM,MAAM,KACX,OAAO,CAAC,IAAI,CAAC,CAQd;IAEF,YAAY,GACV,OAAO,KAAK,EACZ,QAAQ,KAAK,CAAC,QAAQ,CAAC,KACtB,OAAO,CAAC,IAAI,CAAC,CAYd;IAEF,WAAW,GAAU,OAAO,KAAK,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC,CAiB9D;IAEF,kBAAkB,GAChB,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC,EAC7C,cAAc,MAAM,CAAC,MAAM,CAAC,EAAE,KAC7B,OAAO,CAAC,IAAI,CAAC,CAQd;IAEF,YAAY,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA2B5D;IAEF,OAAO,CAAC,kBAAkB,CAsBxB;CACH"}
@@ -4,8 +4,8 @@ import { Project } from '../entities/Project';
4
4
  import { StoryObjectMap } from '../entities/StoryObjectMap';
5
5
  import { Member } from '../entities/Member';
6
6
  export declare class ConvertCheckboxToIssueInStoryIssueUseCase {
7
- readonly issueRepository: Pick<IssueRepository, 'createNewIssue' | 'updateIssue' | 'updateStory' | 'getIssueByUrl' | 'addIssueToProject'>;
8
- constructor(issueRepository: Pick<IssueRepository, 'createNewIssue' | 'updateIssue' | 'updateStory' | 'getIssueByUrl' | 'addIssueToProject'>);
7
+ readonly issueRepository: Pick<IssueRepository, 'createNewIssue' | 'updateIssueBody' | 'updateStory' | 'getIssueByUrl' | 'getIssueBodyByUrl' | 'addIssueToProject'>;
8
+ constructor(issueRepository: Pick<IssueRepository, 'createNewIssue' | 'updateIssueBody' | 'updateStory' | 'getIssueByUrl' | 'getIssueBodyByUrl' | 'addIssueToProject'>);
9
9
  run: (input: {
10
10
  project: Project;
11
11
  issues: Issue[];
@@ -1 +1 @@
1
- {"version":3,"file":"ConvertCheckboxToIssueInStoryIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,qBAAa,yCAAyC;IAElD,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACb,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,eAAe,GACf,mBAAmB,CACtB;gBAPQ,eAAe,EAAE,IAAI,CAC5B,eAAe,EACb,gBAAgB,GAChB,aAAa,GACb,aAAa,GACb,eAAe,GACf,mBAAmB,CACtB;IAGH,GAAG,GAAU,OAAO;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,cAAc,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,sCAAsC,EAAE,OAAO,CAAC;KACjD,KAAG,OAAO,CAAC,IAAI,CAAC,CAsGf;IACF,gCAAgC,GAC9B,MAAM,MAAM,EACZ,gBAAgB,MAAM,EACtB,WAAW,MAAM,KAChB,MAAM,CA8BP;IACF,kBAAkB,GAAI,gBAAgB,MAAM,EAAE,WAAW,MAAM,KAAG,MAAM,CAEtE;IACF,yBAAyB,GACvB,gBAAgB,MAAM,EACtB,WAAW,MAAM,KAChB,MAAM,CAQP;IACF,gCAAgC,GAAI,gBAAgB,MAAM,KAAG,MAAM,EAAE,CAcnE;CACH"}
1
+ {"version":3,"file":"ConvertCheckboxToIssueInStoryIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/ConvertCheckboxToIssueInStoryIssueUseCase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,qBAAa,yCAAyC;IAElD,QAAQ,CAAC,eAAe,EAAE,IAAI,CAC5B,eAAe,EACb,gBAAgB,GAChB,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,mBAAmB,CACtB;gBARQ,eAAe,EAAE,IAAI,CAC5B,eAAe,EACb,gBAAgB,GAChB,iBAAiB,GACjB,aAAa,GACb,eAAe,GACf,mBAAmB,GACnB,mBAAmB,CACtB;IAGH,GAAG,GAAU,OAAO;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,SAAS,EAAE,OAAO,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,cAAc,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACxB,sCAAsC,EAAE,OAAO,CAAC;KACjD,KAAG,OAAO,CAAC,IAAI,CAAC,CAgGf;IACF,gCAAgC,GAC9B,MAAM,MAAM,EACZ,gBAAgB,MAAM,EACtB,WAAW,MAAM,KAChB,MAAM,CA8BP;IACF,kBAAkB,GAAI,gBAAgB,MAAM,EAAE,WAAW,MAAM,KAAG,MAAM,CAEtE;IACF,yBAAyB,GACvB,gBAAgB,MAAM,EACtB,WAAW,MAAM,KAChB,MAAM,CAQP;IACF,gCAAgC,GAAI,gBAAgB,MAAM,KAAG,MAAM,EAAE,CAcnE;CACH"}
@@ -1,4 +1,4 @@
1
- import { IssueRepository } from './adapter-interfaces/IssueRepository';
1
+ import { IssueRepository, RelatedPullRequest } from './adapter-interfaces/IssueRepository';
2
2
  export type PrRejectedReasonType = 'PULL_REQUEST_NOT_FOUND' | 'MULTIPLE_PULL_REQUESTS_FOUND' | 'PULL_REQUEST_IS_DRAFT' | 'PULL_REQUEST_CONFLICTED' | 'ANY_CI_JOB_FAILED_OR_IN_PROGRESS' | 'REQUIRED_CI_JOB_NEVER_STARTED' | 'ANY_REVIEW_COMMENT_NOT_RESOLVED' | 'CHANGE_TARGET_MUST_PATH_NOT_CHANGED';
3
3
  export type PrRejectionResult = {
4
4
  rejections: {
@@ -9,6 +9,7 @@ export type PrRejectionResult = {
9
9
  };
10
10
  export type EvaluateOptions = {
11
11
  relatedOpenPrUrls?: string[] | null;
12
+ resolvedOpenPrByUrl?: ReadonlyMap<string, RelatedPullRequest | null> | null;
12
13
  };
13
14
  export declare class IssueRejectionEvaluator {
14
15
  private readonly issueRepository;
@@ -19,6 +20,10 @@ export declare class IssueRejectionEvaluator {
19
20
  isPr: boolean;
20
21
  body?: string | null;
21
22
  }, labelsNotRequiringPullRequest?: string[], options?: EvaluateOptions) => Promise<PrRejectionResult>;
23
+ requiresPullRequestEvaluation: (issue: {
24
+ labels: string[];
25
+ body?: string | null;
26
+ }, labelsNotRequiringPullRequest?: string[]) => boolean;
22
27
  private resolveOpenPrsForPrItem;
23
28
  private resolveOpenPrsFromUrls;
24
29
  private extractChangeTargetMustPaths;
@@ -1 +1 @@
1
- {"version":3,"file":"IssueRejectionEvaluator.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/IssueRejectionEvaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEhB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,8BAA8B,GAC9B,uBAAuB,GACvB,yBAAyB,GACzB,kCAAkC,GAClC,+BAA+B,GAC/B,iCAAiC,GACjC,qCAAqC,CAAC;AAE1C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE;QAAE,IAAI,EAAE,oBAAoB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAQ5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACrC,CAAC;AAEF,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,oBAAoB,GACpB,oBAAoB,GACpB,gCAAgC,GAChC,iCAAiC,CACpC;IAGH,QAAQ,GACN,OAAO;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,EACD,gCAA+B,MAAM,EAAO,EAC5C,UAAS,eAAoB,KAC5B,OAAO,CAAC,iBAAiB,CAAC,CAsI3B;IAKF,OAAO,CAAC,uBAAuB,CAgB7B;IAcF,OAAO,CAAC,sBAAsB,CAsB5B;IAEF,OAAO,CAAC,4BAA4B,CAYlC;IAEF,OAAO,CAAC,mBAAmB,CAIwC;IAEnE,OAAO,CAAC,2BAA2B,CAejC;CACH"}
1
+ {"version":3,"file":"IssueRejectionEvaluator.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/IssueRejectionEvaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,kBAAkB,EACnB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,MAAM,oBAAoB,GAC5B,wBAAwB,GACxB,8BAA8B,GAC9B,uBAAuB,GACvB,yBAAyB,GACzB,kCAAkC,GAClC,+BAA+B,GAC/B,iCAAiC,GACjC,qCAAqC,CAAC;AAE1C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,EAAE;QAAE,IAAI,EAAE,oBAAoB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAQ5B,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAMpC,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7E,CAAC;AAEF,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,oBAAoB,GACpB,oBAAoB,GACpB,gCAAgC,GAChC,iCAAiC,CACpC;IAGH,QAAQ,GACN,OAAO;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,EAAE,OAAO,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACtB,EACD,gCAA+B,MAAM,EAAO,EAC5C,UAAS,eAAoB,KAC5B,OAAO,CAAC,iBAAiB,CAAC,CA6H3B;IAKF,6BAA6B,GAC3B,OAAO;QAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EACjD,gCAA+B,MAAM,EAAO,KAC3C,OAAO,CAgBR;IAKF,OAAO,CAAC,uBAAuB,CAqB7B;IAcF,OAAO,CAAC,sBAAsB,CA8B5B;IAEF,OAAO,CAAC,4BAA4B,CAYlC;IAEF,OAAO,CAAC,mBAAmB,CAIwC;IAEnE,OAAO,CAAC,2BAA2B,CAejC;CACH"}
@@ -7,7 +7,7 @@ export declare class RevertNotReadyReviewQueueIssueUseCase {
7
7
  private readonly issueCommentRepository;
8
8
  private readonly issueRejectionEvaluator;
9
9
  private readonly changeTargetPullRequestApprover;
10
- constructor(projectRepository: Pick<ProjectRepository, 'findProjectIdByUrl' | 'getProject'>, issueRepository: Pick<IssueRepository, 'getAllIssues' | 'updateStatus' | 'updateStory' | 'findRelatedOpenPRs' | 'getOpenPullRequest' | 'getPullRequestChangedFilePaths' | 'approvePullRequest' | 'requestChangesWithInlineComment'>, issueCommentRepository: Pick<IssueCommentRepository, 'createComment' | 'getCommentsFromIssue'>);
10
+ constructor(projectRepository: Pick<ProjectRepository, 'findProjectIdByUrl' | 'getProject'>, issueRepository: Pick<IssueRepository, 'getAllIssues' | 'updateStatus' | 'updateStory' | 'findRelatedOpenPRs' | 'getOpenPullRequest' | 'getOpenPullRequests' | 'getPullRequestChangedFilePaths' | 'approvePullRequest' | 'requestChangesWithInlineComment'>, issueCommentRepository: Pick<IssueCommentRepository, 'createComment' | 'getCommentsFromIssue'>);
11
11
  run: (params: {
12
12
  projectUrl: string;
13
13
  manager: string;
@@ -1 +1 @@
1
- {"version":3,"file":"RevertNotReadyReviewQueueIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAyBrF,qBAAa,qCAAqC;IAK9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAWhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IAnBzC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAkC;gBAG/D,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,oBAAoB,GAAG,YAAY,CACpC,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,cAAc,GACd,cAAc,GACd,aAAa,GACb,oBAAoB,GACpB,oBAAoB,GACpB,gCAAgC,GAChC,oBAAoB,GACpB,iCAAiC,CACpC,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,eAAe,GAAG,sBAAsB,CACzC;IAQH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACvC,6BAA6B,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAChD,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;QACxD,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACvC,KAAG,OAAO,CAAC,IAAI,CAAC,CAgLf;IAQF,OAAO,CAAC,gCAAgC,CAsBtC;CACH"}
1
+ {"version":3,"file":"RevertNotReadyReviewQueueIssueUseCase.d.ts","sourceRoot":"","sources":["../../../src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AAyBrF,qBAAa,qCAAqC;IAK9C,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAYhC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IApBzC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA0B;IAClE,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAkC;gBAG/D,iBAAiB,EAAE,IAAI,CACtC,iBAAiB,EACjB,oBAAoB,GAAG,YAAY,CACpC,EACgB,eAAe,EAAE,IAAI,CACpC,eAAe,EACb,cAAc,GACd,cAAc,GACd,aAAa,GACb,oBAAoB,GACpB,oBAAoB,GACpB,qBAAqB,GACrB,gCAAgC,GAChC,oBAAoB,GACpB,iCAAiC,CACpC,EACgB,sBAAsB,EAAE,IAAI,CAC3C,sBAAsB,EACtB,eAAe,GAAG,sBAAsB,CACzC;IAQH,GAAG,GAAU,QAAQ;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,oBAAoB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACvC,6BAA6B,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAChD,uBAAuB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;QACxD,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;KACvC,KAAG,OAAO,CAAC,IAAI,CAAC,CA2Mf;IAQF,OAAO,CAAC,gCAAgC,CAsBtC;CACH"}