Review: tmux window move should insert, not swap

review-358-2026-03-25 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Lineage -- present: "standalone -- discovered during tmux daily use"
  • [x] Repo -- present: ldraney/tmux-custom (GitHub)
  • [ ] User Story -- MISSING (acceptable omission for bug type)
  • [x] Context -- present as "What Broke" + "Repro Steps" + "Expected Behavior" (thorough for a bug)
  • [ ] File Targets -- MISSING. Agent needs explicit file path and modification zone.
  • [x] Acceptance Criteria -- present (4 criteria)
  • [ ] Test Expectations -- MISSING (mitigated: tmux configs lack automated test harness)
  • [ ] Constraints -- MISSING. Critical: plugin load order not documented.
  • [ ] Checklist -- MISSING
  • [x] Related -- present

File Targets

  • [x] ~/tmux-custom/.tmux.conf -- verified exists (symlinked from ~/.tmux.conf). 102 lines. Config confirmed.
  • [x] renumber-windows on at line 72 -- verified exactly as claimed.
  • [x] ~/.tmux/plugins/tmux-pain-control/pain_control.tmux -- verified. Lines 29-32 confirm swap-window -d -t -1 and swap-window -d -t +1 bindings on < and >.
  • [ ] ISSUE: No File Targets section in the issue. The agent must know to add override bindings to ~/tmux-custom/.tmux.conf, specifically AFTER the TPM init line (line 95: run '~/.tmux/plugins/tpm/tpm'). This is not stated anywhere.

Repo Placement

OK. Issue filed on forgejo_admin/dotfiles (issue tracker). Code lives in ldraney/tmux-custom (GitHub). Repo description confirms this split: "Code lives on GitHub (tmux-custom), issues tracked here." Single repo affected.

Dependencies

No dependencies. Board item #358 is the only item on board-dotfiles. No blockers, no blocked items. Standalone bug fix.

Acceptance Criteria

4 criteria provided. Assessment:
  • [x] "prefix + < moves current window left one position without displacing non-adjacent windows" -- testable manually, clear pass/fail
  • [x] "prefix + > moves current window right one position without displacing non-adjacent windows" -- testable manually, clear pass/fail
  • [x] "Repeatable (-r) -- mash key to slide through multiple positions" -- testable, implies bind-key -r flag
  • [x] "Works with renumber-windows on (line 72 in config)" -- testable, line reference verified accurate
Criteria are well-written and verifiable. No missing criteria detected.

Blast Radius

  • The only other swap-window binding in the config is line 17: bind-key -n MouseDrag1Status swap-window -dt= (mouse drag reorder). The fix should NOT change this -- it only overrides the < / > keybindings from tmux-pain-control.
  • The plugin also sets pane navigation (h/j/k/l), pane resize (H/J/K/L), split bindings (|, -, etc.), and new-window. These are unaffected by overriding only < / >.
  • No sibling services or downstream consumers. Self-contained dotfile change.

Recommendation

Two issues must be addressed before this ticket is READY:
  • Add File Targets section:
    ### File Targets
    - `~/tmux-custom/.tmux.conf` -- add override bindings AFTER TPM init (after line 95)
    - DO NOT modify `~/.tmux/plugins/tmux-pain-control/pain_control.tmux` -- plugin-managed file
  • Add Constraints section:
    ### Constraints
    - Override bindings MUST be placed after `run '~/.tmux/plugins/tpm/tpm'` (line 95). TPM executes plugin scripts during init, so any binding set before this line will be overwritten by tmux-pain-control.
    - Use `swap-window` with adjacent target only (not move-window, which has different renumber semantics).
    - Keep `-r` flag for repeat capability.
    - Do NOT touch the MouseDrag1Status binding on line 17 (separate feature).