From 51f6bead5479616ab33aa1d19e6495a69409aa13 Mon Sep 17 00:00:00 2001 From: AIRO Coding Agent Date: Mon, 26 Oct 2026 20:52:52 +0000 Subject: [PATCH] Distinguish baseline timeline forecasts and mark methodology change --- index.html | 23 +++++++++++++++++++---- web/demo/19-live-timeline.jsx | 23 +++++++++++++++++++---- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/index.html b/index.html index 6ac1e2e..09f22ed 100644 --- a/index.html +++ b/index.html @@ -538,7 +538,7 @@ }; /* ---------------- time-series chart ---------------- */ -// Before Oct 21 only the median is visible until hovered or selected; then +// Before Oct 21 the Baseline median is blue until hovered or selected; then // model answers appear as ink-gray circles. Since Oct 21 each prompt condition // has a colored dot, with model answers in its details. No connecting lines. // The ensemble median remains an ink mark, for the ONE horizon @@ -569,6 +569,9 @@ const axisEnd = n > 1 ? Math.max(days[n - 1], yearEnd) : yearEnd; const span = axisEnd > days[0] ? axisEnd - days[0] : 0; const xDay = day => (span === 0 ? (pad.l + W - pad.r) / 2 : pad.l + ((day - days[0]) / span) * (W - pad.l - pad.r)); + const changeDay = Date.parse(TL_CONDITION_START + "T00:00:00Z") / 864e5; + const showChange = n > 0 && changeDay >= days[0] && changeDay <= axisEnd; + const isBaseline = i => snapshots[i].date < TL_CONDITION_START; const x = i => xDay(days[i]); const xs = snapshots.map((_, i) => x(i)); const futureTicks = []; @@ -694,6 +697,9 @@ ))} {axisEnd > days[n - 1] && W - pad.r - xs[n - 1] >= labelGap && Dec 31} + {showChange && } {/* Historical model answers are revealed only for the active date. */} {series.map(s => ( @@ -719,12 +725,15 @@ {/* The median's marks, unjoined. The larger transparent target also works on touchscreens. */} {med.map((v, i) => v == null ? null : ( hover(e, i)} onMouseLeave={leave} onFocus={e => hover(e, i)} onBlur={leave} onClick={e => select(e, i)} onKeyDown={e => keySelect(e, i)}> - + ))} @@ -742,6 +751,10 @@ ))} + {showChange &&
+ Oct 21, 2026: Methodology change to add more prompting strategies +
} + {hovered && ( {hoveredModels.map(([label, val]) => ( @@ -762,7 +775,7 @@ : snapshots[hv].draws > 1 ? ` · ${snapshots[hv].draws} draws per model · point = mean` : ""}{loss ? " · deaths" : ""}
- Ensemble median + {isBaseline(hv) ? "Baseline prompt · ensemble median" : "Ensemble median"} {fmtV(med[hv])} @@ -900,6 +913,8 @@

{title}

+ {!variants.some(v => v.id === "none") && snapshots.some((s, i) => s.date < TL_CONDITION_START && med[i] != null) && + } {variants.map(v => )} {/* The scale switch at the legend row's right end, where Graph 2 keeps its own. */} {!loss && } diff --git a/web/demo/19-live-timeline.jsx b/web/demo/19-live-timeline.jsx index da797d8..56d4c48 100644 --- a/web/demo/19-live-timeline.jsx +++ b/web/demo/19-live-timeline.jsx @@ -50,7 +50,7 @@ const tlVariants = (q, horizon, snapshots) => { }; /* ---------------- time-series chart ---------------- */ -// Before Oct 21 only the median is visible until hovered or selected; then +// Before Oct 21 the Baseline median is blue until hovered or selected; then // model answers appear as ink-gray circles. Since Oct 21 each prompt condition // has a colored dot, with model answers in its details. No connecting lines. // The ensemble median remains an ink mark, for the ONE horizon @@ -81,6 +81,9 @@ function TimelineChart({ q, snapshots, horizon, scale }) { const axisEnd = n > 1 ? Math.max(days[n - 1], yearEnd) : yearEnd; const span = axisEnd > days[0] ? axisEnd - days[0] : 0; const xDay = day => (span === 0 ? (pad.l + W - pad.r) / 2 : pad.l + ((day - days[0]) / span) * (W - pad.l - pad.r)); + const changeDay = Date.parse(TL_CONDITION_START + "T00:00:00Z") / 864e5; + const showChange = n > 0 && changeDay >= days[0] && changeDay <= axisEnd; + const isBaseline = i => snapshots[i].date < TL_CONDITION_START; const x = i => xDay(days[i]); const xs = snapshots.map((_, i) => x(i)); const futureTicks = []; @@ -206,6 +209,9 @@ function TimelineChart({ q, snapshots, horizon, scale }) { ))} {axisEnd > days[n - 1] && W - pad.r - xs[n - 1] >= labelGap && Dec 31} + {showChange && } {/* Historical model answers are revealed only for the active date. */} {series.map(s => ( @@ -231,12 +237,15 @@ function TimelineChart({ q, snapshots, horizon, scale }) { {/* The median's marks, unjoined. The larger transparent target also works on touchscreens. */} {med.map((v, i) => v == null ? null : ( hover(e, i)} onMouseLeave={leave} onFocus={e => hover(e, i)} onBlur={leave} onClick={e => select(e, i)} onKeyDown={e => keySelect(e, i)}> - + ))} @@ -254,6 +263,10 @@ function TimelineChart({ q, snapshots, horizon, scale }) { ))} + {showChange &&
+ Oct 21, 2026: Methodology change to add more prompting strategies +
} + {hovered && ( {hoveredModels.map(([label, val]) => ( @@ -274,7 +287,7 @@ function TimelineChart({ q, snapshots, horizon, scale }) { : snapshots[hv].draws > 1 ? ` · ${snapshots[hv].draws} draws per model · point = mean` : ""}{loss ? " · deaths" : ""}
- Ensemble median + {isBaseline(hv) ? "Baseline prompt · ensemble median" : "Ensemble median"} {fmtV(med[hv])} @@ -412,6 +425,8 @@ function TimelinePanelCurrent({ qid = TL_HEADLINE, title = "Probability of an AI
+ {!variants.some(v => v.id === "none") && snapshots.some((s, i) => s.date < TL_CONDITION_START && med[i] != null) && + } {variants.map(v => )} {/* The scale switch at the legend row's right end, where Graph 2 keeps its own. */} {!loss && }