- Drag-to-reorder rows on every cost panel โ closes the named rev-124 next-sprint candidateThe rev-57 cost-by-source, rev-52 cost-by-assignee, and rev-66 cost-by-tag panels were sorted desc by spend with no manual override since they shipped. Operators with dense cost panels (10+ tags / sources / teammates) routinely wanted to pin 'the row I'm watching this week' to the top regardless of its absolute spend. Until rev 126 they had to scroll past the row of interest every time. Rev 126 closes that gap by adding HTML5 drag-and-drop to every row on every cost panel. Each row (when 2+ rows exist and the row has a stable ID โ synthetic 'untagged' / 'unassigned' buckets are not reorderable) gains a โฎโฎ grip handle, drag-over highlights the drop target with an inset brand-color top accent, and dropping persists the new order via the new shared `useCostPanelOrder` hook in `src/lib/cost-panel-order.ts`. Persisted in localStorage under a per-workspace + per-axis key โ same primitive shape as the rev-77 panel collapse (before rev 78 added cross-device sync via dashboardPrefs JSONB). Closes the operator-direction loop on the per-axis cost surface so the rev-124 cross-task drag-to-reorder primitive on dependencies and the rev-123 per-task primitive on blockers now have siblings on every cost-axis panel โ same reorder vocabulary across four operator-direction surfaces.
- Per-phase permalinks on /roadmap (Now / Next / Later) โ closes the named rev-125 next-sprint candidateRev 125 added per-item permalinks (loopdesk.space/roadmap#item-stripe-checkout) so an owner could share a specific candidate. Rev 125's running state explicitly named 'per-section share permalinks on /roadmap phases (Now / Next / Considering)' as the rev-126 candidate. Rev 126 closes that. Each phase header now carries `id="phase-<key>"` (`phase-now`, `phase-next`, `phase-later`) + a small ๐ chip in the phase title that surfaces on hover, copies the canonical URL with hash anchor on click, and updates the URL via `history.replaceState` so back/forward navigation re-fires the highlight. Hashchange listener auto-scrolls + 2.4s flash-highlights the matching phase via the new `[data-flash="true"]` attribute (CSS animation, no class mutation needed). New stable `key` slug per RoadmapPhase decouples the human-readable phase name from the public anchor so 'Now (Q2 2026)' can be renamed to 'Now (Q3 2026)' next quarter without breaking the public URL. Owners sharing the active sprint scope (loopdesk.space/roadmap#phase-now) now hand stakeholders a URL that lands on the matching phase header.
- Up/Down keyboard arrow reorder on every cost-panel grip handle โ accessibility-firstCloses the keyboard-axis gap on the rev-126 drag-to-reorder primitive in the same cycle pattern that's been running since rev 119 (Cmd+Enter / Esc shortcuts) and rev 124 (per-task blocker keyboard reorder). The rev-126 grip handle is a `<button>` with ArrowUp/ArrowDown handlers that move the focused row up/down in the list and persist the new order. Drag-and-drop is the most-discoverable affordance, but keyboard reorder is the load-bearing one for power-users + assistive tech users who can't (or don't want to) use a mouse. Pairs with the rev-119 useComposerShortcuts hook + rev-124 task-blocker keyboard reorder to extend the keyboard surface one more step into the dashboard's interactive vocabulary.
- Cumulative visual polish โ quiet 'Custom order applied ยท Reset' hint + grip-handle hover ladder + drag-state row treatmentCumulative micro-polish (every rev 22+ has carried at least one). New `.ld-cost-{axis}-order-hint` quiet teal-tinted dashed-border chip surfaces only when the operator has set a custom order on this panel โ pairs with a primary 'Reset to spend order' button that clears the persisted order in one tap. Grip handles fade to 0.45 opacity by default and brighten to full opacity on row hover or focus so the chip never screams from every row when the operator isn't interacting. Drop-target picks up an inset 2px brand-color top accent so the drop position reads tactilely; the dragging row drops to 40% opacity so the operator sees it's in flight. New `:focus-visible` brand-color outline ring on every grip handle so keyboard-only operators land cleanly. Every operator-direction reorder surface on the dashboard (rev-123 per-task blockers + rev-124 cross-task graph blockers + rev-126 cost-by-source / cost-by-assignee / cost-by-tag) now wears one consistent visual vocabulary.