composer-2.5 · cursor

cursor
config
composer-2.5--cli--cursor--dev
batch
2026-07-19--unified
transport
cursor-agent-cli-isolated-home
protocol
cli · plan
served model
composer-2.5
captured
Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe
composer-2.5 · 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 neighbors

within 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
  • hourlymatchcoverage 13/24 · 13 match · 0 mismatch · 11 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, height=800">
  <title>Weather Card</title>
  <style>
    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

    :root {
      --bg-deep: #0c1222;
      --bg-mid: #141e33;
      --card-bg: rgba(255, 255, 255, 0.07);
      --card-border: rgba(255, 255, 255, 0.12);
      --text-primary: #f4f7fb;
      --text-secondary: rgba(244, 247, 251, 0.65);
      --text-muted: rgba(244, 247, 251, 0.4);
      --accent: #5eb8ff;
      --accent-warm: #ffb86b;
      --shadow: 0 24px 80px rgba(0, 0, 0, 0.45);
      --radius-lg: 28px;
      --radius-md: 16px;
      --radius-sm: 10px;
      --font: "SF Pro Display", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    }

    html, body {
      width: 1280px;
      height: 800px;
      overflow: hidden;
      font-family: var(--font);
      color: var(--text-primary);
      background: var(--bg-deep);
    }

    body {
      display: flex;
      align-items: center;
      justify-content: center;
      position: relative;
    }

    body::before {
      content: "";
      position: absolute;
      inset: 0;
      background:
        radial-gradient(ellipse 80% 60% at 20% 10%, rgba(94, 184, 255, 0.18) 0%, transparent 60%),
        radial-gradient(ellipse 70% 50% at 85% 80%, rgba(255, 140, 90, 0.12) 0%, transparent 55%),
        linear-gradient(160deg, var(--bg-deep) 0%, var(--bg-mid) 50%, #0a1020 100%);
      z-index: 0;
    }

    body.theme-clear::before {
      background:
        radial-gradient(ellipse 90% 70% at 30% 0%, rgba(255, 210, 100, 0.22) 0%, transparent 55%),
        radial-gradient(ellipse 60% 50% at 80% 90%, rgba(94, 184, 255, 0.15) 0%, transparent 50%),
        linear-gradient(160deg, #0d1a2e 0%, #142240 50%, #0c1222 100%);
    }

    body.theme-cloudy::before {
      background:
        radial-gradient(ellipse 80% 60% at 50% 20%, rgba(180, 195, 220, 0.14) 0%, transparent 60%),
        linear-gradient(160deg, #111827 0%, #1a2540 50%, #0c1222 100%);
    }

    body.theme-rain::before {
      background:
        radial-gradient(ellipse 70% 50% at 40% 30%, rgba(70, 130, 200, 0.2) 0%, transparent 55%),
        linear-gradient(160deg, #0a1428 0%, #121e38 50%, #080e1a 100%);
    }

    body.theme-snow::before {
      background:
        radial-gradient(ellipse 80% 60% at 50% 10%, rgba(200, 220, 255, 0.16) 0%, transparent 55%),
        linear-gradient(160deg, #101828 0%, #1a2840 50%, #0c1222 100%);
    }

    body.theme-storm::before {
      background:
        radial-gradient(ellipse 60% 50% at 60% 30%, rgba(100, 80, 180, 0.2) 0%, transparent 55%),
        linear-gradient(160deg, #080c18 0%, #141030 50%, #060a14 100%);
    }

    body.theme-fog::before {
      background:
        radial-gradient(ellipse 90% 70% at 50% 50%, rgba(160, 170, 185, 0.12) 0%, transparent 60%),
        linear-gradient(160deg, #141820 0%, #1c2430 50%, #0e1218 100%);
    }

    .card {
      position: relative;
      z-index: 1;
      width: 1080px;
      height: 680px;
      background: var(--card-bg);
      border: 1px solid var(--card-border);
      border-radius: var(--radius-lg);
      backdrop-filter: blur(40px);
      -webkit-backdrop-filter: blur(40px);
      box-shadow: var(--shadow);
      display: grid;
      grid-template-rows: auto 1fr auto;
      padding: 48px 56px;
      gap: 0;
      overflow: hidden;
    }

    .card::after {
      content: "";
      position: absolute;
      top: -120px;
      right: -80px;
      width: 360px;
      height: 360px;
      border-radius: 50%;
      background: radial-gradient(circle, rgba(255, 255, 255, 0.04) 0%, transparent 70%);
      pointer-events: none;
    }

    .header {
      display: flex;
      justify-content: space-between;
      align-items: flex-start;
      margin-bottom: 32px;
    }

    .location-block { flex: 1; }

    .location-name {
      font-size: 42px;
      font-weight: 600;
      letter-spacing: -0.02em;
      line-height: 1.15;
      margin-bottom: 8px;
    }

    .date-label {
      font-size: 17px;
      font-weight: 500;
      color: var(--text-secondary);
      letter-spacing: 0.04em;
      text-transform: uppercase;
    }

    .weather-icon-wrap {
      width: 120px;
      height: 120px;
      display: flex;
      align-items: center;
      justify-content: center;
      flex-shrink: 0;
    }

    .weather-icon {
      width: 100px;
      height: 100px;
    }

    .main {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 48px;
      align-items: center;
      margin-bottom: 40px;
    }

    .temp-block { display: flex; flex-direction: column; gap: 12px; }

    .temp-range {
      display: flex;
      align-items: baseline;
      gap: 16px;
    }

    .temp-max {
      font-size: 96px;
      font-weight: 200;
      letter-spacing: -0.04em;
      line-height: 1;
      background: linear-gradient(180deg, #ffffff 30%, rgba(255, 255, 255, 0.75));
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      background-clip: text;
    }

    .temp-min {
      font-size: 36px;
      font-weight: 300;
      color: var(--text-secondary);
      letter-spacing: -0.02em;
    }

    .temp-unit {
      font-size: 28px;
      font-weight: 300;
      color: var(--text-muted);
      vertical-align: super;
    }

    .condition-label {
      font-size: 26px;
      font-weight: 500;
      color: var(--text-secondary);
      letter-spacing: -0.01em;
    }

    .stats-row {
      display: flex;
      gap: 24px;
      margin-top: 8px;
    }

    .stat-pill {
      background: rgba(255, 255, 255, 0.06);
      border: 1px solid rgba(255, 255, 255, 0.08);
      border-radius: var(--radius-sm);
      padding: 12px 20px;
      display: flex;
      flex-direction: column;
      gap: 4px;
    }

    .stat-pill-label {
      font-size: 11px;
      font-weight: 600;
      text-transform: uppercase;
      letter-spacing: 0.08em;
      color: var(--text-muted);
    }

    .stat-pill-value {
      font-size: 20px;
      font-weight: 500;
      color: var(--text-primary);
    }

    .hourly-section {
      display: flex;
      flex-direction: column;
      gap: 16px;
    }

    .hourly-title {
      font-size: 13px;
      font-weight: 600;
      text-transform: uppercase;
      letter-spacing: 0.1em;
      color: var(--text-muted);
    }

    .hourly-chart {
      position: relative;
      height: 200px;
      background: rgba(0, 0, 0, 0.15);
      border-radius: var(--radius-md);
      border: 1px solid rgba(255, 255, 255, 0.06);
      padding: 20px 16px 12px;
      overflow: hidden;
    }

    .hourly-chart svg {
      width: 100%;
      height: 100%;
      display: block;
    }

    .chart-line {
      fill: none;
      stroke: var(--accent);
      stroke-width: 2.5;
      stroke-linecap: round;
      stroke-linejoin: round;
    }

    .chart-area {
      fill: url(#areaGradient);
      opacity: 0.35;
    }

    .chart-dot {
      fill: var(--accent);
      stroke: var(--bg-deep);
      stroke-width: 2;
    }

    .chart-label {
      font-size: 11px;
      fill: var(--text-muted);
      font-family: var(--font);
      text-anchor: middle;
    }

    .chart-temp-label {
      font-size: 12px;
      fill: var(--text-secondary);
      font-family: var(--font);
      font-weight: 500;
      text-anchor: middle;
    }

    .hourly-scroll {
      display: none;
    }

    .footer-bar {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding-top: 24px;
      border-top: 1px solid rgba(255, 255, 255, 0.08);
    }

    .coords {
      font-size: 13px;
      color: var(--text-muted);
      font-variant-numeric: tabular-nums;
    }

    .source-tag {
      font-size: 12px;
      font-weight: 500;
      color: var(--text-muted);
      background: rgba(255, 255, 255, 0.05);
      border-radius: 6px;
      padding: 6px 12px;
      letter-spacing: 0.03em;
    }

    .loading, .error {
      position: relative;
      z-index: 1;
      width: 1080px;
      height: 680px;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 20px;
      background: var(--card-bg);
      border: 1px solid var(--card-border);
      border-radius: var(--radius-lg);
      backdrop-filter: blur(40px);
      box-shadow: var(--shadow);
    }

    .loading-spinner {
      width: 48px;
      height: 48px;
      border: 3px solid rgba(255, 255, 255, 0.1);
      border-top-color: var(--accent);
      border-radius: 50%;
      animation: spin 0.9s linear infinite;
    }

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

    .loading-text, .error-text {
      font-size: 18px;
      color: var(--text-secondary);
      font-weight: 400;
    }

    .error-icon {
      width: 56px;
      height: 56px;
      opacity: 0.5;
    }

    .error-text {
      font-size: 20px;
      color: var(--text-primary);
      text-align: center;
      max-width: 480px;
      line-height: 1.5;
    }

    .hidden { display: none !important; }
  </style>
</head>
<body>
  <div id="loading" class="loading">
    <div class="loading-spinner"></div>
    <p class="loading-text">Loading weather data…</p>
  </div>

  <div id="error" class="error hidden">
    <svg class="error-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
      <circle cx="12" cy="12" r="10"/>
      <line x1="12" y1="8" x2="12" y2="12"/>
      <line x1="12" y1="16" x2="12.01" y2="16"/>
    </svg>
    <p class="error-text" id="error-message">Weather data could not be loaded.</p>
  </div>

  <div id="card" class="card hidden">
    <header class="header">
      <div class="location-block">
        <h1 class="location-name" id="location-name">—</h1>
        <p class="date-label" id="date-label">—</p>
      </div>
      <div class="weather-icon-wrap">
        <svg class="weather-icon" id="weather-icon" viewBox="0 0 100 100" fill="none"></svg>
      </div>
    </header>

    <main class="main">
      <div class="temp-block">
        <div class="temp-range">
          <span class="temp-max" id="temp-max">—</span>
          <span class="temp-unit">°C</span>
        </div>
        <div class="temp-range">
          <span class="temp-min" id="temp-min">—</span>
          <span class="temp-unit" style="font-size:18px">°C low</span>
        </div>
        <p class="condition-label" id="condition">—</p>
        <div class="stats-row">
          <div class="stat-pill">
            <span class="stat-pill-label">High</span>
            <span class="stat-pill-value" id="stat-high">—</span>
          </div>
          <div class="stat-pill">
            <span class="stat-pill-label">Low</span>
            <span class="stat-pill-value" id="stat-low">—</span>
          </div>
          <div class="stat-pill">
            <span class="stat-pill-label">Range</span>
            <span class="stat-pill-value" id="stat-range">—</span>
          </div>
        </div>
      </div>

      <div class="hourly-section">
        <h2 class="hourly-title">Hourly Temperature</h2>
        <div class="hourly-chart" id="hourly-chart">
          <svg id="chart-svg" viewBox="0 0 960 160" preserveAspectRatio="none"></svg>
        </div>
      </div>
    </main>

    <footer class="footer-bar">
      <span class="coords" id="coords">—</span>
      <span class="source-tag">Open-Meteo · UTC</span>
    </footer>
  </div>

  <script>
    (function () {
      const WMO = {
        0:  { label: "Clear sky",           theme: "clear" },
        1:  { label: "Mainly clear",        theme: "clear" },
        2:  { label: "Partly cloudy",       theme: "cloudy" },
        3:  { label: "Overcast",            theme: "cloudy" },
        45: { label: "Fog",                 theme: "fog" },
        48: { label: "Depositing rime fog", theme: "fog" },
        51: { label: "Light drizzle",       theme: "rain" },
        53: { label: "Moderate drizzle",    theme: "rain" },
        55: { label: "Dense drizzle",       theme: "rain" },
        56: { label: "Freezing drizzle",    theme: "rain" },
        57: { label: "Dense freezing drizzle", theme: "rain" },
        61: { label: "Slight rain",         theme: "rain" },
        63: { label: "Moderate rain",       theme: "rain" },
        65: { label: "Heavy rain",          theme: "rain" },
        66: { label: "Freezing rain",       theme: "rain" },
        67: { label: "Heavy freezing rain", theme: "rain" },
        71: { label: "Slight snow",         theme: "snow" },
        73: { label: "Moderate snow",       theme: "snow" },
        75: { label: "Heavy snow",          theme: "snow" },
        77: { label: "Snow grains",         theme: "snow" },
        80: { label: "Slight rain showers", theme: "rain" },
        81: { label: "Moderate rain showers", theme: "rain" },
        82: { label: "Violent rain showers", theme: "rain" },
        85: { label: "Slight snow showers", theme: "snow" },
        86: { label: "Heavy snow showers",  theme: "snow" },
        95: { label: "Thunderstorm",        theme: "storm" },
        96: { label: "Thunderstorm with hail", theme: "storm" },
        99: { label: "Thunderstorm with heavy hail", theme: "storm" }
      };

      function todayUTC() {
        return new Date().toISOString().slice(0, 10);
      }

      function parseParams() {
        const p = new URLSearchParams(window.location.search);
        return {
          lat: parseFloat(p.get("lat") || "52.52"),
          lon: parseFloat(p.get("lon") || "13.405"),
          name: p.get("name") || "Berlin",
          date: p.get("date") || todayUTC()
        };
      }

      function formatDate(dateStr) {
        const [y, m, d] = dateStr.split("-").map(Number);
        const dt = new Date(Date.UTC(y, m - 1, d));
        return dt.toLocaleDateString("en-US", {
          weekday: "long",
          year: "numeric",
          month: "long",
          day: "numeric",
          timeZone: "UTC"
        });
      }

      function wmoInfo(code) {
        return WMO[code] || { label: "Unknown", theme: "cloudy" };
      }

      function weatherIconSVG(code) {
        const sun = `<circle cx="50" cy="50" r="18" fill="#FFD166" opacity="0.95"/>
          <g stroke="#FFD166" stroke-width="3" stroke-linecap="round" opacity="0.85">
            <line x1="50" y1="18" x2="50" y2="26"/><line x1="50" y1="74" x2="50" y2="82"/>
            <line x1="18" y1="50" x2="26" y2="50"/><line x1="74" y1="50" x2="82" y2="50"/>
            <line x1="27" y1="27" x2="33" y2="33"/><line x1="67" y1="67" x2="73" y2="73"/>
            <line x1="73" y1="27" x2="67" y2="33"/><line x1="33" y1="67" x2="27" y2="73"/>
          </g>`;
        const cloud = `<ellipse cx="42" cy="58" rx="28" ry="18" fill="rgba(200,210,230,0.85)"/>
          <ellipse cx="62" cy="52" rx="22" ry="16" fill="rgba(220,228,240,0.9)"/>`;
        const rain = `<g stroke="#5EB8FF" stroke-width="2.5" stroke-linecap="round" opacity="0.8">
          <line x1="38" y1="72" x2="34" y2="84"/><line x1="50" y1="74" x2="46" y2="86"/>
          <line x1="62" y1="72" x2="58" y2="84"/></g>`;
        const snow = `<g fill="#C8E0FF" opacity="0.85">
          <circle cx="38" cy="78" r="3"/><circle cx="50" cy="82" r="3"/><circle cx="62" cy="78" r="3"/></g>`;
        const bolt = `<polygon points="52,62 44,78 50,78 46,92 58,72 52,72" fill="#FFD166"/>`;
        const fog = `<g stroke="rgba(180,190,205,0.6)" stroke-width="3" stroke-linecap="round">
          <line x1="20" y1="55" x2="80" y2="55"/><line x1="25" y1="65" x2="75" y2="65"/>
          <line x1="30" y1="75" x2="70" y2="75"/></g>`;

        if (code === 0 || code === 1) return sun;
        if (code === 2) return sun.replace('opacity="0.95"', 'opacity="0.7"') + cloud.replace('cy="58"', 'cy="62"').replace('cy="52"', 'cy="56"');
        if (code === 3) return cloud;
        if (code === 45 || code === 48) return fog;
        if (code >= 51 && code <= 67) return cloud + rain;
        if (code >= 71 && code <= 77) return cloud + snow;
        if (code >= 80 && code <= 82) return cloud + rain;
        if (code >= 85 && code <= 86) return cloud + snow;
        if (code >= 95) return cloud + bolt;
        return cloud;
      }

      function buildURL(params) {
        const today = todayUTC();
        const base = params.date < today ? "/api/om/archive" : "/api/om/forecast";
        const q = new URLSearchParams({
          latitude: params.lat,
          longitude: params.lon,
          daily: "temperature_2m_max,temperature_2m_min,weather_code",
          hourly: "temperature_2m",
          timezone: "UTC",
          temperature_unit: "celsius",
          start_date: params.date,
          end_date: params.date
        });
        return base + "?" + q.toString();
      }

      function show(id) {
        ["loading", "error", "card"].forEach(function (el) {
          document.getElementById(el).classList.add("hidden");
        });
        document.getElementById(id).classList.remove("hidden");
      }

      function showError(msg) {
        document.getElementById("error-message").textContent = msg || "Weather data could not be loaded.";
        show("error");
      }

      function roundTemp(v) {
        return Math.round(v);
      }

      function renderChart(hours, temps) {
        const svg = document.getElementById("chart-svg");
        const W = 960, H = 160;
        const padL = 30, padR = 30, padT = 28, padB = 36;
        const chartW = W - padL - padR;
        const chartH = H - padT - padB;

        const minT = Math.min(...temps);
        const maxT = Math.max(...temps);
        const range = maxT - minT || 1;

        const points = temps.map(function (t, i) {
          const x = padL + (i / (temps.length - 1 || 1)) * chartW;
          const y = padT + chartH - ((t - minT) / range) * chartH;
          return { x: x, y: y, t: t, h: hours[i] };
        });

        let lineD = points.map(function (p, i) {
          return (i === 0 ? "M" : "L") + p.x.toFixed(1) + "," + p.y.toFixed(1);
        }).join(" ");

        let areaD = lineD + " L" + points[points.length - 1].x.toFixed(1) + "," + (padT + chartH) +
          " L" + points[0].x.toFixed(1) + "," + (padT + chartH) + " Z";

        let dots = "";
        let labels = "";
        let tempLabels = "";

        const step = Math.max(1, Math.floor(points.length / 12));
        points.forEach(function (p, i) {
          dots += '<circle class="chart-dot" cx="' + p.x.toFixed(1) + '" cy="' + p.y.toFixed(1) + '" r="3.5"/>';
          if (i % step === 0 || i === points.length - 1) {
            labels += '<text class="chart-label" x="' + p.x.toFixed(1) + '" y="' + (H - 6) + '">' + p.h + '</text>';
            tempLabels += '<text class="chart-temp-label" x="' + p.x.toFixed(1) + '" y="' + (p.y - 10).toFixed(1) + '">' + roundTemp(p.t) + '°</text>';
          }
        });

        svg.innerHTML =
          '<defs><linearGradient id="areaGradient" x1="0" y1="0" x2="0" y2="1">' +
          '<stop offset="0%" stop-color="#5EB8FF"/>' +
          '<stop offset="100%" stop-color="#5EB8FF" stop-opacity="0"/>' +
          '</linearGradient></defs>' +
          '<path class="chart-area" d="' + areaD + '"/>' +
          '<path class="chart-line" d="' + lineD + '"/>' +
          dots + labels + tempLabels;
      }

      async function load() {
        const params = parseParams();

        if (isNaN(params.lat) || isNaN(params.lon)) {
          showError("Weather data could not be loaded.");
          return;
        }

        try {
          const res = await fetch(buildURL(params));
          if (!res.ok) throw new Error("HTTP " + res.status);
          const data = await res.json();

          if (!data.daily || !data.hourly) throw new Error("Invalid response");

          const tMax = data.daily.temperature_2m_max[0];
          const tMin = data.daily.temperature_2m_min[0];
          const wCode = data.daily.weather_code[0];

          if (tMax == null || tMin == null || wCode == null) throw new Error("Missing daily data");

          const hourlyTimes = data.hourly.time || [];
          const hourlyTemps = data.hourly.temperature_2m || [];

          const hours = [];
          const temps = [];
          hourlyTimes.forEach(function (iso, i) {
            if (iso.startsWith(params.date)) {
              hours.push(iso.slice(11, 13) + ":00");
              temps.push(hourlyTemps[i]);
            }
          });

          if (hours.length === 0) throw new Error("No hourly data");

          const info = wmoInfo(wCode);

          document.body.className = "theme-" + info.theme;
          document.getElementById("location-name").textContent = params.name;
          document.getElementById("date-label").textContent = formatDate(params.date);
          document.getElementById("temp-max").textContent = roundTemp(tMax);
          document.getElementById("temp-min").textContent = roundTemp(tMin);
          document.getElementById("condition").textContent = info.label;
          document.getElementById("stat-high").textContent = roundTemp(tMax) + " °C";
          document.getElementById("stat-low").textContent = roundTemp(tMin) + " °C";
          document.getElementById("stat-range").textContent = roundTemp(tMax - tMin) + " °C";
          document.getElementById("coords").textContent =
            params.lat.toFixed(4) + "° N, " + params.lon.toFixed(4) + "° E";
          document.getElementById("weather-icon").innerHTML = weatherIconSVG(wCode);

          renderChart(hours, temps);
          show("card");
        } catch (e) {
          showError("Weather data could not be loaded.");
        }
      }

      load();
    })();
  </script>
</body>
</html>

L1 — cheap deterministic descriptors

bytes total21,787html / css / js2,588 / 8,974 / 10,225
dom nodes50dom depth8
css rules51js presentyes
brightness40.1contrast17.7
colorfulness15.2whitespace51.0%

This slot's telemetry

prompt tokens18,766completion tokens14,335
total tokens33,101wall102.2 s
cost—request id—
config.json559 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "composer-2.5--cli--cursor--dev",
  "effort": null,
  "family": "cursor",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "composer-2.5",
  "protocol": "cli",
  "served_model": "composer-2.5",
  "telemetry": {
    "completion_tokens": 40563,
    "cost_usd": null,
    "prompt_tokens": 76919,
    "total_tokens": 117482,
    "wall_ms": 306359
  },
  "transport": "cursor-agent-cli-isolated-home",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-08-13--cursor-s2",
  "config_id": "composer-2.5--cli--cursor--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-08-12T16:58:59.382937+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T16:58:02.252518+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-12T17:00:45.197132+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T16:59:03.015947+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-12T17:02:36.350336+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:00:48.526826+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-12T17:03:19.232109+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-08-12T17:02:39.998568+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
    }
  }
}