gpt-5.6-terra @ medium · kiro
kiromedium
- config
- gpt-5.6-terra-eff-medium--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
gpt-5.5 @low · codex-oauth0.61gpt-5.6-luna @high · kiro0.61gpt-5.6-luna @xhigh · kiro0.61gpt-5.4 @xhigh · api0.58gpt-5.6-luna @medium · codex-oauth0.58farthest
kimi-k2.5 · go0.36claude-opus-4-8 @high · CC0.41kimi-k3 @high · api0.42grok-4.5 @low · grok-cli0.42deepseek-v4-pro · opencode0.42within 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 tempambiguousinsufficient-distinct-temperature-nodes
- min tempambiguousinsufficient-distinct-temperature-nodes
- 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 Card</title>
<style>
:root {
--ink: #172237;
--muted: #68758a;
--line: rgba(35, 55, 87, .12);
--card: rgba(255,255,255,.78);
--blue: #276ff2;
--navy: #0f1f3d;
}
* { box-sizing: border-box; }
html, body { width: 100%; min-width: 1280px; height: 100%; margin: 0; }
body {
overflow: hidden;
color: var(--ink);
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background:
radial-gradient(circle at 13% 12%, rgba(255,255,255,.98) 0 8%, transparent 31%),
radial-gradient(circle at 88% 80%, rgba(123,189,255,.24) 0, transparent 29%),
linear-gradient(135deg, #d8edff 0%, #eff7ff 49%, #d7e9ff 100%);
}
.orb {
position: fixed; border-radius: 50%; pointer-events: none; filter: blur(1px);
background: rgba(255,255,255,.38);
}
.orb.one { width: 420px; height: 420px; right: -84px; top: -145px; }
.orb.two { width: 270px; height: 270px; left: -90px; bottom: -115px; }
main {
width: 1280px; height: 800px; margin: auto; position: relative;
display: grid; place-items: center; padding: 52px 92px;
}
.weather-card {
width: 100%; min-height: 590px; overflow: hidden; border-radius: 32px;
background: var(--card); border: 1px solid rgba(255,255,255,.82);
box-shadow: 0 28px 75px rgba(31, 76, 137, .18), 0 4px 12px rgba(35, 71, 122, .07);
backdrop-filter: blur(18px);
}
.top {
min-height: 346px; position: relative; overflow: hidden; padding: 43px 54px 38px;
color: #fff; background: linear-gradient(125deg, #0b2959 0%, #1754a4 54%, #388cf4 100%);
}
.top::before {
content: ""; position: absolute; width: 490px; height: 490px; right: -88px; top: -242px;
border: 1px solid rgba(255,255,255,.16); border-radius: 50%;
box-shadow: 0 0 0 52px rgba(255,255,255,.055), 0 0 0 105px rgba(255,255,255,.035);
}
.top::after {
content: ""; position: absolute; width: 720px; height: 180px; bottom: -106px; left: -52px;
background: radial-gradient(ellipse, rgba(255,255,255,.18) 0%, rgba(255,255,255,0) 69%);
transform: rotate(-8deg);
}
.card-content { position: relative; z-index: 1; }
.eyebrow {
display: flex; align-items: center; gap: 10px; color: rgba(255,255,255,.72);
font-size: 12px; font-weight: 750; letter-spacing: .13em; text-transform: uppercase;
}
.pin {
width: 8px; height: 8px; border-radius: 50%; background: #9ddcff;
box-shadow: 0 0 0 4px rgba(157,220,255,.16);
}
.heading-row { display: flex; justify-content: space-between; align-items: flex-start; margin-top: 12px; }
h1 { margin: 0; font-size: 38px; line-height: 1.1; letter-spacing: -.045em; font-weight: 730; }
.date { margin: 9px 0 0; color: rgba(255,255,255,.75); font-size: 15px; font-weight: 520; }
.condition {
margin-top: 31px; display: flex; align-items: center; gap: 18px;
}
.condition-icon {
width: 72px; height: 72px; display: grid; place-items: center; font-size: 57px;
line-height: 1; filter: drop-shadow(0 6px 8px rgba(0,0,0,.13));
}
.condition-name { font-size: 21px; font-weight: 670; letter-spacing: -.02em; }
.condition-note { margin-top: 4px; color: rgba(255,255,255,.68); font-size: 13px; }
.temperatures {
position: absolute; right: 54px; bottom: 37px; z-index: 2; text-align: right;
}
.temperature {
font-size: 88px; line-height: .8; font-weight: 250; letter-spacing: -.075em;
font-variant-numeric: tabular-nums;
}
.degree { font-size: .47em; vertical-align: top; margin-left: 3px; font-weight: 320; }
.range { margin-top: 19px; color: rgba(255,255,255,.81); font-size: 14px; font-weight: 580; }
.range b { color: #fff; font-weight: 750; }
.bottom { padding: 28px 54px 31px; }
.section-heading {
display: flex; align-items: center; justify-content: space-between; margin-bottom: 17px;
}
.section-heading h2 { margin: 0; font-size: 14px; font-weight: 760; letter-spacing: .01em; }
.section-heading span { color: var(--muted); font-size: 12px; font-weight: 550; }
.hourly {
display: grid; grid-template-columns: repeat(12, 1fr); gap: 8px;
min-height: 136px;
}
.hour {
min-width: 0; padding: 13px 7px 10px; border-radius: 15px; text-align: center;
background: rgba(241,247,255,.75); border: 1px solid transparent;
}
.hour.current {
color: #fff; background: var(--blue); box-shadow: 0 8px 16px rgba(39,111,242,.21);
}
.hour-time { color: var(--muted); font-size: 11px; font-weight: 650; }
.current .hour-time { color: rgba(255,255,255,.78); }
.mini-icon { height: 31px; margin: 6px 0 4px; font-size: 24px; line-height: 31px; }
.hour-temp { font-size: 15px; font-weight: 760; font-variant-numeric: tabular-nums; }
.status {
min-height: 590px; display: grid; place-items: center; padding: 50px; text-align: center;
}
.status-inner { max-width: 410px; }
.status-icon { font-size: 55px; margin-bottom: 14px; }
.status h1 { font-size: 28px; }
.status p { margin: 11px 0 0; color: var(--muted); font-size: 15px; line-height: 1.55; }
.loading-dot {
width: 9px; height: 9px; display: inline-block; margin-right: 8px; border-radius: 50%;
background: var(--blue); animation: pulse 1s infinite alternate;
}
@keyframes pulse { to { transform: scale(.55); opacity: .4; } }
</style>
</head>
<body>
<div class="orb one"></div><div class="orb two"></div>
<main>
<article class="weather-card" id="card" aria-live="polite">
<div class="status">
<div class="status-inner">
<div class="status-icon">☀️</div>
<h1><span class="loading-dot"></span>Loading weather</h1>
<p>Collecting the forecast for your selected day.</p>
</div>
</div>
</article>
</main>
<script>
(() => {
const params = new URLSearchParams(location.search);
const utcToday = new Date().toISOString().slice(0, 10);
const isDate = value => /^\d{4}-\d{2}-\d{2}$/.test(value) && !Number.isNaN(new Date(value + "T00:00:00Z").getTime());
const date = isDate(params.get("date") || "") ? params.get("date") : utcToday;
const lat = Number(params.get("lat"));
const lon = Number(params.get("lon"));
const latitude = Number.isFinite(lat) ? lat : 52.52;
const longitude = Number.isFinite(lon) ? lon : 13.405;
const name = (params.get("name") || "Berlin").trim() || "Berlin";
const endpoint = date < utcToday ? "/api/om/archive" : "/api/om/forecast";
const query = new URLSearchParams({
latitude, longitude,
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m",
timezone: "UTC",
temperature_unit: "celsius",
start_date: date,
end_date: date
});
const conditionFor = code => {
const weather = {
0: ["Clear sky", "☀️", "A bright, clear day"],
1: ["Mainly clear", "🌤️", "Mostly sunny skies"],
2: ["Partly cloudy", "⛅", "Sun and passing clouds"],
3: ["Overcast", "☁️", "Cloud-covered skies"],
45: ["Foggy", "🌫️", "Low visibility"],
48: ["Rime fog", "🌫️", "Icy fog in the air"],
51: ["Light drizzle", "🌦️", "A little drizzle"],
53: ["Drizzle", "🌦️", "Steady light rain"],
55: ["Heavy drizzle", "🌧️", "Persistent drizzle"],
56: ["Freezing drizzle", "🌧️", "Icy drizzle"],
57: ["Heavy freezing drizzle", "🌧️", "Heavy icy drizzle"],
61: ["Light rain", "🌦️", "Light rain showers"],
63: ["Rain", "🌧️", "Rain through the day"],
65: ["Heavy rain", "🌧️", "Heavy rainfall"],
66: ["Freezing rain", "🌧️", "Freezing rain"],
67: ["Heavy freezing rain", "🌧️", "Heavy freezing rain"],
71: ["Light snow", "🌨️", "Light snowfall"],
73: ["Snowfall", "🌨️", "Snow is falling"],
75: ["Heavy snow", "❄️", "Heavy snowfall"],
77: ["Snow grains", "🌨️", "Fine snow grains"],
80: ["Rain showers", "🌦️", "Passing showers"],
81: ["Rain showers", "🌧️", "Moderate showers"],
82: ["Heavy showers", "⛈️", "Intense rain showers"],
85: ["Snow showers", "🌨️", "Passing snow showers"],
86: ["Heavy snow showers", "❄️", "Heavy snow showers"],
95: ["Thunderstorm", "⛈️", "Storms in the area"],
96: ["Thunderstorm with hail", "⛈️", "Storms and light hail"],
99: ["Severe thunderstorm", "⛈️", "Storms with heavy hail"]
};
return weather[code] || ["Weather update", "🌤️", "Current conditions"];
};
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 temp = value => `${Math.round(value)}°`;
const hourLabel = iso => {
const hour = Number(iso.slice(11, 13));
return hour === 0 ? "12 AM" : hour < 12 ? `${hour} AM` : hour === 12 ? "12 PM" : `${hour - 12} PM`;
};
async function load() {
try {
const response = await fetch(`${endpoint}?${query}`, { headers: { Accept: "application/json" } });
if (!response.ok) throw new Error(`Weather service returned ${response.status}`);
const data = await response.json();
const daily = data.daily;
const hourly = data.hourly;
if (!daily || !hourly || !Array.isArray(hourly.time) || !hourly.time.length ||
!Number.isFinite(daily.temperature_2m_max?.[0]) || !Number.isFinite(daily.temperature_2m_min?.[0])) {
throw new Error("The weather response did not contain data for this date.");
}
const [condition, icon, note] = conditionFor(daily.weather_code?.[0]);
const dayHours = hourly.time.map((time, i) => ({ time, value: hourly.temperature_2m?.[i] }))
.filter(item => item.time.startsWith(date) && Number.isFinite(item.value));
if (!dayHours.length) throw new Error("Hourly temperatures were unavailable.");
const nowHour = new Date().toISOString().slice(0, 13);
const sampled = dayHours.filter((_, i) => i % 2 === 0).slice(0, 12);
document.getElementById("card").innerHTML = `
<section class="top">
<div class="card-content">
<div class="eyebrow"><span class="pin"></span> Weather at your location</div>
<div class="heading-row">
<div><h1>${escapeHtml(name)}</h1><p class="date">${formatDate(date)}</p></div>
</div>
<div class="condition">
<div class="condition-icon">${icon}</div>
<div><div class="condition-name">${condition}</div><div class="condition-note">${note}</div></div>
</div>
</div>
<div class="temperatures">
<div class="temperature">${temp(daily.temperature_2m_max[0])}<span class="degree">C</span></div>
<div class="range"><b>High ${temp(daily.temperature_2m_max[0])}</b> · Low ${temp(daily.temperature_2m_min[0])}</div>
</div>
</section>
<section class="bottom">
<div class="section-heading"><h2>Hourly temperature</h2><span>All times UTC · Celsius</span></div>
<div class="hourly">${sampled.map(item => `
<div class="hour ${item.time.slice(0, 13) === nowHour ? "current" : ""}">
<div class="hour-time">${hourLabel(item.time)}</div>
<div class="mini-icon">${icon}</div>
<div class="hour-temp">${temp(item.value)}</div>
</div>`).join("")}</div>
</section>`;
} catch (error) {
document.getElementById("card").innerHTML = `
<div class="status">
<div class="status-inner">
<div class="status-icon">🌦️</div>
<h1>Weather unavailable</h1>
<p>We couldn’t load weather data for ${escapeHtml(name)} on ${formatDate(date)}. Please try again shortly.</p>
</div>
</div>`;
}
}
function escapeHtml(value) {
const element = document.createElement("span");
element.textContent = value;
return element.innerHTML;
}
load();
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 12,201 | html / css / js | 625 / 5,281 / 6,295 |
|---|---|---|---|
| dom nodes | 18 | dom depth | 8 |
| css rules | 46 | js present | yes |
| brightness | 182.3 | contrast | 78.5 |
| colorfulness | 67.5 | whitespace | 61.2% |
This slot's telemetry
| prompt tokens | 0 | completion tokens | 0 |
|---|---|---|---|
| total tokens | 0 | wall | 27.2 s |
| cost | — | request id | — |
config.json574 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "gpt-5.6-terra-eff-medium--cli--kiro--dev",
"effort": "medium",
"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": 103341
},
"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-medium--cli--kiro--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-18T19:01:26.864356+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T19:00:59.610336+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:01:52.283493+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T19:01:30.718545+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:02:18.315106+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T19:01:55.581680+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:02:53.535173+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T19:02:21.564533+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
}
}
}