Money: rapid CSV file selections can lose the first file #1288

Closed
opened 2026-10-07 00:52:10 +00:00 by kayg · 2 comments
Owner

Steps to reproduce:

  1. Open Money → Import a Budget and choose the YNAB CSV format.
  2. Select Plan.csv in the file picker.
  3. Before the browser finishes reading its header, select Register.csv in a second file-picker action.

Expected: the wizard keeps both files and enables Continue.

Actual: the second selection invalidates the first asynchronous header read. The wizard shows “Now choose the Plan CSV file”, retains only Register.csv, and keeps Continue disabled. The User can recover by choosing Plan again, but the paired import does not handle rapid sequential selections.

Evidence: artifacts/money/money-csv-pair-race-light-390.png. The production-server e2e reproduces this by delaying the 4 KiB header read to model a slow device; the first file is stale before its detection result is applied.

Severity: minor. No imported data is changed, but the import flow loses a valid selection and cannot continue until the User retries.

Steps to reproduce: 1. Open Money → Import a Budget and choose the YNAB CSV format. 2. Select `Plan.csv` in the file picker. 3. Before the browser finishes reading its header, select `Register.csv` in a second file-picker action. Expected: the wizard keeps both files and enables Continue. Actual: the second selection invalidates the first asynchronous header read. The wizard shows “Now choose the Plan CSV file”, retains only Register.csv, and keeps Continue disabled. The User can recover by choosing Plan again, but the paired import does not handle rapid sequential selections. Evidence: `artifacts/money/money-csv-pair-race-light-390.png`. The production-server e2e reproduces this by delaying the 4 KiB header read to model a slow device; the first file is stale before its detection result is applied. Severity: minor. No imported data is changed, but the import flow loses a valid selection and cannot continue until the User retries.
Author
Owner

Fixed on branch in commit e62004c5e. File-picker change events now run header detection in order; format/source changes still invalidate stale reads. The regression e2e delays the first small header read so a second selection overlaps. It passed against the rebuilt production web/server bundle. The UI build and local server build were refreshed before the green run.

Fixed on branch in commit e62004c5e. File-picker change events now run header detection in order; format/source changes still invalidate stale reads. The regression e2e delays the first small header read so a second selection overlaps. It passed against the rebuilt production web/server bundle. The UI build and local server build were refreshed before the green run.
Author
Owner

Deployed to calternal.cloud in merge round 34 (d395b6e25), 2026-10-08 05:03 IST. Backup: /srv/calternal/backup-pre-m34-20261008-0132. Production healthy after 36 s; served build matches.

Deployed to calternal.cloud in merge round 34 (d395b6e25), 2026-10-08 05:03 IST. Backup: /srv/calternal/backup-pre-m34-20261008-0132. Production healthy after 36 s; served build matches.
kayg closed this issue 2026-10-07 23:54:30 +00:00
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal-v0#1288
No description provided.