Re-applies #10579 review feedback that was lost before merge.
Rename the two result-ledger columns to spell out their lifecycle: outcome -> final_outcome (flips at most once, to a terminal value) and revoke_response -> last_revoke_response (overwritten on each retry attempt). The split stays readable at the call sites — a 5xx leaves final_outcome NULL while last_revoke_response carries the latest error.
Since #10579 already merged, the rename ships as a new migration (20260610124334_rename_revoke_job_item_columns) using ALTER ... RENAME COLUMN. Atlas's diff engine can't infer renames and emits a destructive DROP/ADD, so the SQL is hand-corrected to preserve the columns' contents.
RecordOutcome and RecordTransientFailure now fast-fail when the update matches no row. Every connection is staged by BatchCreatePending before the workflow records anything, so a zero-row match means a wrong job/connection id — surfaced instead of silently succeeding.
Stacked follow-up to #10579 (workerdb table + store, 1/3). The thermos stack now rebases on top of this: #10580 (2/3) is re-based onto this branch.