fix(dashboard): declutter Influence ego-network edge labels

What

The Influence view ego-network rendered a per-edge relationship label on every edge, always on. Two defects resulted:

  • R4 (Projects view): every membership edge repeated the word "member", stacking into a solid wall over the project nodes, obscuring which projects are which.
  • R7 (Users view): "reviewed" and "merged" labels accumulated around the central ego node, overlapping each other and the node circles.

Both reproduced on a current render (200 synthetic users): 56 "member" labels in the Projects view, 94 "reviewed"/"merged" labels in the Users view, all at full opacity.

Approach: hover-gated edge labels

The relationship type is already encoded by edge color and dash style (blue solid = reviewed, green dashed = merged, brown = project membership) and stated in the legend, so the repeated label words add little by default and only create clutter on dense graphs.

The fix hides the entire edge-label layer by default (opacity 0, pointer-events none) and reveals it on hover:

  • Hovering a node shows the labels for that node's incident edges.
  • Hovering a single edge shows that one label.
  • Leaving re-hides the layer.

Node identity labels (usernames, project names) stay visible at all times, so identification never degrades. No graph information is removed: the edges and their types are still fully present (color + dash + on-demand label). The legend hint now reads "Hover a node for relationship labels".

This keeps the change small and contained to src/07-influence.js (label layer + hover handlers) plus a one-line legend hint in src/08-detail.js.

Before / after

Before: dense "member" wall over project nodes (R4); "reviewed"/"merged" pile around the ego node (R7).

After:

  • Users view: central node and every neighbor username read cleanly; relationship type shown by edge color.
  • Projects view: project nodes clearly identifiable; the "member" wall is gone.

Screenshots captured against a local render of 200 synthetic users (before-users, before-projects, users, projects).

Validation

  • make static regenerated the bundle; make check passes (bundle in sync with source).
  • go vet ./... clean; CGO_ENABLED=1 go test -race ./... passes; golangci-lint run 0 issues; coverage 69.9%.
  • Committed structural test TestRender_InfluenceEdgeLabelsHoverGated asserts the edge-label layer is created default-hidden, node hover reveals only incident-edge labels, edge hover reveals a single label, mouseleave re-hides the layer, and the pre-fix always-on code is gone. Verified fail-on-old: every assertion fails against the pre-fix bundle.

Merge request reports

Loading