fix(dashboard): make chart domain labels readable on three views

What

UX fix for three chart-label readability defects on the dashboard. Every item was verified against a current render (build, generate 200-user fixture, analyze, render, view in a browser) before any code change. All three were genuinely still broken in current main.

The dashboard now uses one domain-label convention where space is tight: the short codes SC / CR / CI / Sec / Col / Inf (the existing DOMAIN_ABBREV constant, already used by the Profiles table), with the full name in a hover tooltip.

Per-item

R1 — Profiles expanded-row radar: domain labels clipped. STILL BROKEN. Full names at 130% radius overflowed the narrow SVG viewBox (width 260): "Code Review" right-edge 285 (clipped right), "Collaboration" left -28, "Infrastructure" left -30 (clipped left). Rendered as "Code Re", "tructure", "boration". Fix: label each axis with the short code plus a <title> tooltip; full names stay in the adjacent domain-score bars. internal/renderer/static/src/08-detail.js:51.

R2 — Adoption "Archetype Relationships" legend incomplete: 2 of 8 missing. STILL BROKEN. The legend already iterated every archetype node present in the data (never a fixed subset), but laid them in a single non-wrapping row. With all 8, the running x overflowed the 600-wide viewBox: "Generalist" started at x=612 and "Emerging User" at x=702, both off the right edge and invisible. (The specific pair depends on data; the smallest-count archetypes always fell off.) Fix: wrap the legend onto additional rows and grow the viewBox to fit, so all 8 stay visible. internal/renderer/static/src/03-adoption.js:294.

R3 — Adoption heatmap column headers truncated. STILL BROKEN. .heatmap-table is table-layout: fixed with a ~70px column budget and th { text-overflow: ellipsis }. "Source Control", "Code Review", "Collaboration", "Infrastructure" all overflowed and rendered "Source Co...", "Code Revi...", etc. Fix: emit the short code with a title= tooltip giving the full name. internal/renderer/static/src/03-adoption.js:44.

Tests (committed, fail-on-old)

Three structural tests in internal/renderer/render_test.go, all confirmed to FAIL on the pre-fix bundle and PASS on the fixed bundle:

  • TestRender_AdoptionHeatmapHeaderUsesShortCodes — header uses short code + title; rejects the old bare-label <th>.
  • TestRender_AdoptionLegendWrapsAllArchetypes — legend iterates every node, wraps on overflow, resizes the viewBox; rejects the old single-row layout.
  • TestRender_ProfileRadarLabelsReadable — radar axis uses short code + <title>; rejects the old full-label text node.

Validation

  • make static regenerated assets/app.src.js from src; make check passed (bundle-sync gate).
  • go vet ./... clean. CGO_ENABLED=1 go test -race ./... pass. golangci-lint run 0 issues. Coverage 69.9% (>= 65%).
  • Visual confirm in a browser on a 200-user fixture: heatmap headers SC/CR/CI/Sec/Col/Inf with no ellipsis; legend shows all 8 archetypes on two rows; radar axis labels readable and within the viewBox.

Do not merge.

Merge request reports

Loading