Severity
Critical — the file shown on screen is not the file that gets pushed.
What happens
DataPushScreen computes sourceRecords = props.cleanedRecords ?? dataset?.sourceRecords. The Cleanser route clears cleaned on dataset change, but the Import route's onDataset={setDataset} never calls setCleaned(null). Clean file A once, return to Import, upload file B: the banner shows B's filename and B's headers drive the mapping UI, but every record mapped and pushed comes from file A's cleaned rows. The same override corrupts the Retry and "Prepare Delete Push" flows, which also load datasets via onDataset.
Evidence
src/ui/app/AppRoot.tsx:402 (import route, no cleaned reset) vs :462 (cleanser route resets)
src/ui/screens/DataPushScreen.tsx:163
Suggested fix
Clear cleaned in the import route's onDataset callback (and whenever dataset.filename changes).
Environment
Commit 74cf21b (main), WaveLink 0.6.0. Found in the 2026-08-31 adversarial audit (code-verified).
Severity
Critical — the file shown on screen is not the file that gets pushed.
What happens
DataPushScreencomputessourceRecords = props.cleanedRecords ?? dataset?.sourceRecords. The Cleanser route clearscleanedon dataset change, but the Import route'sonDataset={setDataset}never callssetCleaned(null). Clean file A once, return to Import, upload file B: the banner shows B's filename and B's headers drive the mapping UI, but every record mapped and pushed comes from file A's cleaned rows. The same override corrupts the Retry and "Prepare Delete Push" flows, which also load datasets viaonDataset.Evidence
src/ui/app/AppRoot.tsx:402(import route, no cleaned reset) vs:462(cleanser route resets)src/ui/screens/DataPushScreen.tsx:163Suggested fix
Clear
cleanedin the import route'sonDatasetcallback (and wheneverdataset.filenamechanges).Environment
Commit
74cf21b(main), WaveLink 0.6.0. Found in the 2026-08-31 adversarial audit (code-verified).