commit 96a3826ca9778e25930fd3677f6e78f06b21e146
parent 51dc81021fc0182b9668043b714be26b1f230a2a
Author: Brian Graham <brian@buildingbetterteams.de>
Date: Mon, 23 Mar 2026 15:05:25 +0100
Show v3 scans in survey progress bar
Progress bar now has 5 segments: V3 (blue, 53), V2 (green, 692),
V1 rescan, Queued, No PDF. Header shows engagement factor count.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Diffstat:
4 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/explorer/src/data.ts b/explorer/src/data.ts
@@ -50,6 +50,8 @@ export interface HistBin {
export interface Pipeline {
registry_total: number;
v2_scanned: number;
+ v3_scanned: number;
+ v2_only: number;
v1_needs_rescan: number;
has_text_no_scan: number;
no_text: number;
diff --git a/explorer/src/style.css b/explorer/src/style.css
@@ -483,6 +483,7 @@ td.score {
height: 100%;
transition: width 0.3s;
}
+.pipeline-seg.v3 { background: var(--accent); }
.pipeline-seg.scanned { background: var(--green); }
.pipeline-seg.v1 { background: var(--accent); }
.pipeline-seg.queued { background: var(--yellow); }
@@ -502,6 +503,7 @@ td.score {
margin-right: 4px;
vertical-align: middle;
}
+.pipeline-dot.v3 { background: var(--accent); }
.pipeline-dot.scanned { background: var(--green); }
.pipeline-dot.v1 { background: var(--accent); }
.pipeline-dot.queued { background: var(--yellow); }
diff --git a/explorer/src/views/dashboard.ts b/explorer/src/views/dashboard.ts
@@ -17,24 +17,28 @@ const GAME_DESCRIPTIONS: Record<string, string> = {
function renderProgressBar(p: Pipeline): string {
const total = p.registry_total;
- const scannedPct = (p.v2_scanned / total * 100).toFixed(1);
+ const v3Pct = (p.v3_scanned / total * 100).toFixed(1);
+ const v2Pct = (p.v2_only / total * 100).toFixed(1);
const v1Pct = (p.v1_needs_rescan / total * 100).toFixed(1);
const textPct = (p.has_text_no_scan / total * 100).toFixed(1);
const noPct = (p.no_text / total * 100).toFixed(1);
+ const totalScannedPct = (p.v2_scanned / total * 100).toFixed(1);
return `<div class="pipeline-bar">
<div class="pipeline-header">
<span class="pipeline-title">Survey Progress</span>
- <span class="pipeline-stat">${p.v2_scanned} of ${total} papers scanned (${scannedPct}%)</span>
+ <span class="pipeline-stat">${p.v2_scanned} of ${total} papers scanned (${totalScannedPct}%)${p.v3_scanned ? `, ${p.v3_scanned} with engagement factors` : ''}</span>
</div>
<div class="pipeline-track">
- <div class="pipeline-seg scanned" style="width:${scannedPct}%" title="V2 scanned: ${p.v2_scanned}"></div>
+ <div class="pipeline-seg v3" style="width:${v3Pct}%" title="V3 scanned (with engagement factors): ${p.v3_scanned}"></div>
+ <div class="pipeline-seg scanned" style="width:${v2Pct}%" title="V2 scanned: ${p.v2_only}"></div>
<div class="pipeline-seg v1" style="width:${v1Pct}%" title="V1 needs rescan: ${p.v1_needs_rescan}"></div>
<div class="pipeline-seg queued" style="width:${textPct}%" title="Text ready, awaiting scan: ${p.has_text_no_scan}"></div>
<div class="pipeline-seg notext" style="width:${noPct}%" title="No text available: ${p.no_text}"></div>
</div>
<div class="pipeline-legend">
- <span><span class="pipeline-dot scanned"></span>Scanned (${p.v2_scanned})</span>
+ <span><span class="pipeline-dot v3"></span>V3 (${p.v3_scanned})</span>
+ <span><span class="pipeline-dot scanned"></span>V2 (${p.v2_only})</span>
<span><span class="pipeline-dot v1"></span>V1 rescan (${p.v1_needs_rescan})</span>
<span><span class="pipeline-dot queued"></span>Queued (${p.has_text_no_scan})</span>
<span><span class="pipeline-dot notext"></span>No PDF (${p.no_text})</span>
diff --git a/scripts/build-explorer-data.py b/scripts/build-explorer-data.py
@@ -467,9 +467,14 @@ def build():
if s.get("scan_version", 1) < 2:
v1_count += 1
+ v3_count = sum(1 for p in papers_full if p.get("engagement_factors") is not None)
+ v2_only = total_papers - v3_count
+
pipeline = {
"registry_total": reg_total,
"v2_scanned": total_papers,
+ "v3_scanned": v3_count,
+ "v2_only": v2_only,
"v1_needs_rescan": v1_count,
"has_text_no_scan": has_text - total_papers - v1_count,
"no_text": reg_total - has_text,