gpt-5.6-terra @ xhigh · kiro
kiroxhigh
- config
- gpt-5.6-terra-eff-xhigh--cli--kiro--dev
- batch
- 2026-07-19--unified
- transport
- kiro-cli-isolated-home-github-social
- protocol
- cli · plan
- served model
- gpt-5.6-terra
- 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-7 @low · kiro0.66claude-opus-4-8 @medium · kiro0.63gpt-5.6-terra @low · kiro0.63grok-4.5 @high · grok-cli0.63claude-opus-4-8 @low · kiro0.61farthest
kimi-k3 · opencode0.42gpt-5.6-sol @ultra · codex-oauth0.44gpt-5.6-luna @high · kiro0.44claude-sonnet-5 @xhigh · CC0.44gpt-5.6-luna @medium · codex-oauth0.45within 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
- 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">
<title>Weather</title>
<style>
:root {
color-scheme: dark;
--ink: #f7fbff;
--muted: #b6c8df;
--faint: rgba(211, 231, 255, .16);
--line: rgba(217, 236, 255, .16);
--panel: rgba(7, 24, 52, .53);
--panel-strong: rgba(9, 31, 65, .78);
--accent: #ffd270;
--cyan: #78dcff;
--shadow: 0 30px 80px rgba(1, 9, 29, .43);
}
* { box-sizing: border-box; }
html, body { min-height: 100%; }
body {
margin: 0;
min-width: 1120px;
min-height: 800px;
overflow: hidden;
background:
radial-gradient(circle at 18% 8%, rgba(115, 191, 255, .32), transparent 29%),
radial-gradient(circle at 89% 86%, rgba(47, 126, 222, .23), transparent 30%),
linear-gradient(138deg, #103f76 0%, #09284f 43%, #071a3c 100%);
color: var(--ink);
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
letter-spacing: -.015em;
}
body::before,
body::after {
position: fixed;
content: "";
pointer-events: none;
border-radius: 50%;
filter: blur(1px);
}
body::before {
width: 440px;
height: 440px;
top: -165px;
right: -80px;
background: radial-gradient(circle, rgba(255, 223, 131, .21), rgba(255, 223, 131, 0) 68%);
}
body::after {
width: 3px;
height: 3px;
left: 16%;
top: 15%;
background: #fff;
box-shadow:
110px 88px 0 rgba(255,255,255,.68),
318px 9px 0 rgba(255,255,255,.48),
570px 120px 0 rgba(255,255,255,.45),
812px 45px 0 rgba(255,255,255,.6),
987px 130px 0 rgba(255,255,255,.45),
79px 395px 0 rgba(255,255,255,.45),
922px 475px 0 rgba(255,255,255,.33);
}
main {
position: relative;
width: 1120px;
height: 720px;
margin: 40px auto;
padding: 38px 42px 34px;
overflow: hidden;
border: 1px solid rgba(235, 246, 255, .2);
border-radius: 30px;
background: linear-gradient(137deg, rgba(29, 78, 137, .72), rgba(7, 25, 59, .76));
box-shadow: var(--shadow), inset 0 1px 0 rgba(255,255,255,.17);
backdrop-filter: blur(18px);
}
main::before {
position: absolute;
z-index: 0;
top: -128px;
right: 52px;
width: 276px;
height: 276px;
content: "";
border: 1px solid rgba(255, 228, 147, .2);
border-radius: 50%;
box-shadow: 0 0 0 26px rgba(255, 223, 130, .025), 0 0 80px rgba(255, 207, 96, .18);
}
.content { position: relative; z-index: 1; }
header {
display: flex;
align-items: flex-start;
justify-content: space-between;
}
.eyebrow {
display: flex;
align-items: center;
gap: 9px;
margin: 0 0 10px;
color: var(--cyan);
font-size: 11px;
font-weight: 750;
letter-spacing: .15em;
text-transform: uppercase;
}
.eyebrow::before {
width: 7px;
height: 7px;
content: "";
border-radius: 50%;
background: var(--cyan);
box-shadow: 0 0 12px var(--cyan);
}
h1 {
max-width: 650px;
margin: 0;
font-size: 35px;
font-weight: 680;
letter-spacing: -.045em;
line-height: 1.08;
}
.date {
margin: 9px 0 0;
color: var(--muted);
font-size: 15px;
font-weight: 500;
}
.unit {
display: flex;
align-items: center;
gap: 8px;
margin-top: 7px;
padding: 8px 12px;
border: 1px solid var(--line);
border-radius: 999px;
background: rgba(255,255,255,.06);
color: #e1efff;
font-size: 12px;
font-weight: 700;
letter-spacing: .08em;
}
.unit span {
display: inline-grid;
width: 21px;
height: 21px;
place-items: center;
border-radius: 50%;
background: rgba(120, 220, 255, .17);
color: var(--cyan);
font-size: 13px;
letter-spacing: 0;
}
.overview {
display: grid;
grid-template-columns: 1.42fr .92fr;
gap: 24px;
align-items: stretch;
height: 277px;
margin-top: 30px;
}
.current {
position: relative;
display: flex;
align-items: center;
min-width: 0;
padding: 28px 31px;
overflow: hidden;
border: 1px solid rgba(255,255,255,.16);
border-radius: 23px;
background: linear-gradient(119deg, rgba(255,255,255,.13), rgba(255,255,255,.045));
box-shadow: inset 0 1px rgba(255,255,255,.1);
}
.current::after {
position: absolute;
top: -80px;
right: -38px;
width: 225px;
height: 225px;
content: "";
border: 1px solid rgba(255, 221, 125, .14);
border-radius: 50%;
box-shadow: 0 0 0 22px rgba(255, 221, 125, .025);
}
.weather-icon {
position: relative;
z-index: 1;
display: grid;
flex: 0 0 128px;
width: 128px;
height: 128px;
place-items: center;
color: #ffdc82;
font-size: 88px;
line-height: 1;
filter: drop-shadow(0 5px 16px rgba(255, 200, 73, .25));
}
.summary {
position: relative;
z-index: 1;
min-width: 0;
margin-left: 7px;
}
.condition {
overflow: hidden;
color: #ffffff;
font-size: 28px;
font-weight: 670;
letter-spacing: -.04em;
line-height: 1.05;
text-overflow: ellipsis;
white-space: nowrap;
}
.description {
margin: 9px 0 20px;
color: var(--muted);
font-size: 14px;
}
.range {
display: flex;
gap: 10px;
}
.range-item {
min-width: 101px;
padding: 10px 12px;
border-left: 2px solid var(--cyan);
background: linear-gradient(90deg, rgba(120,220,255,.09), transparent);
}
.range-item.low { border-color: #b9ccff; }
.range-label {
display: block;
color: #a9bfd9;
font-size: 10px;
font-weight: 750;
letter-spacing: .12em;
text-transform: uppercase;
}
.range-value {
display: block;
margin-top: 3px;
color: #fff;
font-size: 22px;
font-weight: 680;
letter-spacing: -.04em;
}
.metrics {
display: grid;
grid-template-rows: 1fr 1fr;
gap: 14px;
}
.metric {
display: flex;
flex-direction: column;
justify-content: center;
padding: 21px 24px;
border: 1px solid var(--line);
border-radius: 19px;
background: var(--panel);
}
.metric-label {
color: #aabfd9;
font-size: 11px;
font-weight: 750;
letter-spacing: .12em;
text-transform: uppercase;
}
.metric-value {
margin-top: 5px;
color: #fff;
font-size: 31px;
font-weight: 680;
letter-spacing: -.055em;
line-height: 1;
}
.metric-value small {
color: #c6d8ec;
font-size: 15px;
font-weight: 650;
letter-spacing: -.01em;
}
.hourly-section {
margin-top: 25px;
}
.hourly-head {
display: flex;
align-items: baseline;
justify-content: space-between;
margin: 0 2px 12px;
}
.hourly-head h2 {
margin: 0;
color: #f4f9ff;
font-size: 15px;
font-weight: 680;
letter-spacing: -.02em;
}
.hourly-head p {
margin: 0;
color: #a8bed9;
font-size: 12px;
}
.hourly-wrap {
position: relative;
padding: 13px 10px 12px;
overflow: hidden;
border: 1px solid var(--line);
border-radius: 18px;
background: rgba(3, 19, 47, .31);
}
.hourly {
display: grid;
grid-template-columns: repeat(24, minmax(0, 1fr));
align-items: end;
gap: 4px;
height: 147px;
}
.hour {
display: grid;
grid-template-rows: 20px 1fr 20px;
gap: 5px;
height: 100%;
min-width: 0;
text-align: center;
}
.hour-time {
overflow: hidden;
color: #a9c0dc;
font-size: 9px;
font-weight: 650;
text-overflow: clip;
white-space: nowrap;
}
.bar-track {
position: relative;
display: flex;
align-items: end;
min-height: 0;
border-radius: 5px;
background: linear-gradient(180deg, rgba(164, 210, 255, .055), rgba(164, 210, 255, 0));
}
.bar {
width: 100%;
min-height: 5px;
border-radius: 5px 5px 2px 2px;
background: linear-gradient(180deg, #9fe8ff, #4b9ff1);
box-shadow: 0 0 11px rgba(102, 210, 255, .16);
}
.hour-temp {
color: #e9f5ff;
font-size: 10px;
font-weight: 700;
letter-spacing: -.04em;
}
.loading, .error {
display: grid;
min-height: 430px;
place-items: center;
border: 1px solid var(--line);
border-radius: 22px;
background: rgba(5, 22, 52, .34);
color: #d8e8fa;
font-size: 16px;
text-align: center;
}
.loading-inner, .error-inner { max-width: 400px; }
.spinner {
width: 29px;
height: 29px;
margin: 0 auto 15px;
border: 3px solid rgba(202, 232, 255, .2);
border-top-color: var(--cyan);
border-radius: 50%;
animation: spin .8s linear infinite;
}
.error strong {
display: block;
margin-bottom: 7px;
color: #fff;
font-size: 20px;
}
.error p {
margin: 0;
color: var(--muted);
font-size: 14px;
line-height: 1.5;
}
@keyframes spin { to { transform: rotate(360deg); } }
</style>
</head>
<body>
<main>
<div id="app" class="content">
<div class="loading">
<div class="loading-inner">
<div class="spinner"></div>
Loading the forecast…
</div>
</div>
</div>
</main>
<script>
(() => {
const app = document.getElementById("app");
const params = new URLSearchParams(window.location.search);
const today = new Date().toISOString().slice(0, 10);
const requestedDate = /^\d{4}-\d{2}-\d{2}$/.test(params.get("date") || "") ? params.get("date") : today;
const validNumber = (value, fallback, min, max) => {
const number = Number(value);
return Number.isFinite(number) && number >= min && number <= max ? number : fallback;
};
const latitude = validNumber(params.get("lat"), 52.52, -90, 90);
const longitude = validNumber(params.get("lon"), 13.405, -180, 180);
const locationName = (params.get("name") || "Berlin").trim().slice(0, 80) || "Berlin";
const weather = {
0: ["Clear sky", "☀"],
1: ["Mainly clear", "🌤"],
2: ["Partly cloudy", "⛅"],
3: ["Overcast", "☁"],
45: ["Foggy", "🌫"],
48: ["Rime fog", "🌫"],
51: ["Light drizzle", "🌦"],
53: ["Drizzle", "🌦"],
55: ["Heavy drizzle", "🌧"],
56: ["Freezing drizzle", "🌨"],
57: ["Heavy freezing drizzle", "🌨"],
61: ["Light rain", "🌦"],
63: ["Rain", "🌧"],
65: ["Heavy rain", "🌧"],
66: ["Freezing rain", "🌨"],
67: ["Heavy freezing rain", "🌨"],
71: ["Light snow", "🌨"],
73: ["Snowfall", "🌨"],
75: ["Heavy snowfall", "❄"],
77: ["Snow grains", "❄"],
80: ["Rain showers", "🌦"],
81: ["Heavy showers", "🌧"],
82: ["Violent showers", "⛈"],
85: ["Snow showers", "🌨"],
86: ["Heavy snow showers", "🌨"],
95: ["Thunderstorm", "⛈"],
96: ["Thunderstorm with hail", "⛈"],
99: ["Severe thunderstorm", "⛈"]
};
const formatTemp = value => {
const number = Number(value);
return Number.isFinite(number) ? `${Math.round(number)}°` : "—";
};
const formatDate = value => new Intl.DateTimeFormat("en-US", {
weekday: "long", month: "long", day: "numeric", year: "numeric", timeZone: "UTC"
}).format(new Date(`${value}T12:00:00Z`));
const renderError = () => {
app.innerHTML = `
<div class="error">
<div class="error-inner">
<strong>Weather data couldn’t be loaded</strong>
<p>Please check the location and try again.</p>
</div>
</div>`;
};
const render = data => {
const daily = data && data.daily;
const hourly = data && data.hourly;
const high = daily && daily.temperature_2m_max && daily.temperature_2m_max[0];
const low = daily && daily.temperature_2m_min && daily.temperature_2m_min[0];
const code = Number(daily && (daily.weather_code || daily.weathercode) && (daily.weather_code || daily.weathercode)[0]);
const [condition, icon] = weather[code] || ["Weather conditions", "◌"];
const readings = (hourly && hourly.temperature_2m || []).map((temperature, index) => ({
temperature: Number(temperature),
time: hourly.time && hourly.time[index] ? hourly.time[index].slice(11, 16) : `${String(index).padStart(2, "0")}:00`
})).filter(item => Number.isFinite(item.temperature));
if (!Number.isFinite(Number(high)) || !Number.isFinite(Number(low)) || readings.length === 0) {
throw new Error("Incomplete weather response");
}
const minHour = Math.min(...readings.map(item => item.temperature));
const maxHour = Math.max(...readings.map(item => item.temperature));
const range = Math.max(maxHour - minHour, 1);
const hours = readings.map(item => {
const height = 16 + ((item.temperature - minHour) / range) * 84;
return `
<div class="hour" title="${item.time} — ${formatTemp(item.temperature)}C">
<span class="hour-time">${item.time.slice(0, 2)}</span>
<div class="bar-track"><div class="bar" style="height:${height.toFixed(1)}%"></div></div>
<span class="hour-temp">${formatTemp(item.temperature)}</span>
</div>`;
}).join("");
app.innerHTML = `
<header>
<div>
<p class="eyebrow">Daily weather</p>
<h1>${escapeHtml(locationName)}</h1>
<p class="date">${formatDate(requestedDate)}</p>
</div>
<div class="unit"><span>°</span> CELSIUS</div>
</header>
<section class="overview" aria-label="Daily weather summary">
<div class="current">
<div class="weather-icon" aria-hidden="true">${icon}</div>
<div class="summary">
<div class="condition">${condition}</div>
<p class="description">Expected conditions for the day</p>
<div class="range">
<div class="range-item">
<span class="range-label">High</span>
<span class="range-value">${formatTemp(high)}</span>
</div>
<div class="range-item low">
<span class="range-label">Low</span>
<span class="range-value">${formatTemp(low)}</span>
</div>
</div>
</div>
</div>
<div class="metrics" aria-label="Temperature range">
<div class="metric">
<span class="metric-label">Daily maximum</span>
<span class="metric-value">${formatTemp(high)} <small>C</small></span>
</div>
<div class="metric">
<span class="metric-label">Daily minimum</span>
<span class="metric-value">${formatTemp(low)} <small>C</small></span>
</div>
</div>
</section>
<section class="hourly-section" aria-label="Hourly temperatures">
<div class="hourly-head">
<h2>Hourly temperatures</h2>
<p>UTC · ${readings.length} hourly readings</p>
</div>
<div class="hourly-wrap">
<div class="hourly">${hours}</div>
</div>
</section>`;
document.title = `${locationName} Weather`;
};
const escapeHtml = value => value.replace(/[&<>"']/g, character => ({
"&": "&", "<": "<", ">": ">", '"': """, "'": "'"
}[character]));
const query = new URLSearchParams({
latitude: String(latitude),
longitude: String(longitude),
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: requestedDate,
end_date: requestedDate
});
const endpoint = requestedDate < today ? "/api/om/archive" : "/api/om/forecast";
fetch(`${endpoint}?${query.toString()}`, { headers: { Accept: "application/json" } })
.then(response => {
if (!response.ok) throw new Error(`Weather API returned ${response.status}`);
return response.json();
})
.then(render)
.catch(renderError);
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 17,363 | html / css / js | 459 / 9,600 / 7,304 |
|---|---|---|---|
| dom nodes | 13 | dom depth | 7 |
| css rules | 52 | js present | yes |
| brightness | 56.8 | contrast | 35.2 |
| colorfulness | 39.1 | whitespace | 64.5% |
This slot's telemetry
| prompt tokens | 0 | completion tokens | 0 |
|---|---|---|---|
| total tokens | 0 | wall | 36.9 s |
| cost | — | request id | — |
config.json572 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "gpt-5.6-terra-eff-xhigh--cli--kiro--dev",
"effort": "xhigh",
"family": "gpt",
"m": {
"min": 2,
"q": 2
},
"model_id": "gpt-5.6-terra",
"protocol": "cli",
"served_model": "gpt-5.6-terra",
"telemetry": {
"completion_tokens": null,
"cost_usd": null,
"prompt_tokens": null,
"total_tokens": null,
"wall_ms": 163926
},
"transport": "kiro-cli-isolated-home-github-social",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-18--kiro-cli",
"config_id": "gpt-5.6-terra-eff-xhigh--cli--kiro--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-18T19:03:34.880241+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T19:02:57.931806+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-07-18T19:04:14.951172+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T19:03:39.647810+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-07-18T19:04:58.884023+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T19:04:18.223268+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-07-18T19:05:54.149145+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T19:05:02.903707+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
}
}
}