Skip to content

Commit 9bc008d

Browse files
committed
Bug: Issue Archiving Logic Incorrectly Buckets Recently Closed Issues #7603
1 parent d9a9c60 commit 9bc008d

1 file changed

Lines changed: 16 additions & 13 deletions

File tree

ai/mcp/server/github-workflow/services/SyncService.mjs

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ class SyncService extends Base {
211211
const startDate = new Date(issueSyncConfig.syncStartDate);
212212
this.releases = allReleases
213213
.filter(release => new Date(release.publishedAt) >= startDate)
214-
.sort((a, b) => new Date(b.publishedAt) - new Date(a.publishedAt));
214+
.sort((a, b) => new Date(a.publishedAt) - new Date(b.publishedAt));
215215

216216
if (this.releases.length === 0) {
217217
logger.warn(`⚠️ No releases found since syncStartDate (${issueSyncConfig.syncStartDate}). Archiving may fall back to default.`);
@@ -318,26 +318,29 @@ class SyncService extends Base {
318318
return null; // Dropped issues are not stored locally.
319319
}
320320

321+
// OPEN issues are always in the main directory
321322
if (issue.state === 'OPEN') {
322323
return path.join(issueSyncConfig.issuesDir, filename);
323324
}
324325

326+
// Logic for CLOSED issues
325327
if (issue.state === 'CLOSED') {
328+
// If an issue has a milestone, it is explicitly archived under that version.
329+
if (issue.milestone?.title) {
330+
return path.join(issueSyncConfig.archiveDir, issue.milestone.title, filename);
331+
}
332+
333+
// For issues without a milestone, find the next release that was published after it was closed.
326334
const closed = new Date(issue.closedAt);
327-
let version = this.releases.length > 0
328-
? this.releases[this.releases.length - 1].tagName
329-
: issueSyncConfig.defaultArchiveVersion;
335+
const release = this.releases.find(r => new Date(r.publishedAt) > closed);
330336

331-
if (issue.milestone?.title) {
332-
version = issue.milestone.title;
333-
} else {
334-
// Find the first release that was published after the issue was closed
335-
const release = this.releases.find(r => new Date(r.publishedAt) > closed);
336-
if (release) {
337-
version = release.tagName;
338-
}
337+
// If a subsequent release exists, archive the issue under that release tag.
338+
if (release) {
339+
return path.join(issueSyncConfig.archiveDir, release.tagName, filename);
339340
}
340-
return path.join(issueSyncConfig.archiveDir, version, filename);
341+
342+
// If no subsequent release is found, the issue is recently closed and remains in the main issues directory.
343+
return path.join(issueSyncConfig.issuesDir, filename);
341344
}
342345

343346
return null;

0 commit comments

Comments
 (0)