@@ -143,11 +143,12 @@ export default function Home() {
143143 // Reset job results if files change *after* a previous run is finished
144144 useEffect ( ( ) => {
145145 if ( currentJobId && ! loading ) {
146- const currentFileNames = files . map ( f => f . name ) . sort ( ) ;
147- const lastRunFileNames = [ ...lastRunFilesRef . current ] . sort ( ) ;
146+ const getFileSignature = ( f : File ) => `${ f . name } :${ f . size } :${ f . lastModified } ` ;
147+ const currentSignatures = files . map ( getFileSignature ) . sort ( ) ;
148+ const lastRunSignatures = [ ...lastRunFilesRef . current ] . sort ( ) ;
148149 const filesHaveChanged =
149- currentFileNames . length !== lastRunFileNames . length ||
150- ! currentFileNames . every ( ( name , i ) => name === lastRunFileNames [ i ] ) ;
150+ currentSignatures . length !== lastRunSignatures . length ||
151+ ! currentSignatures . every ( ( sig , i ) => sig === lastRunSignatures [ i ] ) ;
151152
152153 // If we have a finished job (completed/failed/cancelled), clear it *only* when the files actually change
153154 if ( [ 'completed' , 'failed' , 'cancelled' ] . includes ( batchJob ?. status || '' ) && filesHaveChanged ) {
@@ -381,7 +382,7 @@ export default function Home() {
381382 }
382383
383384 const data = await res . json ( ) ;
384- lastRunFilesRef . current = files . map ( f => f . name ) ;
385+ lastRunFilesRef . current = files . map ( f => ` ${ f . name } : ${ f . size } : ${ f . lastModified } ` ) ;
385386 setCurrentJobId ( data . job_id ) ;
386387 setPollingJobId ( data . job_id ) ; // Start polling
387388
@@ -439,7 +440,7 @@ export default function Home() {
439440 }
440441
441442 const { job_id } = await startRes . json ( ) ;
442- lastRunFilesRef . current = files . map ( f => f . name ) ;
443+ lastRunFilesRef . current = files . map ( f => ` ${ f . name } : ${ f . size } : ${ f . lastModified } ` ) ;
443444 setCurrentJobId ( job_id ) ;
444445 setPollingJobId ( job_id ) ; // DB polling fallback (works even if SSE disconnects)
445446
0 commit comments