claude-fable-5-thinking @ medium · cursor

cursormedium
config
claude-fable-5-thinking-eff-medium--cli--cursor--dev
batch
2026-07-19--unified
transport
cursor-agent-cli-isolated-home
protocol
cli · plan
served model
claude-fable-5-thinking-medium
captured
Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe
claude-fable-5-thinking @medium · cursor P-q slot 0 screenshot

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 neighborsNo similarity data for this session — this batch has no computed pairs.

Fidelity — does the card show the right data?

  • namematch
  • conditionmatch
  • datematch
  • max tempmismatchshown: 52.52
  • min tempmismatchshown: 13.405
  • 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=1280, initial-scale=1">
<title>Weather Card</title>
<style>
  :root {
    --bg-1: #0e1428;
    --bg-2: #1b2745;
    --card-glass: rgba(255, 255, 255, 0.06);
    --card-border: rgba(255, 255, 255, 0.12);
    --text-1: #f4f7ff;
    --text-2: #a8b3d1;
    --text-3: #6b7699;
    --accent: #7fb8ff;
    --accent-warm: #ffb36b;
    --radius: 24px;
    font-size: 16px;
  }

  * { margin: 0; padding: 0; box-sizing: border-box; }

  html, body {
    width: 100%;
    height: 100%;
  }

  body {
    font-family: "Avenir Next", "Segoe UI", "Helvetica Neue", system-ui, sans-serif;
    background:
      radial-gradient(1100px 700px at 15% -10%, #2b3f77 0%, transparent 55%),
      radial-gradient(900px 600px at 95% 110%, #23345e 0%, transparent 55%),
      linear-gradient(160deg, var(--bg-1), var(--bg-2));
    color: var(--text-1);
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 800px;
    overflow: hidden;
  }

  .stars {
    position: fixed;
    inset: 0;
    pointer-events: none;
    opacity: 0.55;
  }

  .card {
    position: relative;
    width: 980px;
    border-radius: var(--radius);
    background: var(--card-glass);
    border: 1px solid var(--card-border);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
    box-shadow:
      0 30px 80px rgba(3, 8, 22, 0.55),
      inset 0 1px 0 rgba(255, 255, 255, 0.08);
    padding: 44px 52px 40px;
    animation: rise 700ms cubic-bezier(0.22, 1, 0.36, 1) both;
  }

  @keyframes rise {
    from { opacity: 0; transform: translateY(22px) scale(0.985); }
    to   { opacity: 1; transform: translateY(0) scale(1); }
  }

  .top {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 40px;
  }

  .place h1 {
    font-size: 2.6rem;
    font-weight: 600;
    letter-spacing: 0.01em;
    line-height: 1.1;
  }

  .place .date {
    margin-top: 8px;
    font-size: 1.05rem;
    color: var(--text-2);
    letter-spacing: 0.06em;
    text-transform: uppercase;
  }

  .place .coords {
    margin-top: 6px;
    font-size: 0.8rem;
    color: var(--text-3);
    letter-spacing: 0.05em;
    font-variant-numeric: tabular-nums;
  }

  .hero {
    display: flex;
    align-items: center;
    gap: 26px;
  }

  .hero .icon { width: 120px; height: 120px; flex: none; }

  .hero .temps { text-align: right; }

  .hero .hi {
    font-size: 3.6rem;
    font-weight: 300;
    line-height: 1;
    font-variant-numeric: tabular-nums;
  }

  .hero .hi .unit { font-size: 1.6rem; color: var(--text-2); vertical-align: 18px; margin-left: 2px; }

  .hero .lo {
    margin-top: 6px;
    font-size: 1.25rem;
    color: var(--text-2);
    font-variant-numeric: tabular-nums;
  }

  .hero .cond {
    margin-top: 10px;
    font-size: 1rem;
    color: var(--accent);
    letter-spacing: 0.04em;
  }

  .divider {
    margin: 34px 0 26px;
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(255,255,255,0.18), transparent);
  }

  .section-label {
    font-size: 0.75rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--text-3);
    margin-bottom: 18px;
  }

  .chart-wrap { position: relative; }

  svg.chart { display: block; width: 100%; height: 240px; overflow: visible; }

  .hours {
    display: grid;
    grid-template-columns: repeat(24, 1fr);
    margin-top: 10px;
  }

  .hours span {
    text-align: center;
    font-size: 0.66rem;
    color: var(--text-3);
    font-variant-numeric: tabular-nums;
  }

  .state {
    text-align: center;
    padding: 90px 0;
    color: var(--text-2);
    font-size: 1.1rem;
    letter-spacing: 0.03em;
  }

  .state.error { color: #ff9d9d; }

  .state .sub { margin-top: 10px; font-size: 0.85rem; color: var(--text-3); }

  .spinner {
    width: 34px; height: 34px;
    margin: 0 auto 20px;
    border-radius: 50%;
    border: 3px solid rgba(255,255,255,0.15);
    border-top-color: var(--accent);
    animation: spin 0.9s linear infinite;
  }

  @keyframes spin { to { transform: rotate(360deg); } }

  .hidden { display: none !important; }
</style>
</head>
<body>
<canvas class="stars" id="stars"></canvas>

<div class="card">
  <div id="loading" class="state">
    <div class="spinner"></div>
    Loading weather data…
  </div>

  <div id="error" class="state error hidden">
    <div style="font-size:2.2rem; margin-bottom:14px;">&#9888;</div>
    Weather data could not be loaded.
    <div class="sub" id="error-detail"></div>
  </div>

  <div id="content" class="hidden">
    <div class="top">
      <div class="place">
        <h1 id="loc-name">—</h1>
        <div class="date" id="loc-date">—</div>
        <div class="coords" id="loc-coords"></div>
      </div>
      <div class="hero">
        <div class="icon" id="wx-icon"></div>
        <div class="temps">
          <div class="hi"><span id="t-max">—</span><span class="unit">°C</span></div>
          <div class="lo">Low <span id="t-min">—</span>°C</div>
          <div class="cond" id="wx-cond">—</div>
        </div>
      </div>
    </div>

    <div class="divider"></div>

    <div class="section-label">Hourly temperature · UTC</div>
    <div class="chart-wrap">
      <svg class="chart" id="chart" viewBox="0 0 876 240" preserveAspectRatio="none"></svg>
      <div class="hours" id="hour-labels"></div>
    </div>
  </div>
</div>

<script>
(function () {
  "use strict";

  /* ---------- starfield background ---------- */
  var cv = document.getElementById("stars");
  var ctx = cv.getContext("2d");
  cv.width = window.innerWidth || 1280;
  cv.height = window.innerHeight || 800;
  for (var i = 0; i < 130; i++) {
    var x = Math.random() * cv.width, y = Math.random() * cv.height;
    var r = Math.random() * 1.2 + 0.2;
    ctx.beginPath();
    ctx.arc(x, y, r, 0, Math.PI * 2);
    ctx.fillStyle = "rgba(255,255,255," + (Math.random() * 0.5 + 0.1).toFixed(2) + ")";
    ctx.fill();
  }

  /* ---------- params ---------- */
  var qs = new URLSearchParams(location.search);
  var lat = parseFloat(qs.get("lat"));
  var lon = parseFloat(qs.get("lon"));
  if (!isFinite(lat)) lat = 52.52;
  if (!isFinite(lon)) lon = 13.405;
  var name = qs.get("name") || "Berlin";

  function todayUTC() {
    var d = new Date();
    return d.toISOString().slice(0, 10);
  }
  var dateStr = qs.get("date");
  if (!dateStr || !/^\d{4}-\d{2}-\d{2}$/.test(dateStr)) dateStr = todayUTC();

  var isPast = dateStr < todayUTC();
  var endpoint = isPast ? "/api/om/archive" : "/api/om/forecast";

  /* ---------- weather code map ---------- */
  var WMO = {
    0: ["Clear sky", "sun"], 1: ["Mainly clear", "sun"], 2: ["Partly cloudy", "suncloud"],
    3: ["Overcast", "cloud"], 45: ["Fog", "fog"], 48: ["Depositing rime fog", "fog"],
    51: ["Light drizzle", "rain"], 53: ["Moderate drizzle", "rain"], 55: ["Dense drizzle", "rain"],
    56: ["Light freezing drizzle", "rain"], 57: ["Dense freezing drizzle", "rain"],
    61: ["Slight rain", "rain"], 63: ["Moderate rain", "rain"], 65: ["Heavy rain", "rain"],
    66: ["Light freezing rain", "rain"], 67: ["Heavy freezing rain", "rain"],
    71: ["Slight snowfall", "snow"], 73: ["Moderate snowfall", "snow"], 75: ["Heavy snowfall", "snow"],
    77: ["Snow grains", "snow"], 80: ["Slight rain showers", "rain"], 81: ["Moderate rain showers", "rain"],
    82: ["Violent rain showers", "rain"], 85: ["Slight snow showers", "snow"], 86: ["Heavy snow showers", "snow"],
    95: ["Thunderstorm", "storm"], 96: ["Thunderstorm with slight hail", "storm"],
    99: ["Thunderstorm with heavy hail", "storm"]
  };

  var ICONS = {
    sun: '<svg viewBox="0 0 100 100"><circle cx="50" cy="50" r="20" fill="#ffd166"/><g stroke="#ffd166" stroke-width="5" stroke-linecap="round">' +
         '<line x1="50" y1="10" x2="50" y2="22"/><line x1="50" y1="78" x2="50" y2="90"/><line x1="10" y1="50" x2="22" y2="50"/><line x1="78" y1="50" x2="90" y2="50"/>' +
         '<line x1="22" y1="22" x2="30" y2="30"/><line x1="70" y1="70" x2="78" y2="78"/><line x1="22" y1="78" x2="30" y2="70"/><line x1="70" y1="30" x2="78" y2="22"/></g></svg>',
    suncloud: '<svg viewBox="0 0 100 100"><circle cx="38" cy="38" r="16" fill="#ffd166"/>' +
         '<path d="M30 72a14 14 0 0 1 2-27.8A20 20 0 0 1 70 48a12 12 0 0 1 2 24z" fill="#cdd8ef"/></svg>',
    cloud: '<svg viewBox="0 0 100 100"><path d="M28 74a16 16 0 0 1 2-31.8A22 22 0 0 1 73 47a13 13 0 0 1 3 27z" fill="#cdd8ef"/></svg>',
    fog: '<svg viewBox="0 0 100 100"><path d="M28 58a16 16 0 0 1 2-31.8A22 22 0 0 1 73 31a13 13 0 0 1 3 27z" fill="#cdd8ef"/>' +
         '<g stroke="#8fa3c8" stroke-width="5" stroke-linecap="round"><line x1="24" y1="72" x2="76" y2="72"/><line x1="32" y1="84" x2="68" y2="84"/></g></svg>',
    rain: '<svg viewBox="0 0 100 100"><path d="M28 62a16 16 0 0 1 2-31.8A22 22 0 0 1 73 35a13 13 0 0 1 3 27z" fill="#cdd8ef"/>' +
         '<g stroke="#7fb8ff" stroke-width="5" stroke-linecap="round"><line x1="36" y1="72" x2="32" y2="86"/><line x1="52" y1="72" x2="48" y2="86"/><line x1="68" y1="72" x2="64" y2="86"/></g></svg>',
    snow: '<svg viewBox="0 0 100 100"><path d="M28 62a16 16 0 0 1 2-31.8A22 22 0 0 1 73 35a13 13 0 0 1 3 27z" fill="#cdd8ef"/>' +
         '<g fill="#eaf2ff"><circle cx="36" cy="78" r="4"/><circle cx="52" cy="86" r="4"/><circle cx="68" cy="78" r="4"/></g></svg>',
    storm: '<svg viewBox="0 0 100 100"><path d="M28 58a16 16 0 0 1 2-31.8A22 22 0 0 1 73 31a13 13 0 0 1 3 27z" fill="#cdd8ef"/>' +
         '<polygon points="54,60 40,80 50,80 44,96 62,72 52,72" fill="#ffd166"/></svg>'
  };

  /* ---------- dom refs ---------- */
  function $(id) { return document.getElementById(id); }

  function showError(detail) {
    $("loading").classList.add("hidden");
    $("content").classList.add("hidden");
    $("error").classList.remove("hidden");
    $("error-detail").textContent = detail || "";
  }

  function fmtDate(s) {
    var p = s.split("-");
    var d = new Date(Date.UTC(+p[0], +p[1] - 1, +p[2]));
    return d.toLocaleDateString("en-US", { weekday: "long", year: "numeric", month: "long", day: "numeric", timeZone: "UTC" });
  }

  function fmt1(v) { return (Math.round(v * 10) / 10).toFixed(1).replace(/\.0$/, ""); }

  /* ---------- chart ---------- */
  function drawChart(hours, temps) {
    var W = 876, H = 240, padT = 28, padB = 26, padX = 14;
    var svg = $("chart");
    var min = Math.min.apply(null, temps), max = Math.max.apply(null, temps);
    var span = (max - min) || 1;
    var n = temps.length;

    function px(i) { return padX + (i / (n - 1)) * (W - 2 * padX); }
    function py(t) { return padT + (1 - (t - min) / span) * (H - padT - padB); }

    var pts = temps.map(function (t, i) { return [px(i), py(t)]; });

    // smooth path (catmull-rom -> bezier)
    var d = "M" + pts[0][0].toFixed(1) + "," + pts[0][1].toFixed(1);
    for (var i = 0; i < n - 1; i++) {
      var p0 = pts[Math.max(0, i - 1)], p1 = pts[i], p2 = pts[i + 1], p3 = pts[Math.min(n - 1, i + 2)];
      var c1x = p1[0] + (p2[0] - p0[0]) / 6, c1y = p1[1] + (p2[1] - p0[1]) / 6;
      var c2x = p2[0] - (p3[0] - p1[0]) / 6, c2y = p2[1] - (p3[1] - p1[1]) / 6;
      d += " C" + c1x.toFixed(1) + "," + c1y.toFixed(1) + " " + c2x.toFixed(1) + "," + c2y.toFixed(1) + " " + p2[0].toFixed(1) + "," + p2[1].toFixed(1);
    }

    var area = d + " L" + pts[n - 1][0].toFixed(1) + "," + (H - 4) + " L" + pts[0][0].toFixed(1) + "," + (H - 4) + " Z";

    var html =
      '<defs>' +
        '<linearGradient id="fillg" x1="0" y1="0" x2="0" y2="1">' +
          '<stop offset="0%" stop-color="#7fb8ff" stop-opacity="0.35"/>' +
          '<stop offset="100%" stop-color="#7fb8ff" stop-opacity="0"/>' +
        '</linearGradient>' +
        '<linearGradient id="lineg" x1="0" y1="0" x2="1" y2="0">' +
          '<stop offset="0%" stop-color="#7fb8ff"/>' +
          '<stop offset="100%" stop-color="#ffb36b"/>' +
        '</linearGradient>' +
      '</defs>';

    // grid lines
    [0.25, 0.5, 0.75].forEach(function (f) {
      var y = padT + f * (H - padT - padB);
      html += '<line x1="' + padX + '" y1="' + y + '" x2="' + (W - padX) + '" y2="' + y + '" stroke="rgba(255,255,255,0.06)" stroke-width="1"/>';
    });

    html += '<path d="' + area + '" fill="url(#fillg)"/>';
    html += '<path d="' + d + '" fill="none" stroke="url(#lineg)" stroke-width="2.5" stroke-linecap="round"/>';

    // dots + temp labels (every 3rd hour + extremes)
    var iMax = temps.indexOf(max), iMin = temps.indexOf(min);
    for (var j = 0; j < n; j++) {
      var show = (j % 3 === 0) || j === iMax || j === iMin;
      if (!show) continue;
      var hot = j === iMax, cold = j === iMin;
      var col = hot ? "#ffb36b" : (cold ? "#7fb8ff" : "rgba(255,255,255,0.85)");
      html += '<circle cx="' + pts[j][0].toFixed(1) + '" cy="' + pts[j][1].toFixed(1) + '" r="' + (hot || cold ? 4 : 2.5) + '" fill="' + col + '"/>';
      var ly = pts[j][1] - 10;
      html += '<text x="' + pts[j][0].toFixed(1) + '" y="' + ly.toFixed(1) + '" text-anchor="middle" font-size="11" fill="' +
        (hot || cold ? col : "rgba(220,228,248,0.75)") + '" font-family="inherit" font-weight="' + (hot || cold ? '600' : '400') + '">' +
        fmt1(temps[j]) + '°</text>';
    }

    svg.innerHTML = html;

    // hour labels
    var lbl = "";
    for (var h = 0; h < n; h++) {
      var hh = hours[h] != null ? hours[h] : h;
      lbl += "<span>" + (h % 3 === 0 ? (String(hh).padStart(2, "0")) : "·") + "</span>";
    }
    $("hour-labels").innerHTML = lbl;
  }

  /* ---------- render ---------- */
  function render(data) {
    var daily = data.daily, hourly = data.hourly;
    if (!daily || !daily.time || !daily.time.length || !hourly || !hourly.temperature_2m) {
      showError("The API response did not contain the expected data.");
      return;
    }

    var tmax = daily.temperature_2m_max && daily.temperature_2m_max[0];
    var tmin = daily.temperature_2m_min && daily.temperature_2m_min[0];
    var code = daily.weather_code && daily.weather_code[0];

    if (tmax == null || tmin == null) {
      showError("No temperature data is available for this date.");
      return;
    }

    var temps = [], hoursOfDay = [];
    for (var i = 0; i < hourly.time.length; i++) {
      if (hourly.time[i].slice(0, 10) === dateStr && hourly.temperature_2m[i] != null) {
        temps.push(hourly.temperature_2m[i]);
        hoursOfDay.push(parseInt(hourly.time[i].slice(11, 13), 10));
      }
    }

    var wmo = WMO[code] || ["Unknown conditions", "cloud"];

    $("loc-name").textContent = name;
    $("loc-date").textContent = fmtDate(dateStr);
    $("loc-coords").textContent = lat.toFixed(3) + "°, " + lon.toFixed(3) + "°";
    $("t-max").textContent = fmt1(tmax);
    $("t-min").textContent = fmt1(tmin);
    $("wx-cond").textContent = wmo[0];
    $("wx-icon").innerHTML = ICONS[wmo[1]] || ICONS.cloud;

    if (temps.length >= 2) {
      drawChart(hoursOfDay, temps);
    } else {
      $("chart").outerHTML = '<div class="state" style="padding:40px 0;">No hourly data available for this date.</div>';
      $("hour-labels").innerHTML = "";
    }

    $("loading").classList.add("hidden");
    $("content").classList.remove("hidden");
  }

  /* ---------- fetch ---------- */
  var url = endpoint +
    "?latitude=" + encodeURIComponent(lat) +
    "&longitude=" + encodeURIComponent(lon) +
    "&daily=temperature_2m_max,temperature_2m_min,weather_code" +
    "&hourly=temperature_2m" +
    "&timezone=UTC" +
    "&temperature_unit=celsius" +
    "&start_date=" + encodeURIComponent(dateStr) +
    "&end_date=" + encodeURIComponent(dateStr);

  fetch(url)
    .then(function (r) {
      if (!r.ok) throw new Error("HTTP " + r.status);
      return r.json();
    })
    .then(function (data) {
      if (data && data.error) throw new Error(data.reason || "API error");
      render(data);
    })
    .catch(function (e) {
      showError(String(e && e.message ? e.message : e));
    });
})();
</script>
</body>
</html>

L1 — cheap deterministic descriptors

bytes total15,998html / css / js1,466 / 4,003 / 10,529
dom nodes35dom depth9
css rules33js presentyes
brightness42.5contrast17.2
colorfulness17.3whitespace52.3%

This slot's telemetry

prompt tokens2completion tokens7,950
total tokens7,952wall80.6 s
costrequest id
config.json609 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "claude-fable-5-thinking-eff-medium--cli--cursor--dev",
  "effort": "medium",
  "family": "claude",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "claude-fable-5-thinking",
  "protocol": "cli",
  "served_model": "claude-fable-5-thinking-medium",
  "telemetry": {
    "completion_tokens": 23436,
    "cost_usd": null,
    "prompt_tokens": 8,
    "total_tokens": 23444,
    "wall_ms": 252207
  },
  "transport": "cursor-agent-cli-isolated-home",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-08-13--cursor-s1",
  "config_id": "claude-fable-5-thinking-eff-medium--cli--cursor--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T21:31:03.158428+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T21:30:19.071737+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-12T21:32:27.506873+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T21:31:06.863826+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-12T21:33:56.724088+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T21:32:30.861501+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-12T21:34:41.824121+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T21:34:00.201691+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
    }
  }
}