fix: add missing local declarations in cmd_transition to prevent cross-contamination #967
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.



Summary
localdeclarations forsession_id,worktree,branch,log_file, andpr_urlincmd_transition()caseblock withoutlocal, causing them to leak into the shell's global scopecmd_transition()in a loop for multiple tasks, stale values from a previous call would be picked up by${branch:-}/${pr_url:-}checks and written to unrelated tasks' DB rowsRoot Cause
This was the root cause of all PR cross-contamination we've been tracking:
feature/t236.1tofeature/t236.5(the last dispatched task)Why t232 didn't catch it
The centralized
link_pr_to_task()(t232) validates PR ownership when called explicitly. Butcmd_transition()has its own--pr-urlflag that writes directly to the DB — and the stale global variable caused it to silently pass a wrong PR URL without going through validation.One-line fix
Verification
localkeyword ensures variables are scoped to the function and reset to empty on each call--branch/--pr-urlwill correctly see empty values and skip the DB update