Review follow-ups: PR #596 — fix(import-web): clear the web CSV-import UX blockers (browser pass 2026-09-25) #839
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Non-blocking findings from the auto code review of PR #596 (fix(import-web): clear the web CSV-import UX blockers (browser pass 2026-09-25)) — captured for batch cleanup rather than blocking the PR.
Commit
120f7f3· https://github.com/Gambit-Inc/gambit/pull/596SHOULD-FIX:
backend/app/routes/imports.py:2417: The reopen guard reads_row_lane(r)beforer.decisionis changed. A row withmatch_status == "auto"that was set aside (decision == "park") reports lane"parked", so the guard lets it through. Afterdecision = "pending"its lane becomes"auto", which is not in_PENDING_LANESand stages nothing (_staging_candidateexcludes pending). That is the silent drop the comment says the guard prevents. The UI never offers Undo on park rows, but the API accepts it directly. Guard onr.match_status == "auto"(and no blocking warning), or compute the lane as it would be after the change.frontend/app/hq/imports/_components/DecidedRows.jsx:82:sugg[pick][1]throws a TypeError ifpicks[row_id]is out of range for the currentsugg. Thepicksstate keeps the index perrow_id, androw.candidatescan change after a reload or re-match. The select then shows a blank value, and "Use this" crashes the component. Clamp withsugg[Math.min(pick, sugg.length - 1)].frontend/app/hq/imports/_components/DecidedRows.jsx:25:loadhas no stale-response guard.useEffectrefires on everysessionobject change, andrefreshSessionruns after most actions. An older, slowerwalkDecidedreply can overwrite a newer one. A row the seller just undid can then reappear as "Decided" until the next refresh. Track a request token, as the resume runs do.backend/app/routes/imports.py:2417:reopenclearsdecided_candidatebut leavesmatch_signal = "operator-assigned"(set byassign) on the row. Confirm nothing downstream treats that signal as a lane or gate input once the row is pending again.NITS:
none
Filed from a Claude Code session