@@ -189,6 +189,21 @@ public override async Task<List<ItemInfo>> GetChangesBetweenTagsAsync(Version? f
189189 }
190190 }
191191
192+ // Build a map from issue number to PR number for Index assignment
193+ var issueToPrMap = new Dictionary < string , int > ( ) ;
194+ foreach ( var ( prNumber , _, _, prIssues ) in prData )
195+ {
196+ var prNumberInt = int . Parse ( prNumber ) ;
197+ foreach ( var issueNumber in prIssues )
198+ {
199+ // Use the first PR that references this issue (smallest PR number)
200+ if ( ! issueToPrMap . ContainsKey ( issueNumber ) || prNumberInt < issueToPrMap [ issueNumber ] )
201+ {
202+ issueToPrMap [ issueNumber ] = prNumberInt ;
203+ }
204+ }
205+ }
206+
192207 // Second pass: batch fetch all issue details using issue list
193208 var issueDetailsMap = new Dictionary < string , ItemInfo > ( ) ;
194209 if ( issueNumbers . Count > 0 )
@@ -238,15 +253,18 @@ public override async Task<List<ItemInfo>> GetChangesBetweenTagsAsync(Version? f
238253 }
239254 }
240255
241- issueDetailsMap [ issueNumber ] = new ItemInfo ( issueNumber , issueTitle , issueUrl , issueType , int . Parse ( issueNumber ) ) ;
256+ // Use PR number as Index for ordering
257+ var index = issueToPrMap . TryGetValue ( issueNumber , out var prNum ) ? prNum : int . Parse ( issueNumber ) ;
258+ issueDetailsMap [ issueNumber ] = new ItemInfo ( issueNumber , issueTitle , issueUrl , issueType , index ) ;
242259 }
243260 }
244261 catch ( Exception )
245262 {
246263 // If we can't fetch issue list, create fallback entries
247264 foreach ( var issueNumber in issueNumbers )
248265 {
249- issueDetailsMap [ issueNumber ] = new ItemInfo ( issueNumber , $ "Issue #{ issueNumber } ", string . Empty , "other" , int . Parse ( issueNumber ) ) ;
266+ var index = issueToPrMap . TryGetValue ( issueNumber , out var prNum ) ? prNum : int . Parse ( issueNumber ) ;
267+ issueDetailsMap [ issueNumber ] = new ItemInfo ( issueNumber , $ "Issue #{ issueNumber } ", string . Empty , "other" , index ) ;
250268 }
251269 }
252270 }
0 commit comments