fix(web): drag-to-link on the Gantt has no visible affordance — the only cue is an invisible 8px hotspot

Raised by the 0.4 VoC panel (2026-08-01), Delivery/Program Manager lens. This is a simulated persona panel, not user research — the panel is not evidence. The finding rests on the code cited below.

Problem

Drag-to-link between two tasks works — it is one half of the "core-flow delight" (#1666 (closed)) the roadmap calls "the two interactions an evaluator hits in the first minute". But it is undiscoverable at rest:

  • packages/web/src/features/schedule/engine/GanttHitIndex.ts:124-132 — the link-dot zone is an invisible 8-12px region at a bar's right edge
  • GanttEngineImpl.ts:1891-1892 — the only rest-state cue is a crosshair cursor change on hover
  • ScheduleLegend.tsx:130-141 — the single text hint is hidden below 1024px and defaults collapsed at the bottom of the canvas

A first-time evaluator has no way to learn the gesture exists without already knowing it.

Suggested fix

Render a small visible handle or dot at the bar's right edge on row hover — a rendering change against the existing hit zone, not a new interaction model. The hit-testing, the FSM (GanttLinkFSM.ts), the preview (GanttRenderer.ts:3009-3080) and the cycle-rejection toast all already work and need no change.

#2682 (closed) covers the other half of #1666 (closed) — Enter-to-add-row being inert behind a default-off feature flag. Together they are the two interactions the release stakes its first-minute claim on.