- JSON link option on the rev-65 scoped activity-export UICloses the explicitly-named rev-122 next-sprint candidate. Rev 122 added `?format=json` to every dashboard CSV export and rev 121 mirrored the flag on every v1 export โ but the rev-65 ActivityExportRange component only emitted CSV download URLs, so session-authenticated callers wanting a date-scoped JSON payload had to construct the URL by hand. Rev 123 closes that gap. The component now renders a paired CSV/JSON chip cluster (mirroring the rev-122 paired-chip pattern from the integrations panel data-export section) so the date-range UI reads as a sibling of the unscoped exports above it. CSV stays the primary affordance for procurement reviewers downloading the takeaway artefact; the ambient JSON chip opens the same scoped data in a new tab for in-app analytics and browser-side audit tooling without leaving the session.
- Drag-to-reorder per-task blockers (closes named rev-122 next-sprint candidate)The rev-36 task-blocker primitive made dependencies a real queue gate (the pulse engine's `selectNextTask` filter is order-agnostic โ it requires *all* blockers done before the dependent is eligible) but the visual order in the dashboard surface is operator-direction: which blocker reads first when triaging multiple. Until rev 123 the rev-38 task dependency graph view + the rev-36 inline TaskBlockers list were both read-only. Rev 123 closes the named candidate by adding HTML5 drag-and-drop to the per-task blockers list โ each row gains a โฎโฎ grip handle (visible only when 2+ blockers are declared and the user has editor+ access), drag-over highlights the drop target with a brand-color top accent, and dropping persists the new order via the existing rev-36 `PUT /api/tasks/:id/blockers` endpoint. Pure UX/operator-direction primitive on top of the existing schema โ no new column, no new endpoint, no new mental model. Mirrors the rev-21 priority pill at the per-blocker axis.
- OpenAPI typed coverage for `?format=csv|json` on the six-axis procurement-evidence v1 export clusterCloses the typed-contract gap on the procurement-evidence v1 export cluster. Rev 121 added `?format=json` to every v1 export endpoint and rev 122 mirrored the flag on the dashboard side, but only `/workspace/cost-export` (rev 84) and `/workspace/sources-export` (rev 96) had typed schemas โ the four remaining endpoints (`/workspace/activity-export`, `/workspace/artifacts-export`, `/workspace/decisions-export`, `/workspace/stale-tasks-export`) had self-describing-index entries but no OpenAPI typing. Rev 123 closes that gap by typing all six endpoints with `format=csv|json` parameter + `application/json` response shape inline, so MCP-host code generators reading the spec see one consistent contract across the entire procurement-evidence cluster regardless of output shape.
- Cumulative visual polish โ drag handle + smooth blocker-row transitionsCumulative micro-polish (every rev 22+ has carried at least one). New `.ld-task-blocker-grip` muted-tone grip handle brightens on hover so the rev-123 reorder affordance is discoverable without screaming. The blocker row gains 160ms transitions on background-color/transform/border-color so drag-over feels tactile rather than jumpy; the dragging row drops to 40% opacity so the operator sees it's in flight; the drop-target picks up a soft brand-color top accent so the eye knows where the dropped row lands. The rev-by-rev visual-hierarchy discipline keeps the dashboard's interactive surfaces reading as a coherent design language even as the cumulative affordance count grows.