gpt-5.6-terra @ medium · cursor
cursormedium
- config
- gpt-5.6-terra-eff-medium--cli--cursor--dev
- batch
- 2026-07-19--unified
- transport
- cursor-agent-cli-isolated-home
- protocol
- cli · plan
- served model
- gpt-5.6-terra-medium
- 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
gpt-5.6-terra @none · cursor-xl0.70gpt-5.6-terra @none · codex-oauth0.68gpt-5.6-terra @low · cursor0.68gpt-5.6-sol @none · cursor0.67gpt-5.6-terra @high · cursor0.67farthest
qwen3.6-plus · go0.51gemini-3.1-pro-preview @low · api0.52gemini-3.1-pro @low · agy0.53north-mini-code-free · api0.54minimax-m2.5 · go0.54within 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
- hourlymatchcoverage 8/24 · 8 match · 0 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=device-width, initial-scale=1">
<title>Weather Card</title>
<style>
:root {
color-scheme: dark;
--ink: #f8fbff;
--muted: #aebbd1;
--line: rgba(220, 234, 255, .14);
--cyan: #7be7ff;
--blue: #6997ff;
--card: rgba(18, 32, 60, .82);
}
* { box-sizing: border-box; }
body {
margin: 0;
min-height: 800px;
display: grid;
place-items: center;
overflow: hidden;
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
color: var(--ink);
background:
radial-gradient(circle at 16% 15%, rgba(81, 154, 255, .34), transparent 29%),
radial-gradient(circle at 84% 78%, rgba(69, 226, 244, .16), transparent 29%),
linear-gradient(135deg, #071226 0%, #101d39 52%, #071124 100%);
}
.orb {
position: fixed;
border-radius: 50%;
filter: blur(1px);
opacity: .7;
pointer-events: none;
}
.orb.one { width: 330px; height: 330px; top: -135px; right: 112px; background: rgba(111, 137, 255, .18); }
.orb.two { width: 220px; height: 220px; bottom: -90px; left: 105px; background: rgba(76, 225, 240, .12); }
main {
width: 920px;
min-height: 590px;
position: relative;
padding: 42px 46px 36px;
border: 1px solid rgba(231, 241, 255, .19);
border-radius: 30px;
overflow: hidden;
background: linear-gradient(125deg, rgba(38, 61, 106, .85), var(--card) 52%, rgba(12, 26, 53, .92));
box-shadow: 0 32px 90px rgba(0, 0, 0, .38), inset 0 1px rgba(255,255,255,.09);
backdrop-filter: blur(18px);
}
main::after {
content: "";
position: absolute;
inset: 0;
pointer-events: none;
background: linear-gradient(116deg, rgba(255,255,255,.08), transparent 28%, transparent 72%, rgba(121, 228, 255, .05));
}
.content { position: relative; z-index: 1; }
header { display: flex; align-items: flex-start; justify-content: space-between; }
.eyebrow {
margin: 0 0 8px;
color: var(--cyan);
font-size: 11px;
font-weight: 750;
letter-spacing: .16em;
text-transform: uppercase;
}
h1 { margin: 0; font-size: 39px; line-height: 1.05; letter-spacing: -.045em; }
.date {
margin-top: 5px;
color: var(--muted);
text-align: right;
font-size: 14px;
font-weight: 550;
}
.summary {
display: grid;
grid-template-columns: 1fr auto;
align-items: center;
margin: 35px 0 30px;
}
.temperature {
display: flex;
align-items: center;
letter-spacing: -.075em;
font-size: 118px;
font-weight: 250;
line-height: .8;
}
.temperature small { align-self: flex-start; margin: 11px 0 0 9px; font-size: 31px; font-weight: 500; letter-spacing: -.03em; }
.condition { margin: 16px 0 0 7px; color: #dce8fc; font-size: 17px; font-weight: 580; }
.icon-wrap { display: grid; place-items: center; width: 170px; height: 130px; }
.weather-icon { width: 117px; height: 117px; filter: drop-shadow(0 10px 14px rgba(0,0,0,.14)); }
.range {
display: flex;
gap: 12px;
justify-content: flex-end;
}
.range div {
min-width: 91px;
padding: 12px 14px;
border: 1px solid var(--line);
border-radius: 14px;
background: rgba(4, 13, 33, .20);
}
.range span { display: block; color: var(--muted); font-size: 10px; font-weight: 750; letter-spacing: .11em; text-transform: uppercase; }
.range strong { display: block; margin-top: 5px; font-size: 20px; font-weight: 620; }
.hourly {
border-top: 1px solid var(--line);
padding-top: 21px;
}
.hourly-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 14px; }
.hourly h2 { margin: 0; font-size: 15px; letter-spacing: -.01em; }
.hourly p { margin: 0; color: var(--muted); font-size: 12px; }
.chart { position: relative; height: 155px; }
.chart svg { position: absolute; inset: 0 0 24px; width: 100%; height: calc(100% - 24px); overflow: visible; }
.hours {
display: grid;
grid-template-columns: repeat(8, 1fr);
height: 100%;
align-items: end;
}
.hour {
position: relative;
height: 100%;
min-width: 0;
border-left: 1px solid rgba(233, 241, 255, .07);
}
.hour:first-child { border-left: 0; }
.point {
position: absolute;
left: -4px;
width: 8px;
height: 8px;
border: 2px solid #d5f7ff;
border-radius: 50%;
background: #3fccea;
box-shadow: 0 0 0 4px rgba(100, 223, 255, .12);
}
.temp-label {
position: absolute;
left: 0;
transform: translateX(-50%);
color: #ecf8ff;
font-size: 12px;
font-weight: 680;
white-space: nowrap;
}
.time {
position: absolute;
bottom: 0;
left: 0;
transform: translateX(-50%);
color: var(--muted);
font-size: 11px;
font-weight: 600;
white-space: nowrap;
}
.hour:first-child .temp-label, .hour:first-child .time { transform: none; }
.hour:last-child .temp-label, .hour:last-child .time { transform: translateX(-100%); }
.status {
min-height: 470px;
display: grid;
place-items: center;
text-align: center;
color: var(--muted);
font-size: 16px;
}
.status span { display: block; margin-top: 12px; color: #e4edff; font-size: 22px; font-weight: 600; }
</style>
</head>
<body>
<div class="orb one"></div><div class="orb two"></div>
<main>
<div class="content" id="app">
<div class="status">Loading weather<span>Please wait</span></div>
</div>
</main>
<script>
(() => {
const app = document.getElementById("app");
const query = new URLSearchParams(location.search);
const today = new Date().toISOString().slice(0, 10);
const validDate = /^\d{4}-\d{2}-\d{2}$/;
const date = validDate.test(query.get("date") || "") ? query.get("date") : today;
const lat = Number(query.get("lat") ?? 52.52);
const lon = Number(query.get("lon") ?? 13.405);
const name = (query.get("name") || "Berlin").trim() || "Berlin";
const conditions = {
0: ["Clear sky", "sun"],
1: ["Mainly clear", "sun-cloud"],
2: ["Partly cloudy", "sun-cloud"],
3: ["Overcast", "cloud"],
45: ["Foggy", "fog"], 48: ["Rime fog", "fog"],
51: ["Light drizzle", "rain"], 53: ["Drizzle", "rain"], 55: ["Heavy drizzle", "rain"],
56: ["Freezing drizzle", "rain"], 57: ["Freezing drizzle", "rain"],
61: ["Light rain", "rain"], 63: ["Rain", "rain"], 65: ["Heavy rain", "rain"],
66: ["Freezing rain", "rain"], 67: ["Heavy freezing rain", "rain"],
71: ["Light snowfall", "snow"], 73: ["Snowfall", "snow"], 75: ["Heavy snowfall", "snow"],
77: ["Snow grains", "snow"], 80: ["Rain showers", "rain"], 81: ["Rain showers", "rain"],
82: ["Violent showers", "rain"], 85: ["Snow showers", "snow"], 86: ["Heavy snow showers", "snow"],
95: ["Thunderstorm", "storm"], 96: ["Thunderstorm with hail", "storm"], 99: ["Thunderstorm with hail", "storm"]
};
const icon = type => {
const common = 'fill="none" stroke-linecap="round" stroke-linejoin="round"';
if (type === "sun") return `<svg class="weather-icon" viewBox="0 0 120 120" ${common}><circle cx="60" cy="60" r="22" fill="#ffd66b" stroke="#ffe9a8" stroke-width="3"/><g stroke="#ffe29a" stroke-width="4"><path d="M60 12v12M60 96v12M12 60h12M96 60h12M26 26l9 9M85 85l9 9M94 26l-9 9M35 85l-9 9"/></g></svg>`;
if (type === "storm") return `<svg class="weather-icon" viewBox="0 0 120 120" ${common}><path d="M31 76h57a20 20 0 0 0 1-40A30 30 0 0 0 33 47a15 15 0 0 0-2 29Z" fill="#9bb7df" stroke="#d9efff" stroke-width="3"/><path d="m60 71-10 20h11l-4 17 16-24H61l7-13Z" fill="#ffe066" stroke="#ffeab1" stroke-width="2"/></svg>`;
if (type === "rain") return `<svg class="weather-icon" viewBox="0 0 120 120" ${common}><path d="M28 72h62a19 19 0 0 0 0-38 30 30 0 0 0-57 11A14 14 0 0 0 28 72Z" fill="#91b5e4" stroke="#d9efff" stroke-width="3"/><g stroke="#75e5ff" stroke-width="4"><path d="m41 82-4 12M61 82l-4 12M81 82l-4 12"/></g></svg>`;
if (type === "snow") return `<svg class="weather-icon" viewBox="0 0 120 120" ${common}><path d="M28 70h62a19 19 0 0 0 0-38 30 30 0 0 0-57 11A14 14 0 0 0 28 70Z" fill="#a9c5e9" stroke="#ecf8ff" stroke-width="3"/><g stroke="#dff8ff" stroke-width="3"><path d="M41 81v13m-6-9 12 6m0-6-12 6M61 81v13m-6-9 12 6m0-6-12 6M81 81v13m-6-9 12 6m0-6-12 6"/></g></svg>`;
if (type === "fog") return `<svg class="weather-icon" viewBox="0 0 120 120" ${common}><path d="M34 59h51a17 17 0 0 0 0-34 27 27 0 0 0-50 13A13 13 0 0 0 34 59Z" fill="#9bb4d4" stroke="#d9efff" stroke-width="3"/><g stroke="#c9e2f7" stroke-width="4"><path d="M24 71h72M32 84h56M24 97h72"/></g></svg>`;
if (type === "cloud") return `<svg class="weather-icon" viewBox="0 0 120 120" ${common}><path d="M25 79h66a21 21 0 0 0 0-42 31 31 0 0 0-59 11A16 16 0 0 0 25 79Z" fill="#9cb9df" stroke="#e0f1ff" stroke-width="3"/></svg>`;
return `<svg class="weather-icon" viewBox="0 0 120 120" ${common}><circle cx="45" cy="45" r="20" fill="#ffda75" stroke="#ffebaa" stroke-width="3"/><path d="M45 13v10M13 45h10M22 22l7 7M68 22l-7 7"/><path d="M37 84h55a18 18 0 0 0 0-36 28 28 0 0 0-51 12A14 14 0 0 0 37 84Z" fill="#a8c1e5" stroke="#e2f3ff" stroke-width="3"/></svg>`;
};
const params = new URLSearchParams({
latitude: String(Number.isFinite(lat) ? lat : 52.52),
longitude: String(Number.isFinite(lon) ? lon : 13.405),
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: date,
end_date: date
});
async function load() {
try {
const endpoint = date < today ? "/api/om/archive" : "/api/om/forecast";
const response = await fetch(`${endpoint}?${params}`);
if (!response.ok) throw new Error("Weather service unavailable");
const data = await response.json();
const max = data?.daily?.temperature_2m_max?.[0];
const min = data?.daily?.temperature_2m_min?.[0];
const code = data?.daily?.weather_code?.[0];
const times = data?.hourly?.time || [];
const temps = data?.hourly?.temperature_2m || [];
if (![max, min, code].every(Number.isFinite) || !times.length) throw new Error("Incomplete weather data");
render(max, min, code, times, temps);
} catch (_) {
app.innerHTML = `<div class="status">Weather data could not be loaded.<span>Please try again later.</span></div>`;
}
}
function render(max, min, code, times, temps) {
const condition = conditions[code] || ["Unknown conditions", "cloud"];
const samples = [];
for (let i = 0; i < times.length; i += 3) samples.push({ time: times[i], temp: temps[i] });
if (samples.length > 8) samples.splice(8);
const values = samples.map(x => Number(x.temp)).filter(Number.isFinite);
const low = Math.min(...values), high = Math.max(...values), spread = Math.max(high - low, 3);
const points = samples.map((item, i) => {
const y = 75 - ((Number(item.temp) - low) / spread) * 52;
const labelY = Math.max(2, y - 22);
const hour = item.time.slice(11, 13) + ":00";
return `<div class="hour"><span class="temp-label" style="top:${labelY}%">${Math.round(item.temp)}°</span><span class="point" style="top:${y}%"></span><span class="time">${hour}</span></div>`;
}).join("");
const polyline = samples.map((item, i) => {
const x = samples.length === 1 ? 0 : (i / (samples.length - 1)) * 100;
const y = 75 - ((Number(item.temp) - low) / spread) * 52;
return `${x},${y}`;
}).join(" ");
app.innerHTML = `
<div class="content">
<header>
<div><p class="eyebrow">Weather overview</p><h1>${escape(name)}</h1></div>
<div class="date">${new Intl.DateTimeFormat("en-US", { weekday: "long", month: "long", day: "numeric", year: "numeric", timeZone: "UTC" }).format(new Date(date + "T12:00:00Z"))}</div>
</header>
<section class="summary">
<div><div class="temperature">${Math.round(max)}<small>°C</small></div><p class="condition">${condition[0]}</p></div>
<div>
<div class="icon-wrap">${icon(condition[1])}</div>
<div class="range"><div><span>High</span><strong>${Math.round(max)}°</strong></div><div><span>Low</span><strong>${Math.round(min)}°</strong></div></div>
</div>
</section>
<section class="hourly">
<div class="hourly-head"><h2>Hourly temperature</h2><p>UTC · Celsius</p></div>
<div class="chart"><svg viewBox="0 0 100 100" preserveAspectRatio="none"><defs><linearGradient id="line" x1="0" x2="1"><stop stop-color="#81ecff"/><stop offset="1" stop-color="#8fa1ff"/></linearGradient></defs><polyline points="${polyline}" fill="none" stroke="url(#line)" stroke-width="1.3" vector-effect="non-scaling-stroke"/></svg><div class="hours">${points}</div></div>
</section>
</div>`;
}
function escape(value) {
const div = document.createElement("div");
div.textContent = value;
return div.innerHTML;
}
load();
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 13,095 | html / css / js | 407 / 5,166 / 7,522 |
|---|---|---|---|
| dom nodes | 14 | dom depth | 6 |
| css rules | 39 | js present | yes |
| brightness | 37.0 | contrast | 19.7 |
| colorfulness | 20.5 | whitespace | 57.5% |
This slot's telemetry
| prompt tokens | 3 | completion tokens | 4,603 |
|---|---|---|---|
| total tokens | 4,606 | wall | 39.6 s |
| cost | — | request id | — |
config.json577 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "gpt-5.6-terra-eff-medium--cli--cursor--dev",
"effort": "medium",
"family": "gpt",
"m": {
"min": 2,
"q": 2
},
"model_id": "gpt-5.6-terra",
"protocol": "cli",
"served_model": "gpt-5.6-terra-medium",
"telemetry": {
"completion_tokens": 12830,
"cost_usd": null,
"prompt_tokens": 12,
"total_tokens": 12842,
"wall_ms": 127706
},
"transport": "cursor-agent-cli-isolated-home",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-08-13--cursor-s0",
"config_id": "gpt-5.6-terra-eff-medium--cli--cursor--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-08-13T00:53:09.849899+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T00:52:37.735719+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-13T00:53:52.740902+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T00:53:13.201459+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-13T00:54:29.758312+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T00:53:56.948638+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-13T00:54:56.283641+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-08-13T00:54:33.053743+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
}
}
}