gpt-5.6-luna @ low · codex-oauth
codex-oauthlow
- config
- gpt-5.6-luna-eff-low--cli--codex-oauth--dev
- batch
- 2026-07-19--unified
- transport
- codex-cli-oauth-chatgpt
- protocol
- cli · plan
- served model
- gpt-5.6-luna
- 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.66gpt-5.6-luna @high · kiro0.66kimi-k2.6 · go0.66claude-fable-5 @low · CC0.63claude-haiku-4-5 @medium · CC0.63farthest
gemini-3.5-flash @low · api0.36grok-4.5 @low · grok-cli0.38grok-4.5 @low · api0.38gpt-5.6-terra @low · codex-oauth0.38claude-opus-4-8 @max · kiro0.38within 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 tempnot-foundno-temperature-candidate
- min tempnot-foundno-temperature-candidate
- hourlynot-foundcoverage · 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>
:root {
--ink: #18324a;
--muted: #6f8798;
--line: rgba(24, 50, 74, .12);
--sky: #eaf6ff;
--card: rgba(255, 255, 255, .78);
--accent: #ffb547;
--accent-deep: #ee9140;
--shadow: 0 24px 70px rgba(55, 103, 135, .18);
}
* { box-sizing: border-box; }
body {
margin: 0;
min-width: 1100px;
min-height: 800px;
color: var(--ink);
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background:
radial-gradient(circle at 12% 8%, rgba(255,255,255,.95) 0 10%, transparent 32%),
radial-gradient(circle at 90% 15%, rgba(255,222,166,.42), transparent 27%),
linear-gradient(135deg, #cfeeff 0%, #f7fbff 55%, #fff0d7 100%);
overflow: hidden;
}
body::before,
body::after {
content: "";
position: fixed;
border-radius: 50%;
pointer-events: none;
filter: blur(2px);
}
body::before {
width: 360px;
height: 360px;
left: -120px;
bottom: -150px;
background: rgba(151, 211, 244, .28);
}
body::after {
width: 300px;
height: 300px;
right: -100px;
bottom: -120px;
background: rgba(255, 195, 103, .24);
}
.app {
width: 1080px;
margin: 56px auto 0;
position: relative;
}
.weather-card {
min-height: 652px;
padding: 42px 46px 34px;
border: 1px solid rgba(255,255,255,.78);
border-radius: 34px;
background: var(--card);
box-shadow: var(--shadow);
backdrop-filter: blur(18px);
}
.topbar {
display: flex;
align-items: flex-start;
justify-content: space-between;
padding-bottom: 30px;
border-bottom: 1px solid var(--line);
}
.eyebrow {
margin: 0 0 9px;
color: var(--muted);
font-size: 12px;
font-weight: 800;
letter-spacing: .16em;
text-transform: uppercase;
}
.location {
display: flex;
gap: 12px;
align-items: center;
}
.pin {
width: 32px;
height: 32px;
display: grid;
place-items: center;
border-radius: 11px;
color: #fff;
background: var(--ink);
font-size: 16px;
}
h1 {
margin: 0;
font-size: 32px;
letter-spacing: -.04em;
}
.date {
margin: 7px 0 0;
color: var(--muted);
font-size: 15px;
font-weight: 600;
}
.status {
min-height: 26px;
padding: 7px 13px;
border-radius: 20px;
color: #7b5a23;
background: rgba(255, 214, 140, .34);
font-size: 12px;
font-weight: 800;
}
.status.error {
color: #a74747;
background: rgba(255, 180, 180, .35);
}
.summary {
display: grid;
grid-template-columns: 1.15fr .85fr;
gap: 40px;
align-items: center;
padding: 34px 0 38px;
}
.condition-row {
display: flex;
align-items: center;
gap: 24px;
}
.weather-icon {
width: 116px;
height: 116px;
display: grid;
place-items: center;
border-radius: 32px;
background: linear-gradient(145deg, #fff8dc, #ffe1a8);
box-shadow: inset 0 1px 0 rgba(255,255,255,.85);
font-size: 64px;
}
.condition {
margin: 0 0 7px;
font-size: 25px;
font-weight: 800;
letter-spacing: -.035em;
}
.temperature {
display: flex;
align-items: flex-start;
line-height: .85;
font-size: 94px;
font-weight: 850;
letter-spacing: -.09em;
}
.temperature small {
margin: 7px 0 0 8px;
color: var(--accent-deep);
font-size: 34px;
font-weight: 750;
letter-spacing: -.05em;
}
.range {
display: flex;
gap: 18px;
margin-top: 19px;
color: var(--muted);
font-size: 15px;
font-weight: 750;
}
.range strong { color: var(--ink); }
.range span + span {
padding-left: 18px;
border-left: 1px solid var(--line);
}
.chart-panel {
padding: 22px 24px 18px;
border: 1px solid rgba(255,255,255,.9);
border-radius: 24px;
background: rgba(242, 249, 253, .72);
}
.chart-heading {
display: flex;
justify-content: space-between;
margin-bottom: 14px;
color: var(--muted);
font-size: 12px;
font-weight: 800;
letter-spacing: .1em;
text-transform: uppercase;
}
.chart {
position: relative;
height: 106px;
}
.chart svg {
width: 100%;
height: 80px;
overflow: visible;
}
.chart-line {
fill: none;
stroke: var(--accent-deep);
stroke-width: 3;
stroke-linecap: round;
stroke-linejoin: round;
}
.chart-fill { fill: url(#fade); }
.chart-labels {
display: flex;
justify-content: space-between;
color: #90a4b1;
font-size: 11px;
font-weight: 700;
}
.hourly-section {
padding-top: 27px;
border-top: 1px solid var(--line);
}
.section-heading {
display: flex;
align-items: baseline;
justify-content: space-between;
margin-bottom: 17px;
}
h2 {
margin: 0;
font-size: 18px;
letter-spacing: -.02em;
}
.unit-note {
color: var(--muted);
font-size: 12px;
font-weight: 700;
}
.hourly {
display: grid;
grid-template-columns: repeat(12, 1fr);
gap: 10px;
}
.hour {
min-width: 0;
padding: 14px 5px 13px;
border: 1px solid rgba(213, 228, 237, .72);
border-radius: 16px;
text-align: center;
background: rgba(255,255,255,.62);
}
.hour:nth-child(4n) {
background: rgba(255, 244, 221, .72);
border-color: rgba(255, 213, 151, .68);
}
.hour-time {
color: var(--muted);
font-size: 11px;
font-weight: 800;
}
.hour-temp {
margin-top: 11px;
font-size: 17px;
font-weight: 850;
letter-spacing: -.04em;
}
.hour-temp span {
color: var(--accent-deep);
font-size: 12px;
font-weight: 750;
}
.loading {
display: grid;
place-items: center;
height: 380px;
color: var(--muted);
font-size: 16px;
font-weight: 700;
}
.hidden { display: none; }
</style>
</head>
<body>
<main class="app">
<section class="weather-card">
<div class="topbar">
<div>
<p class="eyebrow">Daily forecast</p>
<div class="location">
<div class="pin">⌖</div>
<div>
<h1 id="location">Berlin</h1>
<p class="date" id="date">Loading date…</p>
</div>
</div>
</div>
<div class="status" id="status">Updating</div>
</div>
<div id="loading" class="loading">Loading weather data…</div>
<div id="content" class="hidden">
<div class="summary">
<div class="condition-row">
<div class="weather-icon" id="icon">☀️</div>
<div>
<div class="temperature"><span id="currentTemp">—</span><small>°C</small></div>
<p class="condition" id="condition">—</p>
<div class="range">
<span>High <strong id="maxTemp">—</strong>°</span>
<span>Low <strong id="minTemp">—</strong>°</span>
</div>
</div>
</div>
<div class="chart-panel">
<div class="chart-heading">
<span>Temperature trend</span>
<span>UTC</span>
</div>
<div class="chart">
<svg viewBox="0 0 500 80" preserveAspectRatio="none" aria-hidden="true">
<defs>
<linearGradient id="fade" x1="0" x2="0" y1="0" y2="1">
<stop offset="0" stop-color="#f4a64a" stop-opacity=".34"/>
<stop offset="1" stop-color="#f4a64a" stop-opacity="0"/>
</linearGradient>
</defs>
<path id="chartFill" class="chart-fill"></path>
<path id="chartLine" class="chart-line"></path>
</svg>
<div class="chart-labels"><span>00:00</span><span>06:00</span><span>12:00</span><span>18:00</span><span>23:00</span></div>
</div>
</div>
</div>
<div class="hourly-section">
<div class="section-heading">
<h2>Hourly temperatures</h2>
<span class="unit-note">Degrees Celsius</span>
</div>
<div class="hourly" id="hourly"></div>
</div>
</div>
</section>
</main>
<script>
(() => {
const params = new URLSearchParams(location.search);
const lat = Number(params.get("lat") || 52.52);
const lon = Number(params.get("lon") || 13.405);
const name = params.get("name") || "Berlin";
const today = new Date().toISOString().slice(0, 10);
const date = /^\d{4}-\d{2}-\d{2}$/.test(params.get("date") || "") ? params.get("date") : today;
const $ = id => document.getElementById(id);
$("location").textContent = name;
$("date").textContent = new Date(date + "T12:00:00Z").toLocaleDateString("en-US", {
weekday: "long", month: "long", day: "numeric", year: "numeric", timeZone: "UTC"
});
const conditions = {
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:["Freezing drizzle","🌧️"],
61:["Light rain","🌦️"], 63:["Rain","🌧️"], 65:["Heavy rain","🌧️"], 66:["Freezing rain","🌧️"],
67:["Freezing rain","🌧️"], 71:["Light snow","🌨️"], 73:["Snow","🌨️"], 75:["Heavy snow","❄️"],
77:["Snow grains","❄️"], 80:["Rain showers","🌦️"], 81:["Rain showers","🌧️"], 82:["Heavy showers","⛈️"],
85:["Snow showers","🌨️"], 86:["Snow showers","❄️"], 95:["Thunderstorm","⛈️"], 96:["Thunderstorm","⛈️"], 99:["Thunderstorm","⛈️"]
};
function drawChart(values) {
const clean = values.filter(Number.isFinite);
if (!clean.length) return;
const min = Math.min(...clean), max = Math.max(...clean);
const spread = Math.max(max - min, 1);
const points = clean.map((v, i) => {
const x = clean.length === 1 ? 250 : i * 500 / (clean.length - 1);
const y = 68 - ((v - min) / spread) * 55;
return [x, y];
});
const line = points.map((p, i) => `${i ? "L" : "M"} ${p[0].toFixed(1)} ${p[1].toFixed(1)}`).join(" ");
$("chartLine").setAttribute("d", line);
$("chartFill").setAttribute("d", line + ` L ${points[points.length-1][0]} 80 L ${points[0][0]} 80 Z`);
}
async function load() {
try {
if (!Number.isFinite(lat) || !Number.isFinite(lon)) throw new Error("Invalid location");
const endpoint = date < today ? "/api/om/archive" : "/api/om/forecast";
const query = new URLSearchParams({
latitude: lat, longitude: lon,
daily: "temperature_2m_max,temperature_2m_min,weather_code",
hourly: "temperature_2m", timezone: "UTC",
temperature_unit: "celsius", start_date: date, end_date: date
});
const response = await fetch(`${endpoint}?${query}`);
if (!response.ok) throw new Error("Weather request failed");
const data = await response.json();
const daily = data.daily;
const hourly = data.hourly;
if (!daily || !hourly || !hourly.temperature_2m?.length) throw new Error("Incomplete weather data");
const code = Number(daily.weather_code?.[0]);
const info = conditions[code] || ["Mixed conditions","🌤️"];
const values = hourly.temperature_2m.map(Number);
const valid = values.filter(Number.isFinite);
const current = values[0];
$("currentTemp").textContent = Number.isFinite(current) ? Math.round(current) : "—";
$("maxTemp").textContent = Math.round(Number(daily.temperature_2m_max[0]));
$("minTemp").textContent = Math.round(Number(daily.temperature_2m_min[0]));
$("condition").textContent = info[0];
$("icon").textContent = info[1];
$("hourly").innerHTML = values.slice(0, 24).map((temp, i) => `
<div class="hour">
<div class="hour-time">${String(i).padStart(2,"0")}:00</div>
<div class="hour-temp">${Number.isFinite(temp) ? Math.round(temp) : "—"}<span>°</span></div>
</div>
`).join("");
drawChart(valid);
$("loading").classList.add("hidden");
$("content").classList.remove("hidden");
$("status").textContent = "Live data";
} catch (error) {
$("loading").textContent = "Weather data could not be loaded.";
$("status").textContent = "Unavailable";
$("status").classList.add("error");
}
}
load();
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 12,613 | html / css / js | 2,448 / 5,881 / 4,284 |
|---|---|---|---|
| dom nodes | 57 | dom depth | 11 |
| css rules | 44 | js present | yes |
| brightness | 244.5 | contrast | 18.1 |
| colorfulness | 17.2 | whitespace | 97.2% |
This slot's telemetry
| prompt tokens | 0 | completion tokens | 9,733 |
|---|---|---|---|
| total tokens | 0 | wall | 74 s |
| cost | — | request id | — |
config.json560 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "gpt-5.6-luna-eff-low--cli--codex-oauth--dev",
"effort": "low",
"family": "gpt",
"m": {
"min": 2,
"q": 2
},
"model_id": "gpt-5.6-luna",
"protocol": "cli",
"served_model": "gpt-5.6-luna",
"telemetry": {
"completion_tokens": 32142,
"cost_usd": null,
"prompt_tokens": null,
"total_tokens": null,
"wall_ms": 273645
},
"transport": "codex-cli-oauth-chatgpt",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-17--dev-codex-oauth-gpt-5.6-luna",
"config_id": "gpt-5.6-luna-eff-low--cli--codex-oauth--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-17T13:52:58.151483+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T13:51:44.166458+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-17T13:53:58.737091+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T13:53:01.944572+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-17T13:55:10.796009+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T13:54:02.059698+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-17T13:56:28.107945+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-17T13:55:13.965746+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
}
}
}