b6d2f15b6c
The desktop sidebar persists repo/lane order in localStorage (hermes.desktop.workspaceParentOrder / workspaceOrder). If that saved list ever contains the same id twice, orderByIds() pushes the matching item once per occurrence, rendering the same repo header twice inside a project. reconcileFreshFirst() then preserves the duplicates, so the corruption self-perpetuates across restarts and storage clears. Verified on a live install: the persisted workspaceParentOrder contained the same repo path at two positions, the backend project tree was clean, and the duplicated header matched the duplicated id. Treat persisted UI order as untrusted input: orderByIds() now skips ids it has already emitted, and reconcileFreshFirst() dedupes the retained tail so the next persist writes a clean list (self-healing).