Repository navigation
fix(ui): failed uploads reachable from the browser; keep uploadId (#187) - #219
Merged
Merged
Conversation
An all-failed upload has no migrated file, and review links were built only from migrated files, so a reviewer had no way from the browser to reach its stored rows (BR-25). The upload-response schema also dropped the returned uploadId. - Upload responses keep uploadId on every outcome (ok, duplicate, invalid, error). - New "Upload attempts" card, fed by the existing GET /api/csv/uploads (every attempt, failed included): status badge, failed-row count, "only failed or partial" filter (on by default) and a Review link. - The home loader refetches the attempts with the files list, so a failed upload shows up straight after it happens. Stopgap on the React screen until the Streamlit migration (#212). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011T6Wqi8yaiaYWUVH8C4QAY
Keeps this branch's import edit off the line #188 also changes, so the two merge in either order. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011T6Wqi8yaiaYWUVH8C4QAY
amar-python
marked this pull request as ready for review
November 9, 2026 10:31
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #187.
Problem
An all-failed upload has no migrated file, and the Review link was built only from migrated files (
f.upload_id). So a reviewer had no way, from the browser, to reach the stored rows and validation errors of an upload that failed (BR-25). The upload-response schema also dropped the returneduploadId.Change
uploadIdon every outcome (ok, duplicate, invalid structure, error).GET /api/csv/uploads(every attempt, failed included, so no backend change). Each row has a status badge, the failed-row count and a Review link. A filter, on by default, shows only failed or partly failed uploads.Tests
upload-attempts.test.tsx:uploadIdsurvives success, partial and all-failed responses; an all-failed upload is listed with a Review link; clean imports are hidden until the filter is turned off; rejected has no link; nothing is rendered with no attempts.files-refresh.test.tsupdated: the loader now makes two requests, and the test checks the attempts list refetches too.tscclean. Lint: only the existing Prettier baseline in the denseindex.tsxstyle; the new test file is clean.Merges cleanly with #188 in either order. React stopgap: the Streamlit migration plan is #212, whose spike picker already lists every attempt.
Generated by Claude Code