Skip to content

Commit 8ada8ae

Browse files
committed
fix(frontend): implement robust file signature comparison for Scriptorium reset
1 parent 405fa96 commit 8ada8ae

1 file changed

Lines changed: 7 additions & 6 deletions

File tree

src/frontend/app/scriptorium/page.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)