fix(dashboard): repair three UX defects on Gaps, About, and Groups
Repairs three BROKEN defects found in a dashboard UX review. The dashboard is the static D3.js app in internal/renderer/static/ (source in src/*.js, concatenated into assets/app.src.js).
Defects and fixes
B1 — Gaps doc link / row navigation. The "Do This Next" links and the gap-row click are now confirmed correct and locked: doc links open in a new tab (target="_blank" rel="noopener noreferrer") and a gap-row click switches tabs in place rather than navigating the dashboard away (02-health.js / 05-groups.js, 10-ui.js formatPlayLink). Added a fail-on-old structural test.
B2 — About version was blank. The About view rendered manifold . Dashboard generated <date> with an empty version (a bare period) because the binary version never reached the dashboard. Plumbed end to end: the analyzer stamps summary.build_version from internal/version (defaults to dev), and the dashboard renders the About + footer spans from it with a dev fallback so the line is never blank. (internal/schema/analyzer.go, internal/analyzer/summary.go, src/02-health.js)
B3 — Groups workshop card missing HEALTH IMPACT. Workshop cards dropped the HEALTH IMPACT stat when the projected delta was zero, breaking the three-stat layout (most visibly the "Connect to review and CI workflows" card). Now always renders the stat, showing +0 when the delta is zero. (src/05-groups.js)
Tests (fail-on-old, committed in internal/renderer and internal/analyzer)
TestRender_GapsDocLinkOpensNewTab— asserts the play link carriestarget="_blank"+rel="noopener noreferrer"and the row handler defers to anchor clicks.TestRender_AboutVersionNeverBlank— asserts the bundle readsbuild_versionwith adevfallback and writes the About + footer spans.TestRender_WorkshopCardAlwaysHasHealthImpact— asserts the HEALTH IMPACT stat is emitted unconditionally (noprojectedHealth > currentHealthguard).TestComputeSummary_StampsBuildVersion/TestBuildVersion_FallsBackToDev— assert the analyzer stamps a non-empty version and falls back todev.
Validation
make staticregeneratedassets/app.src.js(in sync withsrc/*.js).go vet ./...clean,CGO_ENABLED=1 go test -race ./...pass,golangci-lint run0 issues, coverage 69.9% (>= 65%).- Visual confirmation via headless browser against a synthetic fixture (
manifold generate --users 200->analyze->render). Screenshots:/tmp/manifold-ux-fixes/about.png(version line showsmanifold v1.0.0-...),/tmp/manifold-ux-fixes/groups.png(all six cards show HEALTH IMPACT incl. the "Connect to review and CI workflows" card at+0),/tmp/manifold-ux-fixes/gaps.png(doc links present; DOM check confirmedtarget=_blankand that a row click stays on the dashboard).
Do not merge.