claude-opus-4-8 @ max · cursor-xl
cursor-xlmax
- config
- claude-opus-4-8-eff-max--cli--cursor-xl--dev
- batch
- 2026-07-19--unified
- transport
- cursor-agent-cli-isolated-home
- protocol
- cli · plan
- served model
- claude-opus-4-8-max
- captured
- Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe

The screenshot is the exact frozen pixels the similarity channels measured. Run live re-executes the raw output in a sandboxed iframe; its rendering depends on your browser and fonts and is not guaranteed to match the measured pixels.
similarity neighbors
nearest
claude-opus-4-8-thinking @medium · cursor0.73claude-opus-4-8 @xhigh · cursor0.72claude-sonnet-5-thinking @medium · cursor-xl0.71claude-opus-4-8 @high · cursor-xl0.71claude-opus-4-8-thinking @xhigh · cursor0.71farthest
north-mini-code-free · api0.49grok-4.3 @low · api0.50grok-4.3 · api0.51gpt-5.1 · cursor0.52grok-4.3 @medium · api0.52within session 2026-07-19--unified
similarity measures convergence within this session — not quality.
Fidelity — does the card show the right data?
- namematch
- conditionmatch
- datematch
- max tempmatchshown: 25
- min tempmatchshown: 16
- hourlymismatchcoverage 0/24 · 0 match · 8 mismatch · 16 not shown
- request sidematch0 violation(s)
extractor fidelity-extractor-v1+Berlin-2026-07-15
Source — raw model output, one byte unchanged
download card.html<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=1280, initial-scale=1" />
<title>Weather Card</title>
<style>
:root {
--sky-top: #2b5876;
--sky-bottom: #4e4376;
--accent: #ffd166;
--card-bg: rgba(255, 255, 255, 0.14);
--card-border: rgba(255, 255, 255, 0.28);
--text: #ffffff;
--text-dim: rgba(255, 255, 255, 0.72);
--text-faint: rgba(255, 255, 255, 0.5);
--chart-line: #ffd166;
--chart-fill-top: rgba(255, 209, 102, 0.45);
--chart-fill-bottom: rgba(255, 209, 102, 0.02);
}
* { box-sizing: border-box; margin: 0; padding: 0; }
html, body {
width: 1280px;
height: 800px;
overflow: hidden;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
color: var(--text);
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
body {
position: relative;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(160deg, var(--sky-top) 0%, var(--sky-bottom) 100%);
transition: background 0.8s ease;
}
/* Decorative atmosphere layers */
.atmosphere {
position: absolute;
inset: 0;
overflow: hidden;
pointer-events: none;
}
.glow {
position: absolute;
border-radius: 50%;
filter: blur(70px);
opacity: 0.55;
transition: background 0.8s ease, opacity 0.8s ease;
}
.glow.a {
width: 520px; height: 520px;
top: -160px; right: -120px;
background: var(--accent);
}
.glow.b {
width: 460px; height: 460px;
bottom: -180px; left: -120px;
background: var(--sky-top);
opacity: 0.4;
}
.card {
position: relative;
width: 1040px;
height: 620px;
background: var(--card-bg);
border: 1px solid var(--card-border);
border-radius: 32px;
box-shadow:
0 40px 80px -30px rgba(0, 0, 0, 0.55),
inset 0 1px 0 rgba(255, 255, 255, 0.25);
backdrop-filter: blur(26px) saturate(140%);
-webkit-backdrop-filter: blur(26px) saturate(140%);
padding: 44px 52px;
display: grid;
grid-template-rows: auto 1fr auto;
gap: 24px;
overflow: hidden;
}
/* Header */
.header {
display: flex;
justify-content: space-between;
align-items: flex-start;
}
.location {
display: flex;
flex-direction: column;
gap: 6px;
}
.location .pin {
display: inline-flex;
align-items: center;
gap: 9px;
font-size: 15px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--text-dim);
font-weight: 600;
}
.location .pin svg { width: 15px; height: 15px; opacity: 0.85; }
.location h1 {
font-size: 46px;
font-weight: 700;
letter-spacing: -0.02em;
line-height: 1.05;
}
.location .date {
font-size: 18px;
color: var(--text-dim);
font-weight: 500;
margin-top: 2px;
}
.coords {
text-align: right;
font-size: 14px;
color: var(--text-faint);
font-weight: 500;
line-height: 1.5;
font-variant-numeric: tabular-nums;
}
/* Main hero */
.hero {
display: flex;
align-items: center;
justify-content: space-between;
gap: 40px;
}
.hero-left {
display: flex;
align-items: center;
gap: 34px;
}
.icon-wrap {
width: 148px;
height: 148px;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
filter: drop-shadow(0 12px 20px rgba(0, 0, 0, 0.28));
}
.icon-wrap svg { width: 100%; height: 100%; }
.temps { display: flex; flex-direction: column; gap: 4px; }
.temp-main {
font-size: 108px;
font-weight: 200;
line-height: 0.95;
letter-spacing: -0.04em;
font-variant-numeric: tabular-nums;
}
.temp-main .deg { font-weight: 300; opacity: 0.85; }
.condition {
font-size: 26px;
font-weight: 600;
letter-spacing: -0.01em;
}
.hilo {
display: flex;
gap: 22px;
margin-top: 12px;
font-size: 19px;
font-weight: 500;
font-variant-numeric: tabular-nums;
}
.hilo .hi { color: var(--text); }
.hilo .lo { color: var(--text-dim); }
.hilo b { font-weight: 700; }
.hilo .label {
color: var(--text-faint);
font-weight: 600;
font-size: 13px;
letter-spacing: 0.1em;
text-transform: uppercase;
margin-right: 6px;
}
.hero-right {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 14px 30px;
align-self: stretch;
align-content: center;
padding-left: 40px;
border-left: 1px solid rgba(255, 255, 255, 0.16);
}
.stat { display: flex; flex-direction: column; gap: 5px; }
.stat .k {
font-size: 12px;
letter-spacing: 0.11em;
text-transform: uppercase;
color: var(--text-faint);
font-weight: 600;
}
.stat .v {
font-size: 24px;
font-weight: 600;
font-variant-numeric: tabular-nums;
}
/* Hourly chart */
.hourly {
display: flex;
flex-direction: column;
gap: 10px;
}
.hourly-head {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.hourly-head .title {
font-size: 13px;
letter-spacing: 0.13em;
text-transform: uppercase;
color: var(--text-dim);
font-weight: 700;
}
.hourly-head .range {
font-size: 13px;
color: var(--text-faint);
font-weight: 500;
font-variant-numeric: tabular-nums;
}
.chart {
position: relative;
width: 100%;
height: 150px;
}
.chart svg { width: 100%; height: 100%; overflow: visible; display: block; }
.hour-axis {
display: flex;
justify-content: space-between;
font-size: 12px;
color: var(--text-faint);
font-weight: 500;
font-variant-numeric: tabular-nums;
padding: 0 2px;
margin-top: 2px;
}
/* Loading / error states */
.state {
position: absolute;
inset: 0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 18px;
text-align: center;
background: var(--card-bg);
border-radius: 32px;
padding: 40px;
}
.state.hidden { display: none; }
.spinner {
width: 46px; height: 46px;
border: 4px solid rgba(255, 255, 255, 0.25);
border-top-color: #fff;
border-radius: 50%;
animation: spin 0.9s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
.state .msg-title {
font-size: 24px;
font-weight: 700;
letter-spacing: -0.01em;
}
.state .msg-body {
font-size: 16px;
color: var(--text-dim);
max-width: 460px;
line-height: 1.5;
}
.state .err-icon {
width: 60px; height: 60px;
opacity: 0.9;
}
.fade-in { animation: fadeIn 0.6s ease both; }
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
</style>
</head>
<body>
<div class="atmosphere">
<div class="glow a"></div>
<div class="glow b"></div>
</div>
<div class="card" id="card">
<!-- Content injected by JS -->
<div class="state" id="loading">
<div class="spinner"></div>
<div class="msg-title">Loading weather…</div>
</div>
<div class="state hidden" id="error">
<svg class="err-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round">
<path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/>
<line x1="12" y1="9" x2="12" y2="13"/>
<line x1="12" y1="17" x2="12.01" y2="17"/>
</svg>
<div class="msg-title">Weather data unavailable</div>
<div class="msg-body" id="error-detail">The weather data could not be loaded. Please try again later.</div>
</div>
</div>
<script>
(function () {
"use strict";
// ---------- WMO weather code interpretation ----------
// Returns { label, group } where group drives theme + icon.
function interpretCode(code) {
var map = {
0: ["Clear sky", "clear"],
1: ["Mainly clear", "clear"],
2: ["Partly cloudy", "partly"],
3: ["Overcast", "cloudy"],
45: ["Fog", "fog"],
48: ["Depositing rime fog", "fog"],
51: ["Light drizzle", "drizzle"],
53: ["Moderate drizzle", "drizzle"],
55: ["Dense drizzle", "drizzle"],
56: ["Light freezing drizzle", "drizzle"],
57: ["Dense freezing drizzle", "drizzle"],
61: ["Slight rain", "rain"],
63: ["Moderate rain", "rain"],
65: ["Heavy rain", "rain"],
66: ["Light freezing rain", "rain"],
67: ["Heavy freezing rain", "rain"],
71: ["Slight snowfall", "snow"],
73: ["Moderate snowfall", "snow"],
75: ["Heavy snowfall", "snow"],
77: ["Snow grains", "snow"],
80: ["Slight rain showers", "rain"],
81: ["Moderate rain showers", "rain"],
82: ["Violent rain showers", "rain"],
85: ["Slight snow showers", "snow"],
86: ["Heavy snow showers", "snow"],
95: ["Thunderstorm", "storm"],
96: ["Thunderstorm, slight hail", "storm"],
99: ["Thunderstorm, heavy hail", "storm"]
};
var entry = map[code];
if (!entry) return { label: "Unknown", group: "cloudy" };
return { label: entry[0], group: entry[1] };
}
// ---------- Theme palettes per weather group ----------
var THEMES = {
clear: { top: "#2f80ed", bottom: "#56ccf2", accent: "#ffd166", glow: "#ffd970" },
partly: { top: "#4a7fb5", bottom: "#7cb2d6", accent: "#ffe08a", glow: "#ffe08a" },
cloudy: { top: "#5b6b7d", bottom: "#8a9bad", accent: "#dfe7ef", glow: "#c3d0dd" },
fog: { top: "#6b7076", bottom: "#9aa0a6", accent: "#e6ebef", glow: "#cbd2d8" },
drizzle: { top: "#41678a", bottom: "#6d8fac", accent: "#8fd3ff", glow: "#8fd3ff" },
rain: { top: "#2c3e57", bottom: "#4a6178", accent: "#7ec8ff", glow: "#6fb4f0" },
snow: { top: "#5c7a99", bottom: "#a6c4dd", accent: "#ffffff", glow: "#e8f3ff" },
storm: { top: "#232a3b", bottom: "#3d4560", accent: "#ffd166", glow: "#8a7fff" }
};
function applyTheme(group) {
var t = THEMES[group] || THEMES.cloudy;
var r = document.documentElement.style;
r.setProperty("--sky-top", t.top);
r.setProperty("--sky-bottom", t.bottom);
r.setProperty("--accent", t.accent);
r.setProperty("--chart-line", t.accent);
// Build chart fill from accent
r.setProperty("--chart-fill-top", hexToRgba(t.accent, 0.42));
r.setProperty("--chart-fill-bottom", hexToRgba(t.accent, 0.02));
document.querySelector(".glow.a").style.background = t.glow;
document.querySelector(".glow.b").style.background = t.top;
}
function hexToRgba(hex, a) {
var h = hex.replace("#", "");
if (h.length === 3) h = h[0]+h[0]+h[1]+h[1]+h[2]+h[2];
var n = parseInt(h, 16);
return "rgba(" + ((n>>16)&255) + "," + ((n>>8)&255) + "," + (n&255) + "," + a + ")";
}
// ---------- Weather icons (inline SVG) ----------
function iconSVG(group) {
var sun = '<circle cx="32" cy="32" r="13" fill="url(#sunGrad)"/>' +
'<g stroke="url(#sunGrad)" stroke-width="3.4" stroke-linecap="round">' +
'<line x1="32" y1="6" x2="32" y2="14"/><line x1="32" y1="50" x2="32" y2="58"/>' +
'<line x1="6" y1="32" x2="14" y2="32"/><line x1="50" y1="32" x2="58" y2="32"/>' +
'<line x1="13" y1="13" x2="19" y2="19"/><line x1="45" y1="45" x2="51" y2="51"/>' +
'<line x1="13" y1="51" x2="19" y2="45"/><line x1="45" y1="19" x2="51" y2="13"/></g>';
var cloud = '<path d="M20 44 h26 a11 11 0 0 0 1-21.9 A15 15 0 0 0 18 26 A10 10 0 0 0 20 44 z" fill="url(#cloudGrad)"/>';
var cloudSmall = '<path d="M26 46 h22 a9.5 9.5 0 0 0 .8-18.9 A13 13 0 0 0 24.5 30 A8.5 8.5 0 0 0 26 46 z" fill="url(#cloudGrad)"/>';
var defs = '<defs>' +
'<linearGradient id="sunGrad" x1="0" y1="0" x2="0" y2="1">' +
'<stop offset="0" stop-color="#ffe38a"/><stop offset="1" stop-color="#ffb43d"/></linearGradient>' +
'<linearGradient id="cloudGrad" x1="0" y1="0" x2="0" y2="1">' +
'<stop offset="0" stop-color="#ffffff"/><stop offset="1" stop-color="#d6e2ee"/></linearGradient>' +
'<linearGradient id="dropGrad" x1="0" y1="0" x2="0" y2="1">' +
'<stop offset="0" stop-color="#a9dcff"/><stop offset="1" stop-color="#5fa9e8"/></linearGradient>' +
'</defs>';
var inner;
switch (group) {
case "clear":
inner = sun;
break;
case "partly":
inner = '<g transform="translate(-4,-6) scale(0.86)">' + sun + '</g>' +
'<g transform="translate(8,10)">' + cloud + '</g>';
break;
case "cloudy":
inner = '<g transform="translate(0,3)">' + cloud + '</g>' +
'<g transform="translate(-14,-8) scale(0.7)" opacity="0.85">' + cloudSmall + '</g>';
break;
case "fog":
inner = '<g transform="translate(0,-2)">' + cloud + '</g>' +
'<g stroke="url(#cloudGrad)" stroke-width="3.2" stroke-linecap="round" opacity="0.9">' +
'<line x1="14" y1="50" x2="46" y2="50"/><line x1="18" y1="56" x2="50" y2="56"/></g>';
break;
case "drizzle":
inner = '<g transform="translate(0,-6)">' + cloud + '</g>' +
'<g stroke="url(#dropGrad)" stroke-width="3.4" stroke-linecap="round">' +
'<line x1="24" y1="46" x2="21" y2="54"/><line x1="34" y1="46" x2="31" y2="54"/>' +
'<line x1="44" y1="46" x2="41" y2="54"/></g>';
break;
case "rain":
inner = '<g transform="translate(0,-8)">' + cloud + '</g>' +
'<g stroke="url(#dropGrad)" stroke-width="3.8" stroke-linecap="round">' +
'<line x1="23" y1="44" x2="19" y2="55"/><line x1="33" y1="44" x2="29" y2="57"/>' +
'<line x1="43" y1="44" x2="39" y2="55"/></g>';
break;
case "snow":
inner = '<g transform="translate(0,-8)">' + cloud + '</g>' +
'<g fill="#ffffff">' +
'<circle cx="22" cy="50" r="2.6"/><circle cx="32" cy="55" r="2.6"/>' +
'<circle cx="42" cy="50" r="2.6"/></g>';
break;
case "storm":
inner = '<g transform="translate(0,-8)">' + cloud + '</g>' +
'<path d="M32 43 L25 55 H31 L28 63 L39 51 H33 L36 43 Z" fill="url(#sunGrad)"/>';
break;
default:
inner = cloud;
}
return '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">' + defs + inner + '</svg>';
}
// ---------- Helpers ----------
function pad(n) { return n < 10 ? "0" + n : "" + n; }
function todayUTC() {
var d = new Date();
return d.getUTCFullYear() + "-" + pad(d.getUTCMonth() + 1) + "-" + pad(d.getUTCDate());
}
function isValidDate(s) {
return /^\d{4}-\d{2}-\d{2}$/.test(s) && !isNaN(new Date(s + "T00:00:00Z").getTime());
}
function formatDateLabel(iso) {
var d = new Date(iso + "T00:00:00Z");
var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var months = ["January","February","March","April","May","June","July","August","September","October","November","December"];
return days[d.getUTCDay()] + ", " + months[d.getUTCMonth()] + " " + d.getUTCDate() + ", " + d.getUTCFullYear();
}
function fmtTemp(v) {
if (v === null || v === undefined || isNaN(v)) return "–";
return Math.round(v) + "°";
}
// ---------- Params ----------
function getParams() {
var q = new URLSearchParams(window.location.search);
var lat = parseFloat(q.get("lat"));
var lon = parseFloat(q.get("lon"));
var name = q.get("name");
var date = q.get("date");
if (!isFinite(lat)) lat = 52.52;
if (!isFinite(lon)) lon = 13.405;
if (!name || !name.trim()) name = "Berlin";
if (!date || !isValidDate(date)) date = todayUTC();
return { lat: lat, lon: lon, name: name.trim(), date: date };
}
// ---------- Endpoint selection ----------
function chooseEndpoint(date) {
// Past dates use archive; today and future use forecast.
var today = todayUTC();
return date < today ? "/api/om/archive" : "/api/om/forecast";
}
function buildURL(base, p) {
var params = new URLSearchParams({
latitude: p.lat,
longitude: p.lon,
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: p.date,
end_date: p.date
});
return base + "?" + params.toString();
}
// ---------- Rendering ----------
function showError(detail) {
document.getElementById("loading").classList.add("hidden");
var err = document.getElementById("error");
err.classList.remove("hidden");
if (detail) document.getElementById("error-detail").textContent = detail;
}
function esc(s) {
return String(s).replace(/[&<>"']/g, function (c) {
return { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c];
});
}
function buildChart(hours, temps) {
var W = 940, H = 150;
var padTop = 26, padBottom = 8, padX = 6;
var valid = temps.filter(function (t) { return t !== null && !isNaN(t); });
if (valid.length === 0) return "";
var min = Math.min.apply(null, valid);
var max = Math.max.apply(null, valid);
if (min === max) { min -= 1; max += 1; }
var range = max - min;
var n = temps.length;
var innerW = W - padX * 2;
var innerH = H - padTop - padBottom;
function x(i) { return padX + (n <= 1 ? innerW / 2 : (i / (n - 1)) * innerW); }
function y(v) { return padTop + innerH - ((v - min) / range) * innerH; }
// Build smooth-ish polyline points
var pts = [];
for (var i = 0; i < n; i++) {
if (temps[i] === null || isNaN(temps[i])) continue;
pts.push([x(i), y(temps[i]), temps[i], i]);
}
if (pts.length === 0) return "";
var linePath = "";
for (var j = 0; j < pts.length; j++) {
linePath += (j === 0 ? "M" : "L") + pts[j][0].toFixed(1) + " " + pts[j][1].toFixed(1) + " ";
}
var areaPath = linePath +
"L" + pts[pts.length - 1][0].toFixed(1) + " " + (H - padBottom) + " " +
"L" + pts[0][0].toFixed(1) + " " + (H - padBottom) + " Z";
// Find min/max indices for labels
var maxIdx = 0, minIdx = 0;
for (var k = 0; k < pts.length; k++) {
if (pts[k][2] > pts[maxIdx][2]) maxIdx = k;
if (pts[k][2] < pts[minIdx][2]) minIdx = k;
}
var dots = "";
var labels = "";
[maxIdx, minIdx].forEach(function (idx, order) {
var p = pts[idx];
dots += '<circle cx="' + p[0].toFixed(1) + '" cy="' + p[1].toFixed(1) + '" r="4.5" fill="var(--chart-line)" stroke="rgba(0,0,0,0.15)" stroke-width="1"/>';
var above = order === 0; // max above, min below
var ly = above ? p[1] - 12 : p[1] + 20;
// keep label inside bounds
if (ly < 12) ly = p[1] + 20;
if (ly > H - 4) ly = p[1] - 12;
labels += '<text x="' + p[0].toFixed(1) + '" y="' + ly.toFixed(1) + '" text-anchor="middle" ' +
'font-size="14" font-weight="700" fill="#fff" style="paint-order:stroke;stroke:rgba(0,0,0,0.25);stroke-width:3px;">' +
Math.round(p[2]) + '°</text>';
});
var svg = '<svg viewBox="0 0 ' + W + ' ' + H + '" preserveAspectRatio="none">' +
'<defs><linearGradient id="areaFill" x1="0" y1="0" x2="0" y2="1">' +
'<stop offset="0" stop-color="var(--chart-fill-top)"/>' +
'<stop offset="1" stop-color="var(--chart-fill-bottom)"/></linearGradient></defs>' +
'<path d="' + areaPath + '" fill="url(#areaFill)"/>' +
'<path d="' + linePath + '" fill="none" stroke="var(--chart-line)" stroke-width="3" ' +
'stroke-linejoin="round" stroke-linecap="round" style="filter:drop-shadow(0 3px 6px rgba(0,0,0,0.25))"/>' +
dots + labels +
'</svg>';
return svg;
}
function buildHourAxis(hours) {
// Show every 3rd hour label
var html = "";
for (var i = 0; i < hours.length; i++) {
if (i % 3 === 0) {
html += "<span>" + pad(hours[i]) + ":00</span>";
}
}
return html;
}
function render(p, data) {
var daily = data.daily || {};
var hourly = data.hourly || {};
var tmax = daily.temperature_2m_max ? daily.temperature_2m_max[0] : null;
var tmin = daily.temperature_2m_min ? daily.temperature_2m_min[0] : null;
var code = daily.weather_code ? daily.weather_code[0] : null;
if (tmax === null && tmin === null && (!hourly.temperature_2m || hourly.temperature_2m.length === 0)) {
showError("No weather data is available for " + esc(p.name) + " on " + esc(p.date) + ".");
return;
}
var info = interpretCode(code);
applyTheme(info.group);
// Hourly arrays
var times = hourly.time || [];
var htemps = hourly.temperature_2m || [];
var hours = [];
var temps = [];
for (var i = 0; i < times.length; i++) {
var t = times[i];
// time format "YYYY-MM-DDTHH:mm"
var hh = parseInt(t.slice(11, 13), 10);
hours.push(isNaN(hh) ? i : hh);
temps.push(htemps[i]);
}
// "Current"/representative temp: use noon if available, else average, else max
var mainTemp = null;
var noonIdx = hours.indexOf(12);
if (noonIdx >= 0 && temps[noonIdx] !== null && !isNaN(temps[noonIdx])) {
mainTemp = temps[noonIdx];
} else if (tmax !== null && tmin !== null) {
mainTemp = (tmax + tmin) / 2;
} else if (tmax !== null) {
mainTemp = tmax;
} else {
var v = temps.filter(function (x) { return x !== null && !isNaN(x); });
if (v.length) mainTemp = v.reduce(function (a, b) { return a + b; }, 0) / v.length;
}
// Compute a couple extra stats from hourly data
var validT = temps.filter(function (x) { return x !== null && !isNaN(x); });
var avgT = validT.length ? validT.reduce(function (a, b) { return a + b; }, 0) / validT.length : null;
var spread = (tmax !== null && tmin !== null) ? (tmax - tmin) : null;
var chartSVG = buildChart(hours, temps);
var axisHTML = buildHourAxis(hours);
var html =
'<div class="header">' +
'<div class="location">' +
'<span class="pin">' +
'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">' +
'<path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/><circle cx="12" cy="10" r="3"/></svg>' +
'Location' +
'</span>' +
'<h1>' + esc(p.name) + '</h1>' +
'<div class="date">' + formatDateLabel(p.date) + '</div>' +
'</div>' +
'<div class="coords">' +
esc(p.lat.toFixed(3)) + '°, ' + esc(p.lon.toFixed(3)) + '°<br>' +
'UTC' +
'</div>' +
'</div>' +
'<div class="hero">' +
'<div class="hero-left">' +
'<div class="icon-wrap">' + iconSVG(info.group) + '</div>' +
'<div class="temps">' +
'<div class="temp-main">' + (mainTemp !== null ? Math.round(mainTemp) : "–") + '<span class="deg">°</span></div>' +
'<div class="condition">' + esc(info.label) + '</div>' +
'<div class="hilo">' +
'<span class="hi"><span class="label">High</span><b>' + fmtTemp(tmax) + '</b></span>' +
'<span class="lo"><span class="label">Low</span><b>' + fmtTemp(tmin) + '</b></span>' +
'</div>' +
'</div>' +
'</div>' +
'<div class="hero-right">' +
'<div class="stat"><span class="k">High</span><span class="v">' + fmtTemp(tmax) + 'C</span></div>' +
'<div class="stat"><span class="k">Low</span><span class="v">' + fmtTemp(tmin) + 'C</span></div>' +
'<div class="stat"><span class="k">Average</span><span class="v">' + fmtTemp(avgT) + 'C</span></div>' +
'<div class="stat"><span class="k">Range</span><span class="v">' + (spread !== null ? Math.round(spread) + "°" : "–") + '</span></div>' +
'</div>' +
'</div>' +
'<div class="hourly">' +
'<div class="hourly-head">' +
'<span class="title">Hourly temperature</span>' +
'<span class="range">24-hour · °C</span>' +
'</div>' +
'<div class="chart">' + chartSVG + '</div>' +
'<div class="hour-axis">' + axisHTML + '</div>' +
'</div>';
var card = document.getElementById("card");
card.innerHTML = html;
card.classList.add("fade-in");
}
// ---------- Main ----------
function main() {
var p = getParams();
var base = chooseEndpoint(p.date);
var url = buildURL(base, p);
var timedOut = false;
var controller = ("AbortController" in window) ? new AbortController() : null;
var timer = setTimeout(function () {
timedOut = true;
if (controller) controller.abort();
}, 15000);
fetch(url, controller ? { signal: controller.signal } : undefined)
.then(function (res) {
clearTimeout(timer);
if (!res.ok) {
throw new Error("Server responded with status " + res.status);
}
return res.json();
})
.then(function (data) {
if (data && data.error) {
throw new Error(data.reason || "API returned an error.");
}
render(p, data);
})
.catch(function (err) {
clearTimeout(timer);
var msg;
if (timedOut) {
msg = "The request timed out while loading weather for " + p.name + ".";
} else {
msg = "Could not load weather for " + p.name + " on " + p.date + ". " +
(err && err.message ? "(" + err.message + ")" : "");
}
showError(msg);
});
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", main);
} else {
main();
}
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 25,821 | html / css / js | 1,128 / 6,667 / 18,026 |
|---|---|---|---|
| dom nodes | 22 | dom depth | 5 |
| css rules | 52 | js present | yes |
| brightness | 132.5 | contrast | 20.6 |
| colorfulness | 33.4 | whitespace | 54.5% |
This slot's telemetry
| prompt tokens | 62 | completion tokens | 22,163 |
|---|---|---|---|
| total tokens | 22,225 | wall | 392.8 s |
| cost | — | request id | — |
config.json581 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "claude-opus-4-8-eff-max--cli--cursor-xl--dev",
"effort": "max",
"family": "claude",
"m": {
"min": 2,
"q": 2
},
"model_id": "claude-opus-4-8",
"protocol": "cli",
"served_model": "claude-opus-4-8-max",
"telemetry": {
"completion_tokens": 58703,
"cost_usd": null,
"prompt_tokens": 138,
"total_tokens": 58841,
"wall_ms": 900705
},
"transport": "cursor-agent-cli-isolated-home",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-13--cursor-xl-s1",
"config_id": "claude-opus-4-8-eff-max--cli--cursor-xl--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-13T11:04:46.783790+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T10:58:13.942082+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-13T11:06:38.733333+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T11:04:50.587441+00:00"
}
],
"block_index": 0,
"model_reaching_attempt_index": 0,
"slot_index": 0,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-13T11:07:53.429773+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T11:06:42.094720+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-min"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-13T11:13:25.126157+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T11:07:56.797321+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-q"
}
],
"retry_policy": {
"max_unreachable_retries": 5,
"rate_limit_backoff": {
"max_attempts": 4,
"max_total_ms": 60000
}
}
}