Problem
Hardware pages send selectedCommits as { "0": "head"|hash, … } keyed by the tree’s position in an ordered list. The backend resolves that against ordering in get_hardware_trees_head_commits, and the UI mirrors this with treeIndexes / treeCommits[].
Any mismatch in sort order across summary, tabs, caches, or refactors silently maps the wrong commit to the wrong tree.
Goal
Selections should survive reordering (and differing list order implementations) by identifying trees with a unique key derived from checkout identity (most likely a concatenation of important info (tree name/branch/repo_url, or a key derived of this tuple)).
Acceptance criteria
Problem
Hardware pages send selectedCommits as { "0": "head"|hash, … } keyed by the tree’s position in an ordered list. The backend resolves that against ordering in
get_hardware_trees_head_commits, and the UI mirrors this with treeIndexes / treeCommits[].Any mismatch in sort order across summary, tabs, caches, or refactors silently maps the wrong commit to the wrong tree.
Goal
Selections should survive reordering (and differing list order implementations) by identifying trees with a unique key derived from checkout identity (most likely a concatenation of important info (tree name/branch/repo_url, or a key derived of this tuple)).
Acceptance criteria