- Per-axis optimistic concurrency control on costPanelOrder — closes the named rev-137 next-sprint candidateUntil rev 138 the rev-127 multi-device sync of cost-panel custom row order across the rev-57 cost-by-source / rev-52 cost-by-assignee / rev-66 cost-by-tag panels was last-writer-wins: if Machine A wrote `{source: [a,b]}` at T1 and Machine B wrote `{source: [c,d]}` at T2 with T2 > T1 but Machine A's PUT arrived after B's (network reorder, slow connection, retry backoff), Machine A's older order silently clobbered Machine B's newer one. Rev 138 closes that gap with the same OCC primitive rev 136 introduced for taskCommentFilters at the cheapest possible primitive: per-axis epoch-ms timestamp via the new companion field `costPanelOrderUpdatedAt: { source?: number; assignee?: number; tag?: number }`. When the patch's per-axis `at` is older than the existing server-side stamp, the server keeps the newer order and surfaces the rejection on the rev-137 telemetry trail at `rejected.costPanelOrder: Array<{axis, reason: 'stale_write', existingAt, incomingAt}>`. Empty-array clears (the rev-126 reset path) bypass the timestamp check because the operator's intent to reset is always honoured — same exemption rule as the rev-136 taskCommentFilters OCC primitive. Closes the named rev-137 next-sprint candidate at the cheapest possible primitive.
- Outpaced — reloaded chip on the rev-126 cost-panel reset row across all three axesuseCostPanelOrder hook extended: every PUT to /api/workspace/dashboard-prefs now reads the response and, when it carries a `rejected.costPanelOrder` entry for THIS axis, (a) surfaces a brand-amber 'Outpaced — reloaded' chip alongside the rev-127 'synced across devices' / 'saved on this device' chips on the rev-126 reset row, (b) re-syncs local state (order array + localStorage cache) from the canonical `prefs.costPanelOrder[axis]` returned on the same response — no follow-up GET. Auto-fades after 5s with a brand-amber palette + pulsing dot animation that matches the rev-137 taskCommentFilters Outpaced chip exactly so the dashboard's three multi-device-synced surfaces (taskCommentFilters rev 137 / costPanelOrder rev 138 / + future axes) read with one consistent transient-confirmation visual story. Click to dismiss early. Strategic significance: closes the operator-visibility gap on the rev-138 OCC primitive at the cheapest possible surface — no new round-trip, no polling, no schema beyond the new timestamp companion; the rejection trail rides the same response the PUT already returned. Mounted on all three cost panels (cost-by-source, cost-by-assignee, cost-by-tag).
- v1 mirror + OpenAPI 3.1 typed coverage in lockstep — 61st unbroken cadence revCloses the v1 parity gap on the rev-138 dashboard primitive in the same cycle the dashboard primitive ships. Both the dashboard `/api/workspace/dashboard-prefs` PUT and the bearer-auth `/api/v1/workspace/dashboard-prefs` PUT (and DELETE) now accept the new `costPanelOrderUpdatedAt` field and return the rev-137 `{ prefs, rejected }` response shape extended with the rev-138 `rejected.costPanelOrder` array so MCP hosts driving the desk programmatically across multiple machines (e.g. a watcher agent on a CRON server + a manual operator on a laptop) see exactly which axis the OCC step rejected. OpenAPI 3.1 spec types the new `costPanelOrderUpdatedAt` per-axis shape plus the `rejected.costPanelOrder` array with full per-entry shape (axis enum source/assignee/tag, reason enum 'stale_write', existingAt + incomingAt timestamps). The rev-78 cadence pattern (every dashboardPrefs primitive gets typed in the OpenAPI spec in the same cycle it ships) reaches its 61st unbroken rev with rev 138.
- Cumulative dashboard polish — Outpaced chip palette + 5s fade + tactile hover liftNew `.ld-cost-order-outpaced` brand-amber palette (`rgba(207, 108, 58, *)`) distinct from the rev-127 brand-teal `.ld-cost-order-sync` chip + rev-127 muted-grey `.ld-cost-order-local` chip so the three filter-row chips read at three distinct attention levels: passive informational (synced teal), passive informational (saved-on-device grey), transient warning (outpaced amber). 1px hover lift + 160ms transitions match the rev-22+ tactile click affordance vocabulary. 5s `ld-cost-order-outpaced-fade` keyframes animation. New `.ld-cost-order-outpaced-dot` pulsing dot + `:focus-visible` outline ring matches the rev-38 dashboard accessibility pattern so keyboard-only operators land cleanly. Cumulative micro-polish (every rev 22+ has carried at least one). Pairs with the rev-137 Outpaced chip vocabulary so the dashboard's multi-device-synced surfaces speak one consistent transient-confirmation visual language across both the per-thread filter row and the per-axis cost-panel reset row.