commit 5618e59897d0dae1dd10f47a1d8e147054069a9d
parent 96e47d0e1acc7b77cf730518cd97e6b0cb6f419b
Author: Brian Graham <brian@buildingbetterteams.de>
Date: Mon, 23 Mar 2026 10:06:09 +0100
Add explainer text for each named game on dashboard
Each game row now shows a one-line description explaining what the
pattern means and how it's detected.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Diffstat:
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/explorer/src/style.css b/explorer/src/style.css
@@ -181,8 +181,9 @@ svg .grid-line { stroke: var(--grid-line); }
border-bottom: 1px solid var(--border);
}
.game-row:last-child { border-bottom: none; }
-.game-name { font-size: 0.9rem; }
-.game-pct { font-family: var(--font); font-size: 0.9rem; color: var(--red); }
+.game-name { font-size: 0.9rem; font-weight: 600; }
+.game-desc { font-size: 0.78rem; color: var(--text-dim); margin-top: 2px; }
+.game-pct { font-family: var(--font); font-size: 0.9rem; color: var(--red); flex-shrink: 0; }
/* Table */
.table-wrap { overflow-x: auto; }
diff --git a/explorer/src/views/dashboard.ts b/explorer/src/views/dashboard.ts
@@ -2,6 +2,19 @@ import { loadDashboard, type Dashboard, type Pipeline } from '../data';
import { renderHistogram } from '../components/histogram';
import { renderBarChart } from '../components/bar-chart';
+const GAME_DESCRIPTIONS: Record<string, string> = {
+ 'Overclaiming': 'Abstract claims not supported by results, or results generalized beyond what was tested.',
+ 'Big Numbers No Error Bars': 'Reports results with no confidence intervals, no variance, and no uncertainty quantification.',
+ 'Contamination Dodge': 'Evaluates on benchmarks without discussing whether the model saw the test data during training.',
+ 'Open Source Theater': 'Releases code but provides no environment specs or reproduction instructions. Technically "open" but practically unreproducible.',
+ 'Trust Us': 'No raw data released and no code released. Claims are completely unverifiable by independent researchers.',
+ 'Moving Goalpost': 'Makes causal claims ("X improves Y") from observational data without a causal study design.',
+ 'The Black Box': 'No prompts provided and no hyperparameters reported. The experiment cannot be replicated even in principle.',
+ 'Cherry-picked Comparisons': 'Baselines are outdated or suspiciously weak. Newer, stronger alternatives exist but are not compared against.',
+ 'All Show No Substance': 'Strong evaluation design (baselines, metrics, ablations) but near-zero statistical rigor and no artifact release.',
+ 'Limitation Theater': 'Has a limitations section, but it contains only generic boilerplate rather than specific threats to this study.',
+};
+
function renderProgressBar(p: Pipeline): string {
const total = p.registry_total;
const scannedPct = (p.v2_scanned / total * 100).toFixed(1);
@@ -65,8 +78,9 @@ export async function renderDashboard(app: HTMLElement) {
<div class="section">
<h2>Named Games</h2>
+ <p style="font-size:0.82rem;color:var(--text-dim);margin-bottom:0.75rem">Recurring methodological anti-patterns detected by checklist combinations. Percentage = share of papers exhibiting the pattern.</p>
${Object.entries(agg.game_pcts).sort((a, b) => b[1] - a[1]).map(([name, pct]) =>
- `<div class="game-row"><span class="game-name">${name}</span><span class="game-pct">${pct}%</span></div>`
+ `<div class="game-row"><div><span class="game-name">${name}</span><div class="game-desc">${GAME_DESCRIPTIONS[name] || ''}</div></div><span class="game-pct">${pct}%</span></div>`
).join('')}
</div>