@@ -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