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.
- package/CHANGELOG.md +14 -0
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js +83 -58
- package/bin/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.js.map +1 -1
- package/bin/domain/usecases/HandleScheduledEventUseCase.js +7 -2
- package/bin/domain/usecases/HandleScheduledEventUseCase.js.map +1 -1
- package/bin/domain/usecases/IssueRejectionEvaluator.js +21 -2
- package/bin/domain/usecases/IssueRejectionEvaluator.js.map +1 -1
- package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js +36 -6
- package/bin/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.js.map +1 -1
- package/bin/domain/usecases/StartPreparationUseCase.js +2 -1
- package/bin/domain/usecases/StartPreparationUseCase.js.map +1 -1
- package/bin/domain/usecases/resolveAllowedIssueAuthors.js +8 -0
- package/bin/domain/usecases/resolveAllowedIssueAuthors.js.map +1 -0
- package/package.json +1 -1
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.test.ts +36 -0
- package/src/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.ts +23 -1
- package/src/domain/usecases/HandleScheduledEventUseCase.test.ts +109 -0
- package/src/domain/usecases/HandleScheduledEventUseCase.ts +8 -2
- package/src/domain/usecases/IssueRejectionEvaluator.test.ts +182 -0
- package/src/domain/usecases/IssueRejectionEvaluator.ts +35 -1
- package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.test.ts +303 -75
- package/src/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.ts +42 -7
- package/src/domain/usecases/StartPreparationUseCase.test.ts +202 -88
- package/src/domain/usecases/StartPreparationUseCase.ts +2 -1
- package/src/domain/usecases/resolveAllowedIssueAuthors.test.ts +51 -0
- package/src/domain/usecases/resolveAllowedIssueAuthors.ts +6 -0
- package/types/adapter/entry-points/handlers/HandleScheduledEventUseCaseHandler.d.ts.map +1 -1
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts +1 -0
- package/types/domain/usecases/HandleScheduledEventUseCase.d.ts.map +1 -1
- package/types/domain/usecases/IssueRejectionEvaluator.d.ts +5 -1
- package/types/domain/usecases/IssueRejectionEvaluator.d.ts.map +1 -1
- package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts +1 -0
- package/types/domain/usecases/RevertNotReadyReviewQueueIssueUseCase.d.ts.map +1 -1
- package/types/domain/usecases/StartPreparationUseCase.d.ts.map +1 -1
- package/types/domain/usecases/resolveAllowedIssueAuthors.d.ts +5 -0
- package/types/domain/usecases/resolveAllowedIssueAuthors.d.ts.map +1 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Issue } from '../entities/Issue';
|
|
1
2
|
import { IssueRepository } from './adapter-interfaces/IssueRepository';
|
|
2
3
|
import { ProjectRepository } from './adapter-interfaces/ProjectRepository';
|
|
3
4
|
import { IssueCommentRepository } from './adapter-interfaces/IssueCommentRepository';
|
|
@@ -9,17 +10,15 @@ import {
|
|
|
9
10
|
DEFAULT_STATUS_NAME,
|
|
10
11
|
} from '../entities/WorkflowStatus';
|
|
11
12
|
|
|
12
|
-
const DEPENDENCY_UPDATE_BOT_AUTHORS = ['dependabot[bot]', 'renovate[bot]'];
|
|
13
|
-
|
|
14
13
|
const isAuthorAuthorizedForAutoStatusCheck = (
|
|
15
14
|
author: string,
|
|
16
|
-
allowedIssueAuthors: string[] | null,
|
|
15
|
+
allowedIssueAuthors: string[] | null | undefined,
|
|
17
16
|
): boolean => {
|
|
18
|
-
if (
|
|
19
|
-
return
|
|
17
|
+
if (allowedIssueAuthors === null || allowedIssueAuthors === undefined) {
|
|
18
|
+
return false;
|
|
20
19
|
}
|
|
21
|
-
if (allowedIssueAuthors ===
|
|
22
|
-
return
|
|
20
|
+
if (allowedIssueAuthors.length === 0) {
|
|
21
|
+
return false;
|
|
23
22
|
}
|
|
24
23
|
return allowedIssueAuthors.includes(author);
|
|
25
24
|
};
|
|
@@ -92,6 +91,9 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
92
91
|
(issue) => issue.status === AWAITING_QUALITY_CHECK_STATUS_NAME,
|
|
93
92
|
);
|
|
94
93
|
|
|
94
|
+
const relatedOpenPrUrlsByIssueUrl =
|
|
95
|
+
this.buildRelatedOpenPrUrlsByIssueUrl(issues);
|
|
96
|
+
|
|
95
97
|
for (const issue of awaitingQualityCheckIssues) {
|
|
96
98
|
const hasLlmAgentLabel = issue.labels.some(
|
|
97
99
|
(l) => l === 'llm-agent' || l.startsWith('llm-agent:'),
|
|
@@ -110,6 +112,9 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
110
112
|
await this.issueRejectionEvaluator.evaluate(
|
|
111
113
|
issue,
|
|
112
114
|
params.labelsAsLlmAgentName ?? [],
|
|
115
|
+
{
|
|
116
|
+
relatedOpenPrUrls: relatedOpenPrUrlsByIssueUrl.get(issue.url) ?? [],
|
|
117
|
+
},
|
|
113
118
|
);
|
|
114
119
|
if (rejections.length > 0) {
|
|
115
120
|
await this.issueRepository.updateStatus(
|
|
@@ -177,4 +182,34 @@ export class RevertNotReadyReviewQueueIssueUseCase {
|
|
|
177
182
|
}
|
|
178
183
|
}
|
|
179
184
|
};
|
|
185
|
+
|
|
186
|
+
// Derives, for each issue, the set of open pull request URLs that reference it
|
|
187
|
+
// via a closing keyword. The linkage is taken from each open PR item's
|
|
188
|
+
// closingIssueReferenceUrls (populated in bulk by fetchProjectItems), the same
|
|
189
|
+
// in-memory derivation SetDependedIssueUrlForOpenTaskPRsUseCase uses. This
|
|
190
|
+
// replaces the per-issue findRelatedOpenPRs timeline query in the
|
|
191
|
+
// review-readiness sweep with a single in-memory pass over the bulk items.
|
|
192
|
+
private buildRelatedOpenPrUrlsByIssueUrl = (
|
|
193
|
+
issues: Issue[],
|
|
194
|
+
): Map<string, string[]> => {
|
|
195
|
+
const openPrUrlsByIssueUrl = new Map<string, Set<string>>();
|
|
196
|
+
for (const issue of issues) {
|
|
197
|
+
if (!issue.isPr || issue.isClosed) {
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
for (const referencedIssueUrl of issue.closingIssueReferenceUrls) {
|
|
201
|
+
const existing = openPrUrlsByIssueUrl.get(referencedIssueUrl);
|
|
202
|
+
if (existing) {
|
|
203
|
+
existing.add(issue.url);
|
|
204
|
+
} else {
|
|
205
|
+
openPrUrlsByIssueUrl.set(referencedIssueUrl, new Set([issue.url]));
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
const result = new Map<string, string[]>();
|
|
210
|
+
for (const [issueUrl, prUrls] of openPrUrlsByIssueUrl) {
|
|
211
|
+
result.set(issueUrl, Array.from(prUrls));
|
|
212
|
+
}
|
|
213
|
+
return result;
|
|
214
|
+
};
|
|
180
215
|
}
|