From 2dc59762d3617307bc0cb89759c559a0a6f3031e Mon Sep 17 00:00:00 2001 From: Punch Date: Fri, 5 Jun 2026 17:11:46 +0000 Subject: [PATCH] Route contributor names to profile on spec tables --- BACKLOG.md | 2 +- dist/index.html | 2 +- src/components/Leaderboard.tsx | 9 +++++++-- src/components/SubmissionPanel.tsx | 10 +++++++++- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/BACKLOG.md b/BACKLOG.md index 40836b9..1e249ac 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -75,7 +75,7 @@ If any seat would be confused, the component fails. - **"Top competitor — open-source code"** panel — ● ● ● — `SotaCodeViewer` now renders `agent.py` inline (collapsed 28/full toggle, syntax highlight, Copy, GitHub-↗ fallback). Shipped step 343. - `StepViewer` (3D viewer) — ● ● ● — drag/zoom hint visible, lazy-loaded. - `SotaChart` (best score over time) — ○ ○ ○ -- "Passing submissions" + "All submissions" tables — ○ ○ ○ +- "Passing submissions" + "All submissions" tables — ● ● ● — contributor name in both tables is now a routed `` with stopPropagation so the row's onClick still fires for non-name clicks; hover style + 95-char tooltip ("View {contributor}'s agent profile — overall rank, per-category scores, and forkable submissions"). Closes the same flywheel-surfacing gap solved on `SotaChart` step 377: every contributor identity on the spec detail page now routes to their profile in one click. (`Leaderboard.tsx` L173–183, `SubmissionPanel.tsx` L1, L74–83) ### Rankings (`/rankings`) diff --git a/dist/index.html b/dist/index.html index 638f9ef..46feeb3 100644 --- a/dist/index.html +++ b/dist/index.html @@ -61,7 +61,7 @@ }; } - + diff --git a/src/components/Leaderboard.tsx b/src/components/Leaderboard.tsx index f83e504..0684ee6 100644 --- a/src/components/Leaderboard.tsx +++ b/src/components/Leaderboard.tsx @@ -172,9 +172,14 @@ export function Leaderboard({ spec, submissions, loading, onSelectEntry, selecte
- + e.stopPropagation()} + className="text-white font-medium text-xs hover:text-forge-accent hover:underline" + title={`View ${s.contributor}'s agent profile — overall rank, per-category scores, and forkable submissions`} + > {s.contributor} - + {s.has_step && ( 3D diff --git a/src/components/SubmissionPanel.tsx b/src/components/SubmissionPanel.tsx index 0ce8c59..887c222 100644 --- a/src/components/SubmissionPanel.tsx +++ b/src/components/SubmissionPanel.tsx @@ -1,3 +1,4 @@ +import { Link } from "react-router-dom"; import { Submission, metricConfig, submissionCodeUrl } from "../lib/api"; interface Props { @@ -72,7 +73,14 @@ export function SubmissionPanel({ submissions, loading, onSelect }: Props) { className={`px-4 py-2.5 flex items-center gap-3${onSelect ? " cursor-pointer hover:bg-forge-border/20 transition-colors" : ""}`} > - {s.contributor} + e.stopPropagation()} + className="text-white text-sm font-medium shrink-0 hover:text-forge-accent hover:underline" + title={`View ${s.contributor}'s agent profile — overall rank, per-category scores, and forkable submissions`} + > + {s.contributor} + {s.passed ? (() => { const v = s.score ?? s.mass_grams; const { unit, decimals } = metricConfig(s.score_metric);