@@ -110,6 +110,7 @@ function compareEntry(head, base, threshold) {
110110 : 0 ;
111111
112112 const errors = [ ] ;
113+ const isTrackMode = threshold . mode === 'track' ;
113114
114115 const absoluteDelta = head . medianDuration - base . medianDuration ;
115116 const minAbsoluteDelta =
@@ -138,8 +139,9 @@ function compareEntry(head, base, threshold) {
138139 head,
139140 base,
140141 percentChange,
141- passed : errors . length === 0 ,
142+ passed : isTrackMode || errors . length === 0 ,
142143 errors,
144+ isTrackMode,
143145 } ;
144146}
145147
@@ -219,6 +221,24 @@ function generateMarkdown(suiteComparisons, ciResults) {
219221 }
220222 }
221223
224+ // Track-mode warnings (not blocking)
225+ const trackedWarnings = suiteComparisons . flatMap ( s =>
226+ s . results . filter ( r => r . isTrackMode && r . errors . length > 0 ) ,
227+ ) ;
228+ if ( trackedWarnings . length > 0 ) {
229+ md += '### ⚠️ Tracked (not blocking)\n\n' ;
230+ md += '| Scenario | Baseline | Current | Change |\n' ;
231+ md += '|----------|----------|---------|--------|\n' ;
232+ for ( const r of trackedWarnings ) {
233+ const baseline = r . base ? `${ r . base . meanDuration . toFixed ( 2 ) } ms` : 'N/A' ;
234+ const current = r . head ? `${ r . head . meanDuration . toFixed ( 2 ) } ms` : 'N/A' ;
235+ const change =
236+ r . percentChange != null ? `+${ r . percentChange . toFixed ( 1 ) } %` : 'N/A' ;
237+ md += `| ${ r . name } | ${ baseline } | ${ current } | ${ change } |\n` ;
238+ }
239+ md += '\n' ;
240+ }
241+
222242 // Passed suites
223243 const passedSuites = suiteComparisons . filter ( s => ! s . hasRegressions ) ;
224244 if ( passedSuites . length > 0 ) {
0 commit comments