ai-research-survey

Systematic scan of agentic development research. What's signal, what's noise.
git clone https://git.shiptheloop.com/ai-research-survey.git
Log | Files | Refs

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:
Mexplorer/src/data.ts | 2++
Mexplorer/src/style.css | 2++
Mexplorer/src/views/dashboard.ts | 12++++++++----
Mscripts/build-explorer-data.py | 5+++++
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,

Impressum · Datenschutz