claude-fable-5 @ high · CC

CChigh
config
claude-fable-5-eff-high--cli--claude-code--dev
batch
2026-07-19--unified
transport
claude-code-cli-headless
protocol
cli · plan
served model
claude-fable-5
captured
Jul 18, 2026, 11:54 AM · N=2
variant
live
slot 0 · P-q · sandboxed iframe
claude-fable-5 @high · CC 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 tempmismatchshown: 13.405
  • min tempmatchshown: 16
  • hourlymismatchcoverage 0/24 · 0 match · 8 mismatch · 16 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{
    --bg1:#3f7fd6; --bg2:#9dc7ef;
    --accent:#f59e0b; --accent-soft:rgba(245,158,11,.16);
    --ink:#0f1c2e; --ink-soft:#51637c; --ink-faint:#8fa1b8;
    --card:#ffffff;
  }
  *{margin:0;padding:0;box-sizing:border-box}
  html,body{height:100%}
  body{
    font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
    background:linear-gradient(160deg,var(--bg1) 0%,var(--bg2) 100%);
    min-height:800px;
    display:flex;align-items:center;justify-content:center;
    color:var(--ink);
    -webkit-font-smoothing:antialiased;
    transition:background .6s ease;
  }
  .scene{position:fixed;inset:0;overflow:hidden;pointer-events:none}
  .scene .orb{
    position:absolute;border-radius:50%;
    background:radial-gradient(circle at 35% 35%,rgba(255,255,255,.5),rgba(255,255,255,0) 70%);
    filter:blur(2px);
  }
  .scene .o1{width:520px;height:520px;top:-180px;left:-120px}
  .scene .o2{width:380px;height:380px;bottom:-140px;right:8%;opacity:.7}
  .scene .o3{width:220px;height:220px;top:14%;right:-70px;opacity:.5}

  .card{
    position:relative;
    width:1080px;
    background:var(--card);
    border-radius:28px;
    box-shadow:0 40px 90px -30px rgba(10,25,50,.45), 0 4px 18px rgba(10,25,50,.12);
    padding:44px 52px 40px;
    overflow:hidden;
  }
  .card::before{
    content:"";position:absolute;inset:0 0 auto 0;height:6px;
    background:linear-gradient(90deg,var(--bg1),var(--accent),var(--bg2));
    opacity:.9;
  }

  .top{display:flex;justify-content:space-between;align-items:flex-start;gap:24px}
  .loc h1{font-size:40px;font-weight:700;letter-spacing:-.02em;line-height:1.1}
  .loc .date{margin-top:8px;font-size:17px;color:var(--ink-soft);font-weight:500}
  .loc .coords{margin-top:4px;font-size:13px;color:var(--ink-faint);font-variant-numeric:tabular-nums}
  .cond{
    display:flex;align-items:center;gap:10px;
    background:var(--accent-soft);
    border-radius:999px;padding:10px 20px 10px 14px;
    font-size:16px;font-weight:600;color:var(--ink);
    white-space:nowrap;
  }
  .cond svg{width:26px;height:26px;display:block}

  .hero{display:flex;align-items:center;gap:44px;margin:36px 0 10px}
  .hero .icon{width:132px;height:132px;flex:none}
  .hero .icon svg{width:100%;height:100%;display:block;filter:drop-shadow(0 10px 18px rgba(10,25,50,.18))}
  .temps{display:flex;align-items:baseline;gap:36px}
  .tmax .val{font-size:96px;font-weight:700;letter-spacing:-.04em;line-height:1;font-variant-numeric:tabular-nums}
  .tmax .val sup{font-size:38px;font-weight:500;color:var(--ink-soft);vertical-align:super}
  .tlabel{margin-top:8px;font-size:13px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint)}
  .tmin .val{font-size:52px;font-weight:600;letter-spacing:-.03em;line-height:1;color:var(--ink-soft);font-variant-numeric:tabular-nums}
  .tmin .val sup{font-size:24px;font-weight:500;vertical-align:super}
  .divider{width:1px;align-self:stretch;background:linear-gradient(180deg,transparent,#dbe3ee 30%,#dbe3ee 70%,transparent)}

  .chart-section{margin-top:26px}
  .chart-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
  .chart-head h2{font-size:14px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-faint)}
  .chart-head .range{font-size:13px;color:var(--ink-faint);font-variant-numeric:tabular-nums}
  .chart-wrap{position:relative}
  #chart{display:block;width:100%;height:auto}
  .tooltip{
    position:absolute;pointer-events:none;opacity:0;transition:opacity .12s;
    background:var(--ink);color:#fff;border-radius:10px;padding:7px 12px;
    font-size:13px;font-weight:600;white-space:nowrap;transform:translate(-50%,-130%);
    box-shadow:0 8px 20px rgba(10,25,50,.3);font-variant-numeric:tabular-nums;
  }
  .tooltip .hr{color:rgba(255,255,255,.65);font-weight:500;margin-right:6px}

  .state{padding:110px 40px;text-align:center}
  .state .spin{
    width:44px;height:44px;margin:0 auto 22px;border-radius:50%;
    border:4px solid #e3eaf4;border-top-color:var(--bg1);
    animation:spin .9s linear infinite;
  }
  @keyframes spin{to{transform:rotate(360deg)}}
  .state p{font-size:17px;color:var(--ink-soft)}
  .state.error .glyph{font-size:44px;margin-bottom:16px}
  .state.error h2{font-size:24px;font-weight:700;margin-bottom:10px}
  .state.error .detail{margin-top:10px;font-size:13px;color:var(--ink-faint);font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
  .hidden{display:none}
</style>
</head>
<body>
<div class="scene"><div class="orb o1"></div><div class="orb o2"></div><div class="orb o3"></div></div>

<main class="card" id="card">
  <div class="state" id="loading">
    <div class="spin"></div>
    <p>Loading weather…</p>
  </div>

  <div class="state error hidden" id="error">
    <div class="glyph">⛅</div>
    <h2>Weather data could not be loaded</h2>
    <p>Something went wrong while fetching the forecast for this location and date.</p>
    <div class="detail" id="error-detail"></div>
  </div>

  <div id="content" class="hidden">
    <div class="top">
      <div class="loc">
        <h1 id="loc-name"></h1>
        <div class="date" id="loc-date"></div>
        <div class="coords" id="loc-coords"></div>
      </div>
      <div class="cond"><span id="cond-icon-sm"></span><span id="cond-text"></span></div>
    </div>

    <div class="hero">
      <div class="icon" id="cond-icon-lg"></div>
      <div class="temps">
        <div class="tmax">
          <div class="val" id="tmax"></div>
          <div class="tlabel">High</div>
        </div>
        <div class="divider"></div>
        <div class="tmin">
          <div class="val" id="tmin"></div>
          <div class="tlabel">Low</div>
        </div>
      </div>
    </div>

    <div class="chart-section">
      <div class="chart-head">
        <h2>Hourly temperature · °C</h2>
        <div class="range" id="chart-range"></div>
      </div>
      <div class="chart-wrap">
        <svg id="chart" viewBox="0 0 976 250" role="img" aria-label="Hourly temperature chart"></svg>
        <div class="tooltip" id="tooltip"></div>
      </div>
    </div>
  </div>
</main>

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

  /* ---------- query params ---------- */
  var q = new URLSearchParams(location.search);
  var lat  = parseFloat(q.get("lat"));  if (!isFinite(lat))  lat = 52.52;
  var lon  = parseFloat(q.get("lon"));  if (!isFinite(lon))  lon = 13.405;
  var name = q.get("name") || "Berlin";
  var todayUTC = new Date().toISOString().slice(0,10);
  var date = q.get("date");
  if (!date || !/^\d{4}-\d{2}-\d{2}$/.test(date)) date = todayUTC;

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

  var THEMES = {
    clear: {bg1:"#3f7fd6",bg2:"#a5cdf2",accent:"#f59e0b",soft:"rgba(245,158,11,.15)"},
    partly:{bg1:"#4a7cc0",bg2:"#a9c4e2",accent:"#e8940c",soft:"rgba(232,148,12,.14)"},
    cloud: {bg1:"#5b6d84",bg2:"#a8b6c8",accent:"#64748b",soft:"rgba(100,116,139,.14)"},
    fog:   {bg1:"#7d8a99",bg2:"#c3ccd6",accent:"#94a3b8",soft:"rgba(148,163,184,.18)"},
    rain:  {bg1:"#2d4f8f",bg2:"#7ba3cf",accent:"#2563eb",soft:"rgba(37,99,235,.12)"},
    snow:  {bg1:"#6d93bd",bg2:"#dbe9f5",accent:"#0ea5e9",soft:"rgba(14,165,233,.12)"},
    storm: {bg1:"#3b3563",bg2:"#8a84b8",accent:"#7c3aed",soft:"rgba(124,58,237,.13)"}
  };

  /* ---------- icons (inline SVG) ---------- */
  function icon(kind, accent){
    var sun  = '<circle cx="32" cy="32" r="13" fill="'+accent+'"/><g stroke="'+accent+'" stroke-width="4" stroke-linecap="round">'+
               '<line x1="32" y1="6" x2="32" y2="14"/><line x1="32" y1="50" x2="32" y2="58"/>'+
               '<line x1="6" y1="32" x2="14" y2="32"/><line x1="50" y1="32" x2="58" y2="32"/>'+
               '<line x1="13.6" y1="13.6" x2="19.3" y2="19.3"/><line x1="44.7" y1="44.7" x2="50.4" y2="50.4"/>'+
               '<line x1="13.6" y1="50.4" x2="19.3" y2="44.7"/><line x1="44.7" y1="19.3" x2="50.4" y2="13.6"/></g>';
    var cloudPath = 'M20 46a10 10 0 0 1-1.4-19.9A14 14 0 0 1 45.8 29 9 9 0 0 1 44 46Z';
    var cloud = '<path d="'+cloudPath+'" fill="#b9c6d6"/>';
    var map = {
      clear:  sun,
      partly: '<g transform="translate(-4,-4) scale(.72)">'+sun+'</g><path d="'+cloudPath+'" transform="translate(6,10) scale(.9)" fill="#c9d4e2"/>',
      cloud:  '<path d="'+cloudPath+'" transform="translate(-5,2)" fill="#c9d4e2"/><path d="'+cloudPath+'" transform="translate(7,10) scale(.85)" fill="#9fb0c4"/>',
      fog:    cloud+'<g stroke="#8fa1b8" stroke-width="4" stroke-linecap="round"><line x1="14" y1="52" x2="50" y2="52"/><line x1="20" y1="60" x2="44" y2="60"/></g>',
      rain:   '<path d="'+cloudPath+'" transform="translate(0,-4)" fill="#9fb0c4"/><g stroke="'+accent+'" stroke-width="4" stroke-linecap="round"><line x1="22" y1="48" x2="19" y2="58"/><line x1="33" y1="48" x2="30" y2="58"/><line x1="44" y1="48" x2="41" y2="58"/></g>',
      snow:   '<path d="'+cloudPath+'" transform="translate(0,-4)" fill="#b9c6d6"/><g fill="'+accent+'"><circle cx="22" cy="52" r="3"/><circle cx="33" cy="58" r="3"/><circle cx="44" cy="52" r="3"/></g>',
      storm:  '<path d="'+cloudPath+'" transform="translate(0,-4)" fill="#8b84b8"/><path d="M33 42 24 56h7l-3 12 12-16h-7l4-10Z" fill="'+accent+'"/>'
    };
    return '<svg viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">'+(map[kind]||map.cloud)+'</svg>';
  }

  /* ---------- helpers ---------- */
  function $(id){ return document.getElementById(id); }
  function fmt1(v){ return (Math.round(v*10)/10).toFixed(1).replace(/\.0$/,""); }
  function fmtDate(d){
    var dt = new Date(d+"T00:00:00Z");
    return dt.toLocaleDateString("en-GB",{weekday:"long",day:"numeric",month:"long",year:"numeric",timeZone:"UTC"});
  }
  function showError(msg){
    $("loading").classList.add("hidden");
    $("content").classList.add("hidden");
    $("error").classList.remove("hidden");
    $("error-detail").textContent = msg || "";
  }

  /* ---------- chart ---------- */
  function drawChart(hours, temps, accent){
    var W=976,H=250,L=42,R=14,T=18,B=30;
    var iw=W-L-R, ih=H-T-B;
    var vals = temps.filter(function(v){return v!=null && isFinite(v);});
    if (!vals.length) return null;
    var lo = Math.min.apply(null,vals), hi = Math.max.apply(null,vals);
    var pad = Math.max((hi-lo)*0.18, 1);
    var y0 = Math.floor(lo-pad), y1 = Math.ceil(hi+pad);
    var n = temps.length;
    function X(i){ return L + (n>1 ? iw*i/(n-1) : iw/2); }
    function Y(v){ return T + ih*(1-(v-y0)/(y1-y0)); }

    var s = '<defs><linearGradient id="area" x1="0" y1="0" x2="0" y2="1">'+
            '<stop offset="0%" stop-color="'+accent+'" stop-opacity=".28"/>'+
            '<stop offset="100%" stop-color="'+accent+'" stop-opacity="0"/></linearGradient></defs>';

    /* y gridlines + labels */
    var ticks = 4;
    for (var t=0;t<=ticks;t++){
      var v = y0 + (y1-y0)*t/ticks, gy = Y(v);
      s += '<line x1="'+L+'" y1="'+gy+'" x2="'+(W-R)+'" y2="'+gy+'" stroke="#e8edf4" stroke-width="1"'+(t===0?'':' stroke-dasharray="1 4"')+'/>';
      s += '<text x="'+(L-9)+'" y="'+(gy+4)+'" text-anchor="end" font-size="11" fill="#8fa1b8">'+Math.round(v)+'°</text>';
    }
    /* x labels every 3h */
    for (var i=0;i<n;i+=3){
      s += '<text x="'+X(i)+'" y="'+(H-8)+'" text-anchor="middle" font-size="11" fill="#8fa1b8">'+
           String(hours[i]).padStart(2,"0")+':00</text>';
    }

    /* smooth line (catmull-rom → bezier), skipping nulls by segment */
    var pts = temps.map(function(v,i){ return v==null||!isFinite(v) ? null : [X(i),Y(v)]; });
    function seg(pl){
      if (pl.length<2) return "";
      var d="M"+pl[0][0].toFixed(1)+" "+pl[0][1].toFixed(1);
      for (var i=0;i<pl.length-1;i++){
        var p0=pl[i-1]||pl[i], p1=pl[i], p2=pl[i+1], p3=pl[i+2]||p2;
        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);
      }
      return d;
    }
    var runs=[],cur=[];
    pts.forEach(function(p){ if(p){cur.push(p);} else if(cur.length){runs.push(cur);cur=[];} });
    if (cur.length) runs.push(cur);
    runs.forEach(function(r){
      var d = seg(r);
      if (!d) return;
      var last=r[r.length-1], first=r[0];
      s += '<path d="'+d+' L'+last[0].toFixed(1)+' '+(T+ih)+' L'+first[0].toFixed(1)+' '+(T+ih)+' Z" fill="url(#area)"/>';
      s += '<path d="'+d+'" fill="none" stroke="'+accent+'" stroke-width="2.5" stroke-linecap="round"/>';
    });

    /* min / max markers */
    var iMax=-1,iMin=-1;
    temps.forEach(function(v,i){
      if(v==null||!isFinite(v))return;
      if(iMax<0||v>temps[iMax])iMax=i;
      if(iMin<0||v<temps[iMin])iMin=i;
    });
    [iMax,iMin].forEach(function(i,k){
      if(i<0)return;
      var x=X(i),y=Y(temps[i]);
      s += '<circle cx="'+x+'" cy="'+y+'" r="4.5" fill="#fff" stroke="'+accent+'" stroke-width="2.5"/>';
      var ty = k===0 ? y-11 : y+20;
      var anchor = i<2?"start":(i>n-3?"end":"middle");
      s += '<text x="'+x+'" y="'+ty+'" text-anchor="'+anchor+'" font-size="12" font-weight="700" fill="#0f1c2e">'+fmt1(temps[i])+'°</text>';
    });

    /* hover crosshair + capture rect */
    s += '<line id="xhair" x1="0" y1="'+T+'" x2="0" y2="'+(T+ih)+'" stroke="#c2cedd" stroke-width="1" opacity="0"/>';
    s += '<circle id="hoverdot" r="4" fill="'+accent+'" opacity="0"/>';
    s += '<rect id="capture" x="'+L+'" y="'+T+'" width="'+iw+'" height="'+ih+'" fill="transparent"/>';
    $("chart").innerHTML = s;

    /* interaction */
    var svg=$("chart"), tip=$("tooltip"), xh=svg.querySelector("#xhair"), dot=svg.querySelector("#hoverdot");
    svg.addEventListener("mousemove",function(e){
      var r=svg.getBoundingClientRect();
      var mx=(e.clientX-r.left)*W/r.width;
      var i=Math.round((mx-L)/(iw/(n-1)));
      i=Math.max(0,Math.min(n-1,i));
      var v=temps[i];
      if(v==null||!isFinite(v)){ tip.style.opacity=0; xh.setAttribute("opacity",0); dot.setAttribute("opacity",0); return; }
      var x=X(i),y=Y(v);
      xh.setAttribute("x1",x); xh.setAttribute("x2",x); xh.setAttribute("opacity",1);
      dot.setAttribute("cx",x); dot.setAttribute("cy",y); dot.setAttribute("opacity",1);
      tip.innerHTML='<span class="hr">'+String(hours[i]).padStart(2,"0")+':00</span>'+fmt1(v)+' °C';
      tip.style.left=(x*r.width/W)+"px";
      tip.style.top =(y*r.height/H)+"px";
      tip.style.opacity=1;
    });
    svg.addEventListener("mouseleave",function(){
      tip.style.opacity=0; xh.setAttribute("opacity",0); dot.setAttribute("opacity",0);
    });
    return {lo:lo,hi:hi};
  }

  /* ---------- fetch + render ---------- */
  var base = date < todayUTC ? "/api/om/archive" : "/api/om/forecast";
  var url = base + "?" + 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
  }).toString();

  fetch(url)
    .then(function(r){
      if(!r.ok) throw new Error("HTTP "+r.status);
      return r.json();
    })
    .then(function(data){
      var daily=data.daily, hourly=data.hourly;
      if(!daily||!daily.time||!daily.time.length||!hourly||!hourly.time||!hourly.time.length)
        throw new Error("No data returned for this date");
      var tmax=daily.temperature_2m_max[0], tmin=daily.temperature_2m_min[0];
      var code=daily.weather_code[0];
      if(tmax==null||tmin==null) throw new Error("No temperature data for this date");

      var meta = WMO[code] || ["Unknown conditions","cloud"];
      var theme = THEMES[meta[1]] || THEMES.cloud;
      var rs=document.documentElement.style;
      rs.setProperty("--bg1",theme.bg1); rs.setProperty("--bg2",theme.bg2);
      rs.setProperty("--accent",theme.accent); rs.setProperty("--accent-soft",theme.soft);

      $("loc-name").textContent = name;
      $("loc-date").textContent = fmtDate(date);
      $("loc-coords").textContent = lat.toFixed(3)+"°, "+lon.toFixed(3)+"° · UTC";
      $("cond-text").textContent = meta[0];
      $("cond-icon-sm").innerHTML = icon(meta[1], theme.accent);
      $("cond-icon-lg").innerHTML = icon(meta[1], theme.accent);
      $("tmax").innerHTML = fmt1(tmax)+"<sup>°C</sup>";
      $("tmin").innerHTML = fmt1(tmin)+"<sup>°C</sup>";

      var hours=[], temps=[];
      hourly.time.forEach(function(t,i){
        if(t.slice(0,10)===date){
          hours.push(parseInt(t.slice(11,13),10));
          temps.push(hourly.temperature_2m[i]);
        }
      });
      if(!hours.length) throw new Error("No hourly data for this date");
      var ext = drawChart(hours, temps, theme.accent);
      if(ext) $("chart-range").textContent = "range "+fmt1(ext.lo)+"° – "+fmt1(ext.hi)+"°";

      $("loading").classList.add("hidden");
      $("content").classList.remove("hidden");
    })
    .catch(function(err){
      showError(String(err && err.message || err));
    });
})();
</script>
</body>
</html>

L1 — cheap deterministic descriptors

bytes total18,132html / css / js1,860 / 4,517 / 11,755
dom nodes47dom depth8
css rules44js presentyes
brightness205.2contrast63.1
colorfulness42.8whitespace63.9%

This slot's telemetry

prompt tokens4completion tokens11,335
total tokens11,339wall133.1 s
costrequest id
config.json571 B
{
  "N": 2,
  "auth": {
    "credential_ref": "WCB_NONE",
    "method": "oauth-login"
  },
  "billing": "plan",
  "config_id": "claude-fable-5-eff-high--cli--claude-code--dev",
  "effort": "high",
  "family": "claude",
  "m": {
    "min": 2,
    "q": 2
  },
  "model_id": "claude-fable-5",
  "protocol": "cli",
  "served_model": "claude-fable-5",
  "telemetry": {
    "completion_tokens": 37197,
    "cost_usd": null,
    "prompt_tokens": 14,
    "total_tokens": 37211,
    "wall_ms": 434569
  },
  "transport": "claude-code-cli-headless",
  "vendor_sanction_ref": null
}
send-log2.5 KB
{
  "N": 2,
  "batch_id": "2026-07-17--dev-cc-fable5",
  "config_id": "claude-fable-5-eff-high--cli--claude-code--dev",
  "positions": [
    {
      "attempts": [
        {
          "attempt_index": 0,
          "backoff_ms": null,
          "charged": true,
          "ended_at": "2026-07-17T13:47:06.171373+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:44:53.109594+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:47:57.710887+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:47:10.467931+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:48:48.342406+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:48:01.162462+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:52:18.936668+00:00",
          "http_status": null,
          "outcome": "valid",
          "reached_model": true,
          "reason": "ok",
          "request_id": null,
          "started_at": "2026-07-17T13:48:51.838804+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
    }
  }
}