claude-opus-5 @ low · cursor-xl
cursor-xllow
- config
- claude-opus-5-eff-low--cli--cursor-xl--dev
- batch
- 2026-07-19--unified
- transport
- cursor-agent-cli-isolated-home
- protocol
- cli · plan
- served model
- claude-opus-5-low
- 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-5-thinking @low · cursor0.77claude-opus-5-thinking @low · cursor-xl0.73claude-opus-5-5 @high · CC0.71gpt-5.6-luna @low · cursor0.70claude-fable-5 @low · CC0.70farthest
qwen3.6-plus · go0.51deepseek-v4-pro · opencode0.52minimax-m2.5 · kiro0.53deepseek-v4-pro-0812 @medium · api0.53gpt-5.6-luna @max · cursor0.53within 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.3
- min tempmatchshown: 16
- hourlyambiguouscoverage · 0 match · 0 mismatch · 24 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=device-width, initial-scale=1.0">
<title>Weather Card</title>
<style>
*, *::before, *::after { box-sizing: border-box; }
:root {
--ink: #0f172a;
--ink-soft: #4a5568;
--ink-faint: #8b97ab;
--card-bg: rgba(255, 255, 255, 0.72);
--stroke: rgba(255, 255, 255, 0.6);
--accent: #3b6fd4;
--sky-1: #cfe3ff;
--sky-2: #e9f0fb;
--sky-3: #fdf3ec;
}
html, body { height: 100%; margin: 0; }
body {
font-family: "Inter", "Helvetica Neue", -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
color: var(--ink);
background:
radial-gradient(1100px 700px at 12% -10%, var(--sky-1) 0%, rgba(207,227,255,0) 60%),
radial-gradient(900px 600px at 100% 0%, var(--sky-3) 0%, rgba(253,243,236,0) 55%),
linear-gradient(160deg, #f6f9ff 0%, var(--sky-2) 45%, #eef2f8 100%);
display: flex;
align-items: center;
justify-content: center;
padding: 40px;
-webkit-font-smoothing: antialiased;
}
.card {
width: 1040px;
max-width: 100%;
background: var(--card-bg);
backdrop-filter: blur(24px) saturate(140%);
border: 1px solid var(--stroke);
border-radius: 28px;
box-shadow:
0 1px 0 rgba(255,255,255,0.8) inset,
0 30px 70px -30px rgba(24, 44, 90, 0.35),
0 2px 10px rgba(24, 44, 90, 0.06);
padding: 40px 44px 36px;
position: relative;
overflow: hidden;
}
.card::after {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
background: linear-gradient(115deg, rgba(255,255,255,0.5), rgba(255,255,255,0) 38%);
}
.head {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 24px;
position: relative;
}
.eyebrow {
font-size: 11px;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--ink-faint);
font-weight: 600;
margin: 0 0 8px;
}
.place {
margin: 0;
font-size: 40px;
line-height: 1.1;
font-weight: 640;
letter-spacing: -0.02em;
}
.date {
margin: 10px 0 0;
font-size: 15px;
color: var(--ink-soft);
font-weight: 500;
}
.coords {
margin: 4px 0 0;
font-size: 12.5px;
color: var(--ink-faint);
font-variant-numeric: tabular-nums;
}
.glyph-wrap {
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 10px;
flex: none;
}
.glyph {
width: 108px;
height: 108px;
display: block;
filter: drop-shadow(0 10px 18px rgba(38, 76, 150, 0.22));
}
.cond {
font-size: 15px;
font-weight: 600;
color: var(--ink);
text-align: right;
max-width: 220px;
}
.main {
margin-top: 26px;
display: flex;
align-items: flex-end;
gap: 40px;
flex-wrap: wrap;
}
.hero {
display: flex;
align-items: flex-start;
gap: 4px;
}
.hero .num {
font-size: 108px;
line-height: 0.9;
font-weight: 300;
letter-spacing: -0.05em;
font-variant-numeric: tabular-nums;
}
.hero .unit {
font-size: 34px;
font-weight: 300;
color: var(--ink-soft);
margin-top: 10px;
}
.extremes { display: flex; gap: 14px; padding-bottom: 8px; }
.pill {
background: rgba(255, 255, 255, 0.66);
border: 1px solid rgba(255, 255, 255, 0.85);
border-radius: 16px;
padding: 12px 18px;
min-width: 118px;
box-shadow: 0 6px 18px -10px rgba(24, 44, 90, 0.35);
}
.pill .label {
font-size: 10.5px;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--ink-faint);
font-weight: 700;
display: flex;
align-items: center;
gap: 6px;
}
.pill .value {
font-size: 27px;
font-weight: 500;
margin-top: 4px;
font-variant-numeric: tabular-nums;
letter-spacing: -0.02em;
}
.dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }
.dot.hi { background: #e2703a; }
.dot.lo { background: #4d8fd6; }
.divider {
height: 1px;
background: linear-gradient(90deg, rgba(15,23,42,0.12), rgba(15,23,42,0.02));
margin: 30px 0 20px;
}
.section-head {
display: flex;
align-items: baseline;
justify-content: space-between;
margin-bottom: 14px;
}
.section-title {
font-size: 11px;
letter-spacing: 0.16em;
text-transform: uppercase;
color: var(--ink-faint);
font-weight: 700;
}
.range-note { font-size: 12px; color: var(--ink-faint); font-variant-numeric: tabular-nums; }
.chart { position: relative; width: 100%; height: 168px; }
.chart svg { width: 100%; height: 100%; display: block; overflow: visible; }
.axis-line { stroke: rgba(15,23,42,0.08); stroke-width: 1; }
.grid-label { font-size: 10px; fill: var(--ink-faint); font-variant-numeric: tabular-nums; }
.hours {
margin-top: 6px;
display: grid;
grid-template-columns: repeat(24, 1fr);
gap: 0;
}
.hour {
text-align: center;
font-size: 10px;
color: var(--ink-faint);
font-variant-numeric: tabular-nums;
padding-top: 4px;
}
.hour.major { color: var(--ink-soft); font-weight: 600; }
.hour-temps {
display: grid;
grid-template-columns: repeat(24, 1fr);
margin-top: 12px;
}
.ht {
text-align: center;
font-size: 11.5px;
font-weight: 600;
font-variant-numeric: tabular-nums;
color: var(--ink);
padding: 5px 0;
border-radius: 6px;
}
.foot {
margin-top: 24px;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 11.5px;
color: var(--ink-faint);
}
.badge {
display: inline-flex;
align-items: center;
gap: 7px;
background: rgba(255,255,255,0.6);
border: 1px solid rgba(255,255,255,0.9);
padding: 6px 12px;
border-radius: 999px;
font-weight: 600;
letter-spacing: 0.02em;
color: var(--ink-soft);
}
.state {
text-align: center;
padding: 70px 20px;
}
.state .icon {
width: 56px; height: 56px;
margin: 0 auto 18px;
border-radius: 50%;
display: grid; place-items: center;
background: rgba(226, 112, 90, 0.12);
color: #c04a2b;
font-size: 28px;
font-weight: 600;
}
.state h2 { margin: 0 0 8px; font-size: 22px; font-weight: 600; letter-spacing: -0.01em; }
.state p { margin: 0; color: var(--ink-soft); font-size: 14px; line-height: 1.6; }
.state code {
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
font-size: 12.5px;
background: rgba(15,23,42,0.05);
padding: 2px 6px;
border-radius: 5px;
}
.skeleton { animation: pulse 1.4s ease-in-out infinite; }
@keyframes pulse { 0%,100% { opacity: 0.45 } 50% { opacity: 0.9 } }
.sk-bar { background: rgba(15,23,42,0.09); border-radius: 8px; }
</style>
</head>
<body>
<main class="card" id="card">
<div class="state skeleton" id="loading">
<div class="sk-bar" style="width:190px;height:14px;margin:0 auto 18px"></div>
<div class="sk-bar" style="width:320px;height:40px;margin:0 auto 22px"></div>
<div class="sk-bar" style="width:640px;height:120px;margin:0 auto;max-width:100%"></div>
</div>
</main>
<script>
(function () {
"use strict";
var WMO = {
0: ["Clear sky", "sun"],
1: ["Mainly clear", "sun-cloud"],
2: ["Partly cloudy", "sun-cloud"],
3: ["Overcast", "cloud"],
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 with slight hail", "storm"],
99: ["Thunderstorm with heavy hail", "storm"]
};
var SVG_NS = "http://www.w3.org/2000/svg";
function glyph(kind) {
var sun = '<circle cx="34" cy="30" r="12" fill="url(#gSun)"/>' +
'<g stroke="#f6a83c" stroke-width="2.6" stroke-linecap="round">' +
'<line x1="34" y1="8" x2="34" y2="14"/><line x1="34" y1="46" x2="34" y2="52"/>' +
'<line x1="12" y1="30" x2="18" y2="30"/><line x1="50" y1="30" x2="56" y2="30"/>' +
'<line x1="18.5" y1="14.5" x2="22.5" y2="18.5"/><line x1="45.5" y1="41.5" x2="49.5" y2="45.5"/>' +
'<line x1="18.5" y1="45.5" x2="22.5" y2="41.5"/><line x1="45.5" y1="18.5" x2="49.5" y2="14.5"/></g>';
var sunSmall = '<circle cx="26" cy="24" r="10" fill="url(#gSun)"/>' +
'<g stroke="#f6a83c" stroke-width="2.4" stroke-linecap="round">' +
'<line x1="26" y1="6" x2="26" y2="10"/><line x1="8" y1="24" x2="12" y2="24"/>' +
'<line x1="13" y1="11" x2="16" y2="14"/><line x1="36" y1="14" x2="39" y2="11"/></g>';
var cloud = '<path d="M22 62h34a13 13 0 0 0 1.5-25.9A18 18 0 0 0 23 33.5A12.5 12.5 0 0 0 22 62Z" fill="url(#gCloud)"/>';
var cloudLow = '<path d="M22 58h32a12 12 0 0 0 1.4-24A17 17 0 0 0 23 31A11.5 11.5 0 0 0 22 58Z" fill="url(#gCloud)"/>';
var drops = '<g stroke="#4d8fd6" stroke-width="3" stroke-linecap="round">' +
'<line x1="27" y1="64" x2="24" y2="72"/><line x1="38" y1="64" x2="35" y2="72"/><line x1="49" y1="64" x2="46" y2="72"/></g>';
var dropsLight = '<g stroke="#79aee2" stroke-width="2.6" stroke-linecap="round">' +
'<line x1="29" y1="63" x2="27" y2="69"/><line x1="40" y1="63" x2="38" y2="69"/><line x1="51" y1="63" x2="49" y2="69"/></g>';
var flakes = '<g stroke="#7fb6e8" stroke-width="2.4" stroke-linecap="round">' +
'<g transform="translate(28,68)"><line x1="-4" y1="0" x2="4" y2="0"/><line x1="0" y1="-4" x2="0" y2="4"/><line x1="-3" y1="-3" x2="3" y2="3"/><line x1="-3" y1="3" x2="3" y2="-3"/></g>' +
'<g transform="translate(44,68)"><line x1="-4" y1="0" x2="4" y2="0"/><line x1="0" y1="-4" x2="0" y2="4"/><line x1="-3" y1="-3" x2="3" y2="3"/><line x1="-3" y1="3" x2="3" y2="-3"/></g></g>';
var bolt = '<path d="M38 60l-9 15h7l-3 12 12-18h-7l4-9z" fill="#f0a530"/>';
var fogLines = '<g stroke="#9fb2c9" stroke-width="3" stroke-linecap="round">' +
'<line x1="16" y1="52" x2="60" y2="52"/><line x1="20" y1="61" x2="56" y2="61"/><line x1="26" y1="70" x2="50" y2="70"/></g>';
var body;
switch (kind) {
case "sun": body = sun; break;
case "sun-cloud": body = sunSmall + cloudLow; break;
case "cloud": body = cloud; break;
case "fog": body = cloudLow + fogLines; break;
case "drizzle": body = cloudLow + dropsLight; break;
case "rain": body = cloudLow + drops; break;
case "snow": body = cloudLow + flakes; break;
case "storm": body = cloudLow + bolt; break;
default: body = cloud;
}
return '<svg class="glyph" viewBox="0 0 76 84" role="img" aria-hidden="true">' +
'<defs>' +
'<linearGradient id="gSun" x1="0" y1="0" x2="1" y2="1">' +
'<stop offset="0%" stop-color="#ffd97a"/><stop offset="100%" stop-color="#f5993d"/></linearGradient>' +
'<linearGradient id="gCloud" x1="0" y1="0" x2="0.4" y2="1">' +
'<stop offset="0%" stop-color="#ffffff"/><stop offset="100%" stop-color="#cdd9ea"/></linearGradient>' +
'</defs>' + body + '</svg>';
}
function esc(s) {
return String(s).replace(/[&<>"']/g, function (c) {
return { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }[c];
});
}
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) {
if (!/^\d{4}-\d{2}-\d{2}$/.test(s)) return false;
var p = s.split("-").map(Number);
var d = new Date(Date.UTC(p[0], p[1] - 1, p[2]));
return d.getUTCFullYear() === p[0] && d.getUTCMonth() === p[1] - 1 && d.getUTCDate() === p[2];
}
function prettyDate(iso) {
var p = iso.split("-").map(Number);
var d = new Date(Date.UTC(p[0], p[1] - 1, p[2]));
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()] + ", " + d.getUTCDate() + " " + months[d.getUTCMonth()] + " " + d.getUTCFullYear();
}
function fmtTemp(v, digits) {
if (v === null || v === undefined || isNaN(v)) return "–";
return (Math.round(v * Math.pow(10, digits || 0)) / Math.pow(10, digits || 0)).toFixed(digits || 0);
}
function num(v) {
var n = parseFloat(v);
return isFinite(n) ? n : null;
}
var params = new URLSearchParams(window.location.search);
var lat = num(params.get("lat"));
var lon = num(params.get("lon"));
if (lat === null || lat < -90 || lat > 90) lat = 52.52;
if (lon === null || lon < -180 || lon > 180) lon = 13.405;
var name = (params.get("name") || "").trim() || "Berlin";
var date = (params.get("date") || "").trim();
if (!isValidDate(date)) date = todayUTC();
var today = todayUTC();
var isPast = date < today;
var endpoint = isPast ? "/api/om/archive" : "/api/om/forecast";
var qs = new URLSearchParams({
latitude: String(lat),
longitude: String(lon),
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: date,
end_date: date
});
var card = document.getElementById("card");
function renderError(detail) {
card.innerHTML =
'<div class="state">' +
'<div class="icon">!</div>' +
'<h2>Weather data could not be loaded</h2>' +
'<p>We couldn\'t retrieve the forecast for <strong>' + esc(name) + '</strong> on ' +
esc(prettyDate(date)) + '.<br>' +
(detail ? '<code>' + esc(detail) + '</code>' : '') +
'</p>' +
'</div>';
}
function render(data) {
var daily = data && data.daily;
var hourly = data && data.hourly;
if (!daily || !Array.isArray(daily.time) || daily.time.length === 0) {
throw new Error("Malformed response: missing daily data");
}
var idx = daily.time.indexOf(date);
if (idx < 0) idx = 0;
var tmax = num(daily.temperature_2m_max && daily.temperature_2m_max[idx]);
var tmin = num(daily.temperature_2m_min && daily.temperature_2m_min[idx]);
var code = daily.weather_code ? daily.weather_code[idx] : null;
var info = WMO[code] || ["Unknown conditions", "cloud"];
var condText = info[0];
var kind = info[1];
var times = (hourly && hourly.time) || [];
var temps = (hourly && hourly.temperature_2m) || [];
var series = [];
for (var i = 0; i < times.length; i++) {
if (String(times[i]).slice(0, 10) !== date) continue;
series.push({ hour: parseInt(String(times[i]).slice(11, 13), 10), t: num(temps[i]) });
}
var valid = series.filter(function (p) { return p.t !== null; });
var hero = null;
if (valid.length) {
if (date === today) {
var nowH = new Date().getUTCHours();
var best = valid[0], bestD = Math.abs(valid[0].hour - nowH);
for (var k = 1; k < valid.length; k++) {
var d2 = Math.abs(valid[k].hour - nowH);
if (d2 < bestD) { best = valid[k]; bestD = d2; }
}
hero = best.t;
} else {
var s = 0;
valid.forEach(function (p) { s += p.t; });
hero = s / valid.length;
}
} else if (tmax !== null && tmin !== null) {
hero = (tmax + tmin) / 2;
}
var heroLabel = valid.length
? (date === today ? "Current" : "Daily average")
: "Midpoint";
// ---- chart geometry ----
var W = 960, H = 168, padT = 22, padB = 16, padL = 30, padR = 8;
var chartSVG = "";
var rangeNote = "";
if (valid.length >= 2) {
var lo = Math.min.apply(null, valid.map(function (p) { return p.t; }));
var hi = Math.max.apply(null, valid.map(function (p) { return p.t; }));
if (hi - lo < 1) { hi = lo + 1; }
var span = hi - lo;
lo -= span * 0.22;
hi += span * 0.28;
var x = function (h) { return padL + (h / 23) * (W - padL - padR); };
var y = function (t) { return padT + (1 - (t - lo) / (hi - lo)) * (H - padT - padB); };
var pts = valid.map(function (p) { return { x: x(p.hour), y: y(p.t), t: p.t, hour: p.hour }; });
// smooth path (Catmull-Rom -> cubic bezier)
var line = "M" + pts[0].x.toFixed(2) + " " + pts[0].y.toFixed(2);
for (var j = 0; j < pts.length - 1; j++) {
var p0 = pts[j > 0 ? j - 1 : 0], p1 = pts[j], p2 = pts[j + 1],
p3 = pts[j + 2 < pts.length ? j + 2 : pts.length - 1];
var c1x = p1.x + (p2.x - p0.x) / 6, c1y = p1.y + (p2.y - p0.y) / 6;
var c2x = p2.x - (p3.x - p1.x) / 6, c2y = p2.y - (p3.y - p1.y) / 6;
line += " C" + c1x.toFixed(2) + " " + c1y.toFixed(2) + "," +
c2x.toFixed(2) + " " + c2y.toFixed(2) + "," +
p2.x.toFixed(2) + " " + p2.y.toFixed(2);
}
var area = line + " L" + pts[pts.length - 1].x.toFixed(2) + " " + (H - padB) +
" L" + pts[0].x.toFixed(2) + " " + (H - padB) + " Z";
// gridlines at nice temperature steps
var grid = "";
var rawStep = (hi - lo) / 3;
var step = [1, 2, 5, 10, 20].reduce(function (a, b) {
return Math.abs(b - rawStep) < Math.abs(a - rawStep) ? b : a;
}, 1);
var gStart = Math.ceil(lo / step) * step;
for (var g = gStart; g <= hi; g += step) {
var gy = y(g);
grid += '<line class="axis-line" x1="' + padL + '" y1="' + gy.toFixed(1) +
'" x2="' + (W - padR) + '" y2="' + gy.toFixed(1) + '"/>' +
'<text class="grid-label" x="' + (padL - 8) + '" y="' + (gy + 3.5).toFixed(1) +
'" text-anchor="end">' + fmtTemp(g, 0) + '°</text>';
}
var markers = "";
pts.forEach(function (p) {
if (p.hour % 3 !== 0) return;
markers += '<circle cx="' + p.x.toFixed(2) + '" cy="' + p.y.toFixed(2) +
'" r="3.2" fill="#fff" stroke="#3b6fd4" stroke-width="2"/>';
});
chartSVG =
'<svg viewBox="0 0 ' + W + " " + H + '" preserveAspectRatio="none" aria-hidden="true">' +
'<defs>' +
'<linearGradient id="gArea" x1="0" y1="0" x2="0" y2="1">' +
'<stop offset="0%" stop-color="#5b8ee0" stop-opacity="0.34"/>' +
'<stop offset="100%" stop-color="#5b8ee0" stop-opacity="0.02"/></linearGradient>' +
'<linearGradient id="gLine" x1="0" y1="0" x2="1" y2="0">' +
'<stop offset="0%" stop-color="#4d8fd6"/>' +
'<stop offset="55%" stop-color="#3b6fd4"/>' +
'<stop offset="100%" stop-color="#e2703a"/></linearGradient>' +
'</defs>' +
grid +
'<path d="' + area + '" fill="url(#gArea)"/>' +
'<path d="' + line + '" fill="none" stroke="url(#gLine)" stroke-width="2.6" ' +
'stroke-linecap="round" stroke-linejoin="round" vector-effect="non-scaling-stroke"/>' +
markers +
"</svg>";
rangeNote = valid.length + " hourly readings · " +
fmtTemp(Math.min.apply(null, valid.map(function (p) { return p.t; })), 1) + "° to " +
fmtTemp(Math.max.apply(null, valid.map(function (p) { return p.t; })), 1) + "°";
} else {
chartSVG = '<div style="height:100%;display:grid;place-items:center;color:#8b97ab;font-size:13px">' +
"Hourly temperatures are not available for this date.</div>";
rangeNote = "";
}
// hourly labels + values
var byHour = {};
series.forEach(function (p) { byHour[p.hour] = p.t; });
var hourRow = "", tempRow = "";
for (var h = 0; h < 24; h++) {
hourRow += '<div class="hour' + (h % 3 === 0 ? " major" : "") + '">' +
(h % 3 === 0 ? pad(h) : "·") + "</div>";
var tv = byHour[h];
tempRow += '<div class="ht">' + (tv === null || tv === undefined ? "–" : fmtTemp(tv, 0) + "°") + "</div>";
}
card.innerHTML =
'<header class="head">' +
"<div>" +
'<p class="eyebrow">' + (isPast ? "Historical record" : "Forecast") + "</p>" +
'<h1 class="place">' + esc(name) + "</h1>" +
'<p class="date">' + esc(prettyDate(date)) + "</p>" +
'<p class="coords">' + lat.toFixed(3) + "°, " + lon.toFixed(3) + "° · UTC</p>" +
"</div>" +
'<div class="glyph-wrap">' +
glyph(kind) +
'<div class="cond">' + esc(condText) + "</div>" +
"</div>" +
"</header>" +
'<div class="main">' +
'<div class="hero">' +
'<div class="num">' + (hero === null ? "–" : fmtTemp(hero, 0)) + "</div>" +
'<div class="unit">°C</div>' +
"</div>" +
'<div class="extremes">' +
'<div class="pill"><div class="label"><span class="dot hi"></span>High</div>' +
'<div class="value">' + fmtTemp(tmax, 1) + "°C</div></div>" +
'<div class="pill"><div class="label"><span class="dot lo"></span>Low</div>' +
'<div class="value">' + fmtTemp(tmin, 1) + "°C</div></div>" +
'<div class="pill"><div class="label">' + esc(heroLabel) + "</div>" +
'<div class="value">' + (hero === null ? "–" : fmtTemp(hero, 1) + "°C") + "</div></div>" +
"</div>" +
"</div>" +
'<div class="divider"></div>' +
'<div class="section-head">' +
'<div class="section-title">Hourly temperature · °C</div>' +
'<div class="range-note">' + esc(rangeNote) + "</div>" +
"</div>" +
'<div class="chart">' + chartSVG + "</div>" +
'<div class="hours">' + hourRow + "</div>" +
'<div class="hour-temps">' + tempRow + "</div>" +
'<div class="foot">' +
'<span class="badge">' + (isPast ? "Archive API" : "Forecast API") + "</span>" +
"<span>Times in UTC · temperatures in degrees Celsius</span>" +
"</div>";
}
fetch(endpoint + "?" + qs.toString(), { headers: { Accept: "application/json" } })
.then(function (res) {
if (!res.ok) throw new Error("HTTP " + res.status + " " + res.statusText);
return res.json();
})
.then(function (data) {
if (data && data.error) throw new Error(data.reason || "API error");
render(data);
})
.catch(function (err) {
renderError(err && err.message ? err.message : "Unknown error");
});
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 23,085 | html / css / js | 576 / 6,641 / 15,868 |
|---|---|---|---|
| dom nodes | 13 | dom depth | 5 |
| css rules | 50 | js present | yes |
| brightness | 243.3 | contrast | 12.2 |
| colorfulness | 11.0 | whitespace | 98.7% |
This slot's telemetry
| prompt tokens | 2 | completion tokens | 11,110 |
|---|---|---|---|
| total tokens | 11,112 | wall | 112.3 s |
| cost | — | request id | — |
config.json573 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "claude-opus-5-eff-low--cli--cursor-xl--dev",
"effort": "low",
"family": "claude",
"m": {
"min": 2,
"q": 2
},
"model_id": "claude-opus-5",
"protocol": "cli",
"served_model": "claude-opus-5-low",
"telemetry": {
"completion_tokens": 33624,
"cost_usd": null,
"prompt_tokens": 8,
"total_tokens": 33632,
"wall_ms": 343728
},
"transport": "cursor-agent-cli-isolated-home",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-13--cursor-xl-s2",
"config_id": "claude-opus-5-eff-low--cli--cursor-xl--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-13T09:58:45.942775+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T09:58:01.125815+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-13T10:00:41.572026+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T09:58:49.272335+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-13T10:02:43.356167+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T10:00:44.680941+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-q"
},
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-13T10:03:54.479161+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T10:02:46.537527+00:00"
}
],
"block_index": 1,
"model_reaching_attempt_index": 0,
"slot_index": 1,
"terminal_state": "valid",
"variant": "P-min"
}
],
"retry_policy": {
"max_unreachable_retries": 5,
"rate_limit_backoff": {
"max_attempts": 4,
"max_total_ms": 60000
}
}
}