github-issue-tower-defence-management 1.104.0 → 1.104.2

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 (36) 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/domain/usecases/HandleScheduledEventUseCase.js +7 -2
  5. package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
  6. package/bin/domain/usecases/IssueRejectionEvaluator.js +21 -2
  7. package/bin/domain/usecases/IssueRejectionEvaluator.js.map +1 -1
  8. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +36 -6
  9. package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
  10. package/bin/domain/usecases/StartPreparationUseCase.js +2 -1
  11. package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -1
  12. package/bin/domain/usecases/resolveAllowedIssueAuthors.js +8 -0
  13. package/bin/domain/usecases/resolveAllowedIssueAuthors.js.map +1 -0
  14. package/package.json +1 -1
  15. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +36 -0
  16. package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +23 -1
  17. package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +109 -0
  18. package/src/domain/usecases/HandleScheduledEventUseCase.ts +8 -2
  19. package/src/domain/usecases/IssueRejectionEvaluator.test.ts +182 -0
  20. package/src/domain/usecases/IssueRejectionEvaluator.ts +35 -1
  21. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +303 -75
  22. package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +42 -7
  23. package/src/domain/usecases/StartPreparationUseCase.test.ts +202 -88
  24. package/src/domain/usecases/StartPreparationUseCase.ts +2 -1
  25. package/src/domain/usecases/resolveAllowedIssueAuthors.test.ts +51 -0
  26. package/src/domain/usecases/resolveAllowedIssueAuthors.ts +6 -0
  27. package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
  28. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +1 -0
  29. package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
  30. package/types/domain/usecases/IssueRejectionEvaluator.d.ts +5 -1
  31. package/types/domain/usecases/IssueRejectionEvaluator.d.ts.map +1 -1
  32. package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts +1 -0
  33. package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
  34. package/types/domain/usecases/StartPreparationUseCase.d.ts.map +1 -1
  35. package/types/domain/usecases/resolveAllowedIssueAuthors.d.ts +5 -0
  36. package/types/domain/usecases/resolveAllowedIssueAuthors.d.ts.map +1 -0
@@ -18,6 +18,17 @@ export type PrRejectionResult = {
18
18
  approvedPrUrl: string | null;
19
19
  };
20
20
 
21
+ export type EvaluateOptions = {
22
+ // When provided, the related open pull requests for a non-PR issue are
23
+ // resolved from these prebuilt URLs via getOpenPullRequest instead of
24
+ // discovering them with a per-issue findRelatedOpenPRs timeline query.
25
+ // Callers that already hold the bulk project items (e.g. the per-cycle
26
+ // review-readiness sweep) derive these URLs in memory from PR items'
27
+ // closingIssueReferenceUrls, eliminating the per-issue timeline fan-out.
28
+ // When null or undefined, behaviour is unchanged: findRelatedOpenPRs runs.
29
+ relatedOpenPrUrls?: string[] | null;
30
+ };
31
+
21
32
  export class IssueRejectionEvaluator {
22
33
  constructor(
23
34
  private readonly issueRepository: Pick<
@@ -36,6 +47,7 @@ export class IssueRejectionEvaluator {
36
47
  isPr: boolean;
37
48
  },
38
49
  labelsAsLlmAgentName: string[] = [],
50
+ options: EvaluateOptions = {},
39
51
  ): Promise<PrRejectionResult> => {
40
52
  const rejections: { type: PrRejectedReasonType; detail: string }[] = [];
41
53
  let approvedPrUrl: string | null = null;
@@ -57,7 +69,9 @@ export class IssueRejectionEvaluator {
57
69
  ) {
58
70
  const prsToCheck = issue.isPr
59
71
  ? await this.resolveOpenPrsForPrItem(issue.url)
60
- : await this.issueRepository.findRelatedOpenPRs(issue.url);
72
+ : options.relatedOpenPrUrls != null
73
+ ? await this.resolveOpenPrsFromUrls(options.relatedOpenPrUrls)
74
+ : await this.issueRepository.findRelatedOpenPRs(issue.url);
61
75
 
62
76
  if (prsToCheck.length <= 0) {
63
77
  rejections.push({
@@ -160,6 +174,26 @@ export class IssueRejectionEvaluator {
160
174
  return [pr];
161
175
  };
162
176
 
177
+ // Resolves the status of each prebuilt related PR URL via getOpenPullRequest,
178
+ // dropping any URL whose PR is not open (getOpenPullRequest returns null).
179
+ // This mirrors findRelatedOpenPRs, which also returns only OPEN pull requests,
180
+ // so the resulting set is equivalent while avoiding the per-issue timeline
181
+ // query. Duplicate URLs are de-duplicated to mirror findRelatedOpenPRs, which
182
+ // collapses duplicates via its internal Map keyed by PR URL.
183
+ private resolveOpenPrsFromUrls = async (
184
+ prUrls: string[],
185
+ ): Promise<RelatedPullRequest[]> => {
186
+ const uniquePrUrls = Array.from(new Set(prUrls));
187
+ const resolvedPrs: RelatedPullRequest[] = [];
188
+ for (const prUrl of uniquePrUrls) {
189
+ const pr = await this.issueRepository.getOpenPullRequest(prUrl);
190
+ if (pr !== null) {
191
+ resolvedPrs.push(pr);
192
+ }
193
+ }
194
+ return resolvedPrs;
195
+ };
196
+
163
197
  private extractChangeTargetMustPaths = (labels: string[]): string[] => {
164
198
  const prefix = 'change-target-must:';
165
199
  const paths: string[] = [];