`move_cell_up` is broken.  You are using `index` here but it should be `i`.  But this brings up a bigger issue.  We don't use the `index` argument passed in at all, in `move_cell_up` and `move_cell_down`.  It seems like it is there to allow us to move a cell that is not the selected one.  Obviously it is currently broken.  To fix this we need to pass `index` as an argument to `index_or_selected` in both of these methods.