Sequential reorder uses a temporary negative id slot plus range shifts so UNIQUE constraints on programs, courses, modules, and lessons stay valid; replaces module pairwise swap-only behavior. Co-authored-by: Cursor <cursoragent@cursor.com>
Preserve append-after-max ordering when omitting sort_order and keep global uniqueness enforced by DB. Co-authored-by: Cursor <cursoragent@cursor.com>