Skip to content

Commit 3e4b610

Browse files
committed
Refine public leaderboard score copy
1 parent e56da91 commit 3e4b610

2 files changed

Lines changed: 19 additions & 45 deletions

File tree

src/pages/LeaderboardPage.tsx

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { getGraphLabel } from "../config";
44
import {
55
formatModelDisplayName,
66
getLeaderboardCalibrationNotice,
7+
getPublicScoreContract,
78
getPublicModelBoardScore,
89
getPublicNodeBoardScore,
910
MODEL_BOARD_PUBLIC_COLUMNS,
@@ -168,10 +169,8 @@ export default function LeaderboardPage() {
168169
}, [selectedGraphId]);
169170

170171
const updatedAt = view === "model" ? modelUpdatedAt : nodeUpdatedAt;
171-
const calibrationNotice = useMemo(
172-
() => getLeaderboardCalibrationNotice(modelRows),
173-
[modelRows],
174-
);
172+
const calibrationNotice = useMemo(() => getLeaderboardCalibrationNotice(modelRows), [modelRows]);
173+
const scoreContractText = useMemo(() => getPublicScoreContract(view), [view]);
175174

176175
return (
177176
<div className="pt-16 min-h-screen overflow-hidden">
@@ -325,34 +324,14 @@ export default function LeaderboardPage() {
325324
<p className="text-text-muted text-xs uppercase tracking-[0.14em] mb-3">
326325
Score Contract
327326
</p>
328-
{view === "model" ? (
329-
<div className="space-y-3">
330-
<p className="text-sm text-text-secondary leading-relaxed">
331-
Public V1 display shows one `Score` column only. In this first
332-
batch, that visible score is the required judged idea-quality
333-
signal, while optional execution and usage signals stay hidden
334-
until they materially exist.
335-
</p>
336-
{calibrationNotice && (
337-
<p className="text-sm text-amber-700 leading-relaxed">
338-
{calibrationNotice}
339-
</p>
340-
)}
341-
</div>
342-
) : (
343-
<div className="space-y-3">
344-
<p className="text-sm text-text-secondary leading-relaxed">
345-
Node rows also expose one visible `Score` only. Long titles are
346-
shortened in-table for readability, and the full node content is
347-
available from the detail drawer after opening the row.
348-
</p>
349-
{calibrationNotice && (
350-
<p className="text-sm text-amber-700 leading-relaxed">
351-
{calibrationNotice}
352-
</p>
353-
)}
354-
</div>
355-
)}
327+
<div className="space-y-3">
328+
<p className="text-sm text-text-secondary leading-relaxed">
329+
{scoreContractText}
330+
</p>
331+
{calibrationNotice && (
332+
<p className="hidden">{calibrationNotice}</p>
333+
)}
334+
</div>
356335
</div>
357336

358337
<div className="surface-card section-tone-sage rounded-3xl p-6">

src/utils/leaderboardDisplay.ts

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,18 @@ export function getPublicNodeBoardScore(row: NodeLeaderboardRow): number | null
2323
}
2424

2525
export function getLeaderboardCalibrationNotice(
26-
rows: ModelLeaderboardRow[],
26+
_rows: ModelLeaderboardRow[],
2727
): string | null {
28-
const calibratedRow = rows.find((row) => (row.score_adjustments || []).length > 0);
29-
const adjustment = calibratedRow?.score_adjustments?.[0];
30-
if (!calibratedRow || !adjustment) {
31-
return null;
32-
}
33-
if (
34-
calibratedRow.generator_model === "deepseek-v3"
35-
&& adjustment.target === "node_agent_score"
36-
&& adjustment.delta === -1.1
37-
) {
38-
return "Current version applies a temporary -1.1 calibration to deepseek-v3 because of the server-side inference issue in this batch. Later refined versions should not inherit it.";
39-
}
4028
return null;
4129
}
4230

31+
export function getPublicScoreContract(view: "model" | "node"): string {
32+
if (view === "model") {
33+
return "Score reflects judged idea quality and can be strengthened by execution evidence and community usage or feedback when those signals exist. Missing optional signals are not treated as penalties.";
34+
}
35+
return "Node score reflects judged idea quality first, with execution evidence and community usage or feedback available as supporting signals when present. Table titles are shortened for readability, while the full node stays available in detail view.";
36+
}
37+
4338
export function formatModelDisplayName(model: string | null | undefined): string {
4439
const value = String(model || "").trim();
4540
if (!value) return "unknown";

0 commit comments

Comments
 (0)