gpt-5.6-sol @ none · codex-oauth
codex-oauthnone
- config
- gpt-5.6-sol-eff-none--cli--codex-oauth--dev
- batch
- 2026-07-19--unified
- transport
- codex-cli-oauth-chatgpt
- protocol
- cli · plan
- served model
- gpt-5.6-sol
- 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-fable-5 @xhigh · CC0.70claude-fable-5 @high · CC0.67gemini-3.5-flash @low · api0.67qwen3.8-max-preview · qoder0.67claude-sonnet-5 @medium · CC0.66farthest
gpt-5.5 @low · codex-oauth0.39gpt-5.6-luna @low · codex-oauth0.42gpt-5.6-luna @medium · codex-oauth0.44gpt-5.6-luna @high · kiro0.44gpt-5.5 @medium · codex-oauth0.44within 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 tempambiguousshown: 17max-equals-min
- min tempambiguousshown: 17max-equals-min
- 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>
:root {
color-scheme: dark;
font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
background: #09101f;
color: #f7f9ff;
}
* {
box-sizing: border-box;
}
html,
body {
width: 100%;
height: 100%;
margin: 0;
}
body {
display: grid;
place-items: center;
overflow: hidden;
background:
radial-gradient(circle at 17% 22%, rgba(73, 157, 255, 0.31), transparent 31%),
radial-gradient(circle at 84% 73%, rgba(138, 104, 255, 0.23), transparent 34%),
linear-gradient(135deg, #07101e 0%, #101b35 52%, #101126 100%);
}
body::before,
body::after {
position: fixed;
content: "";
width: 420px;
height: 420px;
border: 1px solid rgba(255, 255, 255, 0.05);
border-radius: 50%;
pointer-events: none;
}
body::before {
top: -230px;
right: -90px;
}
body::after {
bottom: -275px;
left: -80px;
width: 510px;
height: 510px;
}
.card {
position: relative;
width: min(1080px, calc(100vw - 96px));
min-height: 590px;
padding: 48px 50px 40px;
overflow: hidden;
border: 1px solid rgba(255, 255, 255, 0.14);
border-radius: 38px;
background:
linear-gradient(125deg, rgba(255, 255, 255, 0.13), rgba(255, 255, 255, 0.035)),
rgba(13, 23, 46, 0.82);
box-shadow:
0 38px 90px rgba(0, 0, 0, 0.42),
inset 0 1px 0 rgba(255, 255, 255, 0.17);
backdrop-filter: blur(24px);
}
.card::after {
position: absolute;
top: -170px;
right: -130px;
width: 440px;
height: 440px;
content: "";
border-radius: 50%;
background: radial-gradient(circle, rgba(119, 186, 255, 0.22), transparent 67%);
pointer-events: none;
}
.header,
.summary,
.hourly {
position: relative;
z-index: 1;
}
.header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 28px;
}
.eyebrow {
margin-bottom: 10px;
color: #91b7ee;
font-size: 12px;
font-weight: 750;
letter-spacing: 0.2em;
text-transform: uppercase;
}
h1 {
max-width: 650px;
margin: 0;
overflow: hidden;
color: white;
font-size: clamp(42px, 5vw, 66px);
font-weight: 680;
letter-spacing: -0.055em;
line-height: 1.02;
text-overflow: ellipsis;
white-space: nowrap;
}
.date {
margin-top: 15px;
color: #b6c3da;
font-size: 16px;
letter-spacing: 0.01em;
}
.status {
display: flex;
align-items: center;
gap: 9px;
margin-top: 5px;
padding: 10px 15px;
border: 1px solid rgba(160, 201, 255, 0.16);
border-radius: 999px;
background: rgba(98, 159, 236, 0.08);
color: #b8d8ff;
font-size: 12px;
font-weight: 700;
letter-spacing: 0.11em;
text-transform: uppercase;
white-space: nowrap;
}
.status-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: #71d5ff;
box-shadow: 0 0 15px #71d5ff;
}
.summary {
display: grid;
grid-template-columns: minmax(250px, 1.15fr) 1fr;
align-items: center;
gap: 60px;
min-height: 220px;
margin-top: 22px;
}
.condition-wrap {
display: flex;
align-items: center;
gap: 25px;
}
.weather-icon {
display: grid;
flex: 0 0 auto;
width: 106px;
height: 106px;
place-items: center;
border: 1px solid rgba(255, 255, 255, 0.13);
border-radius: 31px;
background: linear-gradient(145deg, rgba(130, 194, 255, 0.17), rgba(127, 102, 255, 0.07));
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 18px 38px rgba(0, 0, 0, 0.16);
font-size: 57px;
line-height: 1;
}
.condition-label {
color: #a7b8d4;
font-size: 13px;
font-weight: 700;
letter-spacing: 0.16em;
text-transform: uppercase;
}
.condition {
max-width: 250px;
margin-top: 8px;
color: #f9fbff;
font-size: 29px;
font-weight: 610;
letter-spacing: -0.025em;
line-height: 1.1;
}
.range {
display: flex;
align-items: flex-end;
justify-content: flex-end;
gap: 34px;
}
.temp-block {
min-width: 130px;
}
.temp-label {
margin-bottom: 8px;
color: #8fa1bf;
font-size: 12px;
font-weight: 750;
letter-spacing: 0.17em;
text-transform: uppercase;
}
.temp-value {
color: #fff;
font-size: 70px;
font-weight: 620;
letter-spacing: -0.07em;
line-height: 0.9;
}
.temp-value.low {
color: #9ec9ff;
}
.degree {
color: inherit;
font-size: 0.48em;
font-weight: 500;
vertical-align: top;
}
.divider {
width: 1px;
height: 78px;
background: linear-gradient(transparent, rgba(255, 255, 255, 0.21), transparent);
}
.hourly {
padding-top: 26px;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.hourly-heading {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 19px;
}
.hourly-title {
color: #eef4ff;
font-size: 15px;
font-weight: 690;
letter-spacing: 0.02em;
}
.hourly-note {
color: #7185a8;
font-size: 11px;
font-weight: 650;
letter-spacing: 0.13em;
text-transform: uppercase;
}
.hourly-list {
display: grid;
grid-template-columns: repeat(12, minmax(0, 1fr));
gap: 8px;
}
.hour {
min-width: 0;
padding: 15px 5px 14px;
border: 1px solid rgba(255, 255, 255, 0.075);
border-radius: 17px;
background: rgba(255, 255, 255, 0.035);
text-align: center;
}
.hour-time {
overflow: hidden;
color: #7f92b2;
font-size: 10px;
font-weight: 700;
letter-spacing: 0.02em;
text-overflow: ellipsis;
white-space: nowrap;
}
.hour-temp {
margin-top: 10px;
color: #eef5ff;
font-size: 17px;
font-weight: 660;
letter-spacing: -0.03em;
}
.loading,
.error {
display: grid;
min-height: 390px;
place-items: center;
color: #b8c6dc;
font-size: 18px;
text-align: center;
}
.loader {
width: 34px;
height: 34px;
margin: 0 auto 18px;
border: 3px solid rgba(255, 255, 255, 0.12);
border-top-color: #79c8ff;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
.error strong {
display: block;
margin-bottom: 8px;
color: #fff;
font-size: 25px;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
@media (max-width: 900px) {
.card {
width: calc(100vw - 40px);
padding: 34px;
}
.summary {
grid-template-columns: 1fr;
gap: 28px;
}
.range {
justify-content: flex-start;
}
.hourly-list {
grid-template-columns: repeat(6, 1fr);
}
}
</style>
</head>
<body>
<main class="card" id="card">
<div class="loading">
<div>
<div class="loader"></div>
Loading weather…
</div>
</div>
</main>
<script>
(() => {
const params = new URLSearchParams(location.search);
const latitude = finiteNumber(params.get("lat"), 52.52);
const longitude = finiteNumber(params.get("lon"), 13.405);
const locationName = (params.get("name") || "Berlin").trim() || "Berlin";
const todayUTC = new Date().toISOString().slice(0, 10);
const requestedDate = validDate(params.get("date")) ? params.get("date") : todayUTC;
const endpoint = requestedDate < todayUTC ? "/api/om/archive" : "/api/om/forecast";
const card = document.getElementById("card");
function finiteNumber(value, fallback) {
const number = Number(value);
return Number.isFinite(number) ? number : fallback;
}
function validDate(value) {
if (!/^\d{4}-\d{2}-\d{2}$/.test(value || "")) return false;
const date = new Date(value + "T00:00:00Z");
return !Number.isNaN(date.getTime()) && date.toISOString().slice(0, 10) === value;
}
function escapeHTML(value) {
return String(value).replace(/[&<>"']/g, character => ({
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'"
})[character]);
}
function formatDate(value) {
return new Intl.DateTimeFormat("en", {
weekday: "long",
day: "numeric",
month: "long",
year: "numeric",
timeZone: "UTC"
}).format(new Date(value + "T12:00:00Z"));
}
function weatherInfo(code) {
const map = {
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: ["Snow", "🌨"],
75: ["Heavy snow", "❄"],
77: ["Snow grains", "❄"],
80: ["Light showers", "🌦"],
81: ["Rain showers", "🌧"],
82: ["Heavy showers", "🌧"],
85: ["Snow showers", "🌨"],
86: ["Heavy snow showers", "🌨"],
95: ["Thunderstorm", "⛈"],
96: ["Thunderstorm with hail", "⛈"],
99: ["Severe thunderstorm", "⛈"]
};
return map[Number(code)] || ["Unknown conditions", "◌"];
}
function temperature(value) {
return Number.isFinite(Number(value)) ? Math.round(Number(value)) : null;
}
function render(data) {
const daily = data && data.daily;
const hourly = data && data.hourly;
const dayIndex = daily && Array.isArray(daily.time)
? daily.time.indexOf(requestedDate)
: -1;
if (
dayIndex < 0 ||
!hourly ||
!Array.isArray(hourly.time) ||
!Array.isArray(hourly.temperature_2m)
) {
throw new Error("Incomplete weather data");
}
const high = temperature(daily.temperature_2m_max[dayIndex]);
const low = temperature(daily.temperature_2m_min[dayIndex]);
const [condition, icon] = weatherInfo(daily.weather_code[dayIndex]);
if (high === null || low === null) {
throw new Error("Missing temperature data");
}
const samples = hourly.time
.map((time, index) => ({
time,
temperature: temperature(hourly.temperature_2m[index])
}))
.filter(item => item.time.startsWith(requestedDate) && item.temperature !== null);
if (!samples.length) throw new Error("Missing hourly data");
const displayed = samples.filter((_, index) => index % 2 === 0).slice(0, 12);
const hourlyHTML = displayed.map(item => {
const hour = item.time.includes("T") ? item.time.split("T")[1].slice(0, 5) : "";
return `
<div class="hour">
<div class="hour-time">${escapeHTML(hour)}</div>
<div class="hour-temp">${item.temperature}°</div>
</div>
`;
}).join("");
card.innerHTML = `
<header class="header">
<div>
<div class="eyebrow">Weather overview</div>
<h1 title="${escapeHTML(locationName)}">${escapeHTML(locationName)}</h1>
<div class="date">${escapeHTML(formatDate(requestedDate))}</div>
</div>
<div class="status"><span class="status-dot"></span> UTC forecast</div>
</header>
<section class="summary">
<div class="condition-wrap">
<div class="weather-icon" aria-hidden="true">${icon}</div>
<div>
<div class="condition-label">Conditions</div>
<div class="condition">${escapeHTML(condition)}</div>
</div>
</div>
<div class="range">
<div class="temp-block">
<div class="temp-label">High</div>
<div class="temp-value">${high}<span class="degree">°C</span></div>
</div>
<div class="divider"></div>
<div class="temp-block">
<div class="temp-label">Low</div>
<div class="temp-value low">${low}<span class="degree">°C</span></div>
</div>
</div>
</section>
<section class="hourly">
<div class="hourly-heading">
<div class="hourly-title">Hourly temperature</div>
<div class="hourly-note">Every two hours · UTC</div>
</div>
<div class="hourly-list">${hourlyHTML}</div>
</section>
`;
}
function renderError() {
card.innerHTML = `
<div class="error">
<div>
<strong>Weather unavailable</strong>
The weather data could not be loaded. Please try again.
</div>
</div>
`;
}
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
});
fetch(endpoint + "?" + query.toString(), { headers: { Accept: "application/json" } })
.then(response => {
if (!response.ok) throw new Error("Request failed");
return response.json();
})
.then(render)
.catch(renderError);
})();
</script>
</body>
</html>L1 — cheap deterministic descriptors
| bytes total | 14,763 | html / css / js | 403 / 7,344 / 7,016 |
|---|---|---|---|
| dom nodes | 12 | dom depth | 6 |
| css rules | 46 | js present | yes |
| brightness | 42.2 | contrast | 22.2 |
| colorfulness | 17.0 | whitespace | 52.9% |
This slot's telemetry
| prompt tokens | 0 | completion tokens | 10,411 |
|---|---|---|---|
| total tokens | 0 | wall | 77.9 s |
| cost | — | request id | — |
config.json559 B
{
"N": 2,
"auth": {
"credential_ref": "WCB_NONE",
"method": "oauth-login"
},
"billing": "plan",
"config_id": "gpt-5.6-sol-eff-none--cli--codex-oauth--dev",
"effort": "none",
"family": "gpt",
"m": {
"min": 2,
"q": 2
},
"model_id": "gpt-5.6-sol",
"protocol": "cli",
"served_model": "gpt-5.6-sol",
"telemetry": {
"completion_tokens": 41453,
"cost_usd": null,
"prompt_tokens": null,
"total_tokens": null,
"wall_ms": 309945
},
"transport": "codex-cli-oauth-chatgpt",
"vendor_sanction_ref": null
}send-log2.5 KB
{
"N": 2,
"batch_id": "2026-07-19--codex-oauth-extra",
"config_id": "gpt-5.6-sol-eff-none--cli--codex-oauth--dev",
"positions": [
{
"attempts": [
{
"attempt_index": 0,
"backoff_ms": null,
"charged": true,
"ended_at": "2026-07-18T22:04:37.802316+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T22:03:27.685013+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-18T22:05:59.383328+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T22:04:41.474418+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-18T22:07:31.867977+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T22:06:03.038838+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-07-18T22:08:48.601814+00:00",
"http_status": null,
"outcome": "valid",
"reached_model": true,
"reason": "ok",
"request_id": null,
"started_at": "2026-07-18T22:07:35.505584+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
}
}
}