From dba77a3abf68b2ef9f1b66f81192463d005d4a8c Mon Sep 17 00:00:00 2001
From: Alex Derzhi <5882439+alexderz@users.noreply.github.com>
Date: Thu, 22 Oct 2026 18:31:52 -0500
Subject: [PATCH 1/2] Data-driven showcase site for GitHub Pages (site/, data
in site/data/bakeoff.json)
Designed and built by Claude Fable 5.1, reviewed in a clean context. site/tools/build_data.py builds the one JSON
the page reads from the repo's own reports and one-shot grades plus site/data/curated.json, and fails on private
addresses, host paths or account names. Only offline-rendered frames are copied; no model-written file is served.
.github/workflows/pages.yml checks the data on pull requests and publishes site/ (without tools/) from main.
---
.github/workflows/pages.yml | 50 +
site/.nojekyll | 0
site/assets/app.js | 426 +
site/assets/charts.js | 160 +
site/assets/data.js | 570 +
site/assets/dom.js | 92 +
site/assets/favicon.svg | 1 +
site/assets/hero.js | 100 +
site/assets/motifs.js | 161 +
site/assets/style.css | 372 +
site/data/README.md | 208 +
site/data/bakeoff.json | 9346 +++++++++++++++++
site/data/curated.json | 48 +
.../t5-gemma-4-26b-a4b-vllm/frame-100.webp | Bin 0 -> 26580 bytes
.../t5-gemma-4-26b-a4b-vllm/frame-2000.webp | Bin 0 -> 26766 bytes
.../t5-gemma-4-26b-a4b-vllm/frame-6000.webp | Bin 0 -> 26572 bytes
.../orrery/t5-gemma-4-26b-a4b/frame-100.webp | Bin 0 -> 5178 bytes
.../orrery/t5-gemma-4-26b-a4b/frame-2000.webp | Bin 0 -> 5176 bytes
.../orrery/t5-gemma-4-26b-a4b/frame-6000.webp | Bin 0 -> 5110 bytes
.../orrery/t5-gemma-4-31b/frame-100.webp | Bin 0 -> 29774 bytes
.../orrery/t5-gemma-4-31b/frame-2000.webp | Bin 0 -> 30006 bytes
.../orrery/t5-gemma-4-31b/frame-6000.webp | Bin 0 -> 30292 bytes
.../frames/orrery/t5-kolibri-1/frame-100.webp | Bin 0 -> 3852 bytes
.../orrery/t5-kolibri-1/frame-2000.webp | Bin 0 -> 3924 bytes
.../orrery/t5-kolibri-1/frame-6000.webp | Bin 0 -> 3820 bytes
.../frame-100.webp | Bin 0 -> 6784 bytes
.../frame-2000.webp | Bin 0 -> 6784 bytes
.../frame-6000.webp | Bin 0 -> 6784 bytes
.../frame-100.webp | Bin 0 -> 62566 bytes
.../frame-2000.webp | Bin 0 -> 62642 bytes
.../frame-6000.webp | Bin 0 -> 62342 bytes
.../frame-100.webp | Bin 0 -> 34752 bytes
.../frame-2000.webp | Bin 0 -> 34540 bytes
.../frame-6000.webp | Bin 0 -> 34474 bytes
.../t5-maya-glm-5.3-flash/frame-100.webp | Bin 0 -> 35008 bytes
.../t5-maya-glm-5.3-flash/frame-2000.webp | Bin 0 -> 34888 bytes
.../t5-maya-glm-5.3-flash/frame-6000.webp | Bin 0 -> 35084 bytes
.../orrery/t5-qwen3.6-27b/frame-100.webp | Bin 0 -> 33392 bytes
.../orrery/t5-qwen3.6-27b/frame-2000.webp | Bin 0 -> 33182 bytes
.../orrery/t5-qwen3.6-27b/frame-6000.webp | Bin 0 -> 33094 bytes
.../t5r2-gemma-4-26b-a4b/frame-100.webp | Bin 0 -> 15452 bytes
.../t5r2-gemma-4-26b-a4b/frame-2000.webp | Bin 0 -> 13840 bytes
.../t5r2-gemma-4-26b-a4b/frame-6000.webp | Bin 0 -> 9446 bytes
.../frame-100.webp | Bin 0 -> 24244 bytes
.../frame-2000.webp | Bin 0 -> 23636 bytes
.../frame-6000.webp | Bin 0 -> 24248 bytes
.../t5r3-gemma-4-26b-a4b/frame-100.webp | Bin 0 -> 13130 bytes
.../t5r3-gemma-4-26b-a4b/frame-2000.webp | Bin 0 -> 12678 bytes
.../t5r3-gemma-4-26b-a4b/frame-6000.webp | Bin 0 -> 12728 bytes
.../frame-100.webp | Bin 0 -> 47156 bytes
.../frame-2000.webp | Bin 0 -> 47176 bytes
.../frame-6000.webp | Bin 0 -> 47176 bytes
.../t5r4-gemma-4-26b-a4b/frame-100.webp | Bin 0 -> 17366 bytes
.../t5r4-gemma-4-26b-a4b/frame-2000.webp | Bin 0 -> 17176 bytes
.../t5r4-gemma-4-26b-a4b/frame-6000.webp | Bin 0 -> 17014 bytes
.../frame-100.webp | Bin 0 -> 45216 bytes
.../frame-2000.webp | Bin 0 -> 44994 bytes
.../frame-6000.webp | Bin 0 -> 45064 bytes
.../t5r5-gemma-4-26b-a4b/frame-100.webp | Bin 0 -> 17150 bytes
.../t5r5-gemma-4-26b-a4b/frame-2000.webp | Bin 0 -> 17376 bytes
.../t5r5-gemma-4-26b-a4b/frame-6000.webp | Bin 0 -> 17368 bytes
.../frame-100.webp | Bin 0 -> 39770 bytes
.../frame-2000.webp | Bin 0 -> 40718 bytes
.../frame-6000.webp | Bin 0 -> 39408 bytes
.../t6-gemma-4-26b-a4b/frame-10000.webp | Bin 0 -> 7246 bytes
.../pagoda/t6-gemma-4-26b-a4b/frame-1500.webp | Bin 0 -> 7238 bytes
.../pagoda/t6-gemma-4-26b-a4b/frame-5000.webp | Bin 0 -> 7336 bytes
.../frame-10000.webp | Bin 0 -> 21888 bytes
.../frame-1500.webp | Bin 0 -> 22024 bytes
.../frame-5000.webp | Bin 0 -> 22088 bytes
.../frame-10000.webp | Bin 0 -> 2616 bytes
.../frame-1500.webp | Bin 0 -> 2616 bytes
.../frame-5000.webp | Bin 0 -> 2616 bytes
.../frame-10000.webp | Bin 0 -> 1898 bytes
.../frame-1500.webp | Bin 0 -> 1898 bytes
.../frame-5000.webp | Bin 0 -> 1898 bytes
.../t6nt1-qwen3.8-27b-vllm/frame-10000.webp | Bin 0 -> 7102 bytes
.../t6nt1-qwen3.8-27b-vllm/frame-1500.webp | Bin 0 -> 7102 bytes
.../t6nt1-qwen3.8-27b-vllm/frame-5000.webp | Bin 0 -> 7102 bytes
.../t6nt2-qwen3.8-27b-vllm/frame-10000.webp | Bin 0 -> 7102 bytes
.../t6nt2-qwen3.8-27b-vllm/frame-1500.webp | Bin 0 -> 7102 bytes
.../t6nt2-qwen3.8-27b-vllm/frame-5000.webp | Bin 0 -> 7102 bytes
.../t6nt3-qwen3.8-27b-vllm/frame-10000.webp | Bin 0 -> 7102 bytes
.../t6nt3-qwen3.8-27b-vllm/frame-1500.webp | Bin 0 -> 7102 bytes
.../t6nt3-qwen3.8-27b-vllm/frame-5000.webp | Bin 0 -> 7102 bytes
.../t6r2-gemma-4-26b-a4b/frame-10000.webp | Bin 0 -> 14118 bytes
.../t6r2-gemma-4-26b-a4b/frame-1500.webp | Bin 0 -> 13820 bytes
.../t6r2-gemma-4-26b-a4b/frame-5000.webp | Bin 0 -> 13982 bytes
.../frame-10000.webp | Bin 0 -> 14712 bytes
.../frame-1500.webp | Bin 0 -> 13434 bytes
.../frame-5000.webp | Bin 0 -> 13540 bytes
.../t6r3-gemma-4-26b-a4b/frame-10000.webp | Bin 0 -> 1900 bytes
.../t6r3-gemma-4-26b-a4b/frame-1500.webp | Bin 0 -> 1900 bytes
.../t6r3-gemma-4-26b-a4b/frame-5000.webp | Bin 0 -> 1900 bytes
.../frame-10000.webp | Bin 0 -> 4358 bytes
.../frame-1500.webp | Bin 0 -> 4358 bytes
.../frame-5000.webp | Bin 0 -> 4358 bytes
.../frame-10000.webp | Bin 0 -> 35396 bytes
.../frame-1500.webp | Bin 0 -> 35346 bytes
.../frame-5000.webp | Bin 0 -> 35342 bytes
.../t6r4-gemma-4-26b-a4b/frame-10000.webp | Bin 0 -> 10026 bytes
.../t6r4-gemma-4-26b-a4b/frame-1500.webp | Bin 0 -> 10116 bytes
.../t6r4-gemma-4-26b-a4b/frame-5000.webp | Bin 0 -> 10192 bytes
.../frame-10000.webp | Bin 0 -> 20676 bytes
.../frame-1500.webp | Bin 0 -> 21148 bytes
.../frame-5000.webp | Bin 0 -> 21306 bytes
.../t6r5-gemma-4-26b-a4b/frame-10000.webp | Bin 0 -> 9492 bytes
.../t6r5-gemma-4-26b-a4b/frame-1500.webp | Bin 0 -> 10124 bytes
.../t6r5-gemma-4-26b-a4b/frame-5000.webp | Bin 0 -> 9954 bytes
.../frame-10000.webp | Bin 0 -> 19692 bytes
.../frame-1500.webp | Bin 0 -> 19242 bytes
.../frame-5000.webp | Bin 0 -> 19630 bytes
.../frame-10000.webp | Bin 0 -> 23772 bytes
.../frame-1500.webp | Bin 0 -> 23624 bytes
.../frame-5000.webp | Bin 0 -> 23932 bytes
.../frame-10000.webp | Bin 0 -> 25602 bytes
.../frame-1500.webp | Bin 0 -> 25602 bytes
.../frame-5000.webp | Bin 0 -> 25602 bytes
.../frame-10000.webp | Bin 0 -> 48780 bytes
.../frame-1500.webp | Bin 0 -> 48182 bytes
.../frame-5000.webp | Bin 0 -> 49268 bytes
.../frame-10000.webp | Bin 0 -> 11190 bytes
.../frame-1500.webp | Bin 0 -> 3862 bytes
.../frame-5000.webp | Bin 0 -> 11190 bytes
.../frame-10000.webp | Bin 0 -> 45666 bytes
.../frame-1500.webp | Bin 0 -> 45954 bytes
.../frame-5000.webp | Bin 0 -> 45774 bytes
.../frame-10000.webp | Bin 0 -> 2624 bytes
.../frame-1500.webp | Bin 0 -> 2616 bytes
.../frame-5000.webp | Bin 0 -> 2608 bytes
.../frame-10000.webp | Bin 0 -> 1900 bytes
.../t6unc1-lcpp6-q38-coder390/frame-1500.webp | Bin 0 -> 1900 bytes
.../t6unc1-lcpp6-q38-coder390/frame-5000.webp | Bin 0 -> 1900 bytes
.../frame-10000.webp | Bin 0 -> 5558 bytes
.../frame-1500.webp | Bin 0 -> 5558 bytes
.../frame-5000.webp | Bin 0 -> 5558 bytes
.../t6unc1-q38-27b-cyber/frame-10000.webp | Bin 0 -> 8846 bytes
.../t6unc1-q38-27b-cyber/frame-1500.webp | Bin 0 -> 8846 bytes
.../t6unc1-q38-27b-cyber/frame-5000.webp | Bin 0 -> 8846 bytes
.../frame-10000.webp | Bin 0 -> 43110 bytes
.../frame-1500.webp | Bin 0 -> 45726 bytes
.../frame-5000.webp | Bin 0 -> 42236 bytes
.../frame-10000.webp | Bin 0 -> 49538 bytes
.../frame-1500.webp | Bin 0 -> 48710 bytes
.../frame-5000.webp | Bin 0 -> 49604 bytes
.../frame-10000.webp | Bin 0 -> 46748 bytes
.../frame-1500.webp | Bin 0 -> 43586 bytes
.../frame-5000.webp | Bin 0 -> 41346 bytes
.../frame-10000.webp | Bin 0 -> 49582 bytes
.../frame-1500.webp | Bin 0 -> 44980 bytes
.../frame-5000.webp | Bin 0 -> 47628 bytes
.../frame-10000.webp | Bin 0 -> 41942 bytes
.../t6x3-exl3-qwen3.8-27b-mtp/frame-1500.webp | Bin 0 -> 42138 bytes
.../t6x3-exl3-qwen3.8-27b-mtp/frame-5000.webp | Bin 0 -> 41594 bytes
.../t6x64k-tiel-coder-35b/frame-10000.webp | Bin 0 -> 15384 bytes
.../t6x64k-tiel-coder-35b/frame-1500.webp | Bin 0 -> 15496 bytes
.../t6x64k-tiel-coder-35b/frame-5000.webp | Bin 0 -> 15138 bytes
.../frame-10000.webp | Bin 0 -> 20956 bytes
.../frame-1500.webp | Bin 0 -> 19958 bytes
.../frame-5000.webp | Bin 0 -> 19852 bytes
.../frame-10000.webp | Bin 0 -> 10718 bytes
.../frame-1500.webp | Bin 0 -> 10718 bytes
.../frame-5000.webp | Bin 0 -> 10718 bytes
.../frame-10000.webp | Bin 0 -> 46366 bytes
.../frame-1500.webp | Bin 0 -> 45866 bytes
.../frame-5000.webp | Bin 0 -> 44532 bytes
.../frame-10000.webp | Bin 0 -> 10078 bytes
.../frame-1500.webp | Bin 0 -> 10078 bytes
.../frame-5000.webp | Bin 0 -> 10078 bytes
.../frame-10000.webp | Bin 0 -> 12190 bytes
.../frame-1500.webp | Bin 0 -> 12190 bytes
.../frame-5000.webp | Bin 0 -> 12190 bytes
.../frame-10000.webp | Bin 0 -> 7742 bytes
.../frame-1500.webp | Bin 0 -> 7742 bytes
.../frame-5000.webp | Bin 0 -> 7742 bytes
site/index.html | 162 +
site/tools/build_data.py | 107 +
site/tools/check_site.mjs | 154 +
site/tools/render_smoke.sh | 81 +
179 files changed, 12038 insertions(+)
create mode 100644 .github/workflows/pages.yml
create mode 100644 site/.nojekyll
create mode 100644 site/assets/app.js
create mode 100644 site/assets/charts.js
create mode 100644 site/assets/data.js
create mode 100644 site/assets/dom.js
create mode 100644 site/assets/favicon.svg
create mode 100644 site/assets/hero.js
create mode 100644 site/assets/motifs.js
create mode 100644 site/assets/style.css
create mode 100644 site/data/README.md
create mode 100644 site/data/bakeoff.json
create mode 100644 site/data/curated.json
create mode 100644 site/frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-100.webp
create mode 100644 site/frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-2000.webp
create mode 100644 site/frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-6000.webp
create mode 100644 site/frames/orrery/t5-gemma-4-26b-a4b/frame-100.webp
create mode 100644 site/frames/orrery/t5-gemma-4-26b-a4b/frame-2000.webp
create mode 100644 site/frames/orrery/t5-gemma-4-26b-a4b/frame-6000.webp
create mode 100644 site/frames/orrery/t5-gemma-4-31b/frame-100.webp
create mode 100644 site/frames/orrery/t5-gemma-4-31b/frame-2000.webp
create mode 100644 site/frames/orrery/t5-gemma-4-31b/frame-6000.webp
create mode 100644 site/frames/orrery/t5-kolibri-1/frame-100.webp
create mode 100644 site/frames/orrery/t5-kolibri-1/frame-2000.webp
create mode 100644 site/frames/orrery/t5-kolibri-1/frame-6000.webp
create mode 100644 site/frames/orrery/t5-lcpp6-flashnext-heretic2/frame-100.webp
create mode 100644 site/frames/orrery/t5-lcpp6-flashnext-heretic2/frame-2000.webp
create mode 100644 site/frames/orrery/t5-lcpp6-flashnext-heretic2/frame-6000.webp
create mode 100644 site/frames/orrery/t5-lcpp6-tiel-coder-35b-q4kxl/frame-100.webp
create mode 100644 site/frames/orrery/t5-lcpp6-tiel-coder-35b-q4kxl/frame-2000.webp
create mode 100644 site/frames/orrery/t5-lcpp6-tiel-coder-35b-q4kxl/frame-6000.webp
create mode 100644 site/frames/orrery/t5-lcpp6-tiel-coder-35b-t06/frame-100.webp
create mode 100644 site/frames/orrery/t5-lcpp6-tiel-coder-35b-t06/frame-2000.webp
create mode 100644 site/frames/orrery/t5-lcpp6-tiel-coder-35b-t06/frame-6000.webp
create mode 100644 site/frames/orrery/t5-maya-glm-5.3-flash/frame-100.webp
create mode 100644 site/frames/orrery/t5-maya-glm-5.3-flash/frame-2000.webp
create mode 100644 site/frames/orrery/t5-maya-glm-5.3-flash/frame-6000.webp
create mode 100644 site/frames/orrery/t5-qwen3.6-27b/frame-100.webp
create mode 100644 site/frames/orrery/t5-qwen3.6-27b/frame-2000.webp
create mode 100644 site/frames/orrery/t5-qwen3.6-27b/frame-6000.webp
create mode 100644 site/frames/orrery/t5r2-gemma-4-26b-a4b/frame-100.webp
create mode 100644 site/frames/orrery/t5r2-gemma-4-26b-a4b/frame-2000.webp
create mode 100644 site/frames/orrery/t5r2-gemma-4-26b-a4b/frame-6000.webp
create mode 100644 site/frames/orrery/t5r2-lcpp6-tiel-coder-35b-t06/frame-100.webp
create mode 100644 site/frames/orrery/t5r2-lcpp6-tiel-coder-35b-t06/frame-2000.webp
create mode 100644 site/frames/orrery/t5r2-lcpp6-tiel-coder-35b-t06/frame-6000.webp
create mode 100644 site/frames/orrery/t5r3-gemma-4-26b-a4b/frame-100.webp
create mode 100644 site/frames/orrery/t5r3-gemma-4-26b-a4b/frame-2000.webp
create mode 100644 site/frames/orrery/t5r3-gemma-4-26b-a4b/frame-6000.webp
create mode 100644 site/frames/orrery/t5r3-lcpp6-tiel-coder-35b-t06/frame-100.webp
create mode 100644 site/frames/orrery/t5r3-lcpp6-tiel-coder-35b-t06/frame-2000.webp
create mode 100644 site/frames/orrery/t5r3-lcpp6-tiel-coder-35b-t06/frame-6000.webp
create mode 100644 site/frames/orrery/t5r4-gemma-4-26b-a4b/frame-100.webp
create mode 100644 site/frames/orrery/t5r4-gemma-4-26b-a4b/frame-2000.webp
create mode 100644 site/frames/orrery/t5r4-gemma-4-26b-a4b/frame-6000.webp
create mode 100644 site/frames/orrery/t5r4-lcpp6-tiel-coder-35b-t06/frame-100.webp
create mode 100644 site/frames/orrery/t5r4-lcpp6-tiel-coder-35b-t06/frame-2000.webp
create mode 100644 site/frames/orrery/t5r4-lcpp6-tiel-coder-35b-t06/frame-6000.webp
create mode 100644 site/frames/orrery/t5r5-gemma-4-26b-a4b/frame-100.webp
create mode 100644 site/frames/orrery/t5r5-gemma-4-26b-a4b/frame-2000.webp
create mode 100644 site/frames/orrery/t5r5-gemma-4-26b-a4b/frame-6000.webp
create mode 100644 site/frames/orrery/t5r5-lcpp6-tiel-coder-35b-t06/frame-100.webp
create mode 100644 site/frames/orrery/t5r5-lcpp6-tiel-coder-35b-t06/frame-2000.webp
create mode 100644 site/frames/orrery/t5r5-lcpp6-tiel-coder-35b-t06/frame-6000.webp
create mode 100644 site/frames/pagoda/t6-gemma-4-26b-a4b/frame-10000.webp
create mode 100644 site/frames/pagoda/t6-gemma-4-26b-a4b/frame-1500.webp
create mode 100644 site/frames/pagoda/t6-gemma-4-26b-a4b/frame-5000.webp
create mode 100644 site/frames/pagoda/t6-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-10000.webp
create mode 100644 site/frames/pagoda/t6-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-1500.webp
create mode 100644 site/frames/pagoda/t6-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-5000.webp
create mode 100644 site/frames/pagoda/t6-lcpp6-tiel-coder-35b-t06/frame-10000.webp
create mode 100644 site/frames/pagoda/t6-lcpp6-tiel-coder-35b-t06/frame-1500.webp
create mode 100644 site/frames/pagoda/t6-lcpp6-tiel-coder-35b-t06/frame-5000.webp
create mode 100644 site/frames/pagoda/t6hq1-qwen3.8-27b-vllm-031/frame-10000.webp
create mode 100644 site/frames/pagoda/t6hq1-qwen3.8-27b-vllm-031/frame-1500.webp
create mode 100644 site/frames/pagoda/t6hq1-qwen3.8-27b-vllm-031/frame-5000.webp
create mode 100644 site/frames/pagoda/t6nt1-qwen3.8-27b-vllm/frame-10000.webp
create mode 100644 site/frames/pagoda/t6nt1-qwen3.8-27b-vllm/frame-1500.webp
create mode 100644 site/frames/pagoda/t6nt1-qwen3.8-27b-vllm/frame-5000.webp
create mode 100644 site/frames/pagoda/t6nt2-qwen3.8-27b-vllm/frame-10000.webp
create mode 100644 site/frames/pagoda/t6nt2-qwen3.8-27b-vllm/frame-1500.webp
create mode 100644 site/frames/pagoda/t6nt2-qwen3.8-27b-vllm/frame-5000.webp
create mode 100644 site/frames/pagoda/t6nt3-qwen3.8-27b-vllm/frame-10000.webp
create mode 100644 site/frames/pagoda/t6nt3-qwen3.8-27b-vllm/frame-1500.webp
create mode 100644 site/frames/pagoda/t6nt3-qwen3.8-27b-vllm/frame-5000.webp
create mode 100644 site/frames/pagoda/t6r2-gemma-4-26b-a4b/frame-10000.webp
create mode 100644 site/frames/pagoda/t6r2-gemma-4-26b-a4b/frame-1500.webp
create mode 100644 site/frames/pagoda/t6r2-gemma-4-26b-a4b/frame-5000.webp
create mode 100644 site/frames/pagoda/t6r2-lcpp6-tiel-coder-35b-t06/frame-10000.webp
create mode 100644 site/frames/pagoda/t6r2-lcpp6-tiel-coder-35b-t06/frame-1500.webp
create mode 100644 site/frames/pagoda/t6r2-lcpp6-tiel-coder-35b-t06/frame-5000.webp
create mode 100644 site/frames/pagoda/t6r3-gemma-4-26b-a4b/frame-10000.webp
create mode 100644 site/frames/pagoda/t6r3-gemma-4-26b-a4b/frame-1500.webp
create mode 100644 site/frames/pagoda/t6r3-gemma-4-26b-a4b/frame-5000.webp
create mode 100644 site/frames/pagoda/t6r3-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-10000.webp
create mode 100644 site/frames/pagoda/t6r3-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-1500.webp
create mode 100644 site/frames/pagoda/t6r3-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-5000.webp
create mode 100644 site/frames/pagoda/t6r3-lcpp6-tiel-coder-35b-t06/frame-10000.webp
create mode 100644 site/frames/pagoda/t6r3-lcpp6-tiel-coder-35b-t06/frame-1500.webp
create mode 100644 site/frames/pagoda/t6r3-lcpp6-tiel-coder-35b-t06/frame-5000.webp
create mode 100644 site/frames/pagoda/t6r4-gemma-4-26b-a4b/frame-10000.webp
create mode 100644 site/frames/pagoda/t6r4-gemma-4-26b-a4b/frame-1500.webp
create mode 100644 site/frames/pagoda/t6r4-gemma-4-26b-a4b/frame-5000.webp
create mode 100644 site/frames/pagoda/t6r4-lcpp6-tiel-coder-35b-t06/frame-10000.webp
create mode 100644 site/frames/pagoda/t6r4-lcpp6-tiel-coder-35b-t06/frame-1500.webp
create mode 100644 site/frames/pagoda/t6r4-lcpp6-tiel-coder-35b-t06/frame-5000.webp
create mode 100644 site/frames/pagoda/t6r5-gemma-4-26b-a4b/frame-10000.webp
create mode 100644 site/frames/pagoda/t6r5-gemma-4-26b-a4b/frame-1500.webp
create mode 100644 site/frames/pagoda/t6r5-gemma-4-26b-a4b/frame-5000.webp
create mode 100644 site/frames/pagoda/t6r5-lcpp6-tiel-coder-35b-t06/frame-10000.webp
create mode 100644 site/frames/pagoda/t6r5-lcpp6-tiel-coder-35b-t06/frame-1500.webp
create mode 100644 site/frames/pagoda/t6r5-lcpp6-tiel-coder-35b-t06/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-cyber-tiel-coder-35b/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-cyber-tiel-coder-35b/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-cyber-tiel-coder-35b/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-flashnext-abliterated-s15/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-flashnext-abliterated-s15/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-flashnext-abliterated-s15/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-flashnext-heretic2/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-flashnext-heretic2/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-flashnext-heretic2/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-orcarouter-fn-uncensored/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-orcarouter-fn-uncensored/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-orcarouter-fn-uncensored/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-orcasaq2-cyber-27b/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-orcasaq2-cyber-27b/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-orcasaq2-cyber-27b/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-q38-27b-cyber-q5/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-q38-27b-cyber-q5/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-q38-27b-cyber-q5/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-q38-coder390/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-q38-coder390/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-q38-coder390/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-thinkingcap-27b-heretic/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-thinkingcap-27b-heretic/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-lcpp6-thinkingcap-27b-heretic/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-q38-27b-cyber/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-q38-27b-cyber/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-q38-27b-cyber/frame-5000.webp
create mode 100644 site/frames/pagoda/t6unc1-qwen3.8-27b-uncensored-vllm/frame-10000.webp
create mode 100644 site/frames/pagoda/t6unc1-qwen3.8-27b-uncensored-vllm/frame-1500.webp
create mode 100644 site/frames/pagoda/t6unc1-qwen3.8-27b-uncensored-vllm/frame-5000.webp
create mode 100644 site/frames/pagoda/t6x1-exl3-qwen3.8-27b-dflash2/frame-10000.webp
create mode 100644 site/frames/pagoda/t6x1-exl3-qwen3.8-27b-dflash2/frame-1500.webp
create mode 100644 site/frames/pagoda/t6x1-exl3-qwen3.8-27b-dflash2/frame-5000.webp
create mode 100644 site/frames/pagoda/t6x2-exl3-qwen3.8-27b-dflash2/frame-10000.webp
create mode 100644 site/frames/pagoda/t6x2-exl3-qwen3.8-27b-dflash2/frame-1500.webp
create mode 100644 site/frames/pagoda/t6x2-exl3-qwen3.8-27b-dflash2/frame-5000.webp
create mode 100644 site/frames/pagoda/t6x3-exl3-qwen3.8-27b-dflash2/frame-10000.webp
create mode 100644 site/frames/pagoda/t6x3-exl3-qwen3.8-27b-dflash2/frame-1500.webp
create mode 100644 site/frames/pagoda/t6x3-exl3-qwen3.8-27b-dflash2/frame-5000.webp
create mode 100644 site/frames/pagoda/t6x3-exl3-qwen3.8-27b-mtp/frame-10000.webp
create mode 100644 site/frames/pagoda/t6x3-exl3-qwen3.8-27b-mtp/frame-1500.webp
create mode 100644 site/frames/pagoda/t6x3-exl3-qwen3.8-27b-mtp/frame-5000.webp
create mode 100644 site/frames/pagoda/t6x64k-tiel-coder-35b/frame-10000.webp
create mode 100644 site/frames/pagoda/t6x64k-tiel-coder-35b/frame-1500.webp
create mode 100644 site/frames/pagoda/t6x64k-tiel-coder-35b/frame-5000.webp
create mode 100644 site/frames/pagoda/t6xn1-exl3-qwen3.8-27b-dflash2/frame-10000.webp
create mode 100644 site/frames/pagoda/t6xn1-exl3-qwen3.8-27b-dflash2/frame-1500.webp
create mode 100644 site/frames/pagoda/t6xn1-exl3-qwen3.8-27b-dflash2/frame-5000.webp
create mode 100644 site/frames/pagoda/t6xn1-exl3-qwen3.8-27b-mtp/frame-10000.webp
create mode 100644 site/frames/pagoda/t6xn1-exl3-qwen3.8-27b-mtp/frame-1500.webp
create mode 100644 site/frames/pagoda/t6xn1-exl3-qwen3.8-27b-mtp/frame-5000.webp
create mode 100644 site/frames/pagoda/t6xn2-exl3-qwen3.8-27b-dflash2/frame-10000.webp
create mode 100644 site/frames/pagoda/t6xn2-exl3-qwen3.8-27b-dflash2/frame-1500.webp
create mode 100644 site/frames/pagoda/t6xn2-exl3-qwen3.8-27b-dflash2/frame-5000.webp
create mode 100644 site/frames/pagoda/t6xn2-exl3-qwen3.8-27b-mtp/frame-10000.webp
create mode 100644 site/frames/pagoda/t6xn2-exl3-qwen3.8-27b-mtp/frame-1500.webp
create mode 100644 site/frames/pagoda/t6xn2-exl3-qwen3.8-27b-mtp/frame-5000.webp
create mode 100644 site/frames/pagoda/t6xn3-exl3-qwen3.8-27b-dflash2/frame-10000.webp
create mode 100644 site/frames/pagoda/t6xn3-exl3-qwen3.8-27b-dflash2/frame-1500.webp
create mode 100644 site/frames/pagoda/t6xn3-exl3-qwen3.8-27b-dflash2/frame-5000.webp
create mode 100644 site/frames/pagoda/t6xn3-exl3-qwen3.8-27b-mtp/frame-10000.webp
create mode 100644 site/frames/pagoda/t6xn3-exl3-qwen3.8-27b-mtp/frame-1500.webp
create mode 100644 site/frames/pagoda/t6xn3-exl3-qwen3.8-27b-mtp/frame-5000.webp
create mode 100644 site/index.html
create mode 100644 site/tools/build_data.py
create mode 100644 site/tools/check_site.mjs
create mode 100755 site/tools/render_smoke.sh
diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml
new file mode 100644
index 0000000..190a824
--- /dev/null
+++ b/.github/workflows/pages.yml
@@ -0,0 +1,50 @@
+# Publishes the site/ directory to GitHub Pages, minus its build tools. The one-shot model output under oneshots/ is
+# never part of the Pages artifact; the site shows only the offline-rendered frames that site/tools/build_data.py
+# copies into site/frames/. Pull requests run the data check only.
+name: pages
+on:
+ push:
+ branches: [main]
+ paths: ["site/**", ".github/workflows/pages.yml"]
+ pull_request:
+ paths: ["site/**", ".github/workflows/pages.yml"]
+ workflow_dispatch:
+permissions:
+ contents: read
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-node@v4
+ with:
+ node-version: 22
+ - name: Check the site data and renderers
+ run: node site/tools/check_site.mjs
+ deploy:
+ if: github.event_name != 'pull_request'
+ needs: check
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pages: write
+ id-token: write
+ concurrency:
+ group: pages
+ cancel-in-progress: false
+ environment:
+ name: github-pages
+ url: ${{ steps.deploy.outputs.page_url }}
+ steps:
+ - uses: actions/checkout@v4
+ - name: Stage the site without its tools
+ run: |
+ mkdir _site
+ cp -a site/. _site/
+ rm -rf _site/tools
+ - uses: actions/configure-pages@v5
+ - uses: actions/upload-pages-artifact@v3
+ with:
+ path: _site
+ - id: deploy
+ uses: actions/deploy-pages@v4
diff --git a/site/.nojekyll b/site/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/site/assets/app.js b/site/assets/app.js
new file mode 100644
index 0000000..0784257
--- /dev/null
+++ b/site/assets/app.js
@@ -0,0 +1,426 @@
+// The Bake-off page. Fetches data/bakeoff.json and renders every section from it. Each section
+// renders inside its own try/catch so one odd record never blanks the page; a section that throws
+// is named in data-render-error on
(site/tools/render_smoke.sh looks for it).
+import * as D from './data.js';
+import { el, svg, clear, $, familyChip, verdictChip, kindChip, revealList, repoLink, onReducedMotion } from './dom.js';
+import { speedLadder, struggleStrip, abDumbbell, petalScore, pips, beforeAfter, bigNumeral, runLine, ofMax } from './charts.js';
+import { renderHero } from './hero.js';
+import { chapterMotif } from './motifs.js';
+
+const { fmt, fmtMinutes, fmtDate } = D;
+
+async function main() {
+ let raw;
+ try {
+ const res = await fetch('data/bakeoff.json', { cache: 'no-cache' });
+ if (!res.ok) throw new Error(`HTTP ${res.status}`);
+ raw = await res.json();
+ } catch (e) {
+ const p = $('load-error'); p.hidden = false;
+ p.textContent = `The data file could not be loaded (${e && e.message ? e.message : e}). The page is a renderer for data/bakeoff.json; without it there is nothing to show.`;
+ return;
+ }
+ const data = D.normalize(raw);
+ document.title = `${data.title} · local models on one GPU`;
+ section('top', () => renderTop(data));
+ section('machine', () => renderMachine(data));
+ section('tests', () => renderTests(data));
+ section('picks', () => renderPicks(data));
+ section('runs', () => renderRuns(data));
+ section('struggle', () => renderStruggle(data));
+ section('test3', () => renderTest3(data));
+ section('ab', () => renderAB(data));
+ section('oneshots', () => renderOneshots(data));
+ section('findings', () => renderFindings(data));
+ section('timeline', () => renderTimeline(data));
+ section('log', () => renderLog(data));
+ section('caveats', () => renderCaveats(data));
+ section('links', () => renderLinks(data));
+ section('motifs', () => renderMotifs(data));
+ document.body.dataset.rendered = '1';
+ // a deep link (#oneshots) was resolved against the empty page; re-aim it now that the chapters have their height
+ if (location.hash && /^#[A-Za-z0-9_-]+$/.test(location.hash)) {
+ const target = $(location.hash.slice(1));
+ if (target) target.scrollIntoView({ behavior: onReducedMotion() ? 'auto' : 'instant', block: 'start' });
+ }
+}
+function section(id, fn) {
+ try { fn(); } catch (e) {
+ const host = $(id);
+ if (host) host.appendChild(el('p', { class: 'empty render-error' }, `This section could not be drawn from the current data (${e && e.message ? e.message : e}).`));
+ const prev = document.body.dataset.renderError;
+ document.body.dataset.renderError = prev ? `${prev} ${id}` : id;
+ console.error(id, e);
+ }
+}
+const stat = (k, v, unit) => el('div', {}, el('dt', {}, k), el('dd', {}, fmt(v, 0), unit ? el('small', {}, unit) : null));
+
+// ------------------------------------------------------------------- hero
+function renderTop(data) {
+ $('title').textContent = data.title;
+ $('tagline').textContent = data.tagline;
+ const s = D.summary(data);
+ const stats = $('hero-stats'); clear(stats);
+ stats.append(stat('models', s.models), stat('families', s.families), stat('agent runs', s.runs), stat('passes', s.passes), stat('one-shots', s.oneshots), stat('frames', s.frames));
+ if (s.fastest != null) stats.append(stat('fastest run', s.fastest, 'tok/s'));
+ if (s.agentHours > 0) stats.append(stat('agent hours', Math.round(s.agentHours)));
+ // freshness: the run table is a snapshot; findings are written as they happen and are usually newer
+ const gen = $('generated'); clear(gen);
+ const bit = (k, v) => el('span', { class: 'fresh' }, el('small', {}, k), ' ', v);
+ if (data.generated) gen.appendChild(bit('data generated', data.generated));
+ if (data.built) gen.appendChild(bit('site built', data.built));
+ if (s.last) gen.appendChild(bit('newest run', fmtDate(s.last)));
+ if (s.newestFinding) gen.appendChild(bit('newest finding', fmtDate(s.newestFinding)));
+ if (!gen.childNodes.length) gen.textContent = 'Data snapshot';
+ renderHero(data, $('orrery'), $('hero-caption'), $('hero-legend'));
+}
+
+// ---------------------------------------------------------------- machine
+function renderMachine(data) {
+ const dl = $('hardware'); clear(dl);
+ const entries = Object.entries(data.hardware);
+ if (!entries.length) { dl.appendChild(el('p', { class: 'empty' }, 'No hardware recorded.')); return; }
+ for (const [k, v] of entries) dl.appendChild(el('div', {}, el('dt', {}, k.replace(/_/g, ' ')), el('dd', {}, v)));
+}
+
+// ------------------------------------------------------------------ tests
+function renderTests(data) {
+ const host = $('test-cards'); clear(host);
+ if (!data.tests.length) { host.appendChild(el('p', { class: 'empty' }, 'No tests described yet.')); return; }
+ const seen = new Set();
+ for (const t of data.tests) {
+ seen.add(t.number);
+ host.appendChild(testCard(t, D.testCount(data, t.number)));
+ }
+ // tests that appear in the data but are not described
+ const extra = new Set();
+ for (const r of data.runs) { const k = D.effectiveTest(r); if (!seen.has(k)) extra.add(k); }
+ for (const rows of Object.values(data.oneshots)) for (const r of rows) if (!seen.has(r.test)) extra.add(r.test);
+ if (data.test3.length && !seen.has('3')) extra.add('3');
+ for (const k of [...extra].sort()) host.appendChild(testCard(D.testOf(data, k), D.testCount(data, k), true));
+}
+function testCard(t, n, undocumented = false) {
+ const kindCls = (t.kind || '').replace(/[^a-z-]/gi, '').toLowerCase();
+ return el('article', { class: `test-card ${kindCls}` },
+ el('span', { class: 'tn', 'aria-hidden': 'true' }, t.number || '?'),
+ el('h3', {}, el('span', { class: 'sr' }, `Test ${t.number}: `), t.name),
+ t.what ? el('p', { class: 'what' }, t.what) : undocumented ? el('p', { class: 'what empty' }, 'Appears in the results but is not described yet.') : null,
+ t.graded ? el('p', { class: 'graded' }, t.graded) : null,
+ el('div', { class: 'meta' }, t.kind ? kindChip(t.kind, kindCls) : null, el('span', { class: 'n' }, n === 1 ? '1 graded run' : `${fmt(n, 0)} graded runs`)));
+}
+
+// ------------------------------------------------------------------ picks
+function renderPicks(data) {
+ const { overall, uncensored } = D.pickCards(data);
+ fill($('pick-overall'), overall, pickCard, 'No overall picks yet.');
+ fill($('pick-uncensored'), uncensored, pickCard, 'No uncensored picks yet.');
+ const fam = $('pick-families'); clear(fam);
+ const rows = D.familyPickRows(data);
+ if (!rows.length) fam.appendChild(el('p', { class: 'empty' }, 'No family table yet.'));
+ for (const f of rows) {
+ fam.appendChild(el('div', { class: 'fam-row', style: { '--c': f.color } },
+ el('div', { class: 'famhead' }, familyChip(f.family, f.color), el('div', { class: 'count' }, f.models === 1 ? '1 model tried' : `${f.models} models tried`)),
+ ...f.cells.map(([k, v]) => el('div', { class: 'cell' }, el('small', {}, k), v ? el('b', {}, v) : el('span', { class: 'none' }, 'none yet'))),
+ f.note ? el('p', { class: 'note' }, f.note) : null));
+ }
+}
+function fill(host, items, render, emptyText) {
+ clear(host);
+ if (!items.length) host.appendChild(el('p', { class: 'empty' }, emptyText));
+ for (const it of items) host.appendChild(render(it));
+}
+function pickCard(p) {
+ return el('article', { class: 'pick-card', style: { '--c': p.color } },
+ el('div', { class: 'role' }, p.role),
+ el('h4', {}, p.short || p.model || 'unnamed'),
+ el('div', { class: 'meta' }, familyChip(p.family, p.color), p.uncensored ? kindChip('uncensored') : null, p.quant ? el('span', { class: 'mono' }, p.quant) : null, p.engine ? el('span', { class: 'mono' }, p.engine) : null, p.missing ? kindChip('no model card in data') : null),
+ p.verdict ? el('p', { class: 'verdict-text' }, p.verdict) : null,
+ p.tradeoff ? el('p', { class: 'trade' }, p.tradeoff) : null,
+ p.runs.length ? el('ul', {}, ...p.runs.map(runLine)) : null);
+}
+
+// ------------------------------------------------------------------- runs
+function renderRuns(data) {
+ const opts = D.runFilterOptions(data);
+ const sel = (id, values, labelFn) => { const s = $(id); clear(s); s.appendChild(el('option', { value: 'all' }, 'all')); for (const v of values) s.appendChild(el('option', { value: v }, labelFn ? labelFn(v) : v)); };
+ sel('f-test', opts.tests, (t) => { const tt = D.testOf(data, t); return `${t} · ${tt.name}`; });
+ sel('f-family', opts.families);
+ sel('f-verdict', opts.verdicts);
+ const form = $('run-filters');
+ let limit = 40;
+ const draw = () => {
+ const f = { test: $('f-test').value, family: $('f-family').value, verdict: $('f-verdict').value, uncensored: $('f-unc').value, q: $('f-q').value.trim() };
+ const rows = D.runRows(data, f, $('f-sort').value);
+ $('f-count').textContent = `${rows.length} of ${data.runs.length} runs`;
+ const host = $('ladder'); clear(host); host.appendChild(speedLadder(rows, { limit }));
+ const more = $('ladder-more');
+ more.hidden = rows.length <= limit;
+ more.textContent = `Show ${Math.min(40, rows.length - limit)} more rows (${rows.length - limit} left)`;
+ const tbl = $('run-table'); clear(tbl); tbl.appendChild(runTable(rows));
+ };
+ form.addEventListener('input', () => { limit = 40; draw(); });
+ form.addEventListener('submit', (e) => e.preventDefault());
+ $('ladder-more').addEventListener('click', () => { limit += 40; draw(); });
+ draw();
+}
+function runTable(rows) {
+ const cols = [
+ ['Model', (r) => el('span', {}, r.short, el('span', { class: 'case' }, r.case))],
+ ['Test', (r) => `${r.test}${r.flavor ? ' · ' + r.flavor : ''}`],
+ ['Verdict', (r) => verdictChip(r.verdict)],
+ ['Checks', (r) => ofMax(r.checks, r.checksMax), 'n'],
+ ['Tests', (r) => (r.tests_pass == null ? '–' : fmt(r.tests_pass, 0) + (r.tests_fail ? ` (${fmt(r.tests_fail, 0)} fail)` : '')), 'n'],
+ ['tok/s', (r) => fmt(r.tps, 1), 'n'],
+ ['Time', (r) => fmtMinutes(r.minutes), 'n'],
+ ['Context', (r) => (r.ctx == null ? '–' : `${fmt(r.ctx / 1024, 0)}k`) + (r.kv ? ` ${r.kv}` : ''), 'n'],
+ ['Errors/kloc', (r) => (r.struggle && r.struggle.errors_per_kloc != null ? fmt(r.struggle.errors_per_kloc, 1) : '–'), 'n'],
+ ['Agent', (r) => r.agent || '–'],
+ ['Finished', (r) => r.finished || '–'],
+ ];
+ const table = el('table', { class: 'runs' }, el('caption', { class: 'sr' }, 'Matching runs'));
+ table.appendChild(el('thead', {}, el('tr', {}, ...cols.map(([h, , c]) => el('th', { scope: 'col', class: c || '' }, h)))));
+ const body = el('tbody', {});
+ rows.slice(0, 300).forEach((r) => body.appendChild(el('tr', {}, ...cols.map(([h, f, c]) => el('td', { class: c || '', 'data-l': h }, f(r))))));
+ table.appendChild(body);
+ if (rows.length > 300) table.appendChild(el('tfoot', {}, el('tr', {}, el('td', { colspan: String(cols.length) }, `Showing the first 300 of ${rows.length}; narrow the filters to see the rest.`))));
+ return table;
+}
+
+// --------------------------------------------------------------- struggle
+function renderStruggle(data) {
+ const rows = D.struggleRows(data);
+ const host = $('struggle-chart'); clear(host);
+ if (!rows.length) { host.appendChild(el('p', { class: 'empty' }, 'No test-2 runs with a struggle score yet.')); return; }
+ const draw = () => { clear(host); host.appendChild(struggleStrip(rows, host.clientWidth - 16)); };
+ draw();
+ let t; addEventListener('resize', () => { clearTimeout(t); t = setTimeout(draw, 150); });
+ const sum = D.struggleSummary(rows);
+ const row = $('struggle-summary'); clear(row);
+ for (const v of ['pass', 'partial', 'fail']) {
+ if (!sum[v]) continue;
+ row.appendChild(el('div', { class: 'stat' }, el('div', { class: 'k' }, verdictChip(v), `${sum[v].n} runs`), el('div', { class: 'v' }, fmt(sum[v].median, 1), el('small', {}, ' median errors / kloc'))));
+ }
+ const c = D.cleanestRun(rows);
+ if (c) row.appendChild(el('div', { class: 'stat' }, el('div', { class: 'k' }, 'cleanest passing build'),
+ el('div', { class: 'v' }, c.short, el('small', {}, ` ${fmt(c.struggle.errors_per_kloc, 1)} errors / kloc · ${fmt(c.struggle.compiles, 0)} build${c.struggle.compiles === 1 ? '' : 's'} · ${fmt(c.struggle.loc, 0)} lines`)),
+ el('div', { class: 'k' }, verdictChip(c.verdict))));
+}
+
+// ----------------------------------------------------------------- test 3
+function renderTest3(data) {
+ const { groups, rubricMax } = D.test3Groups(data);
+ const host = $('test3-groups');
+ const btn = $('test3-more');
+ const r = revealList(host, groups, (g) => el('article', { class: 't3', style: { '--c': g.color } },
+ el('div', { class: 'head' }, el('b', {}, g.short), el('div', { class: 'chips' }, familyChip(g.family, g.color), g.uncensored ? kindChip('uncensored') : null)),
+ el('div', { class: 'flavors' }, ...g.rows.map((row) => el('div', { class: 't3-row' },
+ el('span', { class: 'flavor', title: `flavor ${row.flavor}` }, row.flavor),
+ el('div', { class: 'facts' },
+ el('span', {}, 'MCP facts ', pips(row.mcp_facts.got, row.mcp_facts.of), ` ${row.mcp_facts.text}`),
+ el('span', {}, 'API facts ', pips(row.api_facts.got, row.api_facts.of, 'api'), ` ${row.api_facts.text}`),
+ el('span', {}, 'rubric ', pips(row.rubric, rubricMax, 'rubric'), el('span', { class: 'rubric-num' }, ` ${ofMax(row.rubric, rubricMax)}`)),
+ el('span', { class: `judge ${row.judgement_right === true ? 'ok' : row.judgement_right === false ? 'bad' : ''}` }, row.judgement_right === true ? '✓ judged the server right' : row.judgement_right === false ? '✗ misjudged the server' : 'judgement not recorded')),
+ el('span', { class: 'num' }, `${fmt(row.tps, 1)} tok/s · ${fmtMinutes(row.minutes)}`),
+ ...noteBlock(row.note, 220))))), { step: 8, label: 'Show more models' });
+ btn.hidden = true; // revealList carries its own button
+ return r;
+}
+
+// -------------------------------------------------------------------- A/B
+function renderAB(data) {
+ const { groups, engines, colors, max } = D.abGroups(data);
+ const legend = $('ab-legend'); clear(legend);
+ for (const e of engines) legend.appendChild(el('li', {}, el('i', { style: { '--c': colors.get(e) }, 'aria-hidden': 'true' }), `engine ${e}`));
+ if (engines.length) legend.appendChild(el('li', {}, 'dot = one probe variant; the line spans the model’s range; ×n is the gain between engines with the same flags'));
+ const host = $('ab-groups'); clear(host);
+ if (!groups.length) { host.appendChild(el('p', { class: 'empty' }, 'No engine probes yet.')); return; }
+ for (const g of groups.filter((g) => !g.allFailed)) host.appendChild(abDumbbell(g, max, colors));
+ const failed = data.ab.filter((r) => r.decode == null);
+ if (failed.length) {
+ host.appendChild(el('details', { class: 'ab-errors' }, el('summary', {}, `${failed.length} probe${failed.length === 1 ? '' : 's'} failed to load`),
+ el('ul', {}, ...failed.map((r) => el('li', {}, el('b', {}, D.shortLabel(D.modelOf(data, r.model).label)), ` · ${r.engine} · ${r.variant}: `, el('code', {}, r.error.slice(0, 160) || 'no error text'))))));
+ }
+}
+
+// ---------------------------------------------------------------- gallery
+function renderOneshots(data) {
+ const sets = D.oneshotSets(data);
+ const setRow = $('oneshot-sets'); clear(setRow);
+ for (const s of sets) {
+ setRow.appendChild(el('div', { class: 'set-card' }, el('b', {}, `Test ${s.test} · ${s.name}`),
+ el('span', {}, `${s.n} replies · ${s.withFrames} rendered · ${s.full} full marks · ${s.zero} scored zero`),
+ el('span', {}, `${s.cut} cut off by the token cap${s.mean != null ? ` · mean ${fmt(s.mean, 1)}` : ''}`)));
+ }
+ const tsel = $('o-test'); clear(tsel); tsel.appendChild(el('option', { value: 'all' }, 'all'));
+ for (const s of sets) tsel.appendChild(el('option', { value: s.test }, `${s.test} · ${s.name}`));
+ const form = $('oneshot-filters');
+ const grid = $('oneshot-grid');
+ const draw = () => {
+ const cards = D.oneshotCards(data, { test: tsel.value, sort: $('o-sort').value, q: $('o-q').value.trim() });
+ $('o-count').textContent = `${cards.length} replies`;
+ revealList(grid, cards, shotCard, { step: 12, label: 'Show more replies' });
+ };
+ form.addEventListener('input', draw);
+ form.addEventListener('submit', (e) => e.preventDefault());
+ draw();
+ startFlipbooks(grid);
+}
+const blankCard = (c) => el('div', { class: 'blank' }, el('span', {}, el('i', { 'aria-hidden': 'true' }, '∅'), c.finish === 'length' ? 'Cut off by the token cap, nothing to render' : c.frames.length ? 'The renders could not be loaded' : 'No render available'));
+function shotCard(c) {
+ const pic = el('div', { class: 'pic' });
+ const frames = c.frames;
+ if (frames.length) {
+ const last = frames.length - 1;
+ let failed = 0;
+ // The last frame is the richest, so it is shown first and fetched eagerly; the others load lazily and the
+ // flipbook only ever advances onto a frame that has really loaded. If none loads the card goes blank.
+ const imgs = frames.map((f, i) => {
+ const im = el('img', { src: f.url, alt: `${c.alt}, frame at ${f.ms == null ? '?' : fmt(f.ms, 0)} ms`, loading: i === last ? 'eager' : 'lazy', decoding: 'async', width: c.set === 'orrery' ? 1000 : 1280, height: c.set === 'orrery' ? 1000 : 800, class: i === last ? 'on' : '' });
+ im.addEventListener('load', () => { if (im.classList.contains('on')) pic.dataset.loaded = '1'; });
+ im.addEventListener('error', () => { im.classList.add('broken'); if (++failed === frames.length) { clear(pic); delete pic.dataset.flip; pic.appendChild(blankCard(c)); } });
+ return im;
+ });
+ pic.append(...imgs);
+ const dots = el('ol', { class: 'frames', 'aria-label': 'Frame' });
+ frames.forEach((f, i) => {
+ const b = el('button', { type: 'button', 'aria-pressed': String(i === last), 'aria-label': `frame at ${fmt(f.ms, 0)} ms` }, f.ms == null ? String(i + 1) : f.ms >= 1000 ? `${(f.ms / 1000).toFixed(f.ms % 1000 ? 1 : 0)}s` : `${f.ms}ms`);
+ b.addEventListener('click', () => { pic.dataset.manual = '1'; showFrame(pic, i); });
+ dots.appendChild(b);
+ });
+ pic.appendChild(dots);
+ pic.dataset.flip = '1';
+ pic.dataset.frame = String(last);
+ } else {
+ pic.appendChild(blankCard(c));
+ }
+ const [note, noteBtn] = noteBlock(c.note, 160);
+ const body = el('div', { class: 'body' },
+ el('div', {}, el('b', {}, c.short), el('div', { class: 'meta' }, familyChip(c.family, c.color), c.uncensored ? kindChip('uncensored') : null,
+ el('span', {}, `${fmt(c.tok_s, 1)} tok/s`), el('span', {}, `${fmt(c.tokens, 0)} tokens`), c.finish === 'length' ? el('span', { class: 'cut' }, 'hit the cap') : null)),
+ petalScore(c), note);
+ const pmax = c.pointMax > 0 ? c.pointMax : 1;
+ if (c.points.length) body.appendChild(el('div', { class: 'pts' }, ...c.points.map((p) => { const v = p.value || 0; return el('span', { class: v <= 0 ? 'l0' : v >= pmax ? 'l2' : 'l1' }, `${p.name} ${fmt(p.value)}`); })));
+ if (noteBtn) body.appendChild(noteBtn);
+ return el('article', { class: `shot${c.full && frames.length ? ' featured' : ''}`, title: c.case, style: { '--c': c.color } }, pic, body);
+}
+// A clamped note plus a "full note" toggle when it is long. Returns [p, button|null].
+function noteBlock(text, threshold) {
+ if (!text) return [null, null];
+ const p = el('p', { class: 'note' }, text);
+ if (text.length <= threshold) return [p, null];
+ const b = el('button', { type: 'button', class: 'noteb', 'aria-expanded': 'false' }, 'full note');
+ b.addEventListener('click', () => { const open = p.classList.toggle('open'); b.setAttribute('aria-expanded', String(open)); b.textContent = open ? 'less' : 'full note'; });
+ return [p, b];
+}
+const imgLoaded = (im) => im.complete && im.naturalWidth > 0;
+function showFrame(pic, i) {
+ const imgs = pic.querySelectorAll('img'), btns = pic.querySelectorAll('.frames button');
+ imgs.forEach((im, j) => im.classList.toggle('on', j === i));
+ btns.forEach((b, j) => b.setAttribute('aria-pressed', String(j === i)));
+ pic.dataset.frame = String(i);
+ if (imgs[i] && imgLoaded(imgs[i])) pic.dataset.loaded = '1'; else delete pic.dataset.loaded;
+}
+// Flipbooks advance only while on screen, only when motion is allowed, and only onto frames that have loaded;
+// a manual click stops the loop for that card.
+function startFlipbooks(grid) {
+ if (onReducedMotion() || !('IntersectionObserver' in window)) return;
+ const live = new Set();
+ const io = new IntersectionObserver((es) => { for (const e of es) { if (e.isIntersecting) live.add(e.target); else live.delete(e.target); } }, { threshold: 0.4 });
+ const seen = new WeakSet();
+ const scan = () => grid.querySelectorAll('.pic[data-flip]').forEach((p) => { if (!seen.has(p)) { seen.add(p); io.observe(p); } });
+ scan();
+ new MutationObserver(scan).observe(grid, { childList: true, subtree: true });
+ setInterval(() => {
+ for (const pic of live) {
+ if (pic.dataset.manual || !pic.dataset.flip) continue;
+ const imgs = [...pic.querySelectorAll('img')];
+ const n = imgs.length; if (n < 2) continue;
+ const cur = pic.dataset.frame == null ? n - 1 : +pic.dataset.frame;
+ for (let k = 1; k <= n; k++) { const j = (cur + k) % n; if (imgLoaded(imgs[j])) { if (j !== cur) showFrame(pic, j); break; } }
+ }
+ }, 1400);
+}
+
+// --------------------------------------------------------------- findings
+function renderFindings(data) {
+ const host = $('findings-list'); clear(host);
+ if (!data.findings.length) { host.appendChild(el('p', { class: 'empty' }, 'No headline findings yet.')); return; }
+ for (const f of data.findings) {
+ const metrics = D.findingMetrics(f);
+ const right = el('div', { class: 'numbers' });
+ if (metrics.length) {
+ // the lead metric is the typographic moment; the rest are bars under it
+ const lead = metrics.find((m) => m.after != null) || metrics[0];
+ right.appendChild(bigNumeral(lead));
+ const rest = metrics.filter((m) => m !== lead);
+ if (rest.length) {
+ right.appendChild(el('div', { class: 'ba-key' }, el('span', {}, el('i', { class: 'before' }), 'before'), el('span', {}, el('i', { class: 'after' }), 'after')));
+ for (const m of rest) right.appendChild(beforeAfter(m));
+ }
+ }
+ if (f.quality) right.appendChild(el('p', { class: 'quality', 'data-k': 'quality check' }, f.quality));
+ if (f.caveat) right.appendChild(el('p', { class: 'caveat', 'data-k': 'caveat' }, f.caveat));
+ host.appendChild(el('article', { class: 'finding' },
+ el('div', { class: 'when' }, f.date ? el('time', { datetime: f.date }, fmtDate(f.date)) : null, kindChip(f.kind)),
+ el('h3', {}, f.title),
+ el('div', {}, el('p', { class: 'summary' }, f.summary), f.settings ? el('p', { class: 'settings' }, 'settings ', el('code', {}, f.settings)) : null),
+ right));
+ }
+}
+
+// --------------------------------------------------------------- timeline
+function renderTimeline(data) {
+ const ol = $('timeline-list'); clear(ol);
+ if (!data.timeline.length) { ol.appendChild(el('li', { class: 'empty' }, 'No timeline yet.')); return; }
+ for (const t of data.timeline) {
+ ol.appendChild(el('li', {},
+ el('div', { class: 'date' }, t.date ? el('time', { datetime: t.date }, fmtDate(t.date)) : null, t.era ? el('span', { class: 'era' }, t.era) : null),
+ el('h3', {}, t.title), t.what ? el('p', { class: 'what' }, t.what) : null, t.why ? el('p', { class: 'why' }, t.why) : null));
+ }
+}
+
+// -------------------------------------------------------------------- log
+function renderLog(data) {
+ const kinds = D.eventKinds(data);
+ const row = $('event-kinds'); clear(row);
+ let active = 'all';
+ const host = $('events-list');
+ const draw = () => {
+ const items = active === 'all' ? data.events : data.events.filter((e) => e.kind === active);
+ revealList(host, items, (e) => el('article', { class: 'event' },
+ el('div', {}, el('time', {}, e.when), kindChip(e.kind)), el('p', {}, e.text)), { step: 12, label: 'Show more entries' });
+ row.querySelectorAll('button').forEach((b) => b.setAttribute('aria-pressed', String(b.dataset.kind === active)));
+ };
+ const mk = (kind, label) => { const b = el('button', { type: 'button', 'data-kind': kind, 'aria-pressed': 'false' }, label); b.addEventListener('click', () => { active = kind; draw(); }); return el('li', {}, b); };
+ row.appendChild(mk('all', `all ${data.events.length}`));
+ for (const k of kinds) row.appendChild(mk(k.kind, `${k.kind} ${k.n}`));
+ draw();
+}
+
+// ---------------------------------------------------------------- caveats
+function renderCaveats(data) {
+ const ol = $('caveat-list'); clear(ol);
+ if (!data.caveats.length) ol.appendChild(el('li', {}, 'No caveats are recorded in the data. Treat every number as one sample from a changing harness.'));
+ for (const c of data.caveats) ol.appendChild(el('li', {}, c));
+}
+function renderLinks(data) {
+ const ul = $('links'); clear(ul);
+ const names = { repo: 'Repository', cards: 'Model cards', method: 'Method', conclusions: 'Conclusions', log: 'Research log' };
+ for (const [k, v] of Object.entries(data.links)) ul.appendChild(el('li', {}, repoLink(v, names[k] || k)));
+}
+
+// ----------------------------------------------------------------- motifs
+// One ornament per chapter head, drawn from that chapter's numbers. Purely decorative, so drawn last.
+function renderMotifs(data) {
+ const m = D.motifs(data);
+ for (const key of Object.keys(m)) {
+ const sec = $(key); if (!sec) continue;
+ const head = sec.querySelector('.chapter-head'); if (!head) continue;
+ const old = head.querySelector('.motif'); if (old) old.remove();
+ const node = chapterMotif(key, m[key]);
+ if (node) head.appendChild(el('div', { class: 'motif', 'aria-hidden': 'true' }, node));
+ }
+}
+
+main();
+export { svg };
diff --git a/site/assets/charts.js b/site/assets/charts.js
new file mode 100644
index 0000000..a377657
--- /dev/null
+++ b/site/assets/charts.js
@@ -0,0 +1,160 @@
+// Hand-built SVG/HTML charts. Each takes already-derived rows and a width in CSS px.
+import { el, svg, verdictChip, VERDICT_GLYPH } from './dom.js';
+import { fmt, fmtMinutes, logScale, logTicks, shortLabel, OTHER_COLOR } from './data.js';
+
+// "n/m" when the data gives a scale for that test, else just "n".
+export const ofMax = (n, max) => (n == null ? '–' : max != null ? `${fmt(n, 0)}/${fmt(max, 0)}` : fmt(n, 0));
+
+// Speed ladder: one thin bar per run on a log scale, colour = verdict (status), glyph + text carry it too.
+export function speedLadder(rows, { limit = 40 } = {}) {
+ const scale = logScale(rows.map((r) => r.tps));
+ const ticks = logTicks(scale);
+ const wrap = el('div', { class: 'ladder' });
+ const axis = el('div', { class: 'ladder-axis', 'aria-hidden': 'true' });
+ for (const t of ticks) {
+ const tick = el('span', { class: 'tick' }, `${fmt(t, 0)}`);
+ tick.style.left = `${scale.pos(t) * 100}%`;
+ axis.appendChild(tick);
+ }
+ wrap.appendChild(el('div', { class: 'ladder-head' }, el('span', {}, 'model · run'), axis, el('span', { class: 'num' }, 'tok/s')));
+ const list = el('ol', { class: 'ladder-rows' });
+ rows.slice(0, limit).forEach((r) => {
+ const pct = Math.max(0.6, scale.pos(r.tps) * 100);
+ const bar = el('span', { class: `bar v-${r.verdict}` });
+ bar.style.width = `${pct}%`;
+ const cap = el('span', { class: `cap v-${r.verdict}`, 'aria-hidden': 'true' }, VERDICT_GLYPH[r.verdict] || '◌');
+ cap.style.left = `${pct}%`;
+ const title = `${r.modelLabel} · test ${r.test}${r.flavor ? ` (${r.flavor})` : ''} · ${r.verdict} · ${fmt(r.tps, 1)} tok/s · ${fmtMinutes(r.minutes)}`;
+ list.appendChild(el('li', { class: 'ladder-row', title },
+ el('span', { class: 'lbl' }, el('i', { class: 'fam-dot', 'aria-hidden': 'true', style: { '--c': r.color } }), el('b', {}, r.short), el('small', {}, ` t${r.test}${r.flavor ? '·' + r.flavor : ''}${r.uncensored ? ' · unc' : ''}`)),
+ el('span', { class: 'track' }, bar, cap),
+ el('span', { class: 'num' }, fmt(r.tps, 1), el('span', { class: 'sr' }, ` tok/s, ${r.verdict}`))));
+ });
+ wrap.appendChild(list);
+ if (!rows.length) wrap.appendChild(el('p', { class: 'empty' }, 'No runs match these filters.'));
+ return wrap;
+}
+
+// Struggle strip: test-2 runs by compiler errors per 1,000 lines (log), one lane per verdict.
+export function struggleStrip(rows, width) {
+ const lanes = ['pass', 'partial', 'fail'].filter((v) => rows.some((r) => r.verdict === v));
+ for (const r of rows) if (!lanes.includes(r.verdict)) lanes.push(r.verdict);
+ const W = Math.max(320, width || 720), left = 78, right = 16, laneH = 58, top = 34, H = top + lanes.length * laneH + 34;
+ const vals = rows.map((r) => Math.max(0.3, r.struggle.errors_per_kloc));
+ const scale = logScale(vals.map((v) => (v <= 0 ? 0.3 : v)), 1.3);
+ const x = (v) => left + scale.pos(Math.max(0.3, v)) * (W - left - right);
+ const root = svg('svg', { class: 'strip', viewBox: `0 0 ${W} ${H}`, width: W, height: H, role: 'img', 'aria-label': `Compiler errors per thousand lines for ${rows.length} test-2 runs, by verdict` });
+ for (const t of logTicks(scale)) {
+ root.appendChild(svg('line', { x1: x(t), x2: x(t), y1: top - 6, y2: H - 30, class: 'grid' }));
+ root.appendChild(svg('text', { x: x(t), y: H - 12, class: 'axis', 'text-anchor': 'middle' }, fmt(t, 0)));
+ }
+ root.appendChild(svg('text', { x: W - right, y: 12, class: 'axis dim', 'text-anchor': 'end' }, 'compiler errors per 1,000 lines →'));
+ lanes.forEach((lane, li) => {
+ const cy = top + li * laneH + laneH / 2;
+ root.appendChild(svg('line', { x1: left, x2: W - right, y1: cy, y2: cy, class: 'lane' }));
+ root.appendChild(svg('text', { x: left - 10, y: cy + 4, class: `axis v-${lane}`, 'text-anchor': 'end' }, `${VERDICT_GLYPH[lane] || '◌'} ${lane}`));
+ // simple beeswarm: sort by x, push overlapping dots up/down
+ const pts = rows.filter((r) => r.verdict === lane).map((r) => ({ r, x: x(r.struggle.errors_per_kloc), y: cy })).sort((a, b) => a.x - b.x);
+ const placed = [];
+ for (const p of pts) {
+ let k = 0;
+ for (;;) {
+ const dy = (k % 2 ? 1 : -1) * Math.ceil(k / 2) * 9;
+ if (!placed.some((q) => Math.abs(q.x - p.x) < 9 && Math.abs(q.y - (cy + dy)) < 9) || k > 10) { p.y = cy + dy; break; }
+ k++;
+ }
+ placed.push(p);
+ const g = svg('g', { class: 'dot-g', tabindex: 0 });
+ g.appendChild(svg('title', {}, `${p.r.modelLabel} · ${fmt(p.r.struggle.errors_per_kloc, 1)} errors/kloc · ${fmt(p.r.struggle.failed_compiles, 0)} of ${fmt(p.r.struggle.compiles, 0)} builds failed · ${fmt(p.r.struggle.loc, 0)} lines · ${lane}`));
+ g.appendChild(svg('circle', { cx: p.x, cy: p.y, r: 4.5, class: `dot v-${lane}` }));
+ root.appendChild(g);
+ }
+ });
+ return root;
+}
+
+// Dumbbell for the A/B speed probes: decode tok/s per engine, same model on one line. Colours come per engine value.
+export function abDumbbell(group, max, colors) {
+ const W = 100;
+ const wrap = el('div', { class: 'ab-row' });
+ const ok = group.rows.filter((r) => r.decode != null);
+ const track = el('div', { class: 'ab-track' });
+ if (ok.length >= 2) {
+ const xs = ok.map((r) => (r.decode / (max || 1)) * W);
+ const line = el('span', { class: 'ab-line' });
+ line.style.left = `${Math.min(...xs)}%`; line.style.width = `${Math.max(...xs) - Math.min(...xs)}%`;
+ track.appendChild(line);
+ }
+ ok.forEach((r) => {
+ const dot = el('span', { class: 'ab-dot', style: { '--c': (colors && colors.get(r.engine)) || OTHER_COLOR }, title: `${group.label} · ${r.engine} · ${r.variant} · decode ${fmt(r.decode, 1)} tok/s${r.quote != null ? ` · quote ${fmt(r.quote, 1)}` : ''}${r.prefill != null ? ` · prefill ${fmt(r.prefill, 0)}` : ''}${r.vram != null ? ` · ${fmt(r.vram, 0)} MiB` : ''}`, tabindex: 0 });
+ dot.style.left = `${(r.decode / (max || 1)) * W}%`;
+ track.appendChild(dot);
+ });
+ wrap.append(el('span', { class: 'lbl' }, el('b', {}, group.short), group.gain ? el('small', { class: 'gain' }, ` ×${fmt(group.gain, 2)}`) : null), track,
+ el('span', { class: 'num' }, group.best != null ? fmt(group.best, 1) : 'failed'));
+ return wrap;
+}
+
+// Petal score: n arcs of 0..pointMax points around a ring, with the total in the middle.
+export function petalScore(card) {
+ const pts = card.points.length ? card.points : [];
+ const pmax = card.pointMax > 0 ? card.pointMax : 1;
+ const n = pts.length || 5, R = 26, r0 = 12, cx = 32, cy = 32;
+ const root = svg('svg', { class: 'petals', viewBox: '0 0 64 64', width: 64, height: 64, role: 'img', 'aria-label': `Score ${fmt(card.total)} of ${fmt(card.max)}${pts.length ? ': ' + pts.map((p) => `${p.name} ${fmt(p.value)}`).join(', ') : ''}` });
+ const gap = 0.07;
+ pts.forEach((p, i) => {
+ const a0 = (i / n) * Math.PI * 2 - Math.PI / 2 + gap, a1 = ((i + 1) / n) * Math.PI * 2 - Math.PI / 2 - gap;
+ const frac = Math.max(0, Math.min(1, (p.value == null ? 0 : p.value) / pmax));
+ const rr = r0 + (R - r0) * frac;
+ root.appendChild(svg('path', { d: arcPath(cx, cy, r0, R, a0, a1), class: 'petal-bg' }));
+ if (frac > 0) root.appendChild(svg('path', { d: arcPath(cx, cy, r0, rr, a0, a1), class: `petal lvl-${frac >= 1 ? 2 : 1}` }));
+ });
+ root.appendChild(svg('text', { x: cx, y: cy + 4, class: 'petal-total', 'text-anchor': 'middle' }, fmt(card.total)));
+ return root;
+}
+function arcPath(cx, cy, r0, r1, a0, a1) {
+ const p = (r, a) => `${(cx + r * Math.cos(a)).toFixed(2)} ${(cy + r * Math.sin(a)).toFixed(2)}`;
+ const large = a1 - a0 > Math.PI ? 1 : 0;
+ return `M ${p(r0, a0)} L ${p(r1, a0)} A ${r1} ${r1} 0 ${large} 1 ${p(r1, a1)} L ${p(r0, a1)} A ${r0} ${r0} 0 ${large} 0 ${p(r0, a0)} Z`;
+}
+
+// Pips: n of m filled squares (facts found, rubric points).
+export function pips(got, of, cls = '') {
+ const m = of != null ? of : Math.max(got || 0, 1);
+ const wrap = el('span', { class: `pips ${cls}`, role: 'img', 'aria-label': `${fmt(got, 0)} of ${fmt(m, 0)}` });
+ for (let i = 0; i < Math.min(m, 40); i++) wrap.appendChild(el('i', { class: got != null && i < got ? 'on' : '' }));
+ return wrap;
+}
+
+// Before/after bars for a finding metric. Fractional values keep one decimal.
+export function beforeAfter(m) {
+ const row = el('div', { class: 'ba' });
+ const bars = el('div', { class: 'ba-bars' });
+ const b = el('span', { class: 'ba-bar before' }); b.style.width = `${m.beforePct == null ? 0 : m.beforePct}%`;
+ const a = el('span', { class: 'ba-bar after' }); a.style.width = `${m.afterPct == null ? 0 : m.afterPct}%`;
+ bars.append(el('span', { class: 'ba-track' }, b), el('span', { class: 'ba-track' }, a));
+ row.append(el('span', { class: 'ba-label' }, m.label), bars,
+ el('span', { class: 'ba-num' }, m.before == null ? el('small', {}, 'new ') : el('small', {}, `${fmt(m.before, 1)} → `), el('b', {}, fmt(m.after, 1)), el('small', {}, ` ${m.unit}`),
+ m.gain ? el('span', { class: 'gain' }, ` ×${fmt(m.gain, 1)}`) : null));
+ return row;
+}
+// The typographic moment: the lead metric of a finding as big numerals, before → after, with the gain.
+export function bigNumeral(m) {
+ return el('div', { class: 'big-num', role: 'img', 'aria-label': `${m.label}: ${m.before == null ? 'new' : fmt(m.before, 1)} to ${fmt(m.after, 1)} ${m.unit}${m.gain ? `, ${fmt(m.gain, 1)} times` : ''}` },
+ el('span', { class: 'lbl', 'aria-hidden': 'true' }, m.label),
+ el('span', { class: 'row', 'aria-hidden': 'true' },
+ m.before == null ? el('span', { class: 'from new' }, 'new') : el('span', { class: 'from' }, fmt(m.before, 1)),
+ el('span', { class: 'arrow' }, '→'),
+ el('span', { class: 'to' }, fmt(m.after, 1)),
+ el('span', { class: 'unit' }, m.unit),
+ m.gain ? el('span', { class: 'gainbadge' }, `×${fmt(m.gain, 1)}`) : null));
+}
+
+// Small inline run summary used in pick cards.
+export function runLine(r) {
+ const bits = [`test ${r.test}${r.flavor ? ' · ' + r.flavor : ''}`, fmt(r.tps, 1) + ' tok/s', fmtMinutes(r.minutes)];
+ if (r.checks != null) bits.push(`${ofMax(r.checks, r.checksMax)} checks`);
+ if (r.tests_pass != null) bits.push(`${fmt(r.tests_pass, 0)} tests`);
+ return el('li', { class: 'runline' }, verdictChip(r.verdict), ' ', bits.join(' · '));
+}
+export { shortLabel };
diff --git a/site/assets/data.js b/site/assets/data.js
new file mode 100644
index 0000000..0b96680
--- /dev/null
+++ b/site/assets/data.js
@@ -0,0 +1,570 @@
+// Pure data derivation for the Bake-off site. No DOM here: site/tools/check_site.mjs runs these
+// functions in node against the real JSON and against mutated copies, so every function must
+// tolerate missing fields, nulls, empty lists, unknown tests and unknown model ids.
+
+// Frame paths: relative, under frames/, every segment starts with a letter/digit/_/- (so "." and ".." segments and
+// dot-files are impossible), no "//", and the lookahead rejects ".." anywhere at all.
+export const FRAME_RE = /^(?!.*\.\.)frames\/(?:[A-Za-z0-9_-][A-Za-z0-9._-]*\/)*[A-Za-z0-9_-][A-Za-z0-9._-]*\.webp$/;
+export const REPO_PREFIX = 'https://github.com/alexderz/agentic-model-testing';
+export const OTHER_FAMILIES = new Set(['other', 'unknown', '']);
+export const OTHER_COLOR = '#8a94a8'; // neutral silver for Other/Unknown; never handed to a real family
+// Jewel hues validated on the page's #0c1222 background; families past these get generated hues (colorSeries).
+export const JEWELS = ['#12a195', '#c08f0a', '#5283fe', '#df4b9d', '#06a84e', '#a167f1', '#ec4f27', '#0f99c9'];
+export const ENGINE_BASE = ['#a98bff', '#2ec4b6', '#f2c14e', '#ff6bb5', '#6c8dff', '#06a84e', '#ec4f27', '#0f99c9'];
+
+export const arr = (x) => (Array.isArray(x) ? x : []);
+export const obj = (x) => (x && typeof x === 'object' && !Array.isArray(x) ? x : {});
+export const str = (x) => (x == null ? '' : String(x));
+export function num(x) {
+ if (typeof x === 'number') return Number.isFinite(x) ? x : null;
+ if (typeof x === 'string' && x.trim() !== '' && Number.isFinite(+x)) return +x;
+ return null;
+}
+export const isFrameUrl = (s) => typeof s === 'string' && FRAME_RE.test(s);
+// Exactly the repository, or the repository followed by "/", "#" or "?". Nothing with "..", whitespace or quotes.
+export function isRepoUrl(s) {
+ if (typeof s !== 'string' || !s.startsWith(REPO_PREFIX)) return false;
+ if (/[\s<>"'\\]/.test(s) || s.includes('..')) return false;
+ const next = s.charAt(REPO_PREFIX.length);
+ return next === '' || next === '/' || next === '#' || next === '?';
+}
+
+// digits = null picks one decimal below 10 and none above; pass a number to force it.
+export function fmt(n, digits = null) {
+ const v = num(n);
+ if (v == null) return '–';
+ const d = digits != null ? digits : Math.abs(v) < 10 ? 1 : 0;
+ return v.toLocaleString('en-US', { maximumFractionDigits: d, minimumFractionDigits: 0 });
+}
+export function fmtMinutes(m) {
+ const v = num(m);
+ if (v == null) return '–';
+ if (v < 60) return `${fmt(v, 0)} min`;
+ const h = Math.floor(v / 60), r = Math.round(v - h * 60);
+ return r ? `${h} h ${r} min` : `${h} h`;
+}
+export function fmtDate(s) {
+ const t = str(s).trim();
+ const m = t.match(/^(\d{4})-(\d{2})-(\d{2})/);
+ if (!m) return t;
+ const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+ const mi = +m[2] - 1;
+ return `${months[mi] || m[2]} ${+m[3]}, ${m[1]}`;
+}
+export const shortLabel = (label) => str(label).split(' · ')[0].trim();
+export const frameMs = (url) => { const m = str(url).match(/(\d+)\.webp$/); return m ? +m[1] : null; };
+// Deterministic 0..1 from a string (FNV-1a); used to scatter decorative marks without Math.random.
+export function hash01(s) {
+ let h = 0x811c9dc5;
+ for (const ch of str(s)) { h ^= ch.charCodeAt(0); h = Math.imul(h, 0x01000193) >>> 0; }
+ return (h % 100000) / 100000;
+}
+
+// ------------------------------------------------------------------ colours
+function hexHue(hex) {
+ const m = str(hex).match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i);
+ if (!m) return 0;
+ const [r, g, b] = [1, 2, 3].map((i) => parseInt(m[i], 16) / 255);
+ const max = Math.max(r, g, b), min = Math.min(r, g, b), d = max - min;
+ if (!d) return 0;
+ let h = max === r ? ((g - b) / d) % 6 : max === g ? (b - r) / d + 2 : (r - g) / d + 4;
+ h *= 60; return h < 0 ? h + 360 : h;
+}
+// n distinct colours: the base list first, then hues dropped into the widest gap on the wheel, so adding an item
+// never recolours the ones before it. Works for any n; distinctness degrades gracefully.
+export function colorSeries(n, base = JEWELS) {
+ const out = base.slice(0, Math.max(0, n));
+ const hues = out.map(hexHue);
+ let k = 0;
+ while (out.length < n) {
+ const sorted = [...hues].sort((a, b) => a - b);
+ let best = -1, h = 30;
+ for (let i = 0; i < sorted.length; i++) {
+ const a = sorted[i], b = i + 1 < sorted.length ? sorted[i + 1] : sorted[0] + 360;
+ if (b - a > best) { best = b - a; h = ((a + b) / 2) % 360; }
+ }
+ hues.push(h);
+ out.push(`hsl(${Math.round(h)} ${k % 2 ? 60 : 72}% ${k % 2 ? 50 : 61}%)`);
+ k++;
+ }
+ return out;
+}
+
+// ---------------------------------------------------------------- normalize
+export function normalize(raw) {
+ const d = obj(raw);
+ const picks = obj(d.picks);
+ const models = {};
+ for (const [k, v] of Object.entries(obj(d.models))) {
+ const m = obj(v);
+ models[k] = {
+ id: str(m.id || k), family: str(m.family) || 'Other', label: str(m.label) || str(m.id || k),
+ base: str(m.base), arch: str(m.arch), engine: str(m.engine), quant: str(m.quant), kind: str(m.kind) || 'stock',
+ uncensored: m.uncensored === true, note: str(m.note),
+ vision: m.vision ? { label: str(obj(m.vision).label), status: str(obj(m.vision).status) } : null,
+ };
+ }
+ const runs = arr(d.runs).filter((r) => r && typeof r === 'object').map((r) => ({
+ case: str(r.case), model: str(r.model), test: testKey(r.test), agent: str(r.agent),
+ checks: num(r.checks), tests_pass: num(r.tests_pass), tests_fail: num(r.tests_fail), subcmds: num(r.subcmds),
+ tps: num(r.tps), minutes: num(r.minutes), compactions: num(r.compactions), ctx: num(r.ctx), kv: str(r.kv),
+ verdict: str(r.verdict).toLowerCase() || 'unknown', finished: str(r.finished),
+ flavor: str(r.flavor) || (/^wt-/.test(str(r.case)) ? '2T' : ''), // wished field; today read from the case prefix
+ struggle: r.struggle ? {
+ compiles: num(obj(r.struggle).compiles), failed_compiles: num(obj(r.struggle).failed_compiles),
+ rust_errors: num(obj(r.struggle).rust_errors), loc: num(obj(r.struggle).loc), errors_per_kloc: num(obj(r.struggle).errors_per_kloc),
+ } : null,
+ }));
+ const test3 = arr(d.test3).filter((r) => r && typeof r === 'object').map((r) => ({
+ case: str(r.case), model: str(r.model), flavor: str(r.flavor) || '?', mcp_facts: parseFacts(r.mcp_facts), api_facts: parseFacts(r.api_facts),
+ judgement_right: r.judgement_right === true ? true : r.judgement_right === false ? false : null,
+ rubric: num(r.rubric), note: str(r.note), tps: num(r.tps), minutes: num(r.minutes), finished: str(r.finished),
+ }));
+ const ab = arr(d.ab).filter((r) => r && typeof r === 'object').map((r) => ({
+ model: str(r.model), engine: str(r.engine) || '?', variant: str(r.variant) || 'same flags',
+ decode: num(r.decode), quote: num(r.quote), prefill: num(r.prefill), vram: num(r.vram), error: str(r.error),
+ }));
+ const oneshots = {};
+ for (const [k, v] of Object.entries(obj(d.oneshots))) {
+ oneshots[k] = arr(v).filter((r) => r && typeof r === 'object').map((r) => {
+ const pts = obj(r.points);
+ const points = Object.keys(pts).sort().map((p) => ({ key: str(p), value: num(pts[p]) }));
+ let total = num(r.total);
+ if (total == null && points.length) total = points.reduce((s, p) => s + (p.value || 0), 0);
+ return {
+ case: str(r.case), entry: str(r.entry), test: testKey(r.test), finish: str(r.finish), tokens: num(r.tokens),
+ wall_s: num(r.wall_s), tok_s: num(r.tok_s), points, total,
+ note: str(r.note), frames: arr(r.frames).filter(isFrameUrl).map((f) => ({ url: f, ms: frameMs(f) })),
+ };
+ });
+ }
+ const tests = arr(d.tests).filter((t) => t && typeof t === 'object').map((t) => ({
+ id: str(t.id) || `t${str(t.number)}`, number: str(t.number), name: str(t.name) || `Test ${str(t.number)}`,
+ kind: str(t.kind), what: str(t.what), graded: str(t.graded), points: arr(t.points).map(str),
+ // optional scale overrides; otherwise the page uses the largest value seen in the data
+ max_checks: pos(num(t.max_checks)), max_point: pos(num(t.max_point)), max_rubric: pos(num(t.max_rubric)),
+ }));
+ return {
+ schema: str(d.schema), generated: str(d.generated), built: str(d.built), title: str(d.title) || 'The Bake-off', tagline: str(d.tagline),
+ links: Object.fromEntries(Object.entries(obj(d.links)).filter(([, v]) => isRepoUrl(v))),
+ hardware: Object.fromEntries(Object.entries(obj(d.hardware)).map(([k, v]) => [k, str(v)]).filter(([, v]) => v)),
+ caveats: arr(d.caveats).map(str).filter(Boolean),
+ tests, findings: arr(d.findings).filter((f) => f && typeof f === 'object').map((f) => ({
+ date: str(f.date), title: str(f.title) || 'Finding', kind: str(f.kind) || 'finding', summary: str(f.summary), settings: str(f.settings),
+ metrics: arr(f.metrics).filter((m) => m && typeof m === 'object').map((m) => ({ label: str(m.label), before: num(m.before), after: num(m.after), unit: str(m.unit) })),
+ quality: str(f.quality), caveat: str(f.caveat),
+ })),
+ picks: {
+ overall: arr(picks.overall).filter((p) => p && typeof p === 'object').map(normPick),
+ uncensored: arr(picks.uncensored).filter((p) => p && typeof p === 'object').map(normPick),
+ families: arr(picks.families).filter((p) => p && typeof p === 'object').map((p) => ({
+ family: str(p.family) || 'Other', smartest: str(p.smartest), fastest: str(p.fastest),
+ unc_smartest: str(p.unc_smartest), unc_fastest: str(p.unc_fastest), note: str(p.note),
+ })),
+ },
+ timeline: arr(d.timeline).filter((t) => t && typeof t === 'object').map((t) => ({
+ date: str(t.date), era: str(t.era), title: str(t.title) || str(t.era) || 'Step', what: str(t.what), why: str(t.why),
+ })).sort((a, b) => a.date.localeCompare(b.date)),
+ events: arr(d.events).filter((e) => e && typeof e === 'object').map((e) => ({ when: str(e.when), kind: str(e.kind) || 'note', text: str(e.text) }))
+ .filter((e) => e.text).sort((a, b) => b.when.localeCompare(a.when)),
+ models, runs, test3, ab, oneshots, counts: obj(d.counts),
+ };
+}
+const pos = (v) => (v != null && v > 0 ? v : null);
+function normPick(p) {
+ return { role: str(p.role) || 'Pick', model: str(p.model), verdict: str(p.verdict), tradeoff: str(p.tradeoff), cases: arr(p.cases).map(str) };
+}
+export function testKey(t) {
+ if (t == null || t === '') return '?';
+ return str(t).trim();
+}
+export function parseFacts(s) {
+ const t = str(s).trim();
+ const m = t.match(/^(\d+)\s*\/\s*(\d+)$/);
+ if (m) return { got: +m[1], of: +m[2], text: t };
+ const n = num(t);
+ return { got: n, of: null, text: t || '–' };
+}
+
+// ------------------------------------------------------------------ lookups
+export function modelOf(data, id) {
+ const m = obj(data.models)[id];
+ if (m) return m;
+ return { id: str(id) || '?', family: 'Unknown', label: str(id) || 'unknown model', base: '', arch: '', engine: '', quant: '', kind: 'unknown', uncensored: false, note: '', vision: null, missing: true };
+}
+export function testOf(data, key) {
+ const k = testKey(key);
+ return arr(data.tests).find((t) => t.number === k || t.id === k || t.id === `t${k}`) || { id: `t${k}`, number: k, name: `Test ${k}`, kind: '', what: '', graded: '', points: [], max_checks: null, max_point: null, max_rubric: null };
+}
+// A run belongs to its flavor when it has one (2T), else to its test number. Every run has exactly one.
+export const effectiveTest = (r) => r.flavor || r.test;
+
+// Family order: the curated picks order first (so colours stay put as models arrive), then the rest alphabetically.
+export function familyOrder(data) {
+ const seen = new Set(), out = [];
+ const push = (f) => { const k = str(f) || 'Other'; if (!seen.has(k)) { seen.add(k); out.push(k); } };
+ for (const p of arr(data.picks && data.picks.families)) push(p.family);
+ const rest = [...new Set(Object.values(obj(data.models)).map((m) => m.family))].filter((f) => !seen.has(f)).sort();
+ for (const f of rest) push(f);
+ for (const r of arr(data.runs)) push(modelOf(data, r.model).family);
+ return out;
+}
+// Every real family gets its own colour; Other/Unknown share the neutral silver.
+export function familyColors(data) {
+ const order = familyOrder(data);
+ const real = order.filter((f) => !OTHER_FAMILIES.has(f.toLowerCase()));
+ const cols = colorSeries(real.length);
+ const map = new Map(real.map((f, i) => [f, cols[i]]));
+ for (const f of order) if (!map.has(f)) map.set(f, OTHER_COLOR);
+ return map;
+}
+export const colorOf = (colors, family) => (colors && colors.has(family) ? colors.get(family) : OTHER_COLOR);
+
+// ------------------------------------------------------------------- scales
+// "n of m" scales come from the data: an optional tests[].max_* field, else the largest value seen.
+export function checksMax(data, test) {
+ const t = testOf(data, test);
+ if (t.max_checks != null) return t.max_checks;
+ const k = testKey(test);
+ const seen = arr(data.runs).filter((r) => r.test === k || r.flavor === k).map((r) => r.checks).filter((v) => v != null);
+ return seen.length ? Math.max(...seen) : null;
+}
+export function pointMax(data, test) {
+ const t = testOf(data, test);
+ if (t.max_point != null) return t.max_point;
+ const k = testKey(test);
+ const rows = Object.values(obj(data.oneshots)).flat();
+ const of = (list) => list.flatMap((r) => r.points.map((p) => p.value)).filter((v) => v != null && v > 0);
+ const own = of(rows.filter((r) => r.test === k)), any = of(rows);
+ return own.length ? Math.max(...own) : any.length ? Math.max(...any) : 1;
+}
+export function rubricMax(data) {
+ const t = testOf(data, '3');
+ if (t.max_rubric != null) return t.max_rubric;
+ const seen = arr(data.test3).map((r) => r.rubric).filter((v) => v != null && v > 0);
+ return seen.length ? Math.max(...seen) : 1;
+}
+
+// ------------------------------------------------------------------ summary
+export function summary(data) {
+ const runs = arr(data.runs);
+ const models = Object.keys(obj(data.models));
+ const oneshotRows = Object.values(obj(data.oneshots)).flat();
+ const frames = oneshotRows.reduce((s, r) => s + r.frames.length, 0);
+ const passes = runs.filter((r) => r.verdict === 'pass').length;
+ const tps = runs.map((r) => r.tps).filter((v) => v != null);
+ const dates = [...runs.map((r) => r.finished), ...arr(data.test3).map((r) => r.finished)].filter(Boolean).sort();
+ const findingDates = arr(data.findings).map((f) => f.date).filter(Boolean).sort();
+ const families = familyOrder(data).filter((f) => !OTHER_FAMILIES.has(f.toLowerCase()));
+ const minutes = runs.reduce((s, r) => s + (r.minutes || 0), 0) + arr(data.test3).reduce((s, r) => s + (r.minutes || 0), 0);
+ return {
+ models: models.length, families: families.length, runs: runs.length, passes, test3: arr(data.test3).length,
+ oneshots: oneshotRows.length, frames, uncensored: models.filter((m) => data.models[m].uncensored).length,
+ fastest: tps.length ? Math.max(...tps) : null, slowest: tps.length ? Math.min(...tps) : null,
+ first: dates[0] || '', last: dates[dates.length - 1] || '', newestFinding: findingDates[findingDates.length - 1] || '', agentHours: minutes / 60,
+ tests: new Set([...runs.map(effectiveTest), ...arr(data.test3).length ? ['3'] : [], ...oneshotRows.map((r) => r.test)]).size,
+ };
+}
+// Each run is counted once, under its flavor when it has one; test 3 rows and one-shot replies under their test.
+export function testCount(data, number) {
+ const k = testKey(number);
+ let n = arr(data.runs).filter((r) => effectiveTest(r) === k).length;
+ if (k === '3') n += arr(data.test3).length;
+ for (const rows of Object.values(obj(data.oneshots))) n += rows.filter((r) => r.test === k).length;
+ return n;
+}
+
+// --------------------------------------------------------------------- hero
+export function heroPlanets(data) {
+ const colors = familyColors(data);
+ const byModel = new Map();
+ const touch = (id) => { if (!byModel.has(id)) byModel.set(id, { runs: 0, tps: [], passed2: false, test3: 0, oneshots: 0 }); return byModel.get(id); };
+ for (const r of arr(data.runs)) { const m = touch(r.model); m.runs++; if (r.tps != null) m.tps.push(r.tps); if (r.test === '2' && r.verdict === 'pass') m.passed2 = true; }
+ for (const r of arr(data.test3)) { const m = touch(r.model); m.test3++; if (r.tps != null) m.tps.push(r.tps); }
+ for (const rows of Object.values(obj(data.oneshots))) for (const r of rows) { const m = touch(r.entry); m.oneshots++; if (r.tok_s != null) m.tps.push(r.tok_s); }
+ const ids = new Set([...Object.keys(obj(data.models)), ...byModel.keys()]);
+ const planets = [];
+ for (const id of ids) {
+ const m = modelOf(data, id), s = byModel.get(id) || { runs: 0, tps: [], passed2: false, test3: 0, oneshots: 0 };
+ const appearances = s.runs + s.test3 + s.oneshots;
+ planets.push({
+ id, label: m.label, short: shortLabel(m.label), family: m.family, color: colorOf(colors, m.family), uncensored: m.uncensored,
+ appearances, runs: s.runs, bestTps: s.tps.length ? Math.max(...s.tps) : null, passed2: s.passed2,
+ });
+ }
+ planets.sort((a, b) => (b.bestTps || 0) - (a.bestTps || 0) || a.id.localeCompare(b.id));
+ return planets;
+}
+// Orbit layout: one band per family, planets spread within the band, period from speed.
+export function heroLayout(planets, { rMin = 70, rMax = 300 } = {}) {
+ const fams = [...new Set(planets.map((p) => p.family))];
+ fams.sort((a, b) => planets.filter((p) => p.family === b).length - planets.filter((p) => p.family === a).length || a.localeCompare(b));
+ const bands = fams.length || 1, bandW = (rMax - rMin) / bands;
+ const out = [];
+ fams.forEach((f, bi) => {
+ const list = planets.filter((p) => p.family === f);
+ const r0 = rMin + bi * bandW;
+ list.forEach((p, i) => {
+ const r = r0 + bandW * ((i + 0.5) / list.length);
+ const tps = p.bestTps == null ? 2 : Math.max(1, p.bestTps);
+ const period = 120 / Math.sqrt(tps); // seconds per orbit: 3 tok/s ≈ 69 s, 170 tok/s ≈ 9 s
+ const size = 2.2 + Math.min(6, Math.sqrt(p.appearances) * 1.4);
+ const angle0 = ((i * 137.508) + bi * 61) % 360; // golden-angle spread
+ out.push({ ...p, r, period, size, angle0, band: bi, bandLabel: f });
+ });
+ });
+ return { planets: out, bands: fams.map((f, i) => ({ family: f, color: (planets.find((p) => p.family === f) || {}).color || OTHER_COLOR, r0: rMin + i * bandW, r1: rMin + (i + 1) * bandW })) };
+}
+
+// --------------------------------------------------------------------- runs
+export function runFilterOptions(data) {
+ const runs = arr(data.runs);
+ const tests = [...new Set(runs.flatMap((r) => (r.flavor ? [r.test, r.flavor] : [r.test])))].sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
+ const families = familyOrder(data).filter((f) => runs.some((r) => modelOf(data, r.model).family === f));
+ const verdicts = [...new Set(runs.map((r) => r.verdict))].sort();
+ const agents = [...new Set(runs.map((r) => r.agent).filter(Boolean))].sort();
+ return { tests, families, verdicts, agents };
+}
+export function runRows(data, filters = {}, sort = 'tps') {
+ const colors = familyColors(data);
+ const cmax = new Map();
+ let rows = arr(data.runs).map((r) => {
+ const m = modelOf(data, r.model);
+ if (!cmax.has(r.test)) cmax.set(r.test, checksMax(data, r.test));
+ return { ...r, modelLabel: m.label, short: shortLabel(m.label), family: m.family, color: colorOf(colors, m.family), uncensored: m.uncensored, engine: m.engine, quant: m.quant, checksMax: cmax.get(r.test) };
+ });
+ // the test filter keeps a flavor inside its parent test ("2" shows 2 and 2T; "2T" shows only 2T)
+ if (filters.test && filters.test !== 'all') rows = rows.filter((r) => r.test === filters.test || r.flavor === filters.test);
+ if (filters.family && filters.family !== 'all') rows = rows.filter((r) => r.family === filters.family);
+ if (filters.verdict && filters.verdict !== 'all') rows = rows.filter((r) => r.verdict === filters.verdict);
+ if (filters.uncensored === 'yes') rows = rows.filter((r) => r.uncensored);
+ if (filters.uncensored === 'no') rows = rows.filter((r) => !r.uncensored);
+ if (filters.q) { const q = filters.q.toLowerCase(); rows = rows.filter((r) => (r.modelLabel + ' ' + r.case + ' ' + r.engine).toLowerCase().includes(q)); }
+ const cmp = {
+ tps: (a, b) => (b.tps || 0) - (a.tps || 0),
+ minutes: (a, b) => (a.minutes || Infinity) - (b.minutes || Infinity),
+ tests: (a, b) => (b.tests_pass || 0) - (a.tests_pass || 0),
+ verdict: (a, b) => verdictRank(a.verdict) - verdictRank(b.verdict) || (b.checks || 0) - (a.checks || 0) || (b.tps || 0) - (a.tps || 0),
+ finished: (a, b) => b.finished.localeCompare(a.finished),
+ clean: (a, b) => epk(a) - epk(b),
+ }[sort] || ((a, b) => (b.tps || 0) - (a.tps || 0));
+ return rows.sort(cmp);
+}
+const epk = (r) => (r.struggle && r.struggle.errors_per_kloc != null ? r.struggle.errors_per_kloc : Infinity);
+export const verdictRank = (v) => ({ pass: 0, partial: 1, fail: 2 }[v] ?? 3);
+export function logScale(values, pad = 1.15) {
+ const vs = values.filter((v) => v != null && v > 0);
+ if (!vs.length) return { min: 1, max: 10, pos: () => 0 };
+ const min = Math.min(...vs) / pad, max = Math.max(...vs) * pad;
+ const lmin = Math.log(min), lmax = Math.log(max) || lmin + 1;
+ return { min, max, pos: (v) => (v == null || v <= 0 ? 0 : Math.max(0, Math.min(1, (Math.log(v) - lmin) / (lmax - lmin || 1)))) };
+}
+export function logTicks(scale) {
+ const out = [];
+ for (const base of [1, 10, 100, 1000, 10000]) for (const k of [1, 2, 5]) { const v = base * k; if (v >= scale.min && v <= scale.max) out.push(v); }
+ return out;
+}
+
+// ----------------------------------------------------------------- struggle
+export function struggleRows(data) {
+ return runRows(data, { test: '2' }, 'clean').filter((r) => r.struggle && r.struggle.errors_per_kloc != null && r.struggle.errors_per_kloc >= 0);
+}
+export function struggleSummary(rows) {
+ const by = {};
+ for (const r of rows) { (by[r.verdict] ||= []).push(r.struggle.errors_per_kloc); }
+ return Object.fromEntries(Object.entries(by).map(([k, vs]) => { vs.sort((a, b) => a - b); return [k, { n: vs.length, median: vs[Math.floor(vs.length / 2)] }]; }));
+}
+// The cleanest run is a passing run that actually built something: lines written and at least one compile.
+// Ties: fewer failed builds, then more lines.
+export function cleanestRun(rows) {
+ const ok = rows.filter((r) => r.verdict === 'pass' && r.struggle && (r.struggle.loc || 0) > 0 && (r.struggle.compiles || 0) >= 1 && r.struggle.errors_per_kloc != null);
+ ok.sort((a, b) => epk(a) - epk(b) || (a.struggle.failed_compiles || 0) - (b.struggle.failed_compiles || 0) || (b.struggle.loc || 0) - (a.struggle.loc || 0));
+ return ok[0] || null;
+}
+
+// ------------------------------------------------------------------- test 3
+export function test3Groups(data) {
+ const colors = familyColors(data);
+ const groups = new Map();
+ for (const r of arr(data.test3)) {
+ const m = modelOf(data, r.model);
+ if (!groups.has(r.model)) groups.set(r.model, { model: r.model, label: m.label, short: shortLabel(m.label), family: m.family, color: colorOf(colors, m.family), uncensored: m.uncensored, rows: [], best: 0 });
+ const g = groups.get(r.model); g.rows.push(r); g.best = Math.max(g.best, r.rubric || 0);
+ }
+ const out = [...groups.values()];
+ for (const g of out) g.rows.sort((a, b) => a.flavor.localeCompare(b.flavor));
+ out.sort((a, b) => b.best - a.best || b.rows.reduce((s, r) => s + (r.rubric || 0), 0) - a.rows.reduce((s, r) => s + (r.rubric || 0), 0) || a.label.localeCompare(b.label));
+ const flavors = [...new Set(arr(data.test3).map((r) => r.flavor))].sort();
+ return { groups: out, flavors, rubricMax: rubricMax(data) };
+}
+
+// ---------------------------------------------------------------------- A/B
+// One colour per distinct engine value, in numeric-aware order, so a third engine simply gets a third colour.
+export function abGroups(data) {
+ const groups = new Map();
+ for (const r of arr(data.ab)) {
+ const m = modelOf(data, r.model);
+ if (!groups.has(r.model)) groups.set(r.model, { model: r.model, label: m.label, short: shortLabel(m.label), rows: [] });
+ groups.get(r.model).rows.push(r);
+ }
+ const engines = [...new Set(arr(data.ab).map((r) => r.engine))].sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
+ const cols = colorSeries(engines.length, ENGINE_BASE);
+ const colors = new Map(engines.map((e, i) => [e, cols[i]]));
+ const out = [...groups.values()];
+ for (const g of out) {
+ g.rows.sort((a, b) => a.engine.localeCompare(b.engine, undefined, { numeric: true }) || a.variant.localeCompare(b.variant));
+ const ok = g.rows.filter((r) => r.decode != null);
+ g.best = ok.length ? Math.max(...ok.map((r) => r.decode)) : null;
+ g.allFailed = ok.length === 0;
+ const base = g.rows.filter((r) => r.variant === 'same flags' && r.decode != null).sort((a, b) => a.engine.localeCompare(b.engine, undefined, { numeric: true }));
+ g.gain = base.length >= 2 ? base[base.length - 1].decode / base[0].decode : null;
+ }
+ out.sort((a, b) => (b.best || 0) - (a.best || 0) || a.label.localeCompare(b.label));
+ const decodes = arr(data.ab).map((r) => r.decode).filter((v) => v != null);
+ return { groups: out, engines, colors, max: decodes.length ? Math.max(...decodes) : 0 };
+}
+
+// ----------------------------------------------------------------- oneshots
+export function oneshotCards(data, { test = 'all', sort = 'score', q = '' } = {}) {
+ const colors = familyColors(data);
+ const pmax = new Map();
+ let cards = [];
+ for (const [set, rows] of Object.entries(obj(data.oneshots))) {
+ for (const r of rows) {
+ const m = modelOf(data, r.entry), t = testOf(data, r.test);
+ if (!pmax.has(r.test)) pmax.set(r.test, pointMax(data, r.test));
+ const pointNames = t.points.length ? t.points : [];
+ const pointMaxV = pmax.get(r.test);
+ const max = r.points.length * pointMaxV;
+ cards.push({
+ ...r, set, modelLabel: m.label, short: shortLabel(m.label), family: m.family, color: colorOf(colors, m.family), uncensored: m.uncensored,
+ testName: t.name, pointMax: pointMaxV, max, full: max > 0 && r.total != null && r.total >= max,
+ points: r.points.map((p, i) => ({ ...p, name: pointNames[i] || p.key })),
+ alt: `${t.name || `Test ${r.test}`} by ${shortLabel(m.label)}, test ${r.test}`,
+ });
+ }
+ }
+ if (test !== 'all') cards = cards.filter((c) => c.test === test || c.set === test);
+ if (q) { const s = q.toLowerCase(); cards = cards.filter((c) => (c.modelLabel + ' ' + c.case + ' ' + c.note).toLowerCase().includes(s)); }
+ const cmp = {
+ score: (a, b) => (b.total || 0) - (a.total || 0) || (b.frames.length - a.frames.length) || (b.tok_s || 0) - (a.tok_s || 0),
+ speed: (a, b) => (b.tok_s || 0) - (a.tok_s || 0),
+ model: (a, b) => a.modelLabel.localeCompare(b.modelLabel) || (b.total || 0) - (a.total || 0),
+ newest: (a, b) => b.case.localeCompare(a.case),
+ }[sort] || ((a, b) => (b.total || 0) - (a.total || 0));
+ return cards.sort(cmp);
+}
+export function oneshotSets(data) {
+ return Object.entries(obj(data.oneshots)).map(([set, rows]) => {
+ const t = rows.length ? testOf(data, rows[0].test) : null;
+ const pm = rows.length ? pointMax(data, rows[0].test) : 1;
+ const graded = rows.filter((r) => r.total != null);
+ return { set, test: rows.length ? rows[0].test : '?', name: t ? t.name : set, n: rows.length, withFrames: rows.filter((r) => r.frames.length).length,
+ pointMax: pm, full: graded.filter((r) => r.points.length && r.total >= r.points.length * pm).length, zero: graded.filter((r) => r.total === 0).length,
+ cut: rows.filter((r) => r.finish === 'length').length, mean: graded.length ? graded.reduce((s, r) => s + r.total, 0) / graded.length : null };
+ });
+}
+
+// -------------------------------------------------------------------- picks
+export function pickCards(data) {
+ const colors = familyColors(data);
+ const resolve = (p) => {
+ const m = modelOf(data, p.model);
+ const runs = p.cases.map((c) => arr(data.runs).find((r) => r.case === c)).filter(Boolean).map((r) => ({ ...r, checksMax: checksMax(data, r.test) }));
+ return { ...p, modelLabel: m.label, short: shortLabel(m.label), family: m.family, color: colorOf(colors, m.family), uncensored: m.uncensored, engine: m.engine, quant: m.quant, arch: m.arch, missing: !!m.missing, runs };
+ };
+ return { overall: arr(data.picks.overall).map(resolve), uncensored: arr(data.picks.uncensored).map(resolve) };
+}
+export function familyPickRows(data) {
+ const colors = familyColors(data);
+ const name = (id) => (id ? shortLabel(modelOf(data, id).label) : '');
+ return arr(data.picks.families).map((f) => ({
+ ...f, color: colorOf(colors, f.family), models: Object.values(obj(data.models)).filter((m) => m.family === f.family).length,
+ cells: [['Smartest', name(f.smartest)], ['Fastest competent', name(f.fastest)], ['Uncensored, smartest', name(f.unc_smartest)], ['Uncensored, fastest', name(f.unc_fastest)]],
+ }));
+}
+
+// ------------------------------------------------------------------ findings
+export function findingMetrics(f) {
+ return arr(f.metrics).map((m) => {
+ const max = Math.max(m.before || 0, m.after || 0) || 1;
+ return { ...m, beforePct: m.before == null ? null : (m.before / max) * 100, afterPct: m.after == null ? null : (m.after / max) * 100,
+ gain: m.before && m.after != null ? m.after / m.before : null };
+ });
+}
+export function eventKinds(data) {
+ const c = new Map();
+ for (const e of arr(data.events)) c.set(e.kind, (c.get(e.kind) || 0) + 1);
+ return [...c.entries()].sort((a, b) => b[1] - a[1]).map(([kind, n]) => ({ kind, n }));
+}
+
+// ------------------------------------------------------------------- motifs
+// Numbers behind the decorative chapter motifs. Each entry is a plain list the drawing code turns into SVG, so the
+// checker exercises them on mutated data. Everything is in 0..1 unless noted.
+export function motifs(data) {
+ const colors = familyColors(data);
+ const runs = arr(data.runs);
+ const out = {};
+ out.machine = Object.keys(obj(data.hardware)).map((k, i) => ({ key: k, side: i % 2 ? 1 : -1, pos: i }));
+ out.tests = arr(data.tests).map((t) => ({ number: t.number, kind: t.kind, n: testCount(data, t.number) }));
+ const famCounts = new Map();
+ for (const m of Object.values(obj(data.models))) famCounts.set(m.family, (famCounts.get(m.family) || 0) + 1);
+ const famTotal = [...famCounts.values()].reduce((s, n) => s + n, 0) || 1;
+ out.picks = familyOrder(data).filter((f) => famCounts.has(f)).map((f) => ({ family: f, color: colorOf(colors, f), share: famCounts.get(f) / famTotal }));
+ const scale = logScale(runs.map((r) => r.tps));
+ const stars = runs.map((r) => ({ x: scale.pos(r.tps), y: hash01(r.case + '|' + r.model), verdict: r.verdict })).filter((s) => s.x != null);
+ const links = [];
+ for (let i = 0; i < stars.length; i++) {
+ let best = -1, bd = 0.06;
+ for (let j = 0; j < stars.length; j++) { if (j === i) continue; const d = Math.hypot((stars[i].x - stars[j].x) * 1.6, stars[i].y - stars[j].y); if (d < bd) { bd = d; best = j; } }
+ if (best >= 0 && best > i) links.push([i, best]);
+ }
+ out.runs = { stars, links };
+ const epks = struggleRows(data).map((r) => ({ v: Math.log10(1 + Math.max(0, r.struggle.errors_per_kloc)), verdict: r.verdict }));
+ const emax = Math.max(0.3, ...epks.map((e) => e.v));
+ out.struggle = epks.map((e) => ({ h: e.v / emax, verdict: e.verdict }));
+ const rmax = rubricMax(data);
+ const flavors = [...new Set(arr(data.test3).map((r) => r.flavor))].sort();
+ const fcols = colorSeries(flavors.length, ['#f2c14e', '#6c8dff', '#ff6bb5', '#2ec4b6']);
+ out.test3 = arr(data.test3).map((r) => ({ level: r.rubric == null ? 0 : Math.max(0, Math.min(1, r.rubric / rmax)), color: fcols[flavors.indexOf(r.flavor)] || OTHER_COLOR, right: r.judgement_right }));
+ const ab = abGroups(data);
+ out.ab = ab.groups.filter((g) => !g.allFailed).map((g) => g.rows.filter((r) => r.decode != null).map((r) => ({ h: ab.max ? r.decode / ab.max : 0, color: ab.colors.get(r.engine) || OTHER_COLOR })));
+ out.oneshots = oneshotSets(data).map((s) => {
+ const rows = arr(obj(data.oneshots)[s.set]);
+ const max = Math.max(1, ...rows.map((r) => r.points.length * s.pointMax));
+ return { set: s.set, shape: /orrery|gear|clock/i.test(s.set) ? 'gear' : /pagoda|flower|petal|garden/i.test(s.set) ? 'flower' : 'star',
+ values: rows.map((r) => (r.total == null ? 0 : Math.max(0, Math.min(1, r.total / max)))) };
+ });
+ out.findings = arr(data.findings).flatMap((f) => findingMetrics(f).map((m) => ({ from: m.beforePct == null ? 0 : m.beforePct / 100, to: m.afterPct == null ? 0 : m.afterPct / 100, isNew: m.before == null })));
+ const tl = arr(data.timeline).filter((t) => t.date);
+ const t0 = tl.length ? Date.parse(tl[0].date) : 0, t1 = tl.length ? Date.parse(tl[tl.length - 1].date) : 1;
+ out.timeline = tl.map((t) => { const ms = Date.parse(t.date); return { x: Number.isFinite(ms) && t1 > t0 ? (ms - t0) / (t1 - t0) : 0 }; });
+ const kinds = eventKinds(data);
+ const kmax = Math.max(1, ...kinds.map((k) => k.n));
+ const kcols = colorSeries(kinds.length, ENGINE_BASE);
+ out.log = kinds.map((k, i) => ({ kind: k.kind, h: k.n / kmax, color: kcols[i] }));
+ out.caveats = arr(data.caveats).map((c, i) => ({ i, len: Math.min(1, c.length / 240) }));
+ return out;
+}
+
+// Runs every derivation once; the checker calls this on mutated data to prove nothing throws.
+export function deriveAll(raw) {
+ const data = normalize(raw);
+ const out = { summary: summary(data), colors: familyColors(data), planets: heroLayout(heroPlanets(data)), options: runFilterOptions(data) };
+ out.tests = data.tests.map((t) => ({ t, n: testCount(data, t.number) }));
+ out.scales = { checks: Object.fromEntries(out.options.tests.map((t) => [t, checksMax(data, t)])), point: Object.fromEntries(Object.values(data.oneshots).flat().map((r) => [r.test, pointMax(data, r.test)])), rubric: rubricMax(data) };
+ for (const s of ['tps', 'minutes', 'tests', 'verdict', 'finished', 'clean']) out['runs_' + s] = runRows(data, {}, s);
+ out.runsFiltered = runRows(data, { test: '2', family: out.options.families[0], verdict: 'pass', uncensored: 'yes', q: 'q' }, 'tps');
+ out.runs2T = runRows(data, { test: '2T' });
+ out.scale = logScale(out.runs_tps.map((r) => r.tps)); out.ticks = logTicks(out.scale);
+ out.struggle = struggleRows(data); out.struggleSummary = struggleSummary(out.struggle); out.cleanest = cleanestRun(out.struggle);
+ out.test3 = test3Groups(data); out.ab = abGroups(data);
+ out.oneshots = oneshotCards(data); out.oneshotSets = oneshotSets(data);
+ for (const s of ['speed', 'model', 'newest']) oneshotCards(data, { sort: s, test: '5', q: 'a' });
+ out.picks = pickCards(data); out.familyPicks = familyPickRows(data);
+ out.findings = data.findings.map(findingMetrics); out.eventKinds = eventKinds(data);
+ out.motifs = motifs(data);
+ out.fmt = [fmt(1234.5), fmt(null), fmt(2.5), fmt(13.4), fmt(13.4, 1), fmtMinutes(191), fmtMinutes(null), fmtDate('2026-10-22'), fmtDate(''), fmtDate(null)];
+ out.series = colorSeries(14);
+ return { data, out };
+}
diff --git a/site/assets/dom.js b/site/assets/dom.js
new file mode 100644
index 0000000..1b0841c
--- /dev/null
+++ b/site/assets/dom.js
@@ -0,0 +1,92 @@
+// Tiny DOM builder. Everything is createElement + textContent; attributes go through setAttribute
+// after validation. No HTML-string insertion anywhere.
+import { isFrameUrl, isRepoUrl, OTHER_COLOR } from './data.js';
+
+const SVG_NS = 'http://www.w3.org/2000/svg';
+const URL_ATTRS = new Set(['href', 'src', 'xlink:href', 'action', 'formaction', 'poster']);
+// Colours reach CSS only through the --c custom property; anything but a plain hex/hsl token is dropped.
+const COLOR_RE = /^(#[0-9a-f]{3,8}|hsl\(\d{1,3} \d{1,3}% \d{1,3}%\)|rgba?\([\d., %]+\))$/i;
+
+function setAttrs(node, attrs) {
+ for (const [k, v] of Object.entries(attrs || {})) {
+ if (v == null || v === false) continue;
+ if (k === 'class') { node.setAttribute('class', String(v)); continue; }
+ if (k === 'text') { node.textContent = String(v); continue; }
+ if (k === 'style' && typeof v === 'object') {
+ for (const [p, val] of Object.entries(v)) {
+ if (val == null) continue;
+ if (p.startsWith('--')) { if (COLOR_RE.test(String(val))) node.style.setProperty(p, String(val)); }
+ else node.style[p] = val;
+ }
+ continue;
+ }
+ if (k.startsWith('on') || k === 'style') continue; // no inline handlers or style strings
+ if (URL_ATTRS.has(k)) {
+ const s = String(v);
+ if (k === 'src' && !isFrameUrl(s)) continue;
+ if (k === 'href' && !(isRepoUrl(s) || /^#[A-Za-z0-9_-]+$/.test(s))) continue;
+ if (k !== 'src' && k !== 'href') continue;
+ }
+ node.setAttribute(k, v === true ? '' : String(v));
+ }
+ return node;
+}
+function append(node, children) {
+ for (const c of [].concat(children)) {
+ if (c == null || c === false) continue;
+ if (Array.isArray(c)) { append(node, c); continue; }
+ node.appendChild(typeof c === 'string' || typeof c === 'number' ? document.createTextNode(String(c)) : c);
+ }
+ return node;
+}
+export function el(tag, attrs, ...children) {
+ return append(setAttrs(document.createElement(tag), attrs), children);
+}
+export function svg(tag, attrs, ...children) {
+ return append(setAttrs(document.createElementNS(SVG_NS, tag), attrs), children);
+}
+export function clear(node) { while (node && node.firstChild) node.removeChild(node.firstChild); return node; }
+export const $ = (id) => document.getElementById(id);
+export function frag(children) { return append(document.createDocumentFragment(), children); }
+
+// External link to the repo (validated), or plain text when the URL is not allowed.
+export function repoLink(href, text, attrs = {}) {
+ if (!isRepoUrl(href)) return el('span', attrs, text);
+ return el('a', { href, rel: 'noopener noreferrer', target: '_blank', ...attrs }, text);
+}
+
+// Family colour swatch + name chip. The colour comes from data.js familyColors; Other is the neutral silver.
+export function familyChip(name, color, extra = '') {
+ return el('span', { class: `chip fam ${extra}`, style: { '--c': color || OTHER_COLOR } },
+ el('i', { class: 'swatch', 'aria-hidden': 'true' }), name || 'Other');
+}
+export const VERDICT_GLYPH = { pass: '●', partial: '◐', fail: '○' };
+export function verdictChip(v) {
+ const k = (v || 'unknown').toLowerCase();
+ return el('span', { class: `chip verdict v-${k}` }, el('span', { class: 'glyph', 'aria-hidden': 'true' }, VERDICT_GLYPH[k] || '◌'), k);
+}
+export function kindChip(text, cls = '') { return el('span', { class: `chip kind ${cls}` }, text); }
+
+// A list that reveals `step` items at a time with a "show more" button.
+export function revealList(container, items, render, { step = 24, label = 'Show more' } = {}) {
+ clear(container);
+ let shown = 0;
+ const more = el('button', { type: 'button', class: 'more' });
+ const list = el('div', { class: 'reveal-list' });
+ container.append(list, more);
+ const next = () => {
+ const slice = items.slice(shown, shown + step);
+ slice.forEach((it, i) => { const node = render(it, shown + i); if (node) list.appendChild(node); });
+ shown += slice.length;
+ const left = items.length - shown;
+ more.textContent = left > 0 ? `${label} (${Math.min(step, left)} of ${left} left)` : '';
+ more.hidden = left <= 0;
+ };
+ more.addEventListener('click', next);
+ next();
+ if (!items.length) list.appendChild(el('p', { class: 'empty' }, 'Nothing here yet.'));
+ return { next };
+}
+export function onReducedMotion() {
+ return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;
+}
diff --git a/site/assets/favicon.svg b/site/assets/favicon.svg
new file mode 100644
index 0000000..bfd19c8
--- /dev/null
+++ b/site/assets/favicon.svg
@@ -0,0 +1 @@
+
diff --git a/site/assets/hero.js b/site/assets/hero.js
new file mode 100644
index 0000000..376c1b0
--- /dev/null
+++ b/site/assets/hero.js
@@ -0,0 +1,100 @@
+// The hero orrery: the GPU is the sun, each model family an orbit band, each model a planet.
+// Orbit speed = best tok/s seen for that model, size = how often it ran, halo = passed test 2.
+import { el, svg, clear, familyChip, onReducedMotion } from './dom.js';
+import { heroPlanets, heroLayout, fmt } from './data.js';
+
+export function renderHero(data, mount, caption, legend) {
+ clear(mount); clear(legend);
+ const { planets, bands } = heroLayout(heroPlanets(data), { rMin: 72, rMax: 318 });
+ const S = 340;
+ const root = svg('svg', { class: 'orrery', viewBox: `${-S} ${-S} ${2 * S} ${2 * S}`, role: 'group', 'aria-label': `Orrery of ${planets.length} models in ${bands.length} families orbiting one GPU` });
+ const defs = svg('defs', {});
+ const grad = svg('radialGradient', { id: 'sun-grad' });
+ grad.append(svg('stop', { offset: '0%', 'stop-color': '#fff6d6' }), svg('stop', { offset: '45%', 'stop-color': '#f2c14e' }), svg('stop', { offset: '100%', 'stop-color': '#b8780a' }));
+ const glow = svg('radialGradient', { id: 'sun-glow' });
+ glow.append(svg('stop', { offset: '0%', 'stop-color': '#f2c14e', 'stop-opacity': '0.55' }), svg('stop', { offset: '100%', 'stop-color': '#f2c14e', 'stop-opacity': '0' }));
+ defs.append(grad, glow);
+ root.appendChild(defs);
+
+ // bands
+ bands.forEach((b, i) => {
+ root.appendChild(svg('circle', { r: b.r1, class: 'band', style: { '--c': b.color } }));
+ // band name on an arc; every label rides the upper arc so it always reads upright; offsets alternate so neighbours do not stack
+ const id = `band-arc-${i}`;
+ const r = b.r1 - 4;
+ defs.appendChild(svg('path', { id, d: `M ${-r} 0 A ${r} ${r} 0 0 1 ${r} 0`, fill: 'none' }));
+ const t = svg('text', { class: 'band-label' });
+ const tp = svg('textPath', { href: `#${id}`, startOffset: ['50%', '22%', '78%'][i % 3], 'text-anchor': 'middle' }, b.family);
+ t.appendChild(tp);
+ root.appendChild(t);
+ });
+ // sun
+ root.appendChild(svg('circle', { r: 110, fill: 'url(#sun-glow)', class: 'sun-glow' }));
+ root.appendChild(svg('circle', { r: 30, fill: 'url(#sun-grad)', class: 'sun' }));
+ const gpu = (data.hardware && data.hardware.gpu) || 'one GPU';
+ root.appendChild(svg('text', { y: 50, class: 'sun-label', 'text-anchor': 'middle' }, gpu.split(',')[0]));
+
+ // planets
+ const groups = [];
+ const motion = !onReducedMotion();
+ for (const p of planets) {
+ root.appendChild(svg('circle', { r: p.r, class: 'orbit' }));
+ const g = svg('g', { class: `planet${p.passed2 ? ' passed' : ''}${p.uncensored ? ' unc' : ''}`, tabindex: 0, role: 'img', style: { '--c': p.color }, 'data-family': p.family, transform: `rotate(${p.angle0.toFixed(1)})`,
+ 'aria-label': describe(p) });
+ g.appendChild(svg('title', {}, describe(p)));
+ if (p.passed2) g.appendChild(svg('circle', { cx: p.r, cy: 0, r: p.size + 3.2, class: 'halo' }));
+ g.appendChild(svg('circle', { cx: p.r, cy: 0, r: p.size, class: 'body' }));
+ if (p.uncensored) g.appendChild(svg('circle', { cx: p.r, cy: 0, r: p.size + 1.6, class: 'unc-ring' }));
+ g.appendChild(svg('circle', { cx: p.r, cy: 0, r: Math.max(9, p.size + 5), class: 'hit' }));
+ const show = () => { caption.textContent = describe(p); };
+ g.addEventListener('mouseenter', show); g.addEventListener('focus', show);
+ root.appendChild(g);
+ groups.push({ g, p });
+ }
+ mount.appendChild(root);
+ caption.textContent = planets.length ? 'Hover or tab onto a planet to read its card line.' : 'No models yet: the orrery fills in as runs arrive.';
+
+ // legend: one chip per family; click to spotlight
+ let active = null;
+ const spot = (fam) => {
+ active = active === fam ? null : fam;
+ for (const { g, p } of groups) g.classList.toggle('dim', active != null && p.family !== active);
+ legend.querySelectorAll('button').forEach((b) => b.setAttribute('aria-pressed', String(b.dataset.family === active)));
+ };
+ for (const b of bands) {
+ const n = planets.filter((p) => p.family === b.family).length;
+ const btn = el('button', { type: 'button', class: 'legend-btn', 'data-family': b.family, 'aria-pressed': 'false' }, familyChip(b.family, b.color), el('small', {}, ` ${n}`));
+ btn.addEventListener('click', () => spot(b.family));
+ legend.appendChild(el('li', {}, btn));
+ }
+
+ // motion
+ if (motion && groups.length) {
+ let last = performance.now();
+ let running = true;
+ const tick = (now) => {
+ if (!running) return;
+ const dt = Math.min(0.1, (now - last) / 1000); last = now;
+ for (const { g, p } of groups) {
+ p.angle0 = (p.angle0 + (360 / p.period) * dt) % 360;
+ g.setAttribute('transform', `rotate(${p.angle0.toFixed(2)})`);
+ }
+ requestAnimationFrame(tick);
+ };
+ requestAnimationFrame(tick);
+ // pause when off-screen or hidden
+ if ('IntersectionObserver' in window) {
+ new IntersectionObserver((es) => { for (const e of es) { const was = running; running = e.isIntersecting; if (running && !was) { last = performance.now(); requestAnimationFrame(tick); } } }).observe(mount);
+ }
+ document.addEventListener('visibilitychange', () => { if (!document.hidden && running) last = performance.now(); });
+ }
+ return { planets, bands };
+}
+function describe(p) {
+ const bits = [p.label, p.family];
+ bits.push(p.bestTps != null ? `best ${fmt(p.bestTps, 1)} tok/s` : 'no speed recorded');
+ bits.push(p.appearances === 1 ? '1 appearance' : `${p.appearances} appearances`);
+ if (p.passed2) bits.push('passed test 2');
+ if (p.uncensored) bits.push('uncensored');
+ return bits.join(' · ');
+}
diff --git a/site/assets/motifs.js b/site/assets/motifs.js
new file mode 100644
index 0000000..bfb1c4f
--- /dev/null
+++ b/site/assets/motifs.js
@@ -0,0 +1,161 @@
+// Decorative chapter motifs, each drawn from that chapter's own numbers (data.js motifs()). They are
+// aria-hidden ornaments: every fact they encode is also in the chapter's text or charts.
+import { svg } from './dom.js';
+
+const W = 200, H = 110;
+const VERDICT = { pass: 'var(--pass)', partial: 'var(--partial)', fail: 'var(--fail)' };
+const vcol = (v) => VERDICT[v] || 'var(--unknown)';
+const root = (cls) => svg('svg', { class: `motif-svg ${cls}`, viewBox: `0 0 ${W} ${H}`, 'aria-hidden': 'true', focusable: 'false' });
+const polar = (cx, cy, r, a) => `${(cx + r * Math.cos(a)).toFixed(1)} ${(cy + r * Math.sin(a)).toFixed(1)}`;
+
+const DRAW = {
+ // 01 the machine: a die with one lead per spec line
+ machine(m) {
+ const s = root('m-machine'), cx = 100, cy = 55;
+ s.appendChild(svg('rect', { x: cx - 34, y: cy - 24, width: 68, height: 48, rx: 6, class: 'chip-body' }));
+ s.appendChild(svg('rect', { x: cx - 18, y: cy - 12, width: 36, height: 24, rx: 3, class: 'chip-die' }));
+ m.forEach((lead, i) => {
+ const y = cy - 18 + (Math.floor(i / 2) % 5) * 9, x0 = lead.side < 0 ? cx - 34 : cx + 34, x1 = x0 + lead.side * (26 + (i % 3) * 8);
+ s.appendChild(svg('line', { x1: x0, y1: y, x2: x1, y2: y, class: 'chip-lead' }));
+ s.appendChild(svg('circle', { cx: x1, cy: y, r: 2.4, class: 'chip-pad' }));
+ });
+ return s;
+ },
+ // 02 tests: one seal per test, area by graded runs
+ tests(m) {
+ if (!m.length) return null;
+ const s = root('m-tests'), max = Math.max(1, ...m.map((t) => t.n)), step = W / (m.length + 1);
+ m.forEach((t, i) => {
+ const r = 7 + 13 * Math.sqrt(t.n / max), cx = step * (i + 1), cy = 55 + (i % 2 ? 14 : -14);
+ s.appendChild(svg('circle', { cx, cy, r: r + 4, class: 'seal-ring' }));
+ s.appendChild(svg('circle', { cx, cy, r, class: `seal ${(t.kind || 'other').replace(/[^a-z-]/gi, '').toLowerCase()}` }));
+ s.appendChild(svg('text', { x: cx, y: cy + 3.5, class: 'seal-num', 'text-anchor': 'middle' }, t.number));
+ });
+ return s;
+ },
+ // 03 picks: a laurel ring, one arc per family, length by models tried
+ picks(m) {
+ if (!m.length) return null;
+ const s = root('m-picks'), cx = 100, cy = 55, R = 44, r0 = 30, gap = 0.05;
+ let a = -Math.PI / 2;
+ for (const f of m) {
+ const span = Math.max(0.02, f.share * (Math.PI * 2 - gap * m.length));
+ const a0 = a + gap / 2, a1 = a + gap / 2 + span; a += span + gap;
+ const large = a1 - a0 > Math.PI ? 1 : 0;
+ s.appendChild(svg('path', { d: `M ${polar(cx, cy, r0, a0)} L ${polar(cx, cy, R, a0)} A ${R} ${R} 0 ${large} 1 ${polar(cx, cy, R, a1)} L ${polar(cx, cy, r0, a1)} A ${r0} ${r0} 0 ${large} 0 ${polar(cx, cy, r0, a0)} Z`, fill: f.color, class: 'laurel' }));
+ }
+ s.appendChild(svg('circle', { cx, cy, r: 9, class: 'laurel-core' }));
+ return s;
+ },
+ // 04 runs: a constellation, x by speed, each star a run
+ runs(m) {
+ if (!m.stars.length) return null;
+ const s = root('m-runs');
+ const P = (st) => [8 + st.x * 184, 10 + st.y * 90];
+ for (const [i, j] of m.links) { const [x1, y1] = P(m.stars[i]), [x2, y2] = P(m.stars[j]); s.appendChild(svg('line', { x1, y1, x2, y2, class: 'star-link' })); }
+ for (const st of m.stars) { const [cx, cy] = P(st); s.appendChild(svg('circle', { cx, cy, r: st.verdict === 'pass' ? 2.2 : 1.4, fill: vcol(st.verdict), class: 'star' })); }
+ return s;
+ },
+ // 05 struggle: a skyline of compiler-error spikes, cleanest left
+ struggle(m) {
+ if (!m.length) return null;
+ const s = root('m-struggle'), w = 190 / m.length;
+ m.forEach((r, i) => { const h = 5 + 92 * r.h; s.appendChild(svg('rect', { x: 5 + i * w, y: H - 4 - h, width: Math.max(0.8, w - 0.9), height: h, fill: vcol(r.verdict), class: 'spike' })); });
+ return s;
+ },
+ // 06 test 3: a mosaic, one tile per row, brightness by rubric, pink frame when the server was misjudged
+ test3(m) {
+ if (!m.length) return null;
+ const s = root('m-test3'), cols = Math.ceil(Math.sqrt(m.length * (W / H))), rows = Math.ceil(m.length / cols), cell = Math.min(W / cols, H / rows);
+ const ox = (W - cols * cell) / 2, oy = (H - rows * cell) / 2;
+ m.forEach((t, i) => {
+ const x = ox + (i % cols) * cell, y = oy + Math.floor(i / cols) * cell;
+ s.appendChild(svg('rect', { x: x + 1, y: y + 1, width: cell - 2, height: cell - 2, rx: 2, fill: t.color, 'fill-opacity': (0.12 + 0.88 * t.level).toFixed(2), class: `tile${t.right === false ? ' wrong' : ''}` }));
+ });
+ return s;
+ },
+ // 07 engines: tuning forks, one bar per probe, colour by engine
+ ab(m) {
+ if (!m.length) return null;
+ const s = root('m-ab'), gw = 188 / m.length;
+ m.forEach((rows, i) => {
+ const bw = Math.min(10, gw / (rows.length + 1));
+ rows.forEach((r, j) => { const h = 6 + 92 * r.h; s.appendChild(svg('rect', { x: 6 + i * gw + j * (bw + 1.5), y: H - 4 - h, width: bw, height: h, rx: 1.5, fill: r.color, class: 'fork' })); });
+ });
+ return s;
+ },
+ // 08 one-shots: a gear for the orrery set (one tooth per reply), a flower for the pagodas (one petal per reply)
+ oneshots(m) {
+ if (!m.length) return null;
+ const s = root('m-oneshots'), n = m.length;
+ m.forEach((set, i) => {
+ const cx = (W / n) * (i + 0.5), cy = 55, R = Math.min(48, W / n / 2 - 4), k = Math.max(1, set.values.length);
+ if (set.shape === 'gear') {
+ const r0 = R * 0.52;
+ let d = '';
+ set.values.forEach((v, j) => {
+ const a0 = (j / k) * Math.PI * 2, a1 = ((j + 0.5) / k) * Math.PI * 2, r1 = r0 + (R - r0) * (0.2 + 0.8 * v);
+ d += `${j ? 'L' : 'M'} ${polar(cx, cy, r0, a0)} L ${polar(cx, cy, r1, a0 + (a1 - a0) * 0.15)} L ${polar(cx, cy, r1, a1 - (a1 - a0) * 0.15)} L ${polar(cx, cy, r0, a1)} `;
+ });
+ s.appendChild(svg('path', { d: d + 'Z', class: 'gear' }));
+ s.appendChild(svg('circle', { cx, cy, r: r0 * 0.45, class: 'gear-hub' }));
+ } else if (set.shape === 'flower') {
+ set.values.forEach((v, j) => {
+ const a = (j / k) * Math.PI * 2, len = R * (0.25 + 0.75 * v), wdt = Math.max(0.08, Math.min(0.5, Math.PI / k));
+ s.appendChild(svg('path', { d: `M ${polar(cx, cy, 4, a)} Q ${polar(cx, cy, len * 0.55, a - wdt)} ${polar(cx, cy, len, a)} Q ${polar(cx, cy, len * 0.55, a + wdt)} ${polar(cx, cy, 4, a)} Z`, class: 'petal-m', 'fill-opacity': (0.35 + 0.6 * v).toFixed(2) }));
+ });
+ s.appendChild(svg('circle', { cx, cy, r: 5, class: 'flower-core' }));
+ } else {
+ set.values.forEach((v, j) => { const a = (j / k) * Math.PI * 2; s.appendChild(svg('line', { x1: polar(cx, cy, R * 0.35, a).split(' ')[0], y1: polar(cx, cy, R * 0.35, a).split(' ')[1], x2: polar(cx, cy, R * (0.4 + 0.6 * v), a).split(' ')[0], y2: polar(cx, cy, R * (0.4 + 0.6 * v), a).split(' ')[1], class: 'ray' })); });
+ }
+ });
+ return s;
+ },
+ // 09 findings: comet streaks, before → after
+ findings(m) {
+ if (!m.length) return null;
+ const s = root('m-findings'), step = 90 / m.length;
+ m.forEach((f, i) => {
+ const y = 12 + i * step + step / 2, x0 = 10 + (f.isNew ? 0 : f.from) * 170, x1 = 10 + f.to * 170;
+ s.appendChild(svg('line', { x1: Math.min(x0, x1), y1: y, x2: Math.max(x0, x1), y2: y, class: 'comet-tail' }));
+ if (!f.isNew) s.appendChild(svg('circle', { cx: x0, cy: y, r: 1.8, class: 'comet-from' }));
+ s.appendChild(svg('circle', { cx: x1, cy: y, r: 3.2, class: 'comet-head' }));
+ });
+ return s;
+ },
+ // 10 timeline: a river with one stone per era
+ timeline(m) {
+ if (!m.length) return null;
+ const s = root('m-timeline');
+ const pts = []; for (let x = 6; x <= 194; x += 4) pts.push(`${x} ${(55 + 20 * Math.sin(x / 19)).toFixed(1)}`);
+ s.appendChild(svg('path', { d: 'M ' + pts.join(' L '), class: 'river-path' }));
+ for (const t of m) { const x = 6 + t.x * 188; s.appendChild(svg('circle', { cx: x, cy: 55 + 20 * Math.sin(x / 19), r: 3.4, class: 'stone' })); }
+ return s;
+ },
+ // 11 the notebook: a bar per kind of entry
+ log(m) {
+ if (!m.length) return null;
+ const s = root('m-log'), w = 188 / m.length;
+ m.forEach((k, i) => { const h = 8 + 90 * k.h; s.appendChild(svg('rect', { x: 6 + i * w + 2, y: H - 4 - h, width: Math.max(2, w - 4), height: h, rx: 2, fill: k.color, class: 'logbar' })); });
+ return s;
+ },
+ // 12 caveats: warning rings, one per caveat
+ caveats(m) {
+ if (!m.length) return null;
+ const s = root('m-caveats'), cx = 100, cy = 98;
+ m.forEach((c, i) => {
+ const r = 16 + i * (76 / Math.max(1, m.length)), span = Math.PI * (0.45 + 0.5 * c.len), a0 = -Math.PI / 2 - span / 2, a1 = -Math.PI / 2 + span / 2;
+ s.appendChild(svg('path', { d: `M ${polar(cx, cy, r, a0)} A ${r} ${r} 0 ${span > Math.PI ? 1 : 0} 1 ${polar(cx, cy, r, a1)}`, class: 'warn-ring', 'stroke-opacity': (0.9 - 0.12 * i).toFixed(2) }));
+ });
+ s.appendChild(svg('circle', { cx, cy, r: 4, class: 'warn-core' }));
+ return s;
+ },
+};
+
+// Returns an SVG for the chapter, or null when there is nothing to draw.
+export function chapterMotif(key, m) {
+ const fn = DRAW[key];
+ if (!fn || m == null) return null;
+ return fn(m);
+}
+export const MOTIF_KEYS = Object.keys(DRAW);
diff --git a/site/assets/style.css b/site/assets/style.css
new file mode 100644
index 0000000..b53c6ea
--- /dev/null
+++ b/site/assets/style.css
@@ -0,0 +1,372 @@
+/* The Bake-off: one dark jewel-toned theme. Colours carry meaning and never alone. */
+:root {
+ --ink: #0c1222; --ink-2: #111a2f; --card: #141d33; --card-2: #192540; --line: rgba(233, 237, 245, 0.10); --line-2: rgba(233, 237, 245, 0.18);
+ --text: #e9edf5; --muted: #aab4c8; --faint: #7d889f;
+ /* family and engine colours arrive per element as --c (data.js familyColors / colorSeries); --sx is the neutral Other */
+ --sx: #8a94a8;
+ /* status */
+ --pass: #3ddc97; --partial: #f2c14e; --fail: #ff6b9d; --unknown: #8a94a6;
+ --gold: #f2c14e; --teal: #2ec4b6; --violet: #a98bff; --sapphire: #6c8dff; --magenta: #ff6bb5;
+ --serif: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, "Times New Roman", serif;
+ --sans: system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif;
+ --mono: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
+ --maxw: 1180px; --r: 14px;
+}
+* { box-sizing: border-box; }
+html { scroll-behavior: smooth; background: var(--ink); }
+body { margin: 0; color: var(--text); font: 16px/1.55 var(--sans); background:
+ radial-gradient(1200px 700px at 85% -10%, rgba(82, 131, 254, 0.16), transparent 60%),
+ radial-gradient(900px 600px at -10% 20%, rgba(18, 161, 149, 0.16), transparent 60%),
+ radial-gradient(800px 500px at 60% 110%, rgba(161, 103, 241, 0.12), transparent 60%), var(--ink); }
+a { color: var(--teal); text-underline-offset: 3px; }
+a:hover { color: var(--gold); }
+:focus-visible { outline: 3px solid var(--gold); outline-offset: 3px; border-radius: 4px; }
+.skip { position: absolute; left: -999px; top: 8px; background: var(--gold); color: #1a1200; padding: 8px 12px; border-radius: 8px; z-index: 10; }
+.skip:focus { left: 8px; }
+.sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
+code, .mono { font-family: var(--mono); font-size: 0.92em; }
+h1, h2, h3 { font-family: var(--serif); font-weight: 500; letter-spacing: -0.01em; margin: 0; }
+h2 { font-size: clamp(1.8rem, 3.4vw, 2.6rem); line-height: 1.1; }
+h3.sub { font-size: 1.25rem; color: var(--gold); margin: 1.6rem 0 0.8rem; }
+p { margin: 0 0 0.8em; }
+.empty { color: var(--muted); font-style: italic; }
+button, select, input { font: inherit; color: inherit; }
+[hidden] { display: none !important; }
+
+/* ------------------------------------------------------------- hero */
+.hero { position: relative; padding: 18px clamp(16px, 4vw, 48px) 40px; max-width: var(--maxw); margin: 0 auto; }
+.topnav { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 0.9rem; margin-bottom: 28px; }
+.topnav a { color: var(--muted); text-decoration: none; padding: 4px 2px; border-bottom: 1px solid transparent; }
+.topnav a:hover { color: var(--text); border-color: var(--gold); }
+.hero-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr); gap: 32px; align-items: center; }
+@media (max-width: 860px) { .hero-grid { grid-template-columns: 1fr; } }
+.kicker { text-transform: uppercase; letter-spacing: 0.22em; font-size: 0.75rem; color: var(--gold); margin-bottom: 10px; }
+h1 { font-size: clamp(2.8rem, 7vw, 5.4rem); line-height: 0.98; background: linear-gradient(100deg, #fff6d6, var(--gold) 35%, var(--teal) 70%, var(--sapphire)); -webkit-background-clip: text; background-clip: text; color: transparent; padding-bottom: 0.08em; }
+.tagline { font-family: var(--serif); font-size: clamp(1.15rem, 2vw, 1.45rem); line-height: 1.35; color: var(--text); margin: 16px 0 22px; max-width: 32ch; }
+.hero-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(110px, 1fr)); gap: 14px 18px; margin: 0 0 14px; }
+.hero-stats div { border-left: 2px solid var(--line-2); padding-left: 10px; }
+.hero-stats dt { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.12em; color: var(--muted); }
+.hero-stats dd { margin: 0; font-family: var(--serif); font-size: 1.9rem; line-height: 1.1; }
+.hero-stats dd small { font-size: 0.85rem; color: var(--muted); font-family: var(--sans); margin-left: 4px; }
+.generated { color: var(--faint); font-size: 0.85rem; display: flex; flex-wrap: wrap; gap: 4px 16px; }
+.generated .fresh { white-space: nowrap; color: var(--muted); }
+.generated .fresh small { color: var(--faint); text-transform: uppercase; letter-spacing: 0.1em; font-size: 0.68rem; }
+.hero-note { color: var(--muted); font-size: 0.9rem; max-width: 52ch; }
+.hero-art { margin: 0; }
+.orrery-mount { aspect-ratio: 1; max-width: 640px; margin: 0 auto; }
+.orrery { width: 100%; height: 100%; display: block; overflow: visible; }
+.orrery .band { fill: none; stroke: var(--c, var(--line)); stroke-opacity: 0.22; stroke-width: 1; }
+.orrery .band-label { font: 500 11px var(--sans); fill: var(--faint); letter-spacing: 0.14em; text-transform: uppercase; }
+.orrery .orbit { fill: none; stroke: rgba(233, 237, 245, 0.05); stroke-width: 0.6; }
+.orrery .sun { filter: drop-shadow(0 0 14px rgba(242, 193, 78, 0.6)); }
+.orrery .sun-label { font: 500 11px var(--sans); fill: var(--gold); letter-spacing: 0.12em; }
+.orrery .planet { outline: none; transition: opacity 0.3s; }
+.orrery .planet.dim { opacity: 0.12; }
+.orrery .planet .body { fill: var(--c, var(--sx)); }
+.orrery .planet .halo { fill: none; stroke: var(--c, var(--sx)); stroke-opacity: 0.55; stroke-width: 1.2; }
+.orrery .planet .unc-ring { fill: none; stroke: #fff; stroke-opacity: 0.65; stroke-width: 0.8; stroke-dasharray: 2 2; }
+.orrery .planet .hit { fill: transparent; }
+.orrery .planet:hover .body, .orrery .planet:focus-visible .body { stroke: #fff; stroke-width: 1.5; }
+.orrery .planet:focus-visible .hit { stroke: var(--gold); stroke-width: 1.5; fill: rgba(242, 193, 78, 0.12); }
+.hero-caption { min-height: 2.6em; text-align: center; color: var(--muted); font-size: 0.9rem; margin: 10px auto 0; max-width: 60ch; }
+.hero-legend { list-style: none; margin: 10px 0 0; padding: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; }
+.legend-btn { background: transparent; border: 1px solid var(--line); border-radius: 999px; padding: 3px 10px 3px 6px; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
+.legend-btn:hover { border-color: var(--line-2); background: var(--ink-2); }
+.legend-btn[aria-pressed="true"] { border-color: var(--gold); background: rgba(242, 193, 78, 0.1); }
+.legend-btn small { color: var(--muted); }
+.load-error { background: rgba(255, 107, 157, 0.12); border: 1px solid var(--fail); border-radius: 10px; padding: 12px 16px; margin-top: 20px; }
+@media (prefers-reduced-motion: no-preference) {
+ .orrery .sun-glow { animation: breathe 6s ease-in-out infinite; transform-origin: center; }
+ @keyframes breathe { 0%, 100% { transform: scale(1); opacity: 0.9; } 50% { transform: scale(1.12); opacity: 1; } }
+}
+
+/* ---------------------------------------------------------- chapters */
+.chapter { --accent: var(--teal); max-width: var(--maxw); margin: 0 auto; padding: 56px clamp(16px, 4vw, 48px) 24px; border-top: 1px solid var(--line); position: relative; }
+.chapter::before { content: ""; position: absolute; inset: 0 0 auto 0; height: 320px; pointer-events: none; z-index: -1;
+ background: radial-gradient(620px 300px at 0% 0%, color-mix(in srgb, var(--accent) 13%, transparent), transparent 70%); }
+.chapter::after { content: ""; position: absolute; inset: 0; pointer-events: none; z-index: -1; opacity: 0.35;
+ background: repeating-linear-gradient(135deg, transparent 0 7px, rgba(233, 237, 245, 0.012) 7px 8px); }
+#machine { --accent: var(--teal); } #tests { --accent: var(--violet); } #picks { --accent: var(--gold); } #runs { --accent: var(--sapphire); }
+#struggle { --accent: var(--magenta); } #test3 { --accent: var(--gold); } #ab { --accent: var(--violet); } #oneshots { --accent: var(--magenta); }
+#findings { --accent: var(--teal); } #timeline { --accent: var(--sapphire); } #log { --accent: var(--gold); } #caveats { --accent: var(--fail); }
+.chapter-head { display: grid; grid-template-columns: auto 1fr auto; gap: 8px 20px; align-items: baseline; margin-bottom: 26px; }
+.chapter-head .num { font-family: var(--serif); font-size: 1rem; color: var(--accent); letter-spacing: 0.1em; grid-row: span 2; align-self: start; padding-top: 0.7em; border-top: 2px solid var(--accent); }
+.chapter-head .lede { grid-column: 2; color: var(--muted); max-width: 72ch; font-size: 1.02rem; }
+.chapter-head .motif { grid-column: 3; grid-row: 1 / span 2; align-self: center; width: clamp(140px, 17vw, 220px); opacity: 0.92; }
+.motif-svg { display: block; width: 100%; height: auto; overflow: visible; filter: drop-shadow(0 0 10px color-mix(in srgb, var(--accent) 28%, transparent)); }
+@media (max-width: 860px) { .chapter-head .motif { grid-column: 2; grid-row: auto; width: 150px; justify-self: end; margin-top: -4px; } }
+/* motif marks */
+.chip-body { fill: var(--card-2); stroke: var(--line-2); } .chip-die { fill: var(--accent); fill-opacity: 0.7; stroke: var(--gold); stroke-width: 0.8; }
+.chip-lead { stroke: var(--teal); stroke-width: 1.2; stroke-opacity: 0.8; } .chip-pad { fill: var(--gold); }
+.seal-ring { fill: none; stroke: var(--line-2); stroke-dasharray: 2 2; } .seal { fill: var(--sx); fill-opacity: 0.85; } .seal.agentic { fill: var(--teal); } .seal.one-shot { fill: var(--violet); }
+.seal-num { font: 600 9px var(--sans); fill: #0c1222; }
+.laurel { fill-opacity: 0.88; stroke: var(--ink); stroke-width: 0.6; } .laurel-core { fill: var(--gold); filter: drop-shadow(0 0 6px var(--gold)); }
+.star { stroke: none; } .star-link { stroke: var(--sapphire); stroke-width: 0.6; stroke-opacity: 0.45; }
+.spike { fill-opacity: 0.85; } .tile { stroke: none; } .tile.wrong { stroke: var(--fail); stroke-width: 1; }
+.fork { fill-opacity: 0.9; }
+.gear { fill: var(--gold); fill-opacity: 0.85; stroke: #fff6d6; stroke-width: 0.5; stroke-opacity: 0.5; } .gear-hub { fill: var(--ink); stroke: var(--gold); stroke-width: 1.5; }
+.petal-m { fill: var(--magenta); stroke: #ffd0e8; stroke-width: 0.4; stroke-opacity: 0.5; } .flower-core { fill: var(--gold); }
+.ray { stroke: var(--teal); stroke-width: 1.2; stroke-linecap: round; }
+.comet-tail { stroke: var(--teal); stroke-width: 1.6; stroke-opacity: 0.5; stroke-linecap: round; } .comet-from { fill: var(--faint); } .comet-head { fill: var(--teal); filter: drop-shadow(0 0 4px var(--teal)); }
+.river-path { fill: none; stroke: var(--sapphire); stroke-width: 1.4; stroke-opacity: 0.6; } .stone { fill: var(--ink); stroke: var(--gold); stroke-width: 1.6; }
+.logbar { fill-opacity: 0.85; }
+.warn-ring { fill: none; stroke: var(--fail); stroke-width: 2.2; stroke-linecap: round; } .warn-core { fill: var(--fail); }
+.chip { display: inline-flex; align-items: center; gap: 6px; border-radius: 999px; padding: 1px 9px; font-size: 0.78rem; line-height: 1.5; border: 1px solid var(--line-2); color: var(--text); white-space: nowrap; }
+.chip .swatch { width: 9px; height: 9px; border-radius: 50%; background: var(--c, var(--sx)); display: inline-block; box-shadow: 0 0 0 1px rgba(255,255,255,0.15) inset; }
+.chip.kind { color: var(--muted); }
+.chip.kind.one-shot, .chip.kind.oneshot { border-color: var(--violet); color: var(--violet); }
+.chip.kind.agentic { border-color: var(--teal); color: var(--teal); }
+.chip.verdict .glyph { font-size: 0.95em; }
+.v-pass { color: var(--pass); } .v-partial { color: var(--partial); } .v-fail { color: var(--fail); } .v-unknown { color: var(--unknown); }
+.chip.verdict.v-pass { border-color: var(--pass); } .chip.verdict.v-partial { border-color: var(--partial); } .chip.verdict.v-fail { border-color: var(--fail); }
+.more { display: block; margin: 14px auto 0; background: var(--card); border: 1px solid var(--line-2); border-radius: 999px; padding: 8px 18px; cursor: pointer; color: var(--text); }
+.more:hover { border-color: var(--gold); color: var(--gold); }
+.count { color: var(--muted); font-size: 0.9rem; align-self: end; padding-bottom: 6px; }
+
+/* spec plate */
+.spec-plate { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 1px; border-radius: var(--r); overflow: hidden; margin: 0; }
+.spec-plate div { background: var(--card); padding: 16px 18px; box-shadow: 0 0 0 1px var(--line); }
+.spec-plate dt { text-transform: uppercase; letter-spacing: 0.14em; font-size: 0.7rem; color: var(--gold); }
+.spec-plate dd { margin: 4px 0 0; font-family: var(--serif); font-size: 1.15rem; line-height: 1.3; }
+
+/* tests */
+.test-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; }
+.jewel, .test-card, .pick-card, .finding, .set-card, .stat, .t3, .fam-row, .shot, .caveats li, .event, .spec-plate { border: 1px solid transparent;
+ background: linear-gradient(var(--card-2), var(--card)) padding-box, linear-gradient(150deg, color-mix(in srgb, var(--c, var(--accent)) 55%, transparent), var(--line) 38%, var(--line) 70%, color-mix(in srgb, var(--accent) 30%, transparent)) border-box; }
+.test-card { border-radius: var(--r); padding: 18px 18px 16px; position: relative; overflow: hidden; }
+.test-card::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 4px; background: var(--teal); }
+.test-card.one-shot::before { background: var(--violet); }
+.test-card .tn { font-family: var(--serif); font-size: 2.4rem; line-height: 1; color: var(--gold); float: right; margin-left: 10px; opacity: 0.9; }
+.test-card h3 { font-size: 1.2rem; margin-bottom: 6px; }
+.test-card .what { margin: 8px 0; }
+.test-card .graded { color: var(--muted); font-size: 0.9rem; }
+.test-card .meta { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; align-items: center; }
+.test-card .n { color: var(--muted); font-size: 0.85rem; }
+
+/* picks */
+.pick-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 24px; }
+.pick-cards { display: grid; gap: 12px; }
+.pick-card { border-radius: var(--r); padding: 18px; position: relative; overflow: hidden; }
+.pick-card::after { content: ""; position: absolute; right: -60px; top: -60px; width: 220px; height: 220px; border-radius: 50%; background: radial-gradient(circle, color-mix(in srgb, var(--c, var(--accent)) 10%, transparent), transparent 65%); pointer-events: none; }
+.pick-card .role { text-transform: uppercase; letter-spacing: 0.16em; font-size: 0.72rem; color: var(--gold); }
+.pick-card h4 { font-family: var(--serif); font-weight: 500; font-size: 1.35rem; margin: 4px 0 6px; }
+.pick-card .verdict-text { margin-bottom: 6px; }
+.pick-card .trade { color: var(--muted); font-size: 0.92rem; border-left: 2px solid var(--line-2); padding-left: 10px; }
+.pick-card .meta { display: flex; flex-wrap: wrap; gap: 6px; margin: 8px 0; }
+.pick-card .meta .mono { color: var(--muted); font-size: 0.8rem; }
+.pick-card ul { list-style: none; padding: 0; margin: 6px 0 0; font-size: 0.9rem; color: var(--muted); }
+.runline { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
+.family-table { display: grid; gap: 10px; }
+.fam-row { display: grid; grid-template-columns: 180px repeat(4, minmax(120px, 1fr)) ; gap: 10px 14px; border-radius: 12px; padding: 12px 14px; align-items: start; }
+.fam-row .cell small { display: block; color: var(--faint); text-transform: uppercase; letter-spacing: 0.1em; font-size: 0.66rem; }
+.fam-row .cell b { font-weight: 500; }
+.fam-row .cell .none { color: var(--faint); font-style: italic; }
+.fam-row .note { grid-column: 1 / -1; color: var(--muted); font-size: 0.9rem; margin: 0; }
+.fam-row .count { font-size: 0.8rem; }
+@media (max-width: 860px) { .fam-row { grid-template-columns: 1fr 1fr; } .fam-row .famhead { grid-column: 1 / -1; } }
+
+/* filters */
+.filters { display: flex; flex-wrap: wrap; gap: 10px 14px; align-items: end; margin: 0 0 18px; }
+.filters label { display: grid; gap: 4px; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.1em; color: var(--muted); }
+.filters .grow { flex: 1 1 180px; }
+.filters select, .filters input { background: var(--card); border: 1px solid var(--line-2); border-radius: 8px; padding: 6px 10px; min-height: 36px; text-transform: none; letter-spacing: 0; font-size: 0.95rem; color: var(--text); width: 100%; }
+
+/* speed ladder */
+.ladder { --lbl: 230px; --num: 64px; }
+@media (max-width: 700px) { .ladder { --lbl: 140px; --num: 52px; } }
+.ladder-head, .ladder-row { display: grid; grid-template-columns: var(--lbl) 1fr var(--num); gap: 10px; align-items: center; }
+.ladder-head { color: var(--faint); font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.1em; padding-bottom: 20px; }
+.ladder-axis { position: relative; height: 1px; background: var(--line-2); }
+.ladder-axis .tick { position: absolute; top: 4px; transform: translateX(-50%); font-size: 0.72rem; color: var(--faint); }
+.ladder-axis .tick::before { content: ""; position: absolute; left: 50%; top: -5px; width: 1px; height: 4px; background: var(--line-2); }
+.ladder-rows { list-style: none; margin: 0; padding: 0; }
+.ladder-row { padding: 3px 0; border-bottom: 1px solid rgba(233,237,245,0.04); }
+.ladder-row .lbl { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.9rem; }
+.ladder-row .lbl b { font-weight: 500; }
+.fam-dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--c, var(--sx)); margin-right: 6px; vertical-align: 1px; }
+.ladder-row .lbl small { color: var(--faint); }
+.ladder-row .track { position: relative; height: 14px; }
+.ladder-row .bar { position: absolute; left: 0; top: 4px; height: 5px; border-radius: 0 4px 4px 0; background: var(--unknown); opacity: 0.85; }
+.ladder-row .bar.v-pass { background: var(--pass); } .ladder-row .bar.v-partial { background: var(--partial); } .ladder-row .bar.v-fail { background: var(--fail); }
+.ladder-row .cap { position: absolute; top: -3px; font-size: 0.8rem; margin-left: 4px; line-height: 1.3; }
+.ladder-row .num, .ladder-head .num, .ab-row .num { text-align: right; font-variant-numeric: tabular-nums; font-size: 0.9rem; }
+.table-wrap { margin-top: 22px; }
+.table-wrap summary { cursor: pointer; color: var(--muted); padding: 8px 0; }
+table.runs { width: 100%; border-collapse: collapse; font-size: 0.86rem; margin-top: 10px; }
+table.runs th, table.runs td { text-align: left; padding: 7px 8px; border-bottom: 1px solid var(--line); vertical-align: top; }
+table.runs th { color: var(--faint); font-weight: 500; text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.7rem; }
+table.runs td.n, table.runs th.n { text-align: right; font-variant-numeric: tabular-nums; }
+table.runs td .case { color: var(--faint); font-size: 0.78rem; display: block; }
+@media (max-width: 760px) {
+ table.runs thead { display: none; }
+ table.runs, table.runs tbody, table.runs tr, table.runs td { display: block; }
+ table.runs tr { border: 1px solid var(--line); border-radius: 10px; margin-bottom: 10px; padding: 6px 10px; background: var(--card); }
+ table.runs td { border: 0; padding: 3px 0; display: flex; justify-content: space-between; gap: 10px; }
+ table.runs td::before { content: attr(data-l); color: var(--faint); text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.68rem; }
+ table.runs td.n { text-align: right; }
+}
+
+/* struggle strip */
+.chart { background: var(--card); border: 1px solid var(--line); border-radius: var(--r); padding: 10px 6px 4px; overflow-x: auto; }
+.strip { display: block; max-width: 100%; height: auto; }
+.strip .grid { stroke: var(--line); } .strip .lane { stroke: var(--line-2); }
+.strip .axis { font: 12px var(--sans); fill: var(--muted); } .strip .axis.dim { fill: var(--faint); }
+.strip .axis.v-pass { fill: var(--pass); } .strip .axis.v-partial { fill: var(--partial); } .strip .axis.v-fail { fill: var(--fail); }
+.strip .dot { stroke: var(--card); stroke-width: 1.5; fill: var(--unknown); }
+.strip .dot.v-pass { fill: var(--pass); } .strip .dot.v-partial { fill: var(--partial); } .strip .dot.v-fail { fill: var(--fail); }
+.strip .dot-g:hover .dot, .strip .dot-g:focus-visible .dot { stroke: #fff; r: 6.5; }
+.strip .dot-g { outline: none; }
+.stat-row { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 14px; }
+.stat { border-radius: 12px; padding: 10px 14px; min-width: 150px; }
+.stat .k { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.12em; color: var(--muted); display: flex; gap: 6px; align-items: center; }
+.stat .v { font-family: var(--serif); font-size: 1.6rem; line-height: 1.1; }
+.stat .v small { font-family: var(--sans); font-size: 0.8rem; color: var(--muted); }
+
+/* test 3 */
+.t3-list { display: grid; gap: 10px; }
+.t3 { display: grid; grid-template-columns: 220px 1fr; gap: 6px 18px; border-radius: 12px; padding: 12px 14px; }
+@media (max-width: 700px) { .t3 { grid-template-columns: 1fr; } .t3-row { grid-template-columns: 30px 1fr; } .t3-row > .num { grid-column: 2; text-align: left; font-size: 0.8rem; color: var(--muted); } .t3-row .note, .t3-row .noteb { grid-column: 1 / -1; } .pips i { width: 5px; height: 9px; } }
+.t3 .head b { font-weight: 500; display: block; }
+.t3 .head .chips { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px; }
+.t3 .flavors { display: grid; gap: 8px; }
+.t3-row { display: grid; grid-template-columns: 34px 1fr auto; gap: 4px 12px; align-items: center; font-size: 0.88rem; }
+.t3-row .flavor { font-family: var(--serif); color: var(--gold); font-size: 1.1rem; }
+.t3-row .facts { display: flex; flex-wrap: wrap; gap: 6px 16px; align-items: center; color: var(--muted); }
+.t3-row .judge { font-size: 0.85rem; }
+.t3-row .judge.ok { color: var(--pass); } .t3-row .judge.bad { color: var(--fail); }
+.t3-row .note { grid-column: 2 / -1; color: var(--muted); font-size: 0.84rem; margin: 0; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
+.t3-row .note.open { display: block; }
+.noteb { background: none; border: 0; color: var(--teal); cursor: pointer; text-align: left; padding: 0; font-size: 0.8rem; }
+.t3-row .noteb { grid-column: 2 / -1; justify-self: start; }
+.pips { display: inline-flex; gap: 2px; vertical-align: middle; }
+.pips i { width: 7px; height: 11px; border-radius: 2px; background: rgba(233,237,245,0.1); display: inline-block; }
+.pips i.on { background: var(--teal); }
+.pips.rubric i.on { background: var(--gold); }
+.pips.api i.on { background: var(--sapphire); }
+.rubric-num { font-variant-numeric: tabular-nums; }
+
+/* A/B */
+.ab-legend { list-style: none; padding: 0; margin: 0 0 12px; display: flex; gap: 14px; flex-wrap: wrap; font-size: 0.85rem; color: var(--muted); }
+.ab-legend i { display: inline-block; width: 12px; height: 12px; border-radius: 50%; margin-right: 6px; vertical-align: -1px; }
+.ab-list { display: grid; gap: 6px; }
+.ab-row { display: grid; grid-template-columns: 230px 1fr 70px; gap: 12px; align-items: center; padding: 6px 0; border-bottom: 1px solid rgba(233,237,245,0.05); }
+@media (max-width: 700px) { .ab-row { grid-template-columns: 130px 1fr 60px; } }
+.ab-row .lbl { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.9rem; }
+.ab-row .lbl b { font-weight: 500; }
+.gain { color: var(--pass); font-size: 0.8rem; }
+.ab-track { position: relative; height: 18px; border-bottom: 1px solid var(--line); }
+.ab-line { position: absolute; top: 8px; height: 2px; background: var(--line-2); }
+.ab-dot { position: absolute; top: 3px; width: 12px; height: 12px; border-radius: 50%; transform: translateX(-50%); background: var(--sx); border: 2px solid var(--ink); }
+.ab-dot, .ab-legend i { background: var(--c, var(--sx)); }
+.ab-dot:hover, .ab-dot:focus-visible { border-color: #fff; }
+.ab-errors { margin-top: 14px; color: var(--muted); font-size: 0.85rem; }
+.ab-errors summary { cursor: pointer; }
+.ab-errors li { margin: 4px 0; } .ab-errors code { color: var(--faint); }
+
+/* gallery */
+.set-row { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 18px; }
+.set-card { border-radius: 12px; padding: 10px 14px; display: grid; grid-template-columns: auto; gap: 2px; min-width: 200px; }
+.set-card b { font-family: var(--serif); font-weight: 500; font-size: 1.15rem; }
+.set-card span { color: var(--muted); font-size: 0.85rem; }
+.gallery { position: relative; padding: 18px; margin: 0 -18px; border-radius: 20px;
+ background: radial-gradient(900px 400px at 50% 0%, color-mix(in srgb, var(--magenta) 10%, transparent), transparent 70%), repeating-linear-gradient(0deg, transparent 0 23px, rgba(233,237,245,0.025) 23px 24px), #0a0f1d; box-shadow: inset 0 0 0 1px var(--line), inset 0 30px 60px rgba(0,0,0,0.35); }
+.gallery .reveal-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); grid-auto-flow: dense; gap: 18px; }
+.shot { border-radius: 6px; overflow: hidden; display: flex; flex-direction: column; box-shadow: 0 18px 30px -18px rgba(0,0,0,0.8), 0 0 0 1px rgba(0,0,0,0.5); }
+.shot.featured { grid-column: span 2; }
+@media (max-width: 560px) { .shot.featured { grid-column: auto; } .gallery { margin: 0 -8px; padding: 10px; } }
+/* a frame and a mat around every picture, a brass plaque under it */
+.shot .pic { position: relative; aspect-ratio: 16 / 10; margin: 10px 10px 0; border-radius: 3px; background: radial-gradient(circle at 50% 40%, #121a30, #06091a);
+ box-shadow: 0 0 0 1px rgba(242,193,78,0.45), 0 0 0 5px #0f1529, 0 0 0 6px rgba(242,193,78,0.25), inset 0 0 18px rgba(0,0,0,0.6); }
+.shot.featured .pic { aspect-ratio: 16 / 9; }
+.shot .pic img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; opacity: 0; transition: opacity 0.35s; }
+.shot .pic img.broken { display: none; }
+.shot .body::before { content: ""; display: block; height: 2px; margin: 0 0 8px; border-radius: 2px; background: linear-gradient(90deg, transparent, var(--c, var(--gold)) 40%, var(--gold) 60%, transparent); opacity: 0.8; }
+.shot .pic img.on { opacity: 1; }
+.shot .pic .blank { position: absolute; inset: 0; display: grid; place-items: center; color: var(--faint); font-size: 0.85rem; text-align: center; padding: 14px; }
+.shot .pts span.l0 { color: var(--faint); }
+.shot .pic .blank i { font-style: normal; font-size: 2rem; display: block; opacity: 0.5; }
+.shot .frames { position: absolute; left: 8px; bottom: 8px; display: flex; gap: 4px; margin: 0; padding: 0; list-style: none; }
+.shot .frames button { min-width: 26px; height: 20px; border-radius: 6px; border: 1px solid rgba(255,255,255,0.3); background: rgba(12, 18, 34, 0.7); color: var(--text); font-size: 0.62rem; cursor: pointer; padding: 0 5px; white-space: nowrap; }
+.shot .frames button[aria-pressed="true"] { background: var(--gold); color: #1a1200; border-color: var(--gold); }
+.shot .body { padding: 14px 14px 12px; display: grid; grid-template-columns: 1fr 64px; gap: 4px 10px; align-items: start; }
+.shot .body > div:first-child { grid-column: 1; }
+.shot .body b { font-weight: 500; display: block; line-height: 1.3; font-family: var(--serif); font-size: 1.08rem; }
+.shot .body .meta { color: var(--muted); font-size: 0.8rem; display: flex; flex-wrap: wrap; gap: 4px 8px; align-items: center; }
+.shot .body .note { grid-column: 1 / -1; color: var(--muted); font-size: 0.84rem; margin: 2px 0 0; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
+.shot .body .note.open { display: block; }
+.shot .body .noteb { grid-column: 1 / -1; }
+.shot .pts { grid-column: 1 / -1; display: flex; flex-wrap: wrap; gap: 4px 10px; font-size: 0.74rem; color: var(--faint); margin-top: 2px; }
+.shot .pts span.l2 { color: var(--pass); } .shot .pts span.l1 { color: var(--partial); }
+.petals .petal-bg { fill: rgba(233,237,245,0.07); }
+.petals .petal { fill: var(--partial); } .petals .petal.lvl-2 { fill: var(--pass); }
+.petals .petal-total { font: 600 13px var(--sans); fill: var(--text); }
+.shot .cut { color: var(--fail); }
+
+/* findings */
+.findings { display: grid; gap: 16px; }
+.finding { border-radius: var(--r); padding: 20px 22px; display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: 10px 28px; }
+/* the typographic moment: lead metric as big numerals */
+.big-num { display: grid; gap: 2px; margin-bottom: 12px; }
+.big-num .lbl { color: var(--muted); font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.12em; }
+.big-num .row { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0 10px; font-family: var(--serif); line-height: 1; }
+.big-num .from { font-size: clamp(1.6rem, 3vw, 2.4rem); color: var(--faint); font-variant-numeric: tabular-nums; }
+.big-num .from.new { font-size: 1.1rem; text-transform: uppercase; letter-spacing: 0.14em; font-family: var(--sans); }
+.big-num .arrow { font-size: clamp(1.4rem, 2.6vw, 2rem); color: var(--gold); }
+.big-num .to { font-size: clamp(2.8rem, 5.5vw, 4.4rem); font-variant-numeric: tabular-nums; background: linear-gradient(100deg, #fff6d6, var(--teal) 60%, var(--sapphire)); -webkit-background-clip: text; background-clip: text; color: transparent; padding-right: 0.04em; }
+.big-num .unit { font-family: var(--sans); color: var(--muted); font-size: 0.95rem; }
+.big-num .gainbadge { font-family: var(--sans); font-size: 0.82rem; font-weight: 600; color: #0c1222; background: var(--pass); border-radius: 999px; padding: 2px 9px; align-self: center; }
+@media (max-width: 860px) { .finding { grid-template-columns: 1fr; } }
+.finding .when { color: var(--gold); font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.14em; display: flex; gap: 10px; align-items: center; }
+.finding h3 { font-size: 1.45rem; margin: 4px 0 8px; grid-column: 1 / -1; }
+.finding .summary { margin: 0; }
+.finding .settings { margin-top: 10px; font-size: 0.8rem; color: var(--muted); word-break: break-word; }
+.finding .settings code { color: var(--teal); }
+.finding .quality, .finding .caveat { font-size: 0.9rem; color: var(--muted); margin: 10px 0 0; }
+.finding .caveat::before, .finding .quality::before { content: attr(data-k); display: block; color: var(--faint); font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.12em; }
+.finding .caveat { border-left: 2px solid var(--fail); padding-left: 10px; }
+.ba { display: grid; grid-template-columns: minmax(90px, 0.8fr) 1.4fr auto; gap: 10px; align-items: center; font-size: 0.86rem; margin: 6px 0; }
+.ba-label { color: var(--muted); }
+.ba-bars { display: grid; gap: 3px; }
+.ba-track { display: block; height: 6px; background: rgba(233,237,245,0.06); border-radius: 4px; }
+.ba-bar { display: block; height: 100%; border-radius: 4px; }
+.ba-bar.before { background: var(--faint); } .ba-bar.after { background: var(--teal); }
+.ba-num { white-space: nowrap; font-variant-numeric: tabular-nums; } .ba-num small { color: var(--muted); }
+.ba-key { color: var(--faint); font-size: 0.75rem; display: flex; gap: 12px; margin-bottom: 4px; }
+.ba-key i { display: inline-block; width: 14px; height: 6px; border-radius: 3px; margin-right: 4px; vertical-align: 1px; }
+.ba-key i.before { background: var(--faint); } .ba-key i.after { background: var(--teal); }
+
+/* timeline river */
+.river { list-style: none; margin: 0; padding: 0 0 0 26px; position: relative; }
+.river::before { content: ""; position: absolute; left: 7px; top: 6px; bottom: 6px; width: 2px; background: linear-gradient(var(--teal), var(--sapphire), var(--violet), var(--magenta), var(--gold)); border-radius: 2px; }
+.river li { position: relative; padding: 0 0 26px 14px; }
+.river li::before { content: ""; position: absolute; left: -25px; top: 7px; width: 12px; height: 12px; border-radius: 50%; background: var(--ink); border: 2px solid var(--gold); }
+.river .date { color: var(--gold); font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.14em; }
+.river .era { color: var(--faint); margin-left: 8px; letter-spacing: 0; text-transform: none; }
+.river h3 { font-size: 1.3rem; margin: 2px 0 6px; }
+.river .what { margin: 0 0 6px; max-width: 76ch; }
+.river .why { color: var(--muted); font-size: 0.92rem; margin: 0; max-width: 76ch; }
+.river .why::before { content: "why "; color: var(--teal); text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.7rem; }
+
+/* log */
+.kind-row { list-style: none; margin: 0 0 14px; padding: 0; display: flex; flex-wrap: wrap; gap: 6px; }
+.kind-row button { background: var(--card); border: 1px solid var(--line); border-radius: 999px; padding: 3px 10px; cursor: pointer; font-size: 0.82rem; color: var(--muted); }
+.kind-row button[aria-pressed="true"] { border-color: var(--gold); color: var(--gold); background: rgba(242,193,78,0.08); }
+.events .reveal-list { display: grid; gap: 8px; }
+.event { display: grid; grid-template-columns: 130px 1fr; gap: 12px; padding: 10px 12px; border-radius: 10px; font-size: 0.9rem; }
+@media (max-width: 600px) { .event { grid-template-columns: 1fr; gap: 4px; } }
+.event time { color: var(--faint); font-variant-numeric: tabular-nums; font-size: 0.82rem; display: block; }
+.event .chip { margin-top: 4px; }
+.event p { margin: 0; }
+
+/* caveats */
+.caveats { margin: 0; padding: 0; list-style: none; counter-reset: cav; display: grid; gap: 10px; }
+.caveats li { counter-increment: cav; border-left: 3px solid var(--fail); border-radius: 12px; padding: 14px 18px 14px 56px; position: relative; }
+.caveats li::before { content: counter(cav, decimal-leading-zero); position: absolute; left: 16px; top: 10px; font-family: var(--serif); font-size: 1.5rem; color: var(--fail); }
+
+/* footer */
+.foot { max-width: var(--maxw); margin: 40px auto 0; padding: 30px clamp(16px, 4vw, 48px) 60px; border-top: 1px solid var(--line); color: var(--muted); font-size: 0.9rem; }
+.links { list-style: none; margin: 10px 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px 20px; }
+.small { font-size: 0.8rem; color: var(--faint); }
+
+@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { transition: none !important; animation: none !important; } }
+@media print { body { background: #fff; color: #000; } .hero-art, .filters, .more { display: none; } }
diff --git a/site/data/README.md b/site/data/README.md
new file mode 100644
index 0000000..60c4f1d
--- /dev/null
+++ b/site/data/README.md
@@ -0,0 +1,208 @@
+# site/data: the data behind the page
+
+`bakeoff.json` is the only file the page reads. `site/index.html` and `site/assets/*.js` are a renderer: every
+number, list, chart, chip and count on the page is derived from this file at load time, so adding a run, a model, a
+finding, a test or a one-shot result needs **no HTML, CSS or JS change**. Rebuild the file, publish, done.
+
+```
+python3 -I site/tools/build_data.py # rebuilds bakeoff.json and copies frames into site/frames/
+node site/tools/check_site.mjs # proves the page's derivations run on the new file (CI runs this too)
+bash site/tools/render_smoke.sh # local only: renders the real file and every mutated copy in headless Chromium
+```
+
+`build_data.py` merges three sources:
+
+| Source | What it supplies |
+| --- | --- |
+| `reports/dashboard/data.json` | `generated`, `hardware`, `caveats`, `picks` (from `recs`), `timeline`, `events` (results only, latest 80), `models`, `runs`, `test3`, `ab` |
+| the build itself | `built`, the time `build_data.py` ran; shown next to `generated` so readers can see the run table is older than the findings |
+| `oneshots/{orrery,pagoda}/grades.tsv` + `*/frames/*.webp` | `oneshots.orrery`, `oneshots.pagoda` (frames are copied, never the model-written files) |
+| `site/data/curated.json` (hand-written) | `title`, `tagline`, `tests`, `findings`, `links` |
+
+Everything that is prose on the page and *not* in this file is a section intro that stays true whatever the data says.
+The ornament in each chapter head is also drawn from the data of that chapter (runs as a constellation, orrery scores
+as gear teeth, pagoda scores as petals, …); it is decorative and hidden from assistive technology.
+
+## How the page treats the data
+
+- Missing or `null` fields render as `–` or are skipped. Empty lists render an "nothing here yet" line. Unknown
+ values (a new `kind`, a new test number, a new one-shot set, a model id with no entry in `models`) render with
+ sensible fallbacks: the test number alone, a grey chip, a fallback model card named after the id.
+- Model ids are matched exactly: `runs[].model`, `test3[].model`, `ab[].model`, `oneshots.*[].entry` and
+ `picks.*.model` should be keys of `models`.
+- Family hue: every real family gets its own colour, in the order of `picks.families` then alphabetical: the first
+ eight take the fixed jewel palette, later ones get a hue dropped into the widest gap left on the wheel, so adding a
+ family never recolours the ones before it. `Other`/`Unknown` are always the neutral silver and no real family is.
+ Engine colours in the A/B chart work the same way, one per distinct `ab[].engine` value.
+- Scales: "n of m" numbers come from the data. Checks are shown against the largest `checks` seen for that test,
+ one-shot points against the largest point value seen for that test, the test-3 rubric against the largest rubric
+ seen; `tests[].max_checks`, `tests[].max_point` and `tests[].max_rubric` override those when present.
+- Counting: a run is counted on exactly one test card, under its `flavor` when it has one (2T) and under its `test`
+ otherwise. In the run filter, picking a test also shows its flavors; picking a flavor shows only those.
+- Frames: only relative paths under `frames/` whose every segment starts with a letter, digit, `_` or `-` and ends in
+ `.webp` are shown; `..`, dot-files and empty segments are rejected. Anything else is dropped silently. The number in
+ the file name (`frame-2000.webp`) is read as milliseconds for the flipbook label and alt text. The flipbook starts
+ on the last (richest) frame and only ever steps onto frames that have really loaded; if none loads the card is blank.
+- Links: only `https://github.com/alexderz/agentic-model-testing` itself, or that followed by `/`, `#` or `?`, becomes
+ a link (never with `..`); links open in a new tab with `rel="noopener noreferrer"`.
+- Free text (`note`, `verdict`, `text`, …) is always inserted as text, never as markup.
+- Lists of any size are fine: the runs ladder shows 40 at a time, the table caps at 300 per filter, the gallery,
+ test 3 and the log reveal 12 at a time.
+
+## Schema (`schema: "bakeoff-site/1"`)
+
+Fields marked *opt* may be missing or `null`. Types are what the page expects; it coerces numeric strings.
+
+### Top level
+
+| Field | Type | Meaning |
+| --- | --- | --- |
+| `schema` | str | `bakeoff-site/1`. |
+| `generated` | str, opt | When the source dashboard data was generated, shown under the hero stats. |
+| `built` | str, opt | When this file was built, shown next to `generated` with the newest run and finding dates. |
+| `title`, `tagline` | str | Hero title and one-line pitch (from `curated.json`). |
+| `links` | object | `repo`, `cards`, `method`, `conclusions`, `log`: repository URLs for the footer. Extra keys are shown too. |
+| `hardware` | object of str | Spec plate. Any key renders; `gpu` also labels the sun of the orrery. |
+| `caveats` | list of str | Shown in full in the last section. Never drop these. |
+| `tests` | list | The test catalogue, see below. |
+| `findings` | list | Headline findings, newest first, see below. |
+| `picks` | object | `overall`, `uncensored` (lists of picks) and `families` (one row per family). |
+| `timeline` | list | Eras of the work; sorted by `date` on the page. |
+| `events` | list | Lab-notebook entries; sorted newest first on the page. |
+| `models` | object | Model cards keyed by model id. |
+| `runs` | list | Agent runs for tests 1, 2 and 2T. |
+| `test3` | list | Test 3 rows. |
+| `ab` | list | Engine A/B speed probes. |
+| `oneshots` | object of lists | One list per one-shot set (`orrery`, `pagoda`, …). New sets appear automatically. |
+| `counts` | object, opt | `models`, `runs`, `test3`, `oneshots`, `frames`, `pass`. Informational; the page recounts from the lists and the checker compares the two. |
+
+### `tests[]`
+
+| Field | Type | Meaning |
+| --- | --- | --- |
+| `id` | str | Stable id, e.g. `t2t`. |
+| `number` | str | What runs refer to: `"1"`, `"2"`, `"2T"`, `"3"`, `"5"`… Matched against `runs[].test`, `runs[].flavor`, `oneshots.*[].test`. |
+| `name` | str | Card title. |
+| `kind` | str, opt | `agentic` or `one-shot` today; any value becomes a chip and a CSS class. |
+| `what` | str, opt | The task in one sentence. |
+| `graded` | str, opt | How it is graded. |
+| `points` | list of str, opt (wished) | Names for the one-shot rubric points A–E in order, e.g. `["draws","planets","gears","lighting","motion"]`. Letters are shown when absent. |
+| `max_checks`, `max_point`, `max_rubric` | number, opt | Scale overrides: checks out of `max_checks`, each one-shot point out of `max_point`, the test-3 rubric out of `max_rubric`. Without them the page uses the largest value seen. |
+
+### `findings[]`
+
+| Field | Type | Meaning |
+| --- | --- | --- |
+| `date` | str `YYYY-MM-DD` | Shown as a date. |
+| `title` | str | Heading. |
+| `kind` | str, opt | `tuning`, `engine`, … any value becomes a chip. |
+| `summary` | str | The finding in a paragraph. |
+| `settings` | str, opt | Flags, shown in monospace. |
+| `metrics[]` | list, opt | `{label, before, after, unit}`; `before` may be `null` (shown as "new"). The first metric with an `after` is set as big before → after numerals; the rest are before/after bars with the gain ratio. Fractional values keep one decimal. |
+| `quality` | str, opt | How quality was checked. |
+| `caveat` | str, opt | Shown with a red rule. |
+
+### `picks`
+
+`overall[]` and `uncensored[]`: `{role, model, verdict, tradeoff, cases[]}`. `model` is a model id; `cases` are
+`runs[].case` values, and the matching runs are listed on the card.
+
+`families[]`: `{family, smartest, fastest, unc_smartest, unc_fastest, note}`; the four picks are model ids or `null`
+("none yet").
+
+### `timeline[]`: `{date, era, title, what, why}`. `events[]`: `{when, kind, text}`.
+
+### `models{id}`
+
+| Field | Type | Meaning |
+| --- | --- | --- |
+| `id` | str | Same as the key. |
+| `family` | str | Family name; drives colour and grouping. `Other` is always grey. |
+| `label` | str | Full label; the text before the first ` · ` is used as the short name. |
+| `base`, `arch`, `engine`, `quant` | str, opt | Shown on pick cards and in tooltips. |
+| `kind` | str, opt | `stock`, `abliterated`, `heretic`, `uncensored-tune`, `security-tune`, … |
+| `uncensored` | bool | Marks the model (dashed ring in the orrery, chip elsewhere, filter in the ladder). |
+| `note` | str, opt | Free text. |
+| `vision` | `{label, status}`, opt | Not rendered yet. |
+
+### `runs[]`
+
+| Field | Type | Meaning |
+| --- | --- | --- |
+| `case` | str | Unique case name. Today a `wt-` prefix marks a test-2T run. |
+| `model` | str | Model id. |
+| `test` | int or str | `1` or `2` (2T runs are stored as `2`). |
+| `flavor` | str, opt (wished) | `"2T"` for trust-the-docs runs. Until present, the page derives it from the `wt-` prefix. |
+| `agent` | str, opt | `OpenCode` or `Pi`. |
+| `checks` | int, opt | Test 1: checks passed; shown out of the largest `checks` seen for the test (or `tests[].max_checks`). |
+| `tests_pass`, `tests_fail` | int, opt | The model's own tests. |
+| `subcmds` | int, opt | Test 1: subcommands. |
+| `tps` | float | Tokens per second over the whole run; the ladder's x axis (log). |
+| `minutes` | int | Wall time. |
+| `compactions`, `ctx`, `kv` | opt | Client compactions, context length, KV cache type. |
+| `verdict` | str | `pass`, `partial`, `fail` (status colour + glyph). Other values are grey. |
+| `finished` | str | `YYYY-MM-DD HH:MM`. |
+| `struggle` | object, opt | `{compiles, failed_compiles, rust_errors, loc, errors_per_kloc}`; `errors_per_kloc` drives the struggle strip (test 2 runs only). The "cleanest passing build" stat considers only passing runs with `loc > 0` and `compiles >= 1`. |
+
+### `test3[]`
+
+`{case, model, flavor ("3G" known-good server, "3O" own server), mcp_facts "n/m", api_facts "n/m",
+judgement_right bool, rubric int, note, tps, minutes, finished}`. Facts strings are parsed as `got/of` for the pips;
+the rubric bar scales to the largest rubric seen (or `tests[].max_rubric` for test 3).
+
+### `ab[]`
+
+`{model, engine, variant, decode, quote, prefill, vram, error}`; speeds in tok/s, `vram` MiB. Rows with a `null`
+`decode` are listed under "probes failed to load" with the error text. Rows with `variant == "same flags"` on two
+engines give the ×gain shown next to the model.
+
+### `oneshots.[]`
+
+| Field | Type | Meaning |
+| --- | --- | --- |
+| `case` | str | Case name. |
+| `entry` | str | Model id (llama-swap entry). |
+| `test` | int or str | Test number, matched to `tests[].number`. |
+| `finish` | str | `stop` or `length` (cut off by the cap; shown as "hit the cap"). |
+| `tokens`, `wall_s`, `tok_s` | float, opt | Reply size and speed. |
+| `points` | object | Rubric points keyed `A`…`E`. Any number of keys works; the petal chart grows with it, and each petal is scaled to the largest point value seen for the test (or `tests[].max_point`). |
+| `total` | float, opt | Sum of points; recomputed when missing. |
+| `note` | str | Grader's note. |
+| `frames` | list of str | `frames///frame-.webp`, ascending time. Empty list = blank card. |
+
+## Recipes
+
+**Add a finding.** Append an object to `findings` in `curated.json` (newest first), with at least `date`, `title`,
+`kind`, `summary`; add `metrics` with `before: null` for numbers that have no baseline. Rebuild.
+
+**Add a test.** Append to `tests` in `curated.json` with a unique `id`, the `number` that runs will carry, `name`,
+`kind`, `what`, `graded`. The card appears at once with its run count (0 until runs arrive). Runs of a test that is
+*not* in the catalogue still show up, as "Test N: appears in the results but is not described yet".
+
+**Add a run.** Add it to `reports/dashboard/data.json` as today; `build_data.py` carries the fields listed above. A
+run whose `model` has no entry in `models` still renders (grey, family "Unknown"), but add the model card so it gets
+its family colour and label.
+
+**Add a one-shot set.** Put a `grades.tsv` and frames under `oneshots//`, register the set in `build_data.py`'s
+`oneshots` call, and describe its test in `curated.json`. The gallery, the set summary cards and the test filter pick
+it up without page changes.
+
+## Wished fields
+
+Things the page would use if the data carried them. Each is optional and rendered only when present.
+
+- `runs[].flavor` (`"2T"`): explicit trust-the-docs flag instead of the `wt-` case-name prefix.
+- `tests[].max_checks`, `tests[].max_point`, `tests[].max_rubric`: fixed scales (see above) so a round with no perfect
+ score does not shrink the bars.
+- `runs[].trust` (`tested | avoided | hedged | trusted`): the 2T trust verdict from method.md, to show as a chip.
+- `runs[].tools`: number of MCP tools the test-2 server exposes; conclusions quote it ("12 tools, 155 tests") but the
+ JSON has only `tests_pass`.
+- `runs[].resident` (`gpu | offloaded`): whether the model fit in VRAM, to colour the speed tiers the conclusions
+ describe (rule 1).
+- `tests[].points`: names of the one-shot rubric points (see above), so the petal chart can say "gears 1" instead of
+ "C 1".
+- `models[].params_b` and `models[].active_b`: numeric sizes, to size planets by parameter count instead of only by
+ appearances.
+- `models[].card`: URL of the model card under `docs/model-research/models/`, to link each model name.
+- `oneshots.*[].round` or `finished`: a date, so "newest" sorting does not have to rely on the case name.
+- `counts.generated_from`: the commit of `reports/dashboard/data.json` the file was built from.
diff --git a/site/data/bakeoff.json b/site/data/bakeoff.json
new file mode 100644
index 0000000..a233954
--- /dev/null
+++ b/site/data/bakeoff.json
@@ -0,0 +1,9346 @@
+{
+ "schema": "bakeoff-site/1",
+ "generated": "2026-10-15 14:36 CDT",
+ "built": "2026-10-22 17:25 CDT",
+ "title": "The Bake-off",
+ "tagline": "Which open-weight models can do real agent work on one consumer GPU, how fast, and with what settings.",
+ "links": {
+ "repo": "https://github.com/alexderz/agentic-model-testing",
+ "cards": "https://github.com/alexderz/agentic-model-testing/tree/main/docs/model-research/models",
+ "method": "https://github.com/alexderz/agentic-model-testing/blob/main/docs/model-research/method.md",
+ "conclusions": "https://github.com/alexderz/agentic-model-testing/blob/main/docs/model-research/conclusions.md",
+ "log": "https://github.com/alexderz/agentic-model-testing/blob/main/docs/model-research/log.md"
+ },
+ "hardware": {
+ "gpu": "RTX 3090, 24 GB (sm86)",
+ "ram": "125 GB",
+ "cpu": "AVX2 (no AVX-512)",
+ "weights": "read over the network from a NAS, ~180-280 MB/s first load",
+ "router": "llama-swap (one model at a time)",
+ "agent": "OpenCode 1.18 in a sandboxed container (some runs: Pi)"
+ },
+ "caveats": [
+ "This is a living snapshot of the current state, not an apples-to-apples benchmark. The harness, prompts, grading, engines and client settings changed as we learned (see the timeline); results from different eras are not directly comparable.",
+ "n = 1 per row. One model swung 5/5, 5/5, 2/5 on identical settings; OrcaSAQ wrote a broken HTTP client once and a correct one the next time. A one- or two-check difference is noise. Read pass / partial / fail.",
+ "tok/s is generation throughput averaged over the whole agent run (output + reasoning tokens over wall time). It includes prompt processing, tool time and compaction, so it is lower than a short-prompt benchmark and depends on the task.",
+ "Settings were tuned per model (context, expert offload, KV type, thinking budget) to fill one RTX 3090. Each model ran at its own best fit, not at identical settings.",
+ "Uncensored models are tested for capability on our own software only; the tasks are the same coding tasks as for every other model."
+ ],
+ "tests": [
+ {
+ "id": "t1",
+ "number": "1",
+ "name": "Command-line tool",
+ "kind": "agentic",
+ "what": "Write a Python CLI for the Home Assistant REST API.",
+ "graded": "The grader runs the tool in a sandbox: entry point and help, real data, bad input, bad token, no crash (5 checks), plus the model's own tests."
+ },
+ {
+ "id": "t2",
+ "number": "2",
+ "name": "MCP server in Rust",
+ "kind": "agentic",
+ "what": "Build a Model Context Protocol server in Rust from the spec on disk.",
+ "graded": "Built and driven as a real MCP client: initialize, tools/list and a tools/call that must return real data. Pass, partial or fail."
+ },
+ {
+ "id": "t2t",
+ "number": "2T",
+ "name": "Trust the docs",
+ "kind": "agentic",
+ "what": "Test 2 with a REST reference that has three planted wrong endpoints.",
+ "graded": "Did the model test, avoid, hedge or trust the planted endpoints? Read from the replay's access log and the shipped code."
+ },
+ {
+ "id": "t3",
+ "number": "3",
+ "name": "Use and fix an MCP server",
+ "kind": "agentic",
+ "what": "Describe a recorded house through an MCP server, then find and fix what is wrong with it.",
+ "graded": "Facts checked against the recording, a judgement on whether the server can be trusted, and the fix run against the client."
+ },
+ {
+ "id": "t5",
+ "number": "5",
+ "name": "Brass orrery",
+ "kind": "one-shot",
+ "what": "One reply, no tools: an animated SVG orrery with planets at real ratios and a meshing gear train.",
+ "graded": "Rendered offline in a container with no network; five points of 0-2 (draws, planets, gears, lighting, motion)."
+ },
+ {
+ "id": "t6",
+ "number": "6",
+ "name": "Voxel pagoda",
+ "kind": "one-shot",
+ "what": "One reply, no tools: a three.js voxel Japanese pagoda with cherry trees, pond and torii.",
+ "graded": "Rendered offline with software WebGL; five points of 0-2 (draws, voxels, pagoda, setting, life)."
+ },
+ {
+ "id": "t7",
+ "number": "7",
+ "name": "Ticket fixes in Rust",
+ "kind": "agentic",
+ "what": "Ticket-sized fixes in a real Rust project.",
+ "graded": "The project's own tests, run after the agent finishes."
+ }
+ ],
+ "findings": [
+ {
+ "date": "2026-10-22",
+ "title": "An expert cache doubles Flash-Next on one 3090",
+ "kind": "tuning",
+ "summary": "Qwen3.8 Flash-Next (125B, 6B active) does not fit in 24 GB, so llama.cpp keeps experts in system RAM. Keeping all of them there (-cmoe) and giving the GPU a cache of hot experts (--moe-cache-mib), with q8 KV to make room, beat the old split of 40 layers on CPU on every GGUF tried, at 262k context.",
+ "settings": "-cmoe --moe-cache-mib 12800 -ctk q8_0 -ctv q8_0 -b 2048 -ub 1024 -t 16",
+ "metrics": [
+ {
+ "label": "Decode, orca IQ4_XS",
+ "before": 13,
+ "after": 24,
+ "unit": "tok/s"
+ },
+ {
+ "label": "Prefill at 16-48k",
+ "before": 250,
+ "after": 415,
+ "unit": "tok/s"
+ },
+ {
+ "label": "Decode, swift15 IQ3_XXS",
+ "before": 15,
+ "after": 23,
+ "unit": "tok/s"
+ },
+ {
+ "label": "Decode, abliterated s1.5",
+ "before": 13,
+ "after": 20,
+ "unit": "tok/s"
+ }
+ ],
+ "quality": "Against the old f16 KV config: mean KL 0.0011 and 98 % top-1 agreement over 100k tokens of real code; two loads of the same config differ by KL 0.0002. Needles found at 100k, 190k and 250k.",
+ "caveat": "Lazy tensor reads (llama.cpp's default) make the first pass over unseen text slow when the page cache is cold; -lzm off fixes it but costs about 28 GB of extra RAM."
+ },
+ {
+ "date": "2026-10-21",
+ "title": "Stock Flash-Next at 200k with vision, 24-25 tok/s",
+ "kind": "tuning",
+ "summary": "The stock Flash-Next EXL3 3-bit build on SGLang with an fp8 KV cache serves 204,800 tokens of context and images at 24-25 tok/s, two sessions at once.",
+ "metrics": [
+ {
+ "label": "Decode",
+ "before": null,
+ "after": 25,
+ "unit": "tok/s"
+ },
+ {
+ "label": "Prefill at 190k",
+ "before": null,
+ "after": 2600,
+ "unit": "tok/s"
+ }
+ ],
+ "quality": "Tools, vision and 11 of 11 multi-session checks pass; needle found at 100k, 150k and 190k; a repeated 190k prompt answers in 0.5 s."
+ }
+ ],
+ "picks": {
+ "overall": [
+ {
+ "role": "Smartest",
+ "model": "flashnext",
+ "verdict": "Built the best test-2 server of every run.",
+ "tradeoff": "This build crashed under several sessions. The newer phase-d build served several at once (probe 11 of 11) and passed test 1 at 25.3 tok/s; its test 2 is queued, so the pick still rests on the older build.",
+ "cases": [
+ "wb-flashnext-sglang"
+ ]
+ },
+ {
+ "role": "Fastest competent",
+ "model": "qwen3.8-27b-vllm",
+ "verdict": "Full passes on both tests; the default agent model.",
+ "tradeoff": "The same weights on llama.cpp scored the same and ran 2-4x slower.",
+ "cases": [
+ "wb-qwen3.8-27b-vllm",
+ "wa-qwen3.8-27b-vllm"
+ ]
+ }
+ ],
+ "uncensored": [
+ {
+ "role": "Smartest",
+ "model": "lcpp6-orcarouter-fn-uncensored",
+ "verdict": "Orcarouter fine-tune of Flash-Next; full test-2 pass with long-horizon settings, the most tools and tests and the fewest compiler errors of the big uncensored runs.",
+ "tradeoff": "Slow: 7.6 tok/s, 191 min. Flash-Next Heretic2 is twice as fast for a thinner result (7 tools, 33 tests in 120 min).",
+ "cases": [
+ "wb-orcarouter-fn-uncensored-long-lcpp6-r2"
+ ]
+ },
+ {
+ "role": "Fastest competent",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "verdict": "Two test-2 full passes and 5/5 on test 1; run it with the thinking budget.",
+ "tradeoff": "OrcaSAQ-2-Cyber is faster (about 80 tok/s) but one of its two test-2 runs shipped a broken HTTP client.",
+ "cases": [
+ "wb-qwen3.8-27b-uncensored-vllm-pp",
+ "wa-qwen3.8-27b-uncensored-vllm-pp"
+ ]
+ }
+ ],
+ "families": [
+ {
+ "family": "Qwen3.8 27B",
+ "smartest": "qwen3.8-27b-vllm",
+ "fastest": "qwen3.8-27b-vllm",
+ "unc_smartest": "qwen3.8-27b-uncensored-vllm",
+ "unc_fastest": "orcasaq2-cyber-27b",
+ "note": "vLLM with MTP drafts at 150k context is both: llama.cpp on the same weights scored the same and ran 2-4x slower. Uncensored: the AWQ uncensored checkpoint is the steadier, OrcaSAQ the faster (DFlash2) but variable."
+ },
+ {
+ "family": "Qwen3.8 Flash-Next",
+ "smartest": "flashnext",
+ "fastest": "strata-swift15",
+ "unc_smartest": "lcpp6-flashnext-heretic2",
+ "unc_fastest": "lcpp6-flashnext-heretic2",
+ "note": "SGLang built the best server; Strata runs the GSQ-RCO quants at 21-24 tok/s over a run with full passes. Only llama.cpp runs the uncensored tunes (0.6 is 2.5-4x faster than 0.4)."
+ },
+ {
+ "family": "Tiel Coder 35B",
+ "smartest": "cyber-tiel-coder-35b",
+ "fastest": "tiel-coder-35b",
+ "unc_smartest": "cyber-tiel-coder-35b",
+ "unc_fastest": "cyber-tiel-coder-35b",
+ "note": "IQ4_XS is the fastest model that writes working test-1 code (101 tok/s) but its test-2 server called an invented endpoint; the Q6 security tune passed test 2."
+ },
+ {
+ "family": "Qwen3.6",
+ "smartest": "qwen3.6-27b",
+ "fastest": null,
+ "unc_smartest": null,
+ "unc_fastest": null,
+ "note": "Good on test 1, both failed test 2 (no initialize / no tools). Superseded by Qwen3.8."
+ },
+ {
+ "family": "Gemma 4",
+ "smartest": "gemma-4-31b",
+ "fastest": "gemma-4-26b-a4b-vllm",
+ "unc_smartest": null,
+ "unc_fastest": null,
+ "note": "Fast (45-91 tok/s) but thin: 3 tools on test 2. Needs enable_thinking."
+ },
+ {
+ "family": "Kolibri",
+ "smartest": "kolibri-1",
+ "fastest": null,
+ "unc_smartest": null,
+ "unc_fastest": null,
+ "note": "Test 1 thin, test 2 partial (no initialize); ~19 tok/s. Not competitive here."
+ },
+ {
+ "family": "GLM",
+ "smartest": null,
+ "fastest": null,
+ "unc_smartest": null,
+ "unc_fastest": null,
+ "note": "GLM-4.7-Flash rejected numeric JSON-RPC ids, GLM-4.5-Air never answered initialize and ran at 3-6 tok/s. Dropped."
+ },
+ {
+ "family": "Nemotron",
+ "smartest": null,
+ "fastest": null,
+ "unc_smartest": null,
+ "unc_fastest": null,
+ "note": "Nano 30B quit within minutes (2/5 twice); Super 120B passed test 1 with no tests at 8.5 tok/s. Not taken to test 2."
+ },
+ {
+ "family": "Other",
+ "smartest": null,
+ "fastest": null,
+ "unc_smartest": null,
+ "unc_fastest": null,
+ "note": "Devstral Small 2, Bonsai 2 (invented APIs), Nanbeige 3B, Qwen3-VL-8B, Jan Nano: inconsistent or failing on test 1. Excluded."
+ }
+ ]
+ },
+ "timeline": [
+ {
+ "date": "2026-09-23",
+ "era": "Round 1",
+ "title": "One prompt, Pi agent, API coverage",
+ "what": "Write a Python CLI for the Home Assistant REST API. Pi agent, llama.cpp only, 17 cases. Scored by endpoints touched (of 9) and whether the code compiles.",
+ "why": "A first look at which local models write working code at all."
+ },
+ {
+ "date": "2026-09-27",
+ "era": "Tests 2, 3A, 3B",
+ "title": "Build an MCP server, then use one",
+ "what": "OpenCode in a container against a recorded Home Assistant. Test 2: build a Rust MCP server from the spec on disk. Test 3A/3B: describe the house through your own server / someone else's.",
+ "why": "Separate building a tool from using one; test 1 did not separate models."
+ },
+ {
+ "date": "2026-09-29",
+ "era": "Abliteration cohort",
+ "title": "Can uncensored Flash-Next still do the work?",
+ "what": "Three uncensored Flash-Next routes (orcarouter fine-tune, Heretic2, abliterated s1.5) plus the stock model through the MCP test.",
+ "why": "Red-team work on our own software needs models that do not refuse."
+ },
+ {
+ "date": "2026-09-30",
+ "era": "Harness fixes",
+ "title": "Offloaded models produced zero output",
+ "what": "mmap + experts in RAM page-faulted the weights off NFS during the first request. Fix: -lm none (load eagerly). Also: 3 h case cap, longer client timeouts, guaranteed result records.",
+ "why": "Several early 'failures' were the harness, not the model."
+ },
+ {
+ "date": "2026-10-01",
+ "era": "Wave A",
+ "title": "Test 1 graded by running the tool",
+ "what": "Same CLI task, now graded by executing it in a sandbox: entry point + help, real reads, bad input, bad auth, no crash, plus the model's own tests. fill_vram tunes context and offload per model with real loads.",
+ "why": "Counting endpoints in the source credited argparse help text and invented APIs."
+ },
+ {
+ "date": "2026-10-03",
+ "era": "Wave B",
+ "title": "Test 2 graded by driving the server",
+ "what": "The Rust MCP server is built and spoken to as a real MCP client: initialize, tools/list, a real tools/call against the replay. Every failure verified by hand.",
+ "why": "Test 2 separates models that test 1 cannot: invented endpoints, broken handshakes, networking bugs."
+ },
+ {
+ "date": "2026-10-04",
+ "era": "Client settings",
+ "title": "Context margin and thinking budget",
+ "what": "OpenCode is told the context limit minus max(10%, 16k); a thinking budget of min(24k, reply cap − 6k) on every engine.",
+ "why": "Runs died on context overflow, and on single thinks that ate the whole reply."
+ },
+ {
+ "date": "2026-10-04",
+ "era": "New engines",
+ "title": "vLLM, SGLang, Strata",
+ "what": "vLLM (HyperQwen) for the dense 27B, SGLang (EXL3) and Strata for Flash-Next, each behind llama-swap as a container.",
+ "why": "Engine mattered as much as model: same weights, 2-5x speed."
+ },
+ {
+ "date": "2026-10-05",
+ "era": "llama.cpp 0.6",
+ "title": "A second llama.cpp, and long-horizon runs",
+ "what": "Official llama.cpp v0.6.0 A/B against 0.4.1; 8 h long-horizon test 2 with Qwen's own long-run sampling; small-window vLLM profiles with OpenCode and Pi; Kolibri.",
+ "why": "0.6.0 is 2.5-4x faster on Flash-Next MoE; the uncensored Flash-Next finally finished test 2."
+ },
+ {
+ "date": "2026-10-06",
+ "era": "Uncensored round",
+ "title": "Long runs for the slower uncensored models",
+ "what": "ThinkingCap-27B Heretic (new), and 8 h test 2 for Flash-Next Heretic2, Abliterated s1.5 and q38-27b-cyber.",
+ "why": "Find the smartest uncensored model, not just the fastest."
+ },
+ {
+ "date": "2026-10-07",
+ "era": "Test 3",
+ "title": "Use an MCP server through a subagent, and fix it",
+ "what": "The agent gets an MCP server's source and a subagent whose only tools are that server's. It must extract 14 facts through the subagent, check them against the REST API and fix the server if it is wrong. 3G: a known-good server; 3O: the model's own test-2 server. Transcripts scored on a 12-point rubric.",
+ "why": "Measures how well a model briefs and checks subagents, which tests 1 and 2 cannot see."
+ }
+ ],
+ "events": [
+ {
+ "when": "2026-10-15 08:24",
+ "kind": "model",
+ "text": "Gated repos accepted by the operator: official PersonaPlex-7B weights and orcarouter's own vision heads downloaded and verified; the orcarouter Flash-Next vision entry now uses its own head."
+ },
+ {
+ "when": "2026-10-15 01:15",
+ "kind": "grades",
+ "text": "Ten uncensored pagodas graded: qwen3.8-27b-uncensored-vllm 9, cyber-tiel-coder-35b 9, orcasaq2-cyber-27b 7, flashnext-heretic2 5, six blank from script errors."
+ },
+ {
+ "when": "2026-10-14 22:10",
+ "kind": "grading",
+ "text": "Test 5 graded from re-rendered frames: tiel t06 run 4 10/10, tiel q4kxl 9, HyperQwen 0.31 9; HyperQwen pagoda 0 (blank)."
+ },
+ {
+ "when": "2026-10-14 21:32",
+ "kind": "finding",
+ "text": "HyperQwen vLLM 0.31 timed rounds match 0.30 on short tasks (code about 124 vs 126 tok/s, prose 93 vs 91, structured 135 to 137). The 141k needle passed both ways. Deep code is a little slower on 0.31 (79.5 vs 84.5 tok/s). The warm-up round is not compared."
+ },
+ {
+ "when": "2026-10-14 20:29",
+ "kind": "grading",
+ "text": "Gemma own-server test 3 run 5 is graded: rubric 8/12, 14/14 facts, 2.4 tok/s over 68 min. It fixed list_entities (HashMap to Vec) so tool_call passes. Init still fails, and the probe never called a tool."
+ },
+ {
+ "when": "2026-10-14 19:47",
+ "kind": "engine",
+ "text": "Queued a HyperQwen vLLM 0.31 trial: speed bench against 0.30, then pagoda and orrery one-shots; runs before the uncensored one-shots."
+ },
+ {
+ "when": "2026-10-14 19:38",
+ "kind": "grading",
+ "text": "Tiel Coder test 2 run 5 is a full pass: 26 tests, 80.4 tok/s, 15 min. Gemma test 3 runs 2 to 4 are graded. The known-good server was really checked on three runs."
+ },
+ {
+ "when": "2026-10-14 19:38",
+ "kind": "finding",
+ "text": "Four Gemma test 3 runs wrote a 14/14 facts file without an MCP tool call. Three sent the brief to explore or general instead of mcp-probe. One own-server run started 17 probes and then said it simulated them."
+ },
+ {
+ "when": "2026-10-14 18:57",
+ "kind": "tests",
+ "text": "Test 8 now alternates which task runs first, and stops a case instead of turning screenshots off when the image check gets no answer from the server."
+ },
+ {
+ "when": "2026-10-14 16:31",
+ "kind": "engine",
+ "text": "Posted our RTX 3090 TensorFold 0.6.6 + DFlash2 numbers on upstream issue #603, as a receipt for their 3090 port, with the operator's OK on the exact text. Next is a native build to try when they publish one."
+ },
+ {
+ "when": "2026-10-14 16:15",
+ "kind": "grading",
+ "text": "Gemma test 2 runs 4 and 5 are graded and archived and are not full passes. Run 4 fails the handshake and its tool calls, and its tests hang (131 min, 12 tok/s). Run 5 shakes hands, then sends the method name as the tool name (4 tests, 2 min, 134 tok/s). Qwen3.8-27B vLLM runs 2 and 3 are full passes: 40 tests in 34 min at 73 tok/s, and 32 tests in 25 min at 75 tok/s. One grep call returned a match. Public cards are agentic-toolbox PR 87."
+ },
+ {
+ "when": "2026-10-14 13:39",
+ "kind": "grading",
+ "text": "Tiel t06 test 1 run 5 is graded and archived: 5/5, 42 tests, 7 subcommands, 45 min, 30 tok/s. The read probe showed 416 fixture entities. Gemma test 2 run 2 is a thin full pass (3 tools, 3 tests, 4 min, 154 tok/s) and its glob call returned files. Run 3 fails initialize because the reply uses snake_case field names; the primary tool still returned data. Public cards are agentic-toolbox PR 86."
+ },
+ {
+ "when": "2026-10-14 12:48",
+ "kind": "grading",
+ "text": "Test 7's grader now runs each unseen seed in its own sealed container and refuses to grade a case that never ran; the runner and queue got safer exits. No test 7 case has run yet."
+ },
+ {
+ "when": "2026-10-14 12:36",
+ "kind": "grading",
+ "text": "Tiel t06 test 1 run 4 is graded and archived: 5/5, 38 tests, 18 subcommands, 13 min, 88 tok/s. The read probe showed 329 fixture entities. No glob or grep calls, and no ownership error. Run 5 is still going. The public card row is agentic-toolbox PR 85."
+ },
+ {
+ "when": "2026-10-14 12:11",
+ "kind": "test",
+ "text": "Test 7 added: each model writes a generator for a three-floor labyrinth that must pass a ten-rule checker, on seeds it has not seen; the best mazes will be built in Minecraft."
+ },
+ {
+ "when": "2026-10-14 11:42",
+ "kind": "grading",
+ "text": "Qwen3.8-27B vLLM test 1 run 5 and Tiel t06 test 1 runs 2 and 3 are graded and archived. Qwen run 5 is 5/5 with 114 tests in 25 min at 76 tok/s. Tiel run 2 is 5/5 with 33 tests in 9 min at 106 tok/s. Tiel run 3 is 2/5: reads, bad input and bad auth fail, while 39 tests pass, in 12 min at 96 tok/s. Run 4 just started."
+ },
+ {
+ "when": "2026-10-14 11:11",
+ "kind": "grading",
+ "text": "Qwen3.8-27B vLLM test 1 runs 3 and 4 are graded and archived. Both are 5/5: run 3 has 67 tests in 52 min at 70 tok/s, run 4 has 68 tests in 16 min at 73 tok/s. Run 5 is going."
+ },
+ {
+ "when": "2026-10-14 09:41",
+ "kind": "grading",
+ "text": "Graded 15 fill-to-five pagodas. Tiel t06 runs 4 and 5 both scored 10. Gemma scored 9 and 8, with flat eaves. Qwen3.8-27B vLLM thinking-on runs 1 to 5 are one byte-identical cut-off and score 0. ExLlamaV3 with thinking off scored DFlash2 6, 8, 0 and MTP 0, 0, 0."
+ },
+ {
+ "when": "2026-10-14 09:41",
+ "kind": "grading",
+ "text": "Gemma test 1 runs 2 to 5 are graded and archived. Run 2 is 5/5 checks, 9 pass and 1 fail, 167 tok/s. Run 3 is 3/5: bad input and bad auth fail, 8 tests pass, 143 tok/s. Run 4 is 5/5, 6 tests, 125 tok/s. Run 5 is 4/5 because no_crash failed, 5 tests, 102 tok/s."
+ },
+ {
+ "when": "2026-10-14 08:32",
+ "kind": "finding",
+ "text": "Fill-to-five took the lease at 07:46. Qwen3.8-27B vLLM wrote no voxel pagoda in five tries (each about 6 min, about 95 tok/s, cut off at the length cap). Tiel t06 and Gemma runs 4 and 5 did write pages, thinking-off exllamav3 MTP wrote three, and DFlash2 wrote two with the third started at 08:33. Not graded here. Phase-d was not restarted."
+ },
+ {
+ "when": "2026-10-14 08:07",
+ "kind": "finding",
+ "text": "Qwen3.8-27B on exllamav3 writes a voxel pagoda with thinking on: DFlash2 scored 7, 10 and 9, MTP 0, 0 and 9 (two ran out of the 32k cap). Its thinking budget leaves room for the page; the vLLM entry still runs out."
+ },
+ {
+ "when": "2026-10-14 08:07",
+ "kind": "settings",
+ "text": "Tiel-Coder-35B-A3B (llama.cpp 0.6, 262k) and Gemma-4-26B-A4B (on trial) are daily drivers 5 and 6. The exllamav3 MTP and DFlash2 entries for Qwen3.8-27B stay in llama-swap."
+ },
+ {
+ "when": "2026-10-14 00:48",
+ "kind": "finding",
+ "text": "Night search graded: Tiel-Coder-35B-A3B on llama.cpp 0.6.0 (262k, f16 cache, 149 tok/s short and 98 at 141k) writes the best voxel pagodas (10 and 8, one blank of three); Gemma-4-26B-A4B is fastest (27 s per page, 7, 9 and 0); Qwen3.8-27B with thinking on never finished a page at 32k or 64k."
+ },
+ {
+ "when": "2026-10-14 00:48",
+ "kind": "tests",
+ "text": "Test 6 added: a one-shot voxel Japanese pagoda in three.js, graded from frames rendered offline (no-network Chromium, vendored three.js) and the page's console, 0 to 10."
+ },
+ {
+ "when": "2026-10-14 00:31",
+ "kind": "finding",
+ "text": "The night search for a 150k-or-more coding setup finished. Six of seven meet the bar; Gemma-4-26B-A4B with MTP is the fastest (267 tok/s on short code, 123 at depth, 262k window). Test 6, the one-shot voxel pagoda, is on its third sitting and was not graded here."
+ },
+ {
+ "when": "2026-10-13 23:28",
+ "kind": "finding",
+ "text": "Our llama.cpp image (0.6.0, build 11429) runs Qwen3.8-27B with the DFlash2 drafter as a GGUF at 95 / 43 / 108 tok/s (code / prose / structured), no faster than our MTP entry (95 / 63 / 102 in the same sitting), although the drafter is accepted as often as on exllamav3 (47 %). TensorFold in the same sitting 170 / 85 / 213."
+ },
+ {
+ "when": "2026-10-13 23:28",
+ "kind": "engine",
+ "text": "llama.cpp + DFlash2 recipe under engines/llamacpp-dflash2 (no new image; drafter GGUF pinned on the NAS). Not a bake-off entry and not in llama-swap. The GPU lease was released at 23:17."
+ },
+ {
+ "when": "2026-10-13 22:44",
+ "kind": "finding",
+ "text": "exllamav3 1.6.1 with the DFlash2 drafter writes Qwen3.8-27B at 158 / 73 / 181 tok/s (code / prose / structured) on the RTX 3090, stock and unpatched; TensorFold in the same sitting 170 / 84 / 211; exllamav3 with its own MTP head 116 / 70 / 128. With DFlash2 it holds a 65k window (98k with an 8-bit cache), with MTP 131k. At temperature 0 drafting changes 7 of 15 exllamav3 replies (10 of 15 with MTP); TensorFold's stay identical."
+ },
+ {
+ "when": "2026-10-13 21:47",
+ "kind": "finding",
+ "text": "TensorFold 0.6.6 with the DFlash2 drafter writes Qwen3.8-27B at 167 / 81 / 209 tok/s (code / prose / structured) on the RTX 3090, against 93 / 64 / 100 for our llama.cpp MTP entry and 42 for plain llama.cpp. Its window is 42,724 tokens (73,308 at the memory edge) against 147k and 213k, and prompts are read at the same speed by all three."
+ },
+ {
+ "when": "2026-10-13 21:47",
+ "kind": "engine",
+ "text": "TensorFold 0.6.6 built for the RTX 3090 with a local patch (upstream refuses cards below compute capability 8.9). It is a trial under engines/tensorfold, not a bake-off entry and not in llama-swap. Grok reviewed the patch twice. The GPU lease is released."
+ },
+ {
+ "when": "2026-10-13 20:08",
+ "kind": "grading",
+ "text": "LFM2.5-24B-A2B test 1 graded on both quants with an Opus read of the code. Q4_K_M passes thin: 4 of 5 checks, three read-only commands, 10 of 25. Q6_K fails: it calls API paths the server does not have, 2 of 5 checks, 3 of 25. Both finish in under 2 minutes at 151 to 168 tok/s."
+ },
+ {
+ "when": "2026-10-13 19:32",
+ "kind": "finding",
+ "text": "LFM2.5 Q6 loaded at 131072 context, but the test did not start. The runner skipped it because the earlier harness failure is still recorded. Q4 failed the same way, from a negative thinking budget at 32k. Neither was graded."
+ },
+ {
+ "when": "2026-10-13 18:35",
+ "kind": "model",
+ "text": "LFM2.5-24B-A2B Q4_K_M and Q6_K were added on Titan. Both exit before they serve, so nothing was queued. The weights are there. This check did not retry the load."
+ },
+ {
+ "when": "2026-10-13 15:35",
+ "kind": "finding",
+ "text": "Phase-d test 2 spent 14:05 to 15:05 in two 30-minute bash timeouts on a mock server, then started the real crate. At 15:35 it had 8 Rust files and 1,837 lines, with the GPU busy. Not graded."
+ },
+ {
+ "when": "2026-10-13 14:29",
+ "kind": "finding",
+ "text": "Phase-d test 2 is wedged. Since 14:05 OpenCode has been waiting on a mock python3 server.py (127.0.0.1:8199) whose shell already exited, so the hang watchdog does not fire. The GPU is idle at 22,868 MiB. The 3 h cap is about 16:48. Not graded."
+ },
+ {
+ "when": "2026-10-13 14:07",
+ "kind": "model",
+ "text": "LFM2.5-24B-A2B Q4_K_M finished downloading to the NAS (13.53 GiB). It was not queued. Phase-d still holds the GPU."
+ },
+ {
+ "when": "2026-10-13 14:03",
+ "kind": "model",
+ "text": "The operator asked for LFM2.5-24B-A2B. Q4_K_M (13.53 GiB) is downloading to the NAS. It fits llama.cpp and was not queued. The phase-d case still holds the GPU."
+ },
+ {
+ "when": "2026-10-13 11:31",
+ "kind": "finding",
+ "text": "Titan was down from 07:59 to 11:29. The GPU is idle (lease FREE, 25 MiB). The Qwen3.5-2B baseline did not finish. The bake-off stays paused and did not grade the interrupted phase-d test 2."
+ },
+ {
+ "when": "2026-10-13 10:32",
+ "kind": "finding",
+ "text": "Titan stopped answering on the network between 09:34 and 10:32. The bake-off stays paused and did not grade the interrupted phase-d test 2."
+ },
+ {
+ "when": "2026-10-13 08:33",
+ "kind": "finding",
+ "text": "Titan does not answer on the network. At 07:29 it was running a Qwen3.5-2B baseline at 100% GPU. The bake-off stays paused and did not grade the interrupted phase-d test 2."
+ },
+ {
+ "when": "2026-10-12 05:35",
+ "kind": "grading",
+ "text": "The dashboard queue tile now follows the live test-5 log while the wave-B log still ends at ALL DONE, so a refresh no longer shows the queue as idle during the orrery."
+ },
+ {
+ "when": "2026-10-12 03:35",
+ "kind": "finding",
+ "text": "Tiel Coder with its MTP draft head, test 2 run 3: the server builds and 20 tests pass, but it flushes stdout only when stdin closes, so a client never sees a reply. Test 2 on that build is one usable server in three. Not a broken tool-call format."
+ },
+ {
+ "when": "2026-10-12 03:35",
+ "kind": "finding",
+ "text": "The follow-on is graded. Strata 0.1.42 with the old PCIe share confirmed test 1 at 33.8 tok/s and test 2 at 30.1 tok/s, against 16.8 and 19.2 on the default share. That setting stays."
+ },
+ {
+ "when": "2026-10-12 02:35",
+ "kind": "finding",
+ "text": "Strata 0.1.42 with the old PCIe share passed test 2: 9 tools, 77 tests, 61 min, 30.1 tok/s, against 72 tests, 98 min and 19.2 tok/s on the default share."
+ },
+ {
+ "when": "2026-10-12 02:35",
+ "kind": "finding",
+ "text": "Tiel Coder with its MTP draft head: test 2 run 1 is partial (invented /api/entities, 29 tests) and run 2 is a thin full pass (5 tools, 9 tests, 81 tok/s). Neither showed a broken tool-call format. Run 3 is still going."
+ },
+ {
+ "when": "2026-10-12 01:32",
+ "kind": "finding",
+ "text": "The third Tiel Coder MTP test-1 run also passed (57 tests, 82 tok/s). Grep returned matches and no tool call failed, so drafting has not broken tools on test 1. It is not clearly faster than the plain build."
+ },
+ {
+ "when": "2026-10-12 00:42",
+ "kind": "finding",
+ "text": "The Tiel Coder Q4_K_XL focus wave is fully graded (24 of 24). Test 4 passed 9 of 9 with no false done. The write-up is results-wave-b/TIEL-CODER-FOCUS.md: trust it with a small checked patch, not with one MCP server it writes."
+ },
+ {
+ "when": "2026-10-12 00:42",
+ "kind": "finding",
+ "text": "Strata 0.1.42 with the old PCIe share passed test 1 at 33.8 tok/s (the default-share run was 16.8). The first two Tiel Coder MTP test-1 runs also passed, at 75 and 67 tok/s; neither called glob or grep."
+ },
+ {
+ "when": "2026-10-11 22:37",
+ "kind": "finding",
+ "text": "Six more Tiel Coder test 4 runs passed, including the last bugfix-targets run, so that ticket is 3 of 3. Every hidden check was green and no baseline test regressed. Glob now returns file paths; the old ripgrep unpack error is still gone. Test 4 stays out of the report."
+ },
+ {
+ "when": "2026-10-11 21:41",
+ "kind": "finding",
+ "text": "First test 4 case on Tiel Coder Q4_K_XL passed the hidden checks (bugfix-targets, 161 tests, no regressions). Test 4 is not in the report, so the row lives in results-test4/grades.tsv."
+ },
+ {
+ "when": "2026-10-11 20:17",
+ "kind": "tests",
+ "text": "New test 5: one prompt, one reply, an animated SVG of a clockwork orrery; Claude's own answer is kept as the top of the scale. 15 of our models try it after the current queue."
+ },
+ {
+ "when": "2026-10-11 17:35",
+ "kind": "finding",
+ "text": "The file search tools of the coding agent work now that ripgrep is in the image: in the first three cases graded since the fix the old error is gone and the one grep call made returned its matches. No glob call has been made yet."
+ },
+ {
+ "when": "2026-10-11 15:53",
+ "kind": "tests",
+ "text": "The coding agent's glob and grep tools never worked in the test sandbox because the image had no ripgrep. It is installed now; earlier runs are not repeated, since every model had the same handicap. Runs from this wave on have working search tools."
+ },
+ {
+ "when": "2026-10-11 14:20",
+ "kind": "finding",
+ "text": "Strata 0.1.42 settings for Flash-Next, each of five settings measured twice in opposite orders. Going back to the older PCIe share was the best single change: about 152 seconds per probe against 188 with the release defaults, long answers at about 95 tok/s against 48, and a large prompt read at about 2,000 tok/s against 1,200. Turning tail skip off decodes as fast but does not help reading. Everything ran faster in the second round, so smaller differences are noise."
+ },
+ {
+ "when": "2026-10-11 13:40",
+ "kind": "finding",
+ "text": "The file search tools of the coding agent (glob and grep) have failed inside the test sandbox since at least 2026-10-01: the agent image lacks ripgrep and the fallback download cannot be unpacked there. 57 of 181 runs asked for them and got an error, the reference runs included; the models fell back to shell commands. Not fixed yet, so the running wave stays comparable."
+ },
+ {
+ "when": "2026-10-11 12:16",
+ "kind": "grading",
+ "text": "Test 3 now credits a right value even when the model wrote its answer file in its own layout. Four runs gain: OrcaSAQ-2-Cyber and Gemma 4 31B on the known-good server go from 0 to 14 of 14 facts, Coder390 from 6 to 14 on the known-good server and from 1 to 6 on its own. Every recovered value was checked by hand."
+ },
+ {
+ "when": "2026-10-11 12:16",
+ "kind": "tests",
+ "text": "Test 3 now also puts its task text in a file in the work folder, because models that compacted their conversation lost the required answer layout. Runs from today on are not strictly comparable with the 35 earlier ones."
+ },
+ {
+ "when": "2026-10-11 12:13",
+ "kind": "grading",
+ "text": "Three grading questions are settled. Test 3 will also give its task as a file, and runs that missed only on answer layout will be regraded. Test 1 keeps counting an explicit nothing-matched message with exit code 0 as clean handling of bad input. Test 2 keeps grading the server's main read tool; another working tool does not turn a partial into a pass."
+ },
+ {
+ "when": "2026-10-11 11:32",
+ "kind": "finding",
+ "text": "The newer SGLang build for Flash-Next (phase-d-main) served several sessions at once in a probe, 11 of 11 checks, which the older build could not. In test 1 it passed 5 of 5 at 25.3 tok/s; the older build ran at 44.3 tok/s on 2026-10-01 under earlier harness settings, so the two speeds are not directly comparable."
+ },
+ {
+ "when": "2026-10-11 08:53",
+ "kind": "settings",
+ "text": "Every model entry's settings file is now also copied to a folder on Titan that the llama-watch dashboard can read, with the model's record included, so the dashboard can show per-model settings."
+ },
+ {
+ "when": "2026-10-11 08:30",
+ "kind": "finding",
+ "text": "Strata 0.1.42 on Flash-Next, test 1: both settings pass 5 of 5, but the release defaults were slower on Titan (16.8 tok/s, 94 min) than the three older settings (22.4 tok/s, 62 min). On long replies alone the medians are 18.1 and 24.0 tok/s. One run each, so this needs a controlled speed check before we draw a conclusion."
+ },
+ {
+ "when": "2026-10-11 03:55",
+ "kind": "finding",
+ "text": "The Qwen3-VL-8B Q8 retry fell into a loop in test 1: since 02:34 it has repeated one identical file search more than 1,400 times, after 12 compactions. The three-hour cap ends the run at about 04:02."
+ },
+ {
+ "when": "2026-10-11 00:55",
+ "kind": "finding",
+ "text": "Titan fan work, heat-soaked comparison at the same graphics card load (about 278 W): processor 74 °C instead of 79 °C on average with peaks of 79 °C instead of 90 °C, coolant 34 °C instead of 40 °C, board 34 °C instead of 51 °C, drives 7 to 9 °C cooler, graphics card 2 °C cooler with its fan at 62% instead of 71%."
+ },
+ {
+ "when": "2026-10-10 23:50",
+ "kind": "finding",
+ "text": "Nemotron 3 Nano on the newer llama.cpp with researched sampling still ends test 1 early: it wrote three files in 76 seconds, never ran them and stopped. The command-line tool shows help but reads nothing."
+ },
+ {
+ "when": "2026-10-10 23:20",
+ "kind": "finding",
+ "text": "Titan runs cooler after the fan work. On the same test the processor averaged 71 °C instead of 82 °C and the coolant 34 °C instead of 43 °C; the earlier figures came from a heat-soaked case, so a soaked comparison follows."
+ },
+ {
+ "when": "2026-10-10 17:20",
+ "kind": "finding",
+ "text": "In test 3, a compaction often drops the answer layout the prompt asks for (Gemma 31B, Gemma 26B, Coder390): the values are right but the automatic grade gives little or no credit. The task text exists only in the first message, so the agent cannot re-read it."
+ },
+ {
+ "when": "2026-10-10 16:25",
+ "kind": "model",
+ "text": "Ten retry-wave entries and two Strata 0.1.42 entries for Flash-Next created on Titan."
+ },
+ {
+ "when": "2026-10-10 15:55",
+ "kind": "finding",
+ "text": "The server Gemma 4 26B built on vLLM passed our test-2 grader, but OpenCode cannot connect to it. The grader's client is more forgiving than a real one; a stricter handshake check and a regrade are planned."
+ },
+ {
+ "when": "2026-10-10 14:40",
+ "kind": "engine",
+ "text": "Strata 0.1.42 built and loaded on Titan beside 0.1.40.3. It skips rarely used experts by default (claimed 13 to 16% faster decode, answers change slightly) and keeps the prompt cache when the tool list is reordered."
+ },
+ {
+ "when": "2026-10-10 13:15",
+ "kind": "grading",
+ "text": "Graders repaired and all 125 archived test-1 and test-2 runs regraded. Four test-1 verdicts changed: Bonsai on the ada-surgery stack fail to pass, Flash-Next and one Qwen3.8 quoting run partial to pass, the second Devstral run pass to partial. Test counts corrected on 15 more rows."
+ },
+ {
+ "when": "2026-10-10 13:10",
+ "kind": "grading",
+ "text": "Grader image gained the test libraries respx, pytest-mock and pytest-asyncio; the three Gemma 26B test-1 runs now show 8, 7 and 9 passing tests where they showed 0."
+ },
+ {
+ "when": "2026-10-10 12:00",
+ "kind": "finding",
+ "text": "GLM-5.3-Flash on Maya writes multi-digit numbers split by spaces in tool arguments (a limit of \"1 0\", 434 read as 4342). Both of its test-3 cases timed out because of it. Likely a decode fault in the engine build or the 2-bit weights; not yet diagnosed."
+ },
+ {
+ "when": "2026-10-10 11:00",
+ "kind": "model",
+ "text": "From the daily bookmark scan: Qwen-Image-2.1-Turbo downloaded (not run yet); Mirai S noted as needing an engine of its own; Samsung LittleBit recorded as research only."
+ },
+ {
+ "when": "2026-10-10 10:45",
+ "kind": "tests",
+ "text": "Report builder no longer keeps its own list of models: it reads the entry specs and model records. A plan for one master model catalog is written (catalog/DESIGN.md)."
+ },
+ {
+ "when": "2026-10-10 10:15",
+ "kind": "grading",
+ "text": "Independent audit of queue, configuration, results and graders. Fixed: the test-2 grade script used the live replay port; the retry queue script unloaded models before taking the lease; a failed load could be marked done."
+ },
+ {
+ "when": "2026-10-10 09:50",
+ "kind": "tests",
+ "text": "Test 4 (consistency) built: three tickets against an existing Rust project, five runs each, 45-minute cap. Test 1B repeats test 1 four more times. Eleven models are listed, including Flash-Next on SGLang, Flash-Next Heretic2 and GLM-5.3-Flash on Maya."
+ },
+ {
+ "when": "2026-10-10 00:30",
+ "kind": "model",
+ "text": "Qwen3.8-27B Cyber dropped after its 5-bit rerun failed test 2. Qwen3.8-27B Coder390 EfficientThink added on llama.cpp 0.6."
+ },
+ {
+ "when": "2026-10-10 00:20",
+ "kind": "settings",
+ "text": "Fixed a bug in the script that rewrites an entry's flags for a matrix row (lib.sh set_variant)."
+ },
+ {
+ "when": "2026-10-09 15:00",
+ "kind": "settings",
+ "text": "Two rules adopted after the Cyber loops: every entry serves the maker's recommended sampling (checklist item C13, recommended sampling), and every harness denies repeated identical tool calls (C14, loop guard)."
+ },
+ {
+ "when": "2026-10-09 13:00",
+ "kind": "engine",
+ "text": "Bonsai 2 prepared on the community ada-surgery serving stack (its own engine build on Saturn)."
+ }
+ ],
+ "models": {
+ "bonsai2-27b-ada": {
+ "id": "bonsai2-27b-ada",
+ "family": "Other",
+ "label": "Bonsai 2 27B PTQ1_0 + MTP · bonsai-ada-surgery llama.cpp (46 patches), 262k q8_0, recommended sampling",
+ "base": "prism-ml/Ternary-Bonsai-2-27B",
+ "arch": "dense 27B ternary",
+ "engine": "llama.cpp-ada-ternary bonsai-q8-product (5251968)",
+ "quant": "PTQ1_0",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "bonsai2-27b-pq2-med": {
+ "id": "bonsai2-27b-pq2-med",
+ "family": "Other",
+ "label": "Bonsai 2 27B PQ2 · PrismML fork 2026-10-05, effort medium, 24k budget",
+ "base": "prism-ml/Ternary-Bonsai-2-27B",
+ "arch": "dense 27B ternary",
+ "engine": "PrismML llama.cpp",
+ "quant": "PQ2",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "bonsai2-27b-pq2": {
+ "id": "bonsai2-27b-pq2",
+ "family": "Other",
+ "label": "Bonsai 2 27B PQ2",
+ "base": "prism-ml/Ternary-Bonsai-2-27B",
+ "arch": "dense 27B ternary",
+ "engine": "llama.cpp 0.4",
+ "quant": "PQ2",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "bonsai2-27b": {
+ "id": "bonsai2-27b",
+ "family": "Other",
+ "label": "Bonsai 2 27B (ternary)",
+ "base": "prism-ml/Ternary-Bonsai-2-27B",
+ "arch": "dense 27B ternary",
+ "engine": "llama.cpp 0.4",
+ "quant": "ternary",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "cyber-tiel-coder-35b": {
+ "id": "cyber-tiel-coder-35b",
+ "family": "Tiel Coder 35B",
+ "label": "Cyber-Tiel-Coder-35B 6-bit · llama.cpp, 20 expert layers in RAM",
+ "base": "Tiel-Coder-35B-A3B",
+ "arch": "MoE 35B / 3B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q6_K_XL",
+ "kind": "security-tune",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "devstral-small-2-24b": {
+ "id": "devstral-small-2-24b",
+ "family": "Other",
+ "label": "Devstral Small 2 24B",
+ "base": "mistralai/Devstral-Small-2",
+ "arch": "dense 24B",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q4",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "exl3-qwen3.8-27b-dflash2": {
+ "id": "exl3-qwen3.8-27b-dflash2",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B EXL3 4-bit · exllamav3, DFlash2 drafts, 98k, 8-bit cache",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "exllamav3 1.6.1 (TabbyAPI)",
+ "quant": "EXL3 4.00bpw (head 6 bits, MTP 4 bits); the HF cache keeps two snapshots: 113cf7ab is 4.00bpw (served), 6fe61ad6 is 3.00bpw",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "exl3-qwen3.8-27b-mtp": {
+ "id": "exl3-qwen3.8-27b-mtp",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B EXL3 4-bit · exllamav3, MTP drafts, 196k, 8-bit cache",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "exllamav3 1.6.1 (TabbyAPI)",
+ "quant": "EXL3 4.00bpw (head 6 bits, MTP 4 bits); the HF cache keeps two snapshots: 113cf7ab is 4.00bpw (served), 6fe61ad6 is 3.00bpw",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "flashnext-abliterated-s15": {
+ "id": "flashnext-abliterated-s15",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next Abliterated s1.5 · llama.cpp, experts in RAM",
+ "base": "weight-abliterated Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "IQ4_XS",
+ "kind": "abliterated",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "flashnext-heretic2": {
+ "id": "flashnext-heretic2",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next Heretic2 · llama.cpp, experts in RAM",
+ "base": "cygnal Heretic2 (automated abliteration)",
+ "arch": "MoE 125B / 6B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "IQ4XS-NGQ4",
+ "kind": "heretic",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "flashnext-phased": {
+ "id": "flashnext-phased",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next · SGLang fork phase-d-main, EXL3 3-bit, GPU expert cache",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "sglang sglang-exl3-phase-d-main",
+ "quant": "EXL3 3.05 bpw",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "flashnext": {
+ "id": "flashnext",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next · SGLang, EXL3 3-bit, GPU expert cache",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "SGLang",
+ "quant": "EXL3 3.05 bpw",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "gemma-4-26b-a4b-vllm": {
+ "id": "gemma-4-26b-a4b-vllm",
+ "family": "Gemma 4",
+ "label": "Gemma 4 26B-A4B · vLLM, AWQ, draft model",
+ "base": "google/gemma-4",
+ "arch": "MoE 26B / 4B active",
+ "engine": "vLLM",
+ "quant": "AWQ",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "gemma-4-26b-a4b": {
+ "id": "gemma-4-26b-a4b",
+ "family": "Gemma 4",
+ "label": "Gemma 4 26B-A4B · llama.cpp, all on GPU, 262k context",
+ "base": "google/gemma-4",
+ "arch": "MoE 26B / 4B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q4",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "gemma-4-31b-q8": {
+ "id": "gemma-4-31b-q8",
+ "family": "Gemma 4",
+ "label": "Gemma 4 31B 8-bit · llama.cpp, 72k context",
+ "base": "google/gemma-4",
+ "arch": "dense 31B",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q8_0",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "gemma-4-31b": {
+ "id": "gemma-4-31b",
+ "family": "Gemma 4",
+ "label": "Gemma 4 31B 4-bit · llama.cpp, all on GPU",
+ "base": "google/gemma-4",
+ "arch": "dense 31B",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q4",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "glm-4.5-air": {
+ "id": "glm-4.5-air",
+ "family": "GLM",
+ "label": "GLM-4.5-Air · llama.cpp, experts in RAM",
+ "base": "zai-org/GLM-4.5-Air",
+ "arch": "MoE 106B / 12B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q4",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "glm-4.7-flash": {
+ "id": "glm-4.7-flash",
+ "family": "GLM",
+ "label": "GLM-4.7-Flash",
+ "base": "zai-org/GLM-4.7-Flash",
+ "arch": "MoE",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q4",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "jan-nano-128k": {
+ "id": "jan-nano-128k",
+ "family": "Other",
+ "label": "Jan Nano 128k",
+ "base": "janhq/Jan-nano-128k",
+ "arch": "dense 4B",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q8",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "kolibri-1": {
+ "id": "kolibri-1",
+ "family": "Kolibri",
+ "label": "Kolibri-1 8-bit · llama.cpp 0.6 + patch, experts in RAM",
+ "base": "Aleph-Alpha/Kolibri-1",
+ "arch": "MoE 78B / 3.5B active",
+ "engine": "llama.cpp 0.6 + Kolibri patch",
+ "quant": "Q8_0",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp-glm-5.3-flash-orcarouter": {
+ "id": "lcpp-glm-5.3-flash-orcarouter",
+ "family": "GLM",
+ "label": "GLM-5.3-Flash Orcarouter uncensored · llama.cpp glm5next, experts in RAM",
+ "base": "orcarouter/GLM-5.3-Flash-Uncensored-GGUF",
+ "arch": "MoE 321B / 18B active",
+ "engine": "llama.cpp glm5next branch (86ebfef)",
+ "quant": "Q2_K",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "head on disk, no engine loads it",
+ "status": "head"
+ }
+ },
+ "lcpp6-cyber-tiel-coder-35b": {
+ "id": "lcpp6-cyber-tiel-coder-35b",
+ "family": "Tiel Coder 35B",
+ "label": "Cyber-Tiel-Coder-35B 6-bit · llama.cpp 0.6, 20 expert layers in RAM",
+ "base": "Tiel-Coder-35B-A3B",
+ "arch": "MoE 35B / 3B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q6_K_XL",
+ "kind": "security-tune",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-devstral-24b-q5": {
+ "id": "lcpp6-devstral-24b-q5",
+ "family": "Other",
+ "label": "Devstral Small 2 24B Q5_K_M · llama.cpp 0.6, 70k, Mistral sampling (temperature 0.15) and template",
+ "base": "mistralai/Devstral-Small-2",
+ "arch": "dense 24B",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q5_K_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "retry wave",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-flashnext-abliterated-s15": {
+ "id": "lcpp6-flashnext-abliterated-s15",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next Abliterated s1.5 · llama.cpp 0.6, experts in RAM",
+ "base": "weight-abliterated Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "IQ4_XS",
+ "kind": "abliterated",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-flashnext-heretic2": {
+ "id": "lcpp6-flashnext-heretic2",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next Heretic2 · llama.cpp 0.6, experts in RAM",
+ "base": "cygnal Heretic2",
+ "arch": "MoE 125B / 6B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "IQ4XS-NGQ4",
+ "kind": "heretic",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-glm47f-coding": {
+ "id": "lcpp6-glm47f-coding",
+ "family": "GLM",
+ "label": "GLM-4.7-Flash · llama.cpp 0.6, coding sampling (temperature 0.7), thinking kept between steps",
+ "base": "zai-org/GLM-4.7-Flash",
+ "arch": "MoE",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q4_K_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "retry wave",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp6-lfm25-24b-q4km": {
+ "id": "lcpp6-lfm25-24b-q4km",
+ "family": "LFM",
+ "label": "LFM2.5-24B-A2B Q4_K_M · llama.cpp 0.6",
+ "base": "LiquidAI/LFM2.5-24B-A2B",
+ "arch": "MoE 24B / 2B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q4_K_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "one test 1, card sampling",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp6-lfm25-24b-q6k": {
+ "id": "lcpp6-lfm25-24b-q6k",
+ "family": "LFM",
+ "label": "LFM2.5-24B-A2B Q6_K · llama.cpp 0.6",
+ "base": "LiquidAI/LFM2.5-24B-A2B",
+ "arch": "MoE 24B / 2B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q6_K",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "one test 1, card sampling",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp6-lfm25-24b-ud-q4kxl": {
+ "id": "lcpp6-lfm25-24b-ud-q4kxl",
+ "family": "LFM",
+ "label": "LFM2.5-24B-A2B UD-Q4_K_XL · llama.cpp 0.6",
+ "base": "LiquidAI/LFM2.5-24B-A2B",
+ "arch": "MoE 24B / 2B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "UD-Q4_K_XL (unsloth)",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "tests 1 and 2 once, card sampling, f16 cache, context from the tune (Q4_K_M and Q6_K ran 131k)",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp6-lfm25-24b-ud-q5kxl": {
+ "id": "lcpp6-lfm25-24b-ud-q5kxl",
+ "family": "LFM",
+ "label": "LFM2.5-24B-A2B UD-Q5_K_XL · llama.cpp 0.6",
+ "base": "LiquidAI/LFM2.5-24B-A2B",
+ "arch": "MoE 24B / 2B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "UD-Q5_K_XL (unsloth)",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "tests 1 and 2 once, card sampling, f16 cache, context from the tune (Q4_K_M and Q6_K ran 131k)",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp6-lfm25-24b-ud-q6kxl": {
+ "id": "lcpp6-lfm25-24b-ud-q6kxl",
+ "family": "LFM",
+ "label": "LFM2.5-24B-A2B UD-Q6_K_XL · llama.cpp 0.6",
+ "base": "LiquidAI/LFM2.5-24B-A2B",
+ "arch": "MoE 24B / 2B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "UD-Q6_K_XL (unsloth)",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "tests 1 and 2 once, card sampling, f16 cache: 131k does not fit with it, so the largest context that loads (Q4_K_M and Q6_K ran 131k)",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp6-mimo-v26-9b": {
+ "id": "lcpp6-mimo-v26-9b",
+ "family": "Other",
+ "label": "MiMo v2.6 9B · llama.cpp 0.6",
+ "base": "XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B",
+ "arch": "dense 9B",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q8_0",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "retry wave: engine that parses its tool calls",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-nanbeige42-3b": {
+ "id": "lcpp6-nanbeige42-3b",
+ "family": "Other",
+ "label": "Nanbeige 4.2 3B · llama.cpp 0.6, agent sampling (temperature 1.0), thinking budget",
+ "base": "Nanbeige4.2-3B",
+ "arch": "dense 3B",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q8",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "retry wave",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp6-nemotron3-nano-30b": {
+ "id": "lcpp6-nemotron3-nano-30b",
+ "family": "Nemotron",
+ "label": "Nemotron 3 Nano 30B · llama.cpp 0.6, tool-calling sampling (temperature 0.6), thinking budget",
+ "base": "nvidia/Nemotron-3-Nano-30B",
+ "arch": "hybrid MoE",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q4_K_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "retry wave",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp6-nemotron35-lightning-30b": {
+ "id": "lcpp6-nemotron35-lightning-30b",
+ "family": "Nemotron",
+ "label": "Nemotron 3.5 Lightning 30B-A3B Q8 · llama.cpp 0.6, 24 expert layers in RAM, 131k",
+ "base": "nvidia/Nemotron-3.5-Lightning-30B-A3B",
+ "arch": "MoE 30B / 3B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q8_0",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "first test",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "lcpp6-orcarouter-fn-uncensored": {
+ "id": "lcpp6-orcarouter-fn-uncensored",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Orcarouter Flash-Next Uncensored · llama.cpp 0.6, experts in RAM, 262k context",
+ "base": "orcarouter/Qwen3.8-Flash-Next-Uncensored",
+ "arch": "MoE 125B / 6B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "IQ4_XS",
+ "kind": "uncensored-tune",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-orcasaq2-cyber-27b": {
+ "id": "lcpp6-orcasaq2-cyber-27b",
+ "family": "Qwen3.8 27B",
+ "label": "OrcaSAQ-2-Cyber-27B · llama.cpp 0.6, DFlash2 + n-gram drafts",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "llama.cpp 0.6",
+ "quant": "GGUF",
+ "kind": "uncensored-tune",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "base head, unverified",
+ "status": "base-head-unverified"
+ }
+ },
+ "lcpp6-q38-27b-cyber-mtp": {
+ "id": "lcpp6-q38-27b-cyber-mtp",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B Cyber (abliterated) IQ4_XS · llama.cpp 0.6, MTP drafts",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "llama.cpp 0.6",
+ "quant": "IQ4_XS",
+ "kind": "abliterated",
+ "uncensored": true,
+ "note": "MTP drafts from its own heads",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-q38-27b-cyber-q5": {
+ "id": "lcpp6-q38-27b-cyber-q5",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B Cyber (abliterated) Q5_K_M · llama.cpp 0.6, all on GPU at 80k, recommended sampling",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q5_K_M",
+ "kind": "abliterated",
+ "uncensored": true,
+ "note": "the author's own quant (philbert440)",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-q38-27b-cyber-q6": {
+ "id": "lcpp6-q38-27b-cyber-q6",
+ "family": "Other",
+ "label": "Qwen3.8-27B Uncensored Cyber Q6_K and Q8_0 (author's quants)",
+ "base": "",
+ "arch": "",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q6_K",
+ "kind": "unknown",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-q38-27b-cyber-q8": {
+ "id": "lcpp6-q38-27b-cyber-q8",
+ "family": "Other",
+ "label": "Qwen3.8-27B Uncensored Cyber Q6_K and Q8_0 (author's quants)",
+ "base": "",
+ "arch": "",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q8_0",
+ "kind": "unknown",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-q38-coder390": {
+ "id": "lcpp6-q38-coder390",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B Coder390 EfficientThink (uncensored) Q4 with Q8 MTP heads · llama.cpp 0.6, MTP drafts, all on GPU at 80k, two slots",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q4 (Lynn style) + Q8 MTP",
+ "kind": "uncensored fine-tune",
+ "uncensored": true,
+ "note": "nerkyor's coding tune with short thinking; GGUF from the author",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-qwen3.8-flash-next-unpruned": {
+ "id": "lcpp6-qwen3.8-flash-next-unpruned",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next (unpruned) · llama.cpp 0.6, experts in RAM",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "GSQ-RCO IQ3_S",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-qwen36-35b-a3b-q6": {
+ "id": "lcpp6-qwen36-35b-a3b-q6",
+ "family": "Qwen3.6",
+ "label": "Qwen3.6-35B-A3B Q6 · llama.cpp 0.6, 18 expert layers in RAM, 131k, coding sampling (temperature 0.6)",
+ "base": "Qwen/Qwen3.6-35B-A3B",
+ "arch": "MoE 35B / 3B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "UD-Q6_K_XL",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "retry wave",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-qwen3vl-8b-q8": {
+ "id": "lcpp6-qwen3vl-8b-q8",
+ "family": "Other",
+ "label": "Qwen3-VL-8B Q8 · llama.cpp 0.6, makers' sampling with presence penalty 1.5",
+ "base": "Qwen/Qwen3-VL-8B",
+ "arch": "dense 8B",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q8_0",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "retry wave",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-thinkingcap-27b-heretic": {
+ "id": "lcpp6-thinkingcap-27b-heretic",
+ "family": "Qwen3.8 27B",
+ "label": "ThinkingCap-27B Heretic · llama.cpp 0.6, all on GPU",
+ "base": "OS-Software/ThinkingCap-Qwen3.8-27B-Uncensored-Heretic",
+ "arch": "dense 27B",
+ "engine": "llama.cpp 0.6",
+ "quant": "Q4_K_M",
+ "kind": "heretic",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-tiel-coder-35b-q4kxl-mtp": {
+ "id": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "family": "Tiel Coder 35B",
+ "label": "Tiel-Coder-35B Q4_K_XL · llama.cpp 0.6, MTP drafts, 8 expert layers in RAM, 131k, temperature 0.6",
+ "base": "Tiel-Coder-35B-A3B",
+ "arch": "MoE 35B / 3B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "UD-Q4_K_XL (MTP head included)",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "the build with its own draft head",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-tiel-coder-35b-q4kxl": {
+ "id": "lcpp6-tiel-coder-35b-q4kxl",
+ "family": "Tiel Coder 35B",
+ "label": "Tiel-Coder-35B Q4_K_XL · llama.cpp 0.6, 6 expert layers in RAM, 131k, temperature 0.6",
+ "base": "Tiel-Coder-35B-A3B",
+ "arch": "MoE 35B / 3B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "UD-Q4_K_XL",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "retry wave: the author's benchmarked quant",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "lcpp6-tiel-coder-35b-t06": {
+ "id": "lcpp6-tiel-coder-35b-t06",
+ "family": "Tiel Coder 35B",
+ "label": "Tiel-Coder-35B 4-bit · llama.cpp 0.6, all on GPU, 262k, author's coding sampling (temperature 0.6)",
+ "base": "Tiel-Coder-35B-A3B",
+ "arch": "MoE 35B / 3B active",
+ "engine": "llama.cpp 0.6",
+ "quant": "UD-IQ4_XS",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "retry wave: sampling fixed",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "maya-glm-5.3-flash-huihui": {
+ "id": "maya-glm-5.3-flash-huihui",
+ "family": "GLM",
+ "label": "GLM-5.3-Flash Huihui abliterated · Maya, experts in VRAM and RAM",
+ "base": "huihui-ai/Huihui-GLM-5.3-Flash-abliterated-GGUF",
+ "arch": "MoE 321B / 18B active",
+ "engine": "Maya 1.3 (patched)",
+ "quant": "UD-IQ1_S",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "maya-glm-5.3-flash-orcarouter": {
+ "id": "maya-glm-5.3-flash-orcarouter",
+ "family": "GLM",
+ "label": "GLM-5.3-Flash Orcarouter Uncensored · Maya, experts in VRAM and RAM",
+ "base": "Orcarouter GLM-5.3-Flash Uncensored (GGUF, gated)",
+ "arch": "MoE 321B / 18B active",
+ "engine": "Maya 1.3 (patched)",
+ "quant": "Q2_K",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "head on disk, no engine loads it",
+ "status": "head"
+ }
+ },
+ "maya-glm-5.3-flash": {
+ "id": "maya-glm-5.3-flash",
+ "family": "GLM",
+ "label": "GLM-5.3-Flash · Maya (Strata engine for GLM), experts in VRAM and RAM",
+ "base": "zai-org/GLM-5.3-Flash",
+ "arch": "MoE 321B / 18B active",
+ "engine": "Maya 1.3 (patched)",
+ "quant": "Maya-S-v2 IQ2_XXS",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "mimo-v2.6-9b": {
+ "id": "mimo-v2.6-9b",
+ "family": "Other",
+ "label": "MiMo V2.6 Distill Qwen 9B",
+ "base": "XiaomiMiMo/MiMo-V2.6-Distill-Qwen-9B",
+ "arch": "dense 9B",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q8_0",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "nanbeige4.2-3b": {
+ "id": "nanbeige4.2-3b",
+ "family": "Other",
+ "label": "Nanbeige 4.2 3B",
+ "base": "Nanbeige4.2-3B",
+ "arch": "dense 3B",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q8",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "nemotron3-nano-30b": {
+ "id": "nemotron3-nano-30b",
+ "family": "Nemotron",
+ "label": "Nemotron 3 Nano 30B",
+ "base": "nvidia/Nemotron-3-Nano-30B",
+ "arch": "hybrid MoE",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q4",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "nemotron3-super-120b": {
+ "id": "nemotron3-super-120b",
+ "family": "Nemotron",
+ "label": "Nemotron 3 Super 120B · llama.cpp, experts in RAM",
+ "base": "nvidia/Nemotron-3-Super-120B",
+ "arch": "hybrid MoE",
+ "engine": "llama.cpp 0.4",
+ "quant": "UD-Q4_K_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "orcarouter-fn-uncensored": {
+ "id": "orcarouter-fn-uncensored",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Orcarouter Flash-Next Uncensored · llama.cpp, experts in RAM",
+ "base": "orcarouter/Qwen3.8-Flash-Next-Uncensored",
+ "arch": "MoE 125B / 6B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "IQ4_XS",
+ "kind": "uncensored-tune",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "orcasaq2-cyber-27b": {
+ "id": "orcasaq2-cyber-27b",
+ "family": "Qwen3.8 27B",
+ "label": "OrcaSAQ-2-Cyber-27B · llama.cpp, DFlash2 drafts, all on GPU",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "llama.cpp 0.4 + DFlash2",
+ "quant": "GGUF",
+ "kind": "uncensored-tune",
+ "uncensored": true,
+ "note": "uncensored security tune, DFlash2 drafter",
+ "vision": {
+ "label": "base head, unverified",
+ "status": "base-head-unverified"
+ }
+ },
+ "q38-27b-cyber": {
+ "id": "q38-27b-cyber",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B Cyber (abliterated) · llama.cpp, all on GPU",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "llama.cpp 0.4",
+ "quant": "IQ4_XS",
+ "kind": "abliterated",
+ "uncensored": true,
+ "note": "security-oriented abliteration, MTP heads in the GGUF",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "qwen3-235b-a22b": {
+ "id": "qwen3-235b-a22b",
+ "family": "Other",
+ "label": "Qwen3-235B-A22B",
+ "base": "",
+ "arch": "",
+ "engine": "llama.cpp 0.4",
+ "quant": "",
+ "kind": "unknown",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "qwen3-4b-instruct": {
+ "id": "qwen3-4b-instruct",
+ "family": "Other",
+ "label": "Qwen3 4B Instruct 2507",
+ "base": "",
+ "arch": "",
+ "engine": "llama.cpp 0.4",
+ "quant": "",
+ "kind": "unknown",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "qwen3-coder-30b-a3b": {
+ "id": "qwen3-coder-30b-a3b",
+ "family": "Qwen3.6",
+ "label": "Qwen3-Coder-30B-A3B · llama.cpp, experts in RAM",
+ "base": "Qwen/Qwen3-Coder-30B-A3B",
+ "arch": "MoE 30B / 3B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q4",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "qwen3.6-27b": {
+ "id": "qwen3.6-27b",
+ "family": "Qwen3.6",
+ "label": "Qwen3.6-27B · llama.cpp, all on GPU",
+ "base": "Qwen/Qwen3.6-27B",
+ "arch": "dense 27B",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q4_K_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "qwen3.6-35b-a3b": {
+ "id": "qwen3.6-35b-a3b",
+ "family": "Qwen3.6",
+ "label": "Qwen3.6-35B-A3B · llama.cpp, some experts in RAM",
+ "base": "Qwen/Qwen3.6-35B-A3B",
+ "arch": "MoE 35B / 3B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "UD-Q4_K_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "qwen3.8-27b-uncensored-vllm": {
+ "id": "qwen3.8-27b-uncensored-vllm",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B Uncensored · vLLM, MTP drafts, 150k context",
+ "base": "philbert440/Qwen3.8-27B-Uncensored-Aggressive",
+ "arch": "dense 27B",
+ "engine": "vLLM (HyperQwen)",
+ "quant": "AWQ W4A16",
+ "kind": "uncensored-tune",
+ "uncensored": true,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "qwen3.8-27b-vllm-031": {
+ "id": "qwen3.8-27b-vllm-031",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B · vLLM 0.31, MTP drafts, 150k context (trial)",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "vllm hyperqwen-0.31 (95ee3b6)",
+ "quant": "HyperQwen 4-bit, FP8 KV",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "qwen3.8-27b-vllm-240k": {
+ "id": "qwen3.8-27b-vllm-240k",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B · vLLM, DFlash2 drafts, 240k context, 4/2-bit KV",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "vLLM (HyperQwen)",
+ "quant": "HyperQwen 4-bit, KVarN KV",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "qwen3.8-27b-vllm-64k": {
+ "id": "qwen3.8-27b-vllm-64k",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B · vLLM, DFlash2 drafts, 64k context",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "vLLM (HyperQwen)",
+ "quant": "HyperQwen 4-bit, FP8 KV",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "qwen3.8-27b-vllm-quote": {
+ "id": "qwen3.8-27b-vllm-quote",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B · vLLM, DFlash2 15-token drafts, 57k context",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "vLLM (HyperQwen)",
+ "quant": "HyperQwen 4-bit, FP8 KV",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "qwen3.8-27b-vllm": {
+ "id": "qwen3.8-27b-vllm",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B · vLLM, MTP drafts, 150k context",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "vLLM (HyperQwen)",
+ "quant": "HyperQwen 4-bit, FP8 KV",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (built in)",
+ "status": "native"
+ }
+ },
+ "qwen3.8-27b": {
+ "id": "qwen3.8-27b",
+ "family": "Qwen3.8 27B",
+ "label": "Qwen3.8-27B · llama.cpp, all on GPU",
+ "base": "Qwen/Qwen3.8-27B",
+ "arch": "dense 27B",
+ "engine": "llama.cpp 0.4",
+ "quant": "UD-Q4_K_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "qwen3.8-flash-next-coder": {
+ "id": "qwen3.8-flash-next-coder",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next Coder (1.6-bit) · llama.cpp, experts in RAM",
+ "base": "ISTA-DASLab Flash-Next Coder",
+ "arch": "MoE 125B / 6B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "IQ1_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "qwen3.8-flash-next-unpruned": {
+ "id": "qwen3.8-flash-next-unpruned",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next (unpruned) · llama.cpp, experts in RAM",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "GSQ-RCO IQ3_S",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "qwen3vl-32b": {
+ "id": "qwen3vl-32b",
+ "family": "Other",
+ "label": "Qwen3-VL 32B",
+ "base": "",
+ "arch": "",
+ "engine": "llama.cpp 0.4",
+ "quant": "",
+ "kind": "unknown",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "qwen3vl-8b": {
+ "id": "qwen3vl-8b",
+ "family": "Other",
+ "label": "Qwen3-VL-8B",
+ "base": "Qwen/Qwen3-VL-8B",
+ "arch": "dense 8B",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q4_K_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "smollm3-3b": {
+ "id": "smollm3-3b",
+ "family": "Other",
+ "label": "SmolLM3 3B",
+ "base": "",
+ "arch": "",
+ "engine": "llama.cpp 0.4",
+ "quant": "",
+ "kind": "unknown",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "no",
+ "status": "none"
+ }
+ },
+ "strata-coder": {
+ "id": "strata-coder",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next Coder (1.6-bit) · Strata, GPU expert cache",
+ "base": "ISTA-DASLab Flash-Next Coder",
+ "arch": "MoE 125B / 6B active",
+ "engine": "Strata",
+ "quant": "IQ1_M",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "strata-flash-next-p2": {
+ "id": "strata-flash-next-p2",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next · Strata, two batch slots (multi-agent), 262k context",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "Strata",
+ "quant": "GSQ-RCO IQ3_S",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "strata-flash-next": {
+ "id": "strata-flash-next",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next · Strata, GPU expert cache, 262k context",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "Strata",
+ "quant": "GSQ-RCO IQ3_S",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "strata-swift15": {
+ "id": "strata-swift15",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Swift 1.5 Flash-Next · Strata, GPU expert cache, 262k context",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE, pruned",
+ "engine": "Strata",
+ "quant": "GSQ-RCO IQ3_XXS",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "strata42-flash-next-noskip": {
+ "id": "strata42-flash-next-noskip",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next · Strata 0.1.42 with the 0.1.41 routing (tail skip off), 262k context",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "strata strata-0.1.42",
+ "quant": "GSQ-RCO IQ3_S",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "strata42-flash-next-pcie": {
+ "id": "strata42-flash-next-pcie",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next · Strata 0.1.42, old PCIe share, 262k context",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "strata strata-0.1.42",
+ "quant": "GSQ-RCO IQ3_S",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "strata42-flash-next-tune": {
+ "id": "strata42-flash-next-tune",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next · Strata 0.1.42, settings probe",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "strata strata-0.1.42",
+ "quant": "GSQ-RCO IQ3_S",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "strata42-flash-next": {
+ "id": "strata42-flash-next",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Flash-Next · Strata 0.1.42, GPU expert cache, 262k context",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE 125B / 6B active",
+ "engine": "strata strata-0.1.42",
+ "quant": "GSQ-RCO IQ3_S",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "swift15-flash-next": {
+ "id": "swift15-flash-next",
+ "family": "Qwen3.8 Flash-Next",
+ "label": "Swift 1.5 Flash-Next (pruned) · llama.cpp, experts in RAM",
+ "base": "Qwen/Qwen3.8-Flash-Next",
+ "arch": "MoE, pruned",
+ "engine": "llama.cpp 0.4",
+ "quant": "GSQ-RCO IQ3_XXS",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "tiel-coder-35b-q6": {
+ "id": "tiel-coder-35b-q6",
+ "family": "Tiel Coder 35B",
+ "label": "Tiel-Coder-35B 6-bit · llama.cpp, 20 expert layers in RAM",
+ "base": "Tiel-Coder-35B-A3B",
+ "arch": "MoE 35B / 3B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "Q6_K_XL",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ },
+ "tiel-coder-35b": {
+ "id": "tiel-coder-35b",
+ "family": "Tiel Coder 35B",
+ "label": "Tiel-Coder-35B 4-bit · llama.cpp, all on GPU, 262k context",
+ "base": "Tiel-Coder-35B-A3B",
+ "arch": "MoE 35B / 3B active",
+ "engine": "llama.cpp 0.4",
+ "quant": "UD-IQ4_XS",
+ "kind": "stock",
+ "uncensored": false,
+ "note": "",
+ "vision": {
+ "label": "yes (head)",
+ "status": "head"
+ }
+ }
+ },
+ "runs": [
+ {
+ "case": "wa-bonsai2-27b",
+ "model": "bonsai2-27b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 95,
+ "tests_fail": 1,
+ "subcmds": 20,
+ "tps": 40.8,
+ "minutes": 42,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-09-30 23:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2077,
+ "errors_per_kloc": 1.9
+ }
+ },
+ {
+ "case": "wa-bonsai2-27b-pq2",
+ "model": "bonsai2-27b-pq2",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 46,
+ "tests_fail": 0,
+ "subcmds": 14,
+ "tps": 46.5,
+ "minutes": 57,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-09-30 23:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1480,
+ "errors_per_kloc": 3.4
+ }
+ },
+ {
+ "case": "wa-devstral-small-2-24b",
+ "model": "devstral-small-2-24b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 38,
+ "tests_fail": 0,
+ "subcmds": 6,
+ "tps": 25.6,
+ "minutes": 15,
+ "compactions": null,
+ "ctx": 102400,
+ "kv": "q4_0",
+ "verdict": "pass",
+ "finished": "2026-10-01 06:59",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1161,
+ "errors_per_kloc": 0.9
+ }
+ },
+ {
+ "case": "wa-flashnext",
+ "model": "flashnext",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 242,
+ "tests_fail": 0,
+ "subcmds": 25,
+ "tps": 44.3,
+ "minutes": 56,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-01 11:52",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 4094,
+ "errors_per_kloc": 1.5
+ }
+ },
+ {
+ "case": "wa-flashnext-abliterated-s15",
+ "model": "flashnext-abliterated-s15",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 26,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 9.6,
+ "minutes": 119,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-09-30 23:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 892,
+ "errors_per_kloc": 4.5
+ }
+ },
+ {
+ "case": "wa-flashnext-heretic2",
+ "model": "flashnext-heretic2",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 25,
+ "tests_fail": 0,
+ "subcmds": 12,
+ "tps": 8.7,
+ "minutes": 123,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-01 05:01",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1196,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-glm-4.5-air",
+ "model": "glm-4.5-air",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 5,
+ "tps": 3.1,
+ "minutes": 94,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-01 06:43",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 470,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-glm-4.7-flash",
+ "model": "glm-4.7-flash",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 34,
+ "tests_fail": 0,
+ "subcmds": 12,
+ "tps": 61.7,
+ "minutes": 8,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q8_0",
+ "verdict": "fail",
+ "finished": "2026-10-01 12:10",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1071,
+ "errors_per_kloc": 11.2
+ }
+ },
+ {
+ "case": "wa-jan-nano-128k",
+ "model": "jan-nano-128k",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 0,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 0,
+ "tps": 47.9,
+ "minutes": 1,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q8_0",
+ "verdict": "fail",
+ "finished": "2026-09-30 23:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 0,
+ "errors_per_kloc": null
+ }
+ },
+ {
+ "case": "wa-nanbeige4.2-3b",
+ "model": "nanbeige4.2-3b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 22,
+ "tests_fail": 15,
+ "subcmds": 7,
+ "tps": 19.6,
+ "minutes": 39,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q8_0",
+ "verdict": "fail",
+ "finished": "2026-10-01 01:13",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1037,
+ "errors_per_kloc": 4.8
+ }
+ },
+ {
+ "case": "wa-nemotron3-nano-30b",
+ "model": "nemotron3-nano-30b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 0,
+ "tests_fail": 3,
+ "subcmds": 3,
+ "tps": 83.3,
+ "minutes": 2,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-10-01 12:14",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 164,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-nemotron3-super-120b",
+ "model": "nemotron3-super-120b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 7,
+ "tests_fail": 0,
+ "subcmds": 5,
+ "tps": 8.5,
+ "minutes": 46,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-01 09:01",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 510,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-orcarouter-fn-uncensored",
+ "model": "orcarouter-fn-uncensored",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 54,
+ "tests_fail": 0,
+ "subcmds": 13,
+ "tps": 8.8,
+ "minutes": 104,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-09-30 23:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1213,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-q38-27b-cyber",
+ "model": "q38-27b-cyber",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 39,
+ "tests_fail": 0,
+ "subcmds": 5,
+ "tps": 23.9,
+ "minutes": 52,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-01 08:06",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 944,
+ "errors_per_kloc": 2.1
+ }
+ },
+ {
+ "case": "wa-qwen3.6-27b",
+ "model": "qwen3.6-27b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 65,
+ "tests_fail": 0,
+ "subcmds": 7,
+ "tps": 30.7,
+ "minutes": 20,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-01 10:48",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1643,
+ "errors_per_kloc": 0.6
+ }
+ },
+ {
+ "case": "wa-qwen3.6-35b-a3b",
+ "model": "qwen3.6-35b-a3b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 52,
+ "tests_fail": 0,
+ "subcmds": 9,
+ "tps": 57.2,
+ "minutes": 10,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-01 07:11",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1511,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b",
+ "model": "qwen3.8-27b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 55,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 32.9,
+ "minutes": 25,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-01 09:28",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1281,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen3.8-flash-next-coder",
+ "model": "qwen3.8-flash-next-coder",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 24,
+ "tests_fail": 0,
+ "subcmds": 7,
+ "tps": 9.9,
+ "minutes": 44,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-01 10:27",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 732,
+ "errors_per_kloc": 1.4
+ }
+ },
+ {
+ "case": "wa-qwen3.8-flash-next-unpruned",
+ "model": "qwen3.8-flash-next-unpruned",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 89,
+ "tests_fail": 0,
+ "subcmds": 14,
+ "tps": 8.3,
+ "minutes": 79,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-09-30 23:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1714,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen3-coder-30b-a3b",
+ "model": "qwen3-coder-30b-a3b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 4,
+ "tests_fail": 1,
+ "subcmds": 7,
+ "tps": 23.8,
+ "minutes": 7,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-01 12:01",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 364,
+ "errors_per_kloc": 8.2
+ }
+ },
+ {
+ "case": "wa-qwen3vl-8b",
+ "model": "qwen3vl-8b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 0,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 0,
+ "tps": 39.5,
+ "minutes": 65,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q8_0",
+ "verdict": "fail",
+ "finished": "2026-10-01 02:19",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 191,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-swift15-flash-next",
+ "model": "swift15-flash-next",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 96,
+ "tests_fail": 0,
+ "subcmds": 16,
+ "tps": 7.1,
+ "minutes": 161,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-01 00:33",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2003,
+ "errors_per_kloc": 2.0
+ }
+ },
+ {
+ "case": "wa-tiel-coder-35b",
+ "model": "tiel-coder-35b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 55,
+ "tests_fail": 0,
+ "subcmds": 10,
+ "tps": 100.8,
+ "minutes": 13,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-02 22:20",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1814,
+ "errors_per_kloc": 2.8
+ }
+ },
+ {
+ "case": "wa-tiel-coder-35b-q6",
+ "model": "tiel-coder-35b-q6",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 39,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 42.8,
+ "minutes": 25,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-02 23:07",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1193,
+ "errors_per_kloc": 3.4
+ }
+ },
+ {
+ "case": "wa-cyber-tiel-coder-35b",
+ "model": "cyber-tiel-coder-35b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 53,
+ "tests_fail": 0,
+ "subcmds": 6,
+ "tps": 44.3,
+ "minutes": 14,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-02 23:43",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1313,
+ "errors_per_kloc": 0.8
+ }
+ },
+ {
+ "case": "wa-nemotron3-nano-30b-r2",
+ "model": "nemotron3-nano-30b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 0,
+ "tests_fail": 2,
+ "subcmds": 2,
+ "tps": 90.7,
+ "minutes": 2,
+ "compactions": null,
+ "ctx": 425984,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-10-03 00:07",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 116,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-devstral-small-2-24b-r2",
+ "model": "devstral-small-2-24b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 4,
+ "tests_pass": 13,
+ "tests_fail": 4,
+ "subcmds": 7,
+ "tps": 33.1,
+ "minutes": 11,
+ "compactions": null,
+ "ctx": 204800,
+ "kv": "q4_0",
+ "verdict": "partial",
+ "finished": "2026-10-03 01:26",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 667,
+ "errors_per_kloc": 3.0
+ }
+ },
+ {
+ "case": "wa-glm-4.7-flash-r2",
+ "model": "glm-4.7-flash",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 45,
+ "tests_fail": 13,
+ "subcmds": 8,
+ "tps": 34.9,
+ "minutes": 14,
+ "compactions": null,
+ "ctx": 202752,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-03 01:05",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2268,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-nanbeige4.2-3b-r2",
+ "model": "nanbeige4.2-3b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 1,
+ "tests_pass": 0,
+ "tests_fail": 0,
+ "subcmds": 11,
+ "tps": 15.6,
+ "minutes": 38,
+ "compactions": null,
+ "ctx": 204800,
+ "kv": "q8_0",
+ "verdict": "fail",
+ "finished": "2026-10-03 00:51",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1937,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-bonsai2-27b-pq2-r2",
+ "model": "bonsai2-27b-pq2",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 4,
+ "tests_pass": 75,
+ "tests_fail": 0,
+ "subcmds": 17,
+ "tps": 47.5,
+ "minutes": 36,
+ "compactions": null,
+ "ctx": 253952,
+ "kv": "f16",
+ "verdict": "partial",
+ "finished": "2026-10-03 02:06",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1495,
+ "errors_per_kloc": 2.7
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-vllm",
+ "model": "qwen3.8-27b-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 89,
+ "tests_fail": 0,
+ "subcmds": 13,
+ "tps": 70.5,
+ "minutes": 27,
+ "compactions": null,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-03 15:03",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2158,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-vllm-240k",
+ "model": "qwen3.8-27b-vllm-240k",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 80,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 56.5,
+ "minutes": 23,
+ "compactions": null,
+ "ctx": 245760,
+ "kv": "4/2-bit (KVarN)",
+ "verdict": "pass",
+ "finished": "2026-10-03 16:09",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1321,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-26b-a4b-nomtp",
+ "model": "gemma-4-26b-a4b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 7,
+ "tests_fail": 0,
+ "subcmds": 4,
+ "tps": 99.7,
+ "minutes": 2,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-03 17:40",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 322,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-26b-a4b-nothink",
+ "model": "gemma-4-26b-a4b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 7,
+ "tests_fail": 0,
+ "subcmds": 3,
+ "tps": 112.0,
+ "minutes": 1,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-03 18:42",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 360,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-31b-nothink",
+ "model": "gemma-4-31b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 11,
+ "tests_fail": 0,
+ "subcmds": 3,
+ "tps": 38.5,
+ "minutes": 3,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q4_0",
+ "verdict": "pass",
+ "finished": "2026-10-03 18:54",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 468,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-31b-q8-nothink",
+ "model": "gemma-4-31b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 11,
+ "tests_fail": 0,
+ "subcmds": 3,
+ "tps": 39.5,
+ "minutes": 5,
+ "compactions": null,
+ "ctx": 73728,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-03 19:10",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 318,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-26b-a4b",
+ "model": "gemma-4-26b-a4b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 8,
+ "tests_fail": 0,
+ "subcmds": 2,
+ "tps": 140.8,
+ "minutes": 1,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-03 22:09",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 273,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-31b",
+ "model": "gemma-4-31b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 9,
+ "tests_fail": 0,
+ "subcmds": 5,
+ "tps": 30.6,
+ "minutes": 3,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q4_0",
+ "verdict": "pass",
+ "finished": "2026-10-03 22:22",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 285,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-31b-q8",
+ "model": "gemma-4-31b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 10,
+ "tests_fail": 0,
+ "subcmds": 4,
+ "tps": 53.4,
+ "minutes": 2,
+ "compactions": null,
+ "ctx": 73728,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-03 22:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 254,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-26b-a4b-vllm",
+ "model": "gemma-4-26b-a4b-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 6,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 117.3,
+ "minutes": 2,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-03 23:15",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 530,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-uncensored-vllm",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 0,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 0,
+ "tps": 89.3,
+ "minutes": 7,
+ "compactions": null,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "fail",
+ "finished": "2026-10-03 23:23",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 0,
+ "errors_per_kloc": null
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-uncensored-vllm-pp",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 158,
+ "tests_fail": 0,
+ "subcmds": 11,
+ "tps": 67.8,
+ "minutes": 59,
+ "compactions": 3,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-04 21:59",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2963,
+ "errors_per_kloc": 0.7
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-uncensored-vllm-tb",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 137,
+ "tests_fail": 0,
+ "subcmds": 9,
+ "tps": 64.2,
+ "minutes": 44,
+ "compactions": 2,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-04 21:00",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2414,
+ "errors_per_kloc": 0.8
+ }
+ },
+ {
+ "case": "wa-orcasaq2-cyber-27b",
+ "model": "orcasaq2-cyber-27b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 84,
+ "tests_fail": 0,
+ "subcmds": 10,
+ "tps": 54.3,
+ "minutes": 26,
+ "compactions": 2,
+ "ctx": 106496,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-05 00:41",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1962,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-vllm-64k",
+ "model": "qwen3.8-27b-vllm-64k",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 78,
+ "tests_fail": 0,
+ "subcmds": 11,
+ "tps": 97.4,
+ "minutes": 15,
+ "compactions": 3,
+ "ctx": 65536,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-05 07:16",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1935,
+ "errors_per_kloc": 3.6
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-vllm-quote",
+ "model": "qwen3.8-27b-vllm-quote",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 54,
+ "tests_fail": 49,
+ "subcmds": 10,
+ "tps": 92.9,
+ "minutes": 166,
+ "compactions": 55,
+ "ctx": 57344,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-05 10:03",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2252,
+ "errors_per_kloc": 1.8
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-vllm-64k-pi",
+ "model": "qwen3.8-27b-vllm-64k",
+ "test": 1,
+ "agent": "Pi",
+ "checks": 1,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 0,
+ "tps": 96.1,
+ "minutes": 7,
+ "compactions": 1,
+ "ctx": 65536,
+ "kv": "fp8",
+ "verdict": "fail",
+ "finished": "2026-10-05 12:03",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 196,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-vllm-quote-pi",
+ "model": "qwen3.8-27b-vllm-quote",
+ "test": 1,
+ "agent": "Pi",
+ "checks": 0,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 0,
+ "tps": 108.3,
+ "minutes": 2,
+ "compactions": 0,
+ "ctx": 57344,
+ "kv": "fp8",
+ "verdict": "fail",
+ "finished": "2026-10-05 12:07",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 0,
+ "errors_per_kloc": null
+ }
+ },
+ {
+ "case": "wa-kolibri-1-r2",
+ "model": "kolibri-1",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 5,
+ "tests_fail": 0,
+ "subcmds": 4,
+ "tps": 18.9,
+ "minutes": 29,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-06 00:05",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 316,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-vllm-64k-pi-tb",
+ "model": "qwen3.8-27b-vllm-64k",
+ "test": 1,
+ "agent": "Pi",
+ "checks": 0,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 0,
+ "tps": 91.7,
+ "minutes": 4,
+ "compactions": 1,
+ "ctx": 65536,
+ "kv": "fp8",
+ "verdict": "fail",
+ "finished": "2026-10-06 05:06",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 0,
+ "errors_per_kloc": null
+ }
+ },
+ {
+ "case": "wa-qwen3.8-27b-vllm-quote-pi-tb",
+ "model": "qwen3.8-27b-vllm-quote",
+ "test": 1,
+ "agent": "Pi",
+ "checks": 5,
+ "tests_pass": 84,
+ "tests_fail": 0,
+ "subcmds": 7,
+ "tps": 35.9,
+ "minutes": 49,
+ "compactions": 8,
+ "ctx": 57344,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-06 05:56",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1522,
+ "errors_per_kloc": 9.9
+ }
+ },
+ {
+ "case": "wa-thinkingcap-27b-heretic",
+ "model": "lcpp6-thinkingcap-27b-heretic",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 54,
+ "tests_fail": 0,
+ "subcmds": 9,
+ "tps": 31.3,
+ "minutes": 24,
+ "compactions": 0,
+ "ctx": 196608,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-06 09:12",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1153,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-bonsai2-pq2-med",
+ "model": "bonsai2-27b-pq2-med",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 94,
+ "tests_fail": 0,
+ "subcmds": 11,
+ "tps": 50.8,
+ "minutes": 33,
+ "compactions": 1,
+ "ctx": 253952,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-07 07:40",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1592,
+ "errors_per_kloc": 1.9
+ }
+ },
+ {
+ "case": "wa-host-smoke-qwen3.8-27b-vllm",
+ "model": "qwen3.8-27b-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 123,
+ "tests_fail": 0,
+ "subcmds": 22,
+ "tps": 64.3,
+ "minutes": 37,
+ "compactions": 2,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-07 13:59",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2953,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-maya-glm-5.3-flash",
+ "model": "maya-glm-5.3-flash",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 44,
+ "tests_fail": 0,
+ "subcmds": 9,
+ "tps": 13.9,
+ "minutes": 71,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-08 02:12",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1239,
+ "errors_per_kloc": 7.3
+ }
+ },
+ {
+ "case": "wa-maya-huihui-glm-5.3-flash",
+ "model": "maya-glm-5.3-flash-huihui",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 0,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 0,
+ "tps": 6.9,
+ "minutes": 78,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-08 08:57",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 0,
+ "errors_per_kloc": null
+ }
+ },
+ {
+ "case": "wa-lcpp-orcarouter-glm-5.3-flash",
+ "model": "lcpp-glm-5.3-flash-orcarouter",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 0,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 0,
+ "tps": 9.7,
+ "minutes": 59,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-08 19:43",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 0,
+ "errors_per_kloc": null
+ }
+ },
+ {
+ "case": "wa-gemma-4-26b-a4b-redo",
+ "model": "gemma-4-26b-a4b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 9,
+ "tests_fail": 0,
+ "subcmds": 3,
+ "tps": 108.1,
+ "minutes": 1,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-09 08:32",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 457,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-26b-a4b-vllm-redo",
+ "model": "gemma-4-26b-a4b-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 1,
+ "tests_pass": 6,
+ "tests_fail": 0,
+ "subcmds": 3,
+ "tps": 90.0,
+ "minutes": 2,
+ "compactions": 1,
+ "ctx": 262144,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-09 08:26",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 272,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-4-31b-redo",
+ "model": "gemma-4-31b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 12,
+ "tests_fail": 0,
+ "subcmds": 2,
+ "tps": 51.4,
+ "minutes": 3,
+ "compactions": 0,
+ "ctx": 131072,
+ "kv": "q4_0",
+ "verdict": "pass",
+ "finished": "2026-10-09 08:29",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 441,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-bonsai2-27b-ada",
+ "model": "bonsai2-27b-ada",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 64,
+ "tests_fail": 0,
+ "subcmds": 16,
+ "tps": 65.3,
+ "minutes": 41,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-09 14:58",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2443,
+ "errors_per_kloc": 2.0
+ }
+ },
+ {
+ "case": "wa-q38-27b-cyber-q5",
+ "model": "lcpp6-q38-27b-cyber-q5",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 24,
+ "tests_fail": 2,
+ "subcmds": 12,
+ "tps": 22.1,
+ "minutes": 169,
+ "compactions": 23,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-09 20:17",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 814,
+ "errors_per_kloc": 16.0
+ }
+ },
+ {
+ "case": "wa-q38-coder390",
+ "model": "lcpp6-q38-coder390",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 59,
+ "tests_fail": 0,
+ "subcmds": 9,
+ "tps": 50.2,
+ "minutes": 27,
+ "compactions": 6,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-10 02:00",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1591,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-retry-tiel-t06",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 50,
+ "tests_fail": 0,
+ "subcmds": 15,
+ "tps": 99.0,
+ "minutes": 13,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-10 16:40",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1163,
+ "errors_per_kloc": 4.3
+ }
+ },
+ {
+ "case": "wa-retry-devstral-q5",
+ "model": "lcpp6-devstral-24b-q5",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 21,
+ "tests_fail": 0,
+ "subcmds": 11,
+ "tps": 33.4,
+ "minutes": 9,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-10 17:17",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 624,
+ "errors_per_kloc": 12.8
+ }
+ },
+ {
+ "case": "wa-retry-tiel-q4kxl",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 41,
+ "tests_fail": 0,
+ "subcmds": 10,
+ "tps": 76.7,
+ "minutes": 24,
+ "compactions": 3,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-10 17:06",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1307,
+ "errors_per_kloc": 4.6
+ }
+ },
+ {
+ "case": "wa-retry-glm47f-coding",
+ "model": "lcpp6-glm47f-coding",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 23,
+ "tests_fail": 0,
+ "subcmds": 9,
+ "tps": 27.8,
+ "minutes": 28,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-10 23:38",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1024,
+ "errors_per_kloc": 16.6
+ }
+ },
+ {
+ "case": "wa-retry-nemotron3-nano",
+ "model": "lcpp6-nemotron3-nano-30b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 1,
+ "tests_pass": 0,
+ "tests_fail": 0,
+ "subcmds": 5,
+ "tps": 73.4,
+ "minutes": 1,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-10 23:41",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 203,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-retry-qwen36-q6",
+ "model": "lcpp6-qwen36-35b-a3b-q6",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 83,
+ "tests_fail": 0,
+ "subcmds": 10,
+ "tps": 38.1,
+ "minutes": 25,
+ "compactions": 3,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-10 23:08",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1667,
+ "errors_per_kloc": 0.6
+ }
+ },
+ {
+ "case": "wa-retry-nemotron35-lightning",
+ "model": "lcpp6-nemotron35-lightning-30b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 3,
+ "tests_pass": 37,
+ "tests_fail": 0,
+ "subcmds": 6,
+ "tps": 32.5,
+ "minutes": 22,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-11 00:06",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 918,
+ "errors_per_kloc": 19.6
+ }
+ },
+ {
+ "case": "wa-retry-nanbeige42",
+ "model": "lcpp6-nanbeige42-3b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 0,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": 0,
+ "tps": 30.8,
+ "minutes": 55,
+ "compactions": 2,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-11 01:02",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 585,
+ "errors_per_kloc": 20.5
+ }
+ },
+ {
+ "case": "wa-retry-qwen3vl-q8",
+ "model": "lcpp6-qwen3vl-8b-q8",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 0,
+ "tests_fail": 0,
+ "subcmds": 7,
+ "tps": 40.7,
+ "minutes": 180,
+ "compactions": 13,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-11 04:02",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 531,
+ "errors_per_kloc": 418.1
+ }
+ },
+ {
+ "case": "wa-retry-mimo-v26",
+ "model": "lcpp6-mimo-v26-9b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 14,
+ "tests_fail": 0,
+ "subcmds": 1,
+ "tps": 33.1,
+ "minutes": 69,
+ "compactions": 5,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-11 05:12",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1220,
+ "errors_per_kloc": 10.7
+ }
+ },
+ {
+ "case": "wa-strata42-flash-next",
+ "model": "strata42-flash-next",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 180,
+ "tests_fail": 0,
+ "subcmds": 18,
+ "tps": 16.8,
+ "minutes": 94,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 06:49",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 3436,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-strata42-flash-next-noskip",
+ "model": "strata42-flash-next-noskip",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 99,
+ "tests_fail": 0,
+ "subcmds": 14,
+ "tps": 22.4,
+ "minutes": 62,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 07:51",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2462,
+ "errors_per_kloc": 0.4
+ }
+ },
+ {
+ "case": "wa-flashnext-phased",
+ "model": "flashnext-phased",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 100,
+ "tests_fail": 0,
+ "subcmds": 14,
+ "tps": 25.3,
+ "minutes": 50,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 11:28",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2149,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-tiel-q4kxl-r2",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 34,
+ "tests_fail": 0,
+ "subcmds": 15,
+ "tps": 78.1,
+ "minutes": 9,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 15:59",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1292,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-tiel-q4kxl-r3",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 38,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 81.4,
+ "minutes": 9,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 16:09",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1377,
+ "errors_per_kloc": 2.2
+ }
+ },
+ {
+ "case": "wa-tiel-q4kxl-r4",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 4,
+ "tests_pass": 77,
+ "tests_fail": 0,
+ "subcmds": 9,
+ "tps": 69.3,
+ "minutes": 22,
+ "compactions": 3,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-11 16:31",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1767,
+ "errors_per_kloc": 1.7
+ }
+ },
+ {
+ "case": "wa-strata42-flash-next-pcie",
+ "model": "strata42-flash-next-pcie",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 145,
+ "tests_fail": 0,
+ "subcmds": 19,
+ "tps": 33.8,
+ "minutes": 51,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 23:53",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2813,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-tiel-q4kxl-mtp-r1",
+ "model": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 50,
+ "tests_fail": 0,
+ "subcmds": 6,
+ "tps": 75.4,
+ "minutes": 22,
+ "compactions": 3,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-12 00:18",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1269,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-tiel-q4kxl-mtp-r2",
+ "model": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 52,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 67.2,
+ "minutes": 16,
+ "compactions": 2,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-12 00:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1250,
+ "errors_per_kloc": 3.2
+ }
+ },
+ {
+ "case": "wa-tiel-q4kxl-mtp-r3",
+ "model": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 57,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 82.1,
+ "minutes": 14,
+ "compactions": 2,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-12 00:48",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1790,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-lfm25-24b-q4km",
+ "model": "lcpp6-lfm25-24b-q4km",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 4,
+ "tests_pass": 8,
+ "tests_fail": 0,
+ "subcmds": 4,
+ "tps": 157.6,
+ "minutes": 2,
+ "compactions": 1,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "partial",
+ "finished": "2026-10-13 19:51",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 345,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-lfm25-24b-q6k",
+ "model": "lcpp6-lfm25-24b-q6k",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 7,
+ "tests_fail": 0,
+ "subcmds": 3,
+ "tps": 176.2,
+ "minutes": 1,
+ "compactions": 0,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-10-13 19:54",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 258,
+ "errors_per_kloc": 3.9
+ }
+ },
+ {
+ "case": "wa-gemma-five-r2",
+ "model": "gemma-4-26b-a4b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 9,
+ "tests_fail": 1,
+ "subcmds": 0,
+ "tps": 166.7,
+ "minutes": 5,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 09:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 613,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-five-r3",
+ "model": "gemma-4-26b-a4b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 3,
+ "tests_pass": 8,
+ "tests_fail": 0,
+ "subcmds": 2,
+ "tps": 143.1,
+ "minutes": 2,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-14 09:36",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 310,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-gemma-five-r4",
+ "model": "gemma-4-26b-a4b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 6,
+ "tests_fail": 0,
+ "subcmds": 5,
+ "tps": 124.5,
+ "minutes": 2,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 09:39",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 570,
+ "errors_per_kloc": 1.8
+ }
+ },
+ {
+ "case": "wa-gemma-five-r5",
+ "model": "gemma-4-26b-a4b",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 4,
+ "tests_pass": 5,
+ "tests_fail": 0,
+ "subcmds": 4,
+ "tps": 101.8,
+ "minutes": 1,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-14 09:40",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 448,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen-vllm-five-r3",
+ "model": "qwen3.8-27b-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 67,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 70.4,
+ "minutes": 52,
+ "compactions": 5,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-14 10:33",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 2717,
+ "errors_per_kloc": 4.8
+ }
+ },
+ {
+ "case": "wa-qwen-vllm-five-r4",
+ "model": "qwen3.8-27b-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 68,
+ "tests_fail": 0,
+ "subcmds": 5,
+ "tps": 73.4,
+ "minutes": 16,
+ "compactions": 1,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-14 10:49",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1419,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wa-qwen-vllm-five-r5",
+ "model": "qwen3.8-27b-vllm",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 114,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 75.9,
+ "minutes": 25,
+ "compactions": 2,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-14 11:14",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1906,
+ "errors_per_kloc": 0.5
+ }
+ },
+ {
+ "case": "wa-tiel-t06-r2",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 33,
+ "tests_fail": 0,
+ "subcmds": 12,
+ "tps": 106.0,
+ "minutes": 9,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 11:24",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 921,
+ "errors_per_kloc": 1.1
+ }
+ },
+ {
+ "case": "wa-tiel-t06-r3",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 2,
+ "tests_pass": 39,
+ "tests_fail": 0,
+ "subcmds": 6,
+ "tps": 95.5,
+ "minutes": 12,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-14 11:36",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1305,
+ "errors_per_kloc": 0.8
+ }
+ },
+ {
+ "case": "wa-tiel-t06-r4",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 38,
+ "tests_fail": 0,
+ "subcmds": 18,
+ "tps": 87.9,
+ "minutes": 13,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 11:49",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1684,
+ "errors_per_kloc": 1.2
+ }
+ },
+ {
+ "case": "wa-tiel-t06-r5",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 42,
+ "tests_fail": 0,
+ "subcmds": 7,
+ "tps": 29.7,
+ "minutes": 45,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 12:34",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 1184,
+ "errors_per_kloc": 0.8
+ }
+ },
+ {
+ "case": "wa-lfm25-24b-ud-q4kxl",
+ "model": "lcpp6-lfm25-24b-ud-q4kxl",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 12,
+ "tests_fail": 0,
+ "subcmds": 4,
+ "tps": 149.8,
+ "minutes": 2,
+ "compactions": 0,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-15 12:40",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 410,
+ "errors_per_kloc": 2.4
+ }
+ },
+ {
+ "case": "wa-lfm25-24b-ud-q5kxl",
+ "model": "lcpp6-lfm25-24b-ud-q5kxl",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 18,
+ "tests_fail": 0,
+ "subcmds": 8,
+ "tps": 146.7,
+ "minutes": 83,
+ "compactions": 18,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-15 14:05",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 736,
+ "errors_per_kloc": 1.4
+ }
+ },
+ {
+ "case": "wa-lfm25-24b-ud-q6kxl",
+ "model": "lcpp6-lfm25-24b-ud-q6kxl",
+ "test": 1,
+ "agent": "OpenCode",
+ "checks": 5,
+ "tests_pass": 6,
+ "tests_fail": 0,
+ "subcmds": 5,
+ "tps": 125.5,
+ "minutes": 2,
+ "compactions": 1,
+ "ctx": 122880,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-15 14:12",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 397,
+ "errors_per_kloc": 7.6
+ }
+ },
+ {
+ "case": "wb-tiel-coder-35b",
+ "model": "tiel-coder-35b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 37,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 82.0,
+ "minutes": 32,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "partial",
+ "finished": "2026-10-03 09:08",
+ "struggle": {
+ "compiles": 23,
+ "failed_compiles": 16,
+ "rust_errors": 376,
+ "loc": 1742,
+ "errors_per_kloc": 215.8
+ }
+ },
+ {
+ "case": "wb-qwen3.6-35b-a3b",
+ "model": "qwen3.6-35b-a3b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 26,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 55.4,
+ "minutes": 12,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-10-03 09:34",
+ "struggle": {
+ "compiles": 16,
+ "failed_compiles": 10,
+ "rust_errors": 54,
+ "loc": 2472,
+ "errors_per_kloc": 21.8
+ }
+ },
+ {
+ "case": "wb-qwen3.8-27b",
+ "model": "qwen3.8-27b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 84,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 17.5,
+ "minutes": 82,
+ "compactions": null,
+ "ctx": 212992,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-03 11:05",
+ "struggle": {
+ "compiles": 30,
+ "failed_compiles": 10,
+ "rust_errors": 24,
+ "loc": 2569,
+ "errors_per_kloc": 9.3
+ }
+ },
+ {
+ "case": "wb-qwen3.6-27b",
+ "model": "qwen3.6-27b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 22,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 24.5,
+ "minutes": 23,
+ "compactions": null,
+ "ctx": 196608,
+ "kv": "q8_0",
+ "verdict": "partial",
+ "finished": "2026-10-03 11:38",
+ "struggle": {
+ "compiles": 16,
+ "failed_compiles": 6,
+ "rust_errors": 26,
+ "loc": 1327,
+ "errors_per_kloc": 19.6
+ }
+ },
+ {
+ "case": "wb-q38-27b-cyber",
+ "model": "q38-27b-cyber",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 27.3,
+ "minutes": 35,
+ "compactions": null,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-03 12:40",
+ "struggle": {
+ "compiles": 18,
+ "failed_compiles": 12,
+ "rust_errors": 35,
+ "loc": 1521,
+ "errors_per_kloc": 24.3
+ }
+ },
+ {
+ "case": "wb-cyber-tiel-coder-35b",
+ "model": "cyber-tiel-coder-35b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 35,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 24.5,
+ "minutes": 82,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-03 14:23",
+ "struggle": {
+ "compiles": 24,
+ "failed_compiles": 12,
+ "rust_errors": 57,
+ "loc": 1940,
+ "errors_per_kloc": 29.9
+ }
+ },
+ {
+ "case": "wb-qwen3.8-27b-vllm",
+ "model": "qwen3.8-27b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 73,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 69.5,
+ "minutes": 39,
+ "compactions": null,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-03 15:41",
+ "struggle": {
+ "compiles": 8,
+ "failed_compiles": 4,
+ "rust_errors": 32,
+ "loc": 3082,
+ "errors_per_kloc": 10.4
+ }
+ },
+ {
+ "case": "wb-gemma-4-26b-a4b-nothink",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 2,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 118.4,
+ "minutes": 3,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-03 19:13",
+ "struggle": {
+ "compiles": 6,
+ "failed_compiles": 4,
+ "rust_errors": 4,
+ "loc": 417,
+ "errors_per_kloc": 9.6
+ }
+ },
+ {
+ "case": "wb-gemma-4-26b-a4b-nomtp",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 6,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 89.6,
+ "minutes": 10,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "partial",
+ "finished": "2026-10-03 18:02",
+ "struggle": {
+ "compiles": 14,
+ "failed_compiles": 12,
+ "rust_errors": 24,
+ "loc": 619,
+ "errors_per_kloc": 38.8
+ }
+ },
+ {
+ "case": "wb-gemma-4-31b-nothink",
+ "model": "gemma-4-31b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 4,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 50.3,
+ "minutes": 12,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q4_0",
+ "verdict": "partial",
+ "finished": "2026-10-03 19:34",
+ "struggle": {
+ "compiles": 5,
+ "failed_compiles": 4,
+ "rust_errors": 8,
+ "loc": 521,
+ "errors_per_kloc": 15.4
+ }
+ },
+ {
+ "case": "wb-gemma-4-26b-a4b",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 152.7,
+ "minutes": 7,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-10-03 22:42",
+ "struggle": {
+ "compiles": 3,
+ "failed_compiles": 3,
+ "rust_errors": 5,
+ "loc": 555,
+ "errors_per_kloc": 9.0
+ }
+ },
+ {
+ "case": "wb-gemma-4-26b-a4b-vllm",
+ "model": "gemma-4-26b-a4b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 0,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 91.4,
+ "minutes": 4,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-03 23:28",
+ "struggle": {
+ "compiles": 6,
+ "failed_compiles": 3,
+ "rust_errors": 3,
+ "loc": 498,
+ "errors_per_kloc": 6.0
+ }
+ },
+ {
+ "case": "wb-gemma-4-31b",
+ "model": "gemma-4-31b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 5,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 43.8,
+ "minutes": 4,
+ "compactions": null,
+ "ctx": 131072,
+ "kv": "q4_0",
+ "verdict": "pass",
+ "finished": "2026-10-03 22:55",
+ "struggle": {
+ "compiles": 4,
+ "failed_compiles": 3,
+ "rust_errors": 3,
+ "loc": 483,
+ "errors_per_kloc": 6.2
+ }
+ },
+ {
+ "case": "wb-gemma-4-31b-q8",
+ "model": "gemma-4-31b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 7,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 47.0,
+ "minutes": 5,
+ "compactions": null,
+ "ctx": 73728,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-03 23:11",
+ "struggle": {
+ "compiles": 1,
+ "failed_compiles": 1,
+ "rust_errors": 1,
+ "loc": 500,
+ "errors_per_kloc": 2.0
+ }
+ },
+ {
+ "case": "wb-gemma-4-31b-q8-nothink",
+ "model": "gemma-4-31b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 5,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 38.8,
+ "minutes": 8,
+ "compactions": null,
+ "ctx": 73728,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-03 19:53",
+ "struggle": {
+ "compiles": 4,
+ "failed_compiles": 3,
+ "rust_errors": 9,
+ "loc": 524,
+ "errors_per_kloc": 17.2
+ }
+ },
+ {
+ "case": "wb-qwen3.8-27b-uncensored-vllm",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 53,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 60.8,
+ "minutes": 60,
+ "compactions": null,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-04 00:29",
+ "struggle": {
+ "compiles": 20,
+ "failed_compiles": 6,
+ "rust_errors": 30,
+ "loc": 3916,
+ "errors_per_kloc": 7.7
+ }
+ },
+ {
+ "case": "wb-tiel-coder-35b-q6",
+ "model": "tiel-coder-35b-q6",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 28,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 38.8,
+ "minutes": 37,
+ "compactions": null,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-03 20:55",
+ "struggle": {
+ "compiles": 18,
+ "failed_compiles": 7,
+ "rust_errors": 19,
+ "loc": 1143,
+ "errors_per_kloc": 16.6
+ }
+ },
+ {
+ "case": "wb-qwen3.8-flash-next-unpruned",
+ "model": "qwen3.8-flash-next-unpruned",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 32,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 6.9,
+ "minutes": 165,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-04 03:56",
+ "struggle": {
+ "compiles": 12,
+ "failed_compiles": 7,
+ "rust_errors": 23,
+ "loc": 2428,
+ "errors_per_kloc": 9.9
+ }
+ },
+ {
+ "case": "wb-swift15-flash-next",
+ "model": "swift15-flash-next",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 6.9,
+ "minutes": 151,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-04 07:28",
+ "struggle": {
+ "compiles": 8,
+ "failed_compiles": 8,
+ "rust_errors": 34,
+ "loc": 3535,
+ "errors_per_kloc": 9.6
+ }
+ },
+ {
+ "case": "wb-orcarouter-fn-uncensored",
+ "model": "orcarouter-fn-uncensored",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 7.4,
+ "minutes": 155,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-04 10:51",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 12,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wb-glm-4.7-flash",
+ "model": "glm-4.7-flash",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 0,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 40.8,
+ "minutes": 19,
+ "compactions": 0,
+ "ctx": 202752,
+ "kv": "q8_0",
+ "verdict": "fail",
+ "finished": "2026-10-04 11:13",
+ "struggle": {
+ "compiles": 45,
+ "failed_compiles": 42,
+ "rust_errors": 368,
+ "loc": 944,
+ "errors_per_kloc": 389.8
+ }
+ },
+ {
+ "case": "wb-glm-4.5-air",
+ "model": "glm-4.5-air",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 10,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 6.0,
+ "minutes": 102,
+ "compactions": 0,
+ "ctx": 131072,
+ "kv": "q8_0",
+ "verdict": "partial",
+ "finished": "2026-10-04 13:26",
+ "struggle": {
+ "compiles": 17,
+ "failed_compiles": 12,
+ "rust_errors": 104,
+ "loc": 1416,
+ "errors_per_kloc": 73.4
+ }
+ },
+ {
+ "case": "wb-q38-27b-cyber-rerun",
+ "model": "q38-27b-cyber",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 22,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 8.1,
+ "minutes": 173,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-04 16:38",
+ "struggle": {
+ "compiles": 72,
+ "failed_compiles": 24,
+ "rust_errors": 101,
+ "loc": 1214,
+ "errors_per_kloc": 86.5
+ }
+ },
+ {
+ "case": "wb-qwen3.8-27b-vllm-240k",
+ "model": "qwen3.8-27b-vllm-240k",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 73,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 29.9,
+ "minutes": 75,
+ "compactions": 1,
+ "ctx": 245760,
+ "kv": "4/2-bit (KVarN)",
+ "verdict": "pass",
+ "finished": "2026-10-04 17:54",
+ "struggle": {
+ "compiles": 29,
+ "failed_compiles": 9,
+ "rust_errors": 109,
+ "loc": 2862,
+ "errors_per_kloc": 38.1
+ }
+ },
+ {
+ "case": "wb-gemma-4-26b-a4b-rb",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 106.1,
+ "minutes": 12,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-10-04 18:07",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 426,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wb-qwen3.8-27b-uncensored-vllm-tb",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 100,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 63.7,
+ "minutes": 47,
+ "compactions": 2,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-04 18:55",
+ "struggle": {
+ "compiles": 19,
+ "failed_compiles": 11,
+ "rust_errors": 37,
+ "loc": 3541,
+ "errors_per_kloc": 10.4
+ }
+ },
+ {
+ "case": "wb-qwen3.8-27b-uncensored-vllm-pp",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 66,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 61.1,
+ "minutes": 80,
+ "compactions": 4,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-04 20:15",
+ "struggle": {
+ "compiles": 34,
+ "failed_compiles": 22,
+ "rust_errors": 160,
+ "loc": 3889,
+ "errors_per_kloc": 41.7
+ }
+ },
+ {
+ "case": "wb-flashnext-sglang",
+ "model": "flashnext",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 155,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 36.4,
+ "minutes": 124,
+ "compactions": 2,
+ "ctx": 204800,
+ "kv": "fp8_e4m3",
+ "verdict": "pass",
+ "finished": "2026-10-05 00:08",
+ "struggle": {
+ "compiles": 49,
+ "failed_compiles": 26,
+ "rust_errors": 83,
+ "loc": 9371,
+ "errors_per_kloc": 8.9
+ }
+ },
+ {
+ "case": "wb-orcasaq2-cyber-27b",
+ "model": "orcasaq2-cyber-27b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 51.7,
+ "minutes": 20,
+ "compactions": 1,
+ "ctx": 106496,
+ "kv": "q8_0",
+ "verdict": "fail",
+ "finished": "2026-10-05 01:06",
+ "struggle": {
+ "compiles": 7,
+ "failed_compiles": 3,
+ "rust_errors": 3,
+ "loc": 0,
+ "errors_per_kloc": null
+ }
+ },
+ {
+ "case": "wb-orcasaq2-cyber-27b-r2",
+ "model": "orcasaq2-cyber-27b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 51,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 53.5,
+ "minutes": 76,
+ "compactions": 7,
+ "ctx": 106496,
+ "kv": "q8_0",
+ "verdict": "partial",
+ "finished": "2026-10-05 02:59",
+ "struggle": {
+ "compiles": 16,
+ "failed_compiles": 11,
+ "rust_errors": 55,
+ "loc": 3891,
+ "errors_per_kloc": 14.1
+ }
+ },
+ {
+ "case": "wb-qwen3.8-27b-vllm-64k",
+ "model": "qwen3.8-27b-vllm-64k",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 89.1,
+ "minutes": 11,
+ "compactions": 4,
+ "ctx": 65536,
+ "kv": "fp8",
+ "verdict": "fail",
+ "finished": "2026-10-05 10:15",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 0,
+ "errors_per_kloc": null
+ }
+ },
+ {
+ "case": "wb-qwen3.8-27b-vllm-quote",
+ "model": "qwen3.8-27b-vllm-quote",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 44,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 95.0,
+ "minutes": 59,
+ "compactions": 17,
+ "ctx": 57344,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-05 11:15",
+ "struggle": {
+ "compiles": 15,
+ "failed_compiles": 7,
+ "rust_errors": 11,
+ "loc": 1702,
+ "errors_per_kloc": 8.2
+ }
+ },
+ {
+ "case": "wb-orcasaq2-cyber-27b-verifier",
+ "model": "orcasaq2-cyber-27b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 51,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 48.1,
+ "minutes": 34,
+ "compactions": 3,
+ "ctx": 90112,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-05 11:55",
+ "struggle": {
+ "compiles": 15,
+ "failed_compiles": 10,
+ "rust_errors": 24,
+ "loc": 1926,
+ "errors_per_kloc": 12.5
+ }
+ },
+ {
+ "case": "wb-strata-flash-next",
+ "model": "strata-flash-next",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 104,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 24.4,
+ "minutes": 96,
+ "compactions": 1,
+ "ctx": 262144,
+ "kv": "int8",
+ "verdict": "pass",
+ "finished": "2026-10-05 14:11",
+ "struggle": {
+ "compiles": 48,
+ "failed_compiles": 21,
+ "rust_errors": 40,
+ "loc": 5900,
+ "errors_per_kloc": 6.9
+ }
+ },
+ {
+ "case": "wb-strata-coder",
+ "model": "strata-coder",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 25.9,
+ "minutes": 37,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "int8",
+ "verdict": "fail",
+ "finished": "2026-10-05 14:57",
+ "struggle": {
+ "compiles": 15,
+ "failed_compiles": 11,
+ "rust_errors": 25,
+ "loc": 0,
+ "errors_per_kloc": null
+ }
+ },
+ {
+ "case": "wb-strata-swift15-r2",
+ "model": "strata-swift15",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 114,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 21.4,
+ "minutes": 130,
+ "compactions": 1,
+ "ctx": 262144,
+ "kv": "int8",
+ "verdict": "pass",
+ "finished": "2026-10-05 17:09",
+ "struggle": {
+ "compiles": 38,
+ "failed_compiles": 21,
+ "rust_errors": 106,
+ "loc": 5827,
+ "errors_per_kloc": 18.2
+ }
+ },
+ {
+ "case": "wb-strata-coder-tb",
+ "model": "strata-coder",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 20.4,
+ "minutes": 219,
+ "compactions": 1,
+ "ctx": 262144,
+ "kv": "int8",
+ "verdict": "fail",
+ "finished": "2026-10-05 20:49",
+ "struggle": {
+ "compiles": 21,
+ "failed_compiles": 15,
+ "rust_errors": 237,
+ "loc": 1242,
+ "errors_per_kloc": 190.8
+ }
+ },
+ {
+ "case": "wb-kolibri-1-r2",
+ "model": "kolibri-1",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 5,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 19.6,
+ "minutes": 36,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "q8_0",
+ "verdict": "partial",
+ "finished": "2026-10-06 01:12",
+ "struggle": {
+ "compiles": 15,
+ "failed_compiles": 7,
+ "rust_errors": 29,
+ "loc": 253,
+ "errors_per_kloc": 114.6
+ }
+ },
+ {
+ "case": "wb-orcarouter-fn-uncensored-long-lcpp6-r2",
+ "model": "lcpp6-orcarouter-fn-uncensored",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 54,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 7.6,
+ "minutes": 191,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-06 05:01",
+ "struggle": {
+ "compiles": 22,
+ "failed_compiles": 9,
+ "rust_errors": 32,
+ "loc": 2427,
+ "errors_per_kloc": 13.2
+ }
+ },
+ {
+ "case": "wb-thinkingcap-27b-heretic",
+ "model": "lcpp6-thinkingcap-27b-heretic",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 56,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 25.3,
+ "minutes": 52,
+ "compactions": 0,
+ "ctx": 196608,
+ "kv": "q8_0",
+ "verdict": "pass",
+ "finished": "2026-10-06 10:11",
+ "struggle": {
+ "compiles": 11,
+ "failed_compiles": 6,
+ "rust_errors": 8,
+ "loc": 1990,
+ "errors_per_kloc": 4.5
+ }
+ },
+ {
+ "case": "wb-heretic2-long-lcpp6",
+ "model": "lcpp6-flashnext-heretic2",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 33,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 14.6,
+ "minutes": 120,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-06 13:53",
+ "struggle": {
+ "compiles": 22,
+ "failed_compiles": 14,
+ "rust_errors": 60,
+ "loc": 2120,
+ "errors_per_kloc": 28.3
+ }
+ },
+ {
+ "case": "wb-abliterated-s15-long-lcpp6",
+ "model": "lcpp6-flashnext-abliterated-s15",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 20,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 10.4,
+ "minutes": 120,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "pass",
+ "finished": "2026-10-06 17:16",
+ "struggle": {
+ "compiles": 21,
+ "failed_compiles": 10,
+ "rust_errors": 30,
+ "loc": 1476,
+ "errors_per_kloc": 20.3
+ }
+ },
+ {
+ "case": "wb-q38-27b-cyber-mtp-default",
+ "model": "lcpp6-q38-27b-cyber-mtp",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 40.1,
+ "minutes": 83,
+ "compactions": 7,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-06 19:29",
+ "struggle": {
+ "compiles": 39,
+ "failed_compiles": 36,
+ "rust_errors": 50,
+ "loc": 1049,
+ "errors_per_kloc": 48.6
+ }
+ },
+ {
+ "case": "wt-qwen3.8-27b-vllm",
+ "model": "qwen3.8-27b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 41,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 66.5,
+ "minutes": 39,
+ "compactions": 2,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-06 20:09",
+ "struggle": {
+ "compiles": 22,
+ "failed_compiles": 15,
+ "rust_errors": 71,
+ "loc": 2506,
+ "errors_per_kloc": 29.1
+ }
+ },
+ {
+ "case": "wt-qwen3.8-27b-uncensored-vllm-pp",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 76,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 59.9,
+ "minutes": 52,
+ "compactions": 3,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-06 21:02",
+ "struggle": {
+ "compiles": 25,
+ "failed_compiles": 18,
+ "rust_errors": 166,
+ "loc": 3467,
+ "errors_per_kloc": 48.2
+ }
+ },
+ {
+ "case": "wt-thinkingcap-27b-heretic",
+ "model": "lcpp6-thinkingcap-27b-heretic",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 8,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 18.6,
+ "minutes": 90,
+ "compactions": 2,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-06 22:33",
+ "struggle": {
+ "compiles": 20,
+ "failed_compiles": 12,
+ "rust_errors": 276,
+ "loc": 1529,
+ "errors_per_kloc": 180.5
+ }
+ },
+ {
+ "case": "wt-orcasaq2-cyber-27b",
+ "model": "lcpp6-orcasaq2-cyber-27b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 59,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 52.7,
+ "minutes": 33,
+ "compactions": 2,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-06 23:06",
+ "struggle": {
+ "compiles": 19,
+ "failed_compiles": 9,
+ "rust_errors": 28,
+ "loc": 2457,
+ "errors_per_kloc": 11.8
+ }
+ },
+ {
+ "case": "wt-flashnext-sglang",
+ "model": "flashnext",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 94,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 44.7,
+ "minutes": 47,
+ "compactions": 1,
+ "ctx": 204800,
+ "kv": "fp8_e4m3",
+ "verdict": "pass",
+ "finished": "2026-10-07 00:24",
+ "struggle": {
+ "compiles": 18,
+ "failed_compiles": 9,
+ "rust_errors": 29,
+ "loc": 4797,
+ "errors_per_kloc": 6.3
+ }
+ },
+ {
+ "case": "wt-gemma-4-26b-a4b-vllm",
+ "model": "gemma-4-26b-a4b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 90.1,
+ "minutes": 3,
+ "compactions": 1,
+ "ctx": 262144,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-07 00:29",
+ "struggle": {
+ "compiles": 2,
+ "failed_compiles": 1,
+ "rust_errors": 1,
+ "loc": 466,
+ "errors_per_kloc": 2.1
+ }
+ },
+ {
+ "case": "wb-bonsai2-pq2-med",
+ "model": "bonsai2-27b-pq2-med",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 32,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 48.1,
+ "minutes": 153,
+ "compactions": 9,
+ "ctx": 253952,
+ "kv": "f16",
+ "verdict": "partial",
+ "finished": "2026-10-07 12:28",
+ "struggle": {
+ "compiles": 59,
+ "failed_compiles": 33,
+ "rust_errors": 145,
+ "loc": 2234,
+ "errors_per_kloc": 64.9
+ }
+ },
+ {
+ "case": "wt-strata-flash-next",
+ "model": "strata-flash-next",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 145,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 30.2,
+ "minutes": 64,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "int8",
+ "verdict": "pass",
+ "finished": "2026-10-07 18:46",
+ "struggle": {
+ "compiles": 31,
+ "failed_compiles": 13,
+ "rust_errors": 34,
+ "loc": 5699,
+ "errors_per_kloc": 6.0
+ }
+ },
+ {
+ "case": "wb-maya-glm-5.3-flash",
+ "model": "maya-glm-5.3-flash",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 66,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 13.9,
+ "minutes": 322,
+ "compactions": 5,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-08 07:35",
+ "struggle": {
+ "compiles": 30,
+ "failed_compiles": 5,
+ "rust_errors": 20,
+ "loc": 2932,
+ "errors_per_kloc": 9.2
+ }
+ },
+ {
+ "case": "wb-maya-huihui-glm-5.3-flash",
+ "model": "maya-glm-5.3-flash-huihui",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 16,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 21.8,
+ "minutes": 338,
+ "compactions": 6,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-08 14:57",
+ "struggle": {
+ "compiles": 17,
+ "failed_compiles": 5,
+ "rust_errors": 9,
+ "loc": 459,
+ "errors_per_kloc": 41.4
+ }
+ },
+ {
+ "case": "wb-gemma-4-26b-a4b-redo",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 5,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 164.5,
+ "minutes": 6,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "partial",
+ "finished": "2026-10-09 08:50",
+ "struggle": {
+ "compiles": 7,
+ "failed_compiles": 5,
+ "rust_errors": 8,
+ "loc": 649,
+ "errors_per_kloc": 12.3
+ }
+ },
+ {
+ "case": "wb-gemma-4-26b-a4b-vllm-redo",
+ "model": "gemma-4-26b-a4b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 3,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 111.7,
+ "minutes": 5,
+ "compactions": 1,
+ "ctx": 262144,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-09 08:38",
+ "struggle": {
+ "compiles": 3,
+ "failed_compiles": 1,
+ "rust_errors": 9,
+ "loc": 499,
+ "errors_per_kloc": 18.0
+ }
+ },
+ {
+ "case": "wb-gemma-4-31b-redo",
+ "model": "gemma-4-31b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 5,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 39.7,
+ "minutes": 4,
+ "compactions": 0,
+ "ctx": 131072,
+ "kv": "q4_0",
+ "verdict": "pass",
+ "finished": "2026-10-09 08:43",
+ "struggle": {
+ "compiles": 3,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 438,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wt-gemma-4-26b-a4b-redo",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": null,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 174.4,
+ "minutes": 3,
+ "compactions": 0,
+ "ctx": 262144,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-10-09 09:06",
+ "struggle": {
+ "compiles": 2,
+ "failed_compiles": 2,
+ "rust_errors": 6,
+ "loc": 363,
+ "errors_per_kloc": 16.5
+ }
+ },
+ {
+ "case": "wt-gemma-4-26b-a4b-vllm-redo",
+ "model": "gemma-4-26b-a4b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 5,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 93.8,
+ "minutes": 7,
+ "compactions": 4,
+ "ctx": 262144,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-09 08:58",
+ "struggle": {
+ "compiles": 6,
+ "failed_compiles": 2,
+ "rust_errors": 18,
+ "loc": 535,
+ "errors_per_kloc": 33.6
+ }
+ },
+ {
+ "case": "wt-gemma-4-31b-redo",
+ "model": "gemma-4-31b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 5,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 46.6,
+ "minutes": 4,
+ "compactions": 0,
+ "ctx": 131072,
+ "kv": "q4_0",
+ "verdict": "partial",
+ "finished": "2026-10-09 09:02",
+ "struggle": {
+ "compiles": 3,
+ "failed_compiles": 1,
+ "rust_errors": 10,
+ "loc": 561,
+ "errors_per_kloc": 17.8
+ }
+ },
+ {
+ "case": "wb-bonsai2-27b-ada",
+ "model": "bonsai2-27b-ada",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 27,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 73.3,
+ "minutes": 39,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-09 15:39",
+ "struggle": {
+ "compiles": 35,
+ "failed_compiles": 22,
+ "rust_errors": 183,
+ "loc": 1647,
+ "errors_per_kloc": 111.1
+ }
+ },
+ {
+ "case": "wb-q38-27b-cyber-q5",
+ "model": "lcpp6-q38-27b-cyber-q5",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 1,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 27.6,
+ "minutes": 180,
+ "compactions": 24,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-09 23:17",
+ "struggle": {
+ "compiles": 582,
+ "failed_compiles": 24,
+ "rust_errors": 103,
+ "loc": 982,
+ "errors_per_kloc": 104.9
+ }
+ },
+ {
+ "case": "wb-q38-coder390",
+ "model": "lcpp6-q38-coder390",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 33,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 50.0,
+ "minutes": 31,
+ "compactions": 8,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-10 02:31",
+ "struggle": {
+ "compiles": 11,
+ "failed_compiles": 7,
+ "rust_errors": 186,
+ "loc": 1208,
+ "errors_per_kloc": 154.0
+ }
+ },
+ {
+ "case": "wb-strata42-flash-next",
+ "model": "strata42-flash-next",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 72,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 19.2,
+ "minutes": 98,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 09:30",
+ "struggle": {
+ "compiles": 31,
+ "failed_compiles": 13,
+ "rust_errors": 45,
+ "loc": 3843,
+ "errors_per_kloc": 11.7
+ }
+ },
+ {
+ "case": "wb-retry-tiel-t06",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 17,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 40.8,
+ "minutes": 72,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 12:40",
+ "struggle": {
+ "compiles": 84,
+ "failed_compiles": 19,
+ "rust_errors": 45,
+ "loc": 1435,
+ "errors_per_kloc": 32.8
+ }
+ },
+ {
+ "case": "wb-retry-tiel-q4kxl",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 22,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 78.6,
+ "minutes": 27,
+ "compactions": 5,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 13:07",
+ "struggle": {
+ "compiles": 28,
+ "failed_compiles": 11,
+ "rust_errors": 53,
+ "loc": 2072,
+ "errors_per_kloc": 25.6
+ }
+ },
+ {
+ "case": "wb-retry-devstral-q5",
+ "model": "lcpp6-devstral-24b-q5",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 0,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 29.1,
+ "minutes": 3,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-11 13:10",
+ "struggle": {
+ "compiles": 0,
+ "failed_compiles": 0,
+ "rust_errors": 0,
+ "loc": 459,
+ "errors_per_kloc": 0.0
+ }
+ },
+ {
+ "case": "wb-retry-qwen36-q6",
+ "model": "lcpp6-qwen36-35b-a3b-q6",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 9,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 36.2,
+ "minutes": 17,
+ "compactions": 2,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-11 13:28",
+ "struggle": {
+ "compiles": 12,
+ "failed_compiles": 9,
+ "rust_errors": 84,
+ "loc": 1875,
+ "errors_per_kloc": 44.8
+ }
+ },
+ {
+ "case": "wb-retry-glm47f-coding",
+ "model": "lcpp6-glm47f-coding",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 2,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 44.1,
+ "minutes": 15,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-11 13:43",
+ "struggle": {
+ "compiles": 16,
+ "failed_compiles": 10,
+ "rust_errors": 69,
+ "loc": 1407,
+ "errors_per_kloc": 49.0
+ }
+ },
+ {
+ "case": "wb-tiel-q4kxl-r2",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 29,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 81.4,
+ "minutes": 14,
+ "compactions": 2,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 16:45",
+ "struggle": {
+ "compiles": 12,
+ "failed_compiles": 10,
+ "rust_errors": 45,
+ "loc": 1293,
+ "errors_per_kloc": 34.8
+ }
+ },
+ {
+ "case": "wb-tiel-q4kxl-r3",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 30,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 69.2,
+ "minutes": 20,
+ "compactions": 3,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-11 17:06",
+ "struggle": {
+ "compiles": 22,
+ "failed_compiles": 14,
+ "rust_errors": 69,
+ "loc": 1238,
+ "errors_per_kloc": 55.7
+ }
+ },
+ {
+ "case": "wb-tiel-q4kxl-r4",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 38,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 69.9,
+ "minutes": 33,
+ "compactions": 5,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-11 17:39",
+ "struggle": {
+ "compiles": 28,
+ "failed_compiles": 12,
+ "rust_errors": 40,
+ "loc": 1720,
+ "errors_per_kloc": 23.3
+ }
+ },
+ {
+ "case": "wt-tiel-q4kxl-r1",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 30,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 69.0,
+ "minutes": 34,
+ "compactions": 5,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 18:13",
+ "struggle": {
+ "compiles": 29,
+ "failed_compiles": 17,
+ "rust_errors": 79,
+ "loc": 1480,
+ "errors_per_kloc": 53.4
+ }
+ },
+ {
+ "case": "wt-tiel-q4kxl-r2",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 32,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 69.8,
+ "minutes": 28,
+ "compactions": 4,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 18:44",
+ "struggle": {
+ "compiles": 22,
+ "failed_compiles": 12,
+ "rust_errors": 81,
+ "loc": 1234,
+ "errors_per_kloc": 65.6
+ }
+ },
+ {
+ "case": "wt-tiel-q4kxl-r3",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 23,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 79.4,
+ "minutes": 26,
+ "compactions": 5,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-11 19:11",
+ "struggle": {
+ "compiles": 23,
+ "failed_compiles": 14,
+ "rust_errors": 53,
+ "loc": 1331,
+ "errors_per_kloc": 39.8
+ }
+ },
+ {
+ "case": "wb-strata42-flash-next-pcie",
+ "model": "strata42-flash-next-pcie",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 77,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 30.1,
+ "minutes": 61,
+ "compactions": 1,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-12 01:51",
+ "struggle": {
+ "compiles": 22,
+ "failed_compiles": 12,
+ "rust_errors": 67,
+ "loc": 4445,
+ "errors_per_kloc": 15.1
+ }
+ },
+ {
+ "case": "wb-tiel-q4kxl-mtp-r1",
+ "model": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 29,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 85.7,
+ "minutes": 15,
+ "compactions": 2,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-12 02:07",
+ "struggle": {
+ "compiles": 13,
+ "failed_compiles": 7,
+ "rust_errors": 46,
+ "loc": 1693,
+ "errors_per_kloc": 27.2
+ }
+ },
+ {
+ "case": "wb-tiel-q4kxl-mtp-r2",
+ "model": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 9,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 81.1,
+ "minutes": 13,
+ "compactions": 2,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-12 02:20",
+ "struggle": {
+ "compiles": 7,
+ "failed_compiles": 2,
+ "rust_errors": 25,
+ "loc": 925,
+ "errors_per_kloc": 27.0
+ }
+ },
+ {
+ "case": "wb-tiel-q4kxl-mtp-r3",
+ "model": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 20,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 80.3,
+ "minutes": 20,
+ "compactions": 4,
+ "ctx": null,
+ "kv": null,
+ "verdict": "fail",
+ "finished": "2026-10-12 02:40",
+ "struggle": {
+ "compiles": 21,
+ "failed_compiles": 8,
+ "rust_errors": 38,
+ "loc": 1517,
+ "errors_per_kloc": 25.7
+ }
+ },
+ {
+ "case": "wb-gemma-five-r2",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 3,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 153.9,
+ "minutes": 4,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 12:38",
+ "struggle": {
+ "compiles": 6,
+ "failed_compiles": 5,
+ "rust_errors": 20,
+ "loc": 521,
+ "errors_per_kloc": 38.4
+ }
+ },
+ {
+ "case": "wb-gemma-five-r3",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 0,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 144.4,
+ "minutes": 4,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-14 12:42",
+ "struggle": {
+ "compiles": 7,
+ "failed_compiles": 6,
+ "rust_errors": 16,
+ "loc": 439,
+ "errors_per_kloc": 36.4
+ }
+ },
+ {
+ "case": "wb-gemma-five-r4",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 0,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 12.3,
+ "minutes": 131,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-14 14:53",
+ "struggle": {
+ "compiles": 25,
+ "failed_compiles": 19,
+ "rust_errors": 31,
+ "loc": 593,
+ "errors_per_kloc": 52.3
+ }
+ },
+ {
+ "case": "wb-gemma-five-r5",
+ "model": "gemma-4-26b-a4b",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 4,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 134.4,
+ "minutes": 2,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "partial",
+ "finished": "2026-10-14 14:56",
+ "struggle": {
+ "compiles": 2,
+ "failed_compiles": 1,
+ "rust_errors": 4,
+ "loc": 522,
+ "errors_per_kloc": 7.7
+ }
+ },
+ {
+ "case": "wb-qwen-vllm-five-r2",
+ "model": "qwen3.8-27b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 40,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 73.2,
+ "minutes": 34,
+ "compactions": 3,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-14 15:31",
+ "struggle": {
+ "compiles": 22,
+ "failed_compiles": 8,
+ "rust_errors": 33,
+ "loc": 2511,
+ "errors_per_kloc": 13.1
+ }
+ },
+ {
+ "case": "wb-qwen-vllm-five-r3",
+ "model": "qwen3.8-27b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 32,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 74.7,
+ "minutes": 25,
+ "compactions": 2,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-14 15:56",
+ "struggle": {
+ "compiles": 10,
+ "failed_compiles": 4,
+ "rust_errors": 4,
+ "loc": 1971,
+ "errors_per_kloc": 2.5
+ }
+ },
+ {
+ "case": "wb-qwen-vllm-five-r4",
+ "model": "qwen3.8-27b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 40,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 70.8,
+ "minutes": 35,
+ "compactions": 4,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-14 16:31",
+ "struggle": {
+ "compiles": 23,
+ "failed_compiles": 11,
+ "rust_errors": 78,
+ "loc": 2429,
+ "errors_per_kloc": 32.5
+ }
+ },
+ {
+ "case": "wb-qwen-vllm-five-r5",
+ "model": "qwen3.8-27b-vllm",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 41,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 42.2,
+ "minutes": 79,
+ "compactions": 5,
+ "ctx": 150000,
+ "kv": "fp8",
+ "verdict": "pass",
+ "finished": "2026-10-14 17:50",
+ "struggle": {
+ "compiles": 30,
+ "failed_compiles": 12,
+ "rust_errors": 465,
+ "loc": 2975,
+ "errors_per_kloc": 156.3
+ }
+ },
+ {
+ "case": "wb-tiel-t06-r2",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 37,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 95.8,
+ "minutes": 17,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 18:07",
+ "struggle": {
+ "compiles": 24,
+ "failed_compiles": 9,
+ "rust_errors": 256,
+ "loc": 1729,
+ "errors_per_kloc": 148.6
+ }
+ },
+ {
+ "case": "wb-tiel-t06-r3",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 20,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 93.4,
+ "minutes": 12,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 18:20",
+ "struggle": {
+ "compiles": 20,
+ "failed_compiles": 10,
+ "rust_errors": 24,
+ "loc": 1310,
+ "errors_per_kloc": 19.8
+ }
+ },
+ {
+ "case": "wb-tiel-t06-r4",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 28,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 94.0,
+ "minutes": 17,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 18:37",
+ "struggle": {
+ "compiles": 23,
+ "failed_compiles": 11,
+ "rust_errors": 52,
+ "loc": 1627,
+ "errors_per_kloc": 32.6
+ }
+ },
+ {
+ "case": "wb-tiel-t06-r5",
+ "model": "lcpp6-tiel-coder-35b-t06",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 26,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 80.4,
+ "minutes": 15,
+ "compactions": 0,
+ "ctx": null,
+ "kv": null,
+ "verdict": "pass",
+ "finished": "2026-10-14 18:52",
+ "struggle": {
+ "compiles": 18,
+ "failed_compiles": 9,
+ "rust_errors": 56,
+ "loc": 1298,
+ "errors_per_kloc": 43.9
+ }
+ },
+ {
+ "case": "wb-lfm25-24b-q4km",
+ "model": "lcpp6-lfm25-24b-q4km",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 2,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 150.3,
+ "minutes": 7,
+ "compactions": 1,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "fail",
+ "finished": "2026-10-15 11:03",
+ "struggle": {
+ "compiles": 24,
+ "failed_compiles": 15,
+ "rust_errors": 62,
+ "loc": 305,
+ "errors_per_kloc": 203.3
+ }
+ },
+ {
+ "case": "wb-lfm25-24b-q6k",
+ "model": "lcpp6-lfm25-24b-q6k",
+ "test": 2,
+ "agent": "OpenCode",
+ "checks": null,
+ "tests_pass": 0,
+ "tests_fail": null,
+ "subcmds": null,
+ "tps": 147.7,
+ "minutes": 21,
+ "compactions": 4,
+ "ctx": 131072,
+ "kv": "f16",
+ "verdict": "partial",
+ "finished": "2026-10-15 11:27",
+ "struggle": {
+ "compiles": 53,
+ "failed_compiles": 51,
+ "rust_errors": 375,
+ "loc": 345,
+ "errors_per_kloc": 1087.0
+ }
+ }
+ ],
+ "test3": [
+ {
+ "case": "t3g-qwen3.8-27b-vllm",
+ "model": "qwen3.8-27b-vllm",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "One probe session, nine numbered calls with exact arguments and fields, errors reported verbatim; built REST ground truth first, then checked the probe against REST and the shim wire log (\"the probe is an LLM and could have hallucinated\"); trusted the known-good server after a full source audit. 15 min, 49.5 tok/s, 2 compactions. Read /t3/shim.jsonl and /opt/t3/shim.py (harness visible to the agent).",
+ "tps": 49.5,
+ "minutes": 15,
+ "finished": "2026-10-07 19:15"
+ },
+ {
+ "case": "t3o-qwen3.8-27b-vllm",
+ "model": "qwen3.8-27b-vllm",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Own server (5 tools) answered every fact it could correctly but had no services tool; built REST ground truth, found the gap, added ha_list_services, extended tests to 79, rebuilt; fixed server grades builds, 6 tools, 80 tests. First probe after the rebuild saw the old 5 tools (OpenCode subagent tool snapshot); it diagnosed that from the shim log and started a fresh probe naming the 6 tools. Drove the rebuilt binary directly twice as a sanity check (main_server_runs=2). 13 min, 51.2 tok/s.",
+ "tps": 51.2,
+ "minutes": 13,
+ "finished": "2026-10-07 19:47"
+ },
+ {
+ "case": "t3g-strata-flash-next-p2",
+ "model": "strata-flash-next-p2",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "One probe session with eight numbered calls naming exact arguments and fields, \"quote the error text exactly and continue\"; built REST ground truth with jq first and diffed every fact. Found a real defect in the known-good server: targets_entities checks only target.entity_id, but all 177 targeted services in this HA publish target.entity, so every service reported false. Fixed it with a test (fixed server 12 tools, 155 tests), rebuilt and re-probed. Drove the binary directly four times (main_server_runs=4). 21 min, 20.0 tok/s on two-slot Strata.",
+ "tps": 20.0,
+ "minutes": 21,
+ "finished": "2026-10-07 20:29"
+ },
+ {
+ "case": "t3o-strata-flash-next-p2",
+ "model": "strata-flash-next-p2",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Three probe sessions: an eight-question brief with method notes (paginate, cross-check counts, quote errors), a verbatim cross-check through resources and tools, and a re-check after the fix. Found that its own ha_overview counted 'unknown' entities as 'unavailable'; split the counts, updated the schema, text resource and tests (fixed server 10 tools, 106 tests), re-probed. 17 min, 18.0 tok/s.",
+ "tps": 18.1,
+ "minutes": 17,
+ "finished": "2026-10-07 20:45"
+ },
+ {
+ "case": "t3g-orcarouter-lcpp6",
+ "model": "lcpp6-orcarouter-fn-uncensored",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "One probe session with the eight questions in plain terms (\"entities, of any kind, whose state is unavailable\"), asking for raw tool output, the tool and arguments used, and failures said explicitly; the probe answered in 10 calls and cross-checked counts itself. Built REST ground truth in Python, compared every fact, reviewed the handler code for those paths, and spot-checked details the probe added unasked to rule out a made-up answer. Trusted the server, correctly for these facts; did not look at list_services and so did not find the targets_entities defect the Strata run fixed (outside the rubric). Leanest run so far: 12 min, 6.1k output tokens, 8.4 tok/s.",
+ "tps": 8.4,
+ "minutes": 12,
+ "finished": "2026-10-07 21:04"
+ },
+ {
+ "case": "t3o-orcarouter-lcpp6",
+ "model": "lcpp6-orcarouter-fn-uncensored",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "First probe: nine plain questions asking for exact raw tool output or the exact error and the tool used. list_services came back as a client validation error (\"expected record, received array\" on structuredContent); it checked the MCP schema, confirmed structuredContent must be an object, sent a second probe aimed at the other tools that return arrays (list_events, single-key get_config), and found the same defect in all three. Wrapped them in objects, added a guard in mcp.rs, updated tests (fixed server 8 tools, 55 tests), re-probed with eleven items. REST ground truth for every fact. 46 min, 5.8 tok/s (40 MoE layers on CPU).",
+ "tps": 5.8,
+ "minutes": 46,
+ "finished": "2026-10-07 21:53"
+ },
+ {
+ "case": "t3g-thinkingcap-heretic",
+ "model": "lcpp6-thinkingcap-27b-heretic",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Read the whole source, built REST ground truth (caught and fixed a bug in its own script), then two probes in parallel, each a short list of exact tool calls with exact arguments, the one field to report per call, \"ABSENT\" markers for missing attributes and verbatim errors. Every value matched; trusted the server after the source read. 9 min, 19.8 tok/s, the fastest test 3 run.",
+ "tps": 19.8,
+ "minutes": 9,
+ "finished": "2026-10-07 22:02"
+ },
+ {
+ "case": "t3o-thinkingcap-heretic",
+ "model": "lcpp6-thinkingcap-27b-heretic",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Baseline probe named its own tools and asked for the text and the structured value per call, errors verbatim. Found that temperature, HVAC mode and lock service names lived only in structuredContent, which OpenCode does not pass to the probe, so they were unreachable through MCP; cross-checked an odd 126 'unknown' figure against REST (correct). Fixed by putting attributes and per-domain service names in the text output with unit tests (fixed server 8 tools, 58 tests), re-probed and confirmed. 15 min, 24.7 tok/s.",
+ "tps": 24.7,
+ "minutes": 15,
+ "finished": "2026-10-07 22:18"
+ },
+ {
+ "case": "t3o-qwen3.8-27b-uncensored-vllm-pp",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "It measured the /api/states payload (94 KB) and split the probe work into one metadata session and three parallel per-domain scans, each returning a fixed JSON shape with verbatim errors; its own list_entities has no state filter, so the probe counted \"unavailable\" rows itself. It diffed every fact and every per-domain unavailable count against REST (no mismatches), cleared its one suspicion (the /api/entities fallback) by curl, and trusted the server without changes. 11 min, 42.3 tok/s.",
+ "tps": 42.3,
+ "minutes": 11,
+ "finished": "2026-10-09 09:39"
+ },
+ {
+ "case": "t3g-qwen3.8-27b-uncensored-vllm-pp",
+ "model": "qwen3.8-27b-uncensored-vllm",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 10,
+ "note": "One probe session with twelve numbered calls giving exact arguments and the fields to copy verbatim; it built REST ground truth and all 14 facts matched, then re-probed after its change. It did not find the targets_entities defect, although its own probe output showed \"targets_entities\":false for all three lock services; instead it rewrote only_available from \"drop UI-hidden entities\" to \"drop unavailable entities\", which the tool description, README and tests all documented as the intended behaviour (\"the planter's trick\"). 18 min, 47.4 tok/s; read the head of /t3/shim.jsonl and ran /opt/t3/shim.py --help (harness visible to the agent).",
+ "tps": 47.4,
+ "minutes": 18,
+ "finished": "2026-10-09 09:27"
+ },
+ {
+ "case": "t3g-orcasaq2-cyber-27b",
+ "model": "orcasaq2-cyber-27b",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "It sent one probe session with the eight questions in plain terms, asking for the exact tool calls, the raw values and the exact error text; it built REST ground truth in Python, matched all 14 facts, and then read the source. It suspected that only_available filters UI-hidden entities instead of unavailable ones, but correctly kept the documented behaviour (schema and README agree) and trusted the server; it did not find the targets_entities defect, although its probe reported \"targets_entities: false\" for all three lock services. After three context compactions it had lost the prompt's exact facts.json shape and wrote its own nested per-fact shape (facts_file malformed although every value was right). 16 min, 42.7 tok/s. Regraded 2026-10-11: facts credited in the layout the model wrote (14/14 MCP, 14/14 REST); in the asked shape it was 0/14 and 0/14.",
+ "tps": 42.7,
+ "minutes": 16,
+ "finished": "2026-10-09 09:56"
+ },
+ {
+ "case": "t3o-orcasaq2-cyber-27b",
+ "model": "orcasaq2-cyber-27b",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "It built REST ground truth and read its own six-file server before sending one probe session: ten numbered calls with exact tool names, arguments and the field to report, errors to be quoted, and a summary table at the end. All 14 facts matched, a fresh REST pull confirmed them, and it trusted the server without changes. Two compactions left its summary with only the key names, so it wrote mcp_correct as a per-fact object rather than a single boolean. 8 min, 45.5 tok/s.",
+ "tps": 45.5,
+ "minutes": 8,
+ "finished": "2026-10-09 10:04"
+ },
+ {
+ "case": "t3g-qwen3.8-27b",
+ "model": "qwen3.8-27b",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "It read the whole source and built REST ground truth before one probe session with eight numbered calls giving exact arguments and fields; the probe corrected its brief's wrong definition of total_entities. It checked the probe's calls against the shim log, confirmed the binary's hash matched a fresh build, ran the 22 tests, re-pulled REST and trusted the server; it did not find the targets_entities defect and read /opt/t3/shim.py and /t3/shim.jsonl (harness visible to the agent). 16 min, 21.8 tok/s.",
+ "tps": 21.8,
+ "minutes": 16,
+ "finished": "2026-10-09 10:22"
+ },
+ {
+ "case": "t3o-qwen3.8-27b",
+ "model": "qwen3.8-27b",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Its first probe matched all 14 facts; it then checked the numbers against the raw server replies in the shim log and sent a cross-check probe, which found ha_events failing (\"expected record, received array\"). It wrapped the array in {count, events}, updated the end-to-end test (fixed server 8 tools, 84 tests), re-probed and ran a final probe so every value came from the fixed binary; it read /opt/t3/shim.py and /t3/shim.jsonl (harness visible to the agent). 15 min, 19.6 tok/s.",
+ "tps": 19.6,
+ "minutes": 15,
+ "finished": "2026-10-09 10:38"
+ },
+ {
+ "case": "t3g-tiel-coder-35b-q6",
+ "model": "tiel-coder-35b-q6",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "It sent one probe session with ten numbered calls giving exact arguments and the field it needed from each, asking for isError, the verbatim JSON text and a closing summary block; it built REST ground truth first, noticed that the probe's pasted state=off block was internally inconsistent and settled that, and the probe's clipped 124-entity reply (the server caps text at 24,000 characters while structuredContent stays complete), by driving the binary directly over JSON-RPC (main_server_runs=6). It trusted the server, correctly for these facts, but did not find the targets_entities defect although its probe output showed \"targets_entities\":false for all three lock services. 23 min, 22.4 tok/s.",
+ "tps": 22.4,
+ "minutes": 23,
+ "finished": "2026-10-09 11:05"
+ },
+ {
+ "case": "t3o-tiel-coder-35b-q6",
+ "model": "tiel-coder-35b-q6",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Its first probe found the list tools failing (\"expected record, received array on structuredContent\"); after confirming it by running the binary directly it wrapped the lists in objects and moved domain and entity_id filtering client-side, then a targeted probe showed the probe cannot see structuredContent, so it put those values into the text output (fixed server 5 tools, 28 tests). A fourth probe matched all 14 facts and a fresh REST pull agreed; it drove the binary directly four times (main_server_runs=4). 28 min, 38.4 tok/s.",
+ "tps": 38.4,
+ "minutes": 28,
+ "finished": "2026-10-09 11:34"
+ },
+ {
+ "case": "t3g-cyber-tiel-coder-35b",
+ "model": "cyber-tiel-coder-35b",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "It built REST ground truth first, then sent six probe sessions: a wiring check, four parallel one-tool probes with exact arguments asking for the verbatim structuredContent and errors, and a re-probe with limit 1 after the server's 24,000-character text cap cut off the 124-row unavailable reply before the \"matched\" field. All 14 facts matched; it cross-checked the instance counts against raw REST, ran the 40 tests and trusted the server, but did not find the targets_entities defect although its probe output showed \"targets_entities\":false for all three lock services. 21 min, 24.9 tok/s.",
+ "tps": 24.9,
+ "minutes": 21,
+ "finished": "2026-10-09 11:59"
+ },
+ {
+ "case": "t3o-cyber-tiel-coder-35b",
+ "model": "cyber-tiel-coder-35b",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Running its own binary directly showed list_services failing on this installation's array-shaped /api/services; two parallel probes then found list_entities rejected (\"expected record, received array\" on structuredContent) and version missing from the get_config text. It wrapped the list outputs in objects with counts, accepted both catalog shapes, added version to the text and tests (fixed server 6 tools, 38 tests), ran the binary once more (main_server_runs=2) and re-probed: all 14 facts matched. 21 min, 34.4 tok/s.",
+ "tps": 34.4,
+ "minutes": 21,
+ "finished": "2026-10-09 12:21"
+ },
+ {
+ "case": "t3g-q38-27b-cyber",
+ "model": "q38-27b-cyber",
+ "flavor": "3G",
+ "mcp_facts": "0/14",
+ "api_facts": "0/14",
+ "judgement_right": false,
+ "rubric": null,
+ "note": "Not scored: stopped by hand at 105 min (operator saw the loop). A probe session repeated the identical ha_list_entities {\"limit\":30,\"state\":\"unavailable\"} call 32+ times while writing \"Let me actually pass 300\" (audit: 13 runs of identical calls, longest 52); no facts.json. Third Q38 Cyber IQ4_XS loop; led to OpenCode doom_loop deny for every case and the Q38 mend (presence penalty rerun, author Q6_K/Q8_0). 19.4 tok/s.",
+ "tps": 19.4,
+ "minutes": 105,
+ "finished": "2026-10-09 14:12"
+ },
+ {
+ "case": "t3g-heretic2-lcpp6",
+ "model": "lcpp6-flashnext-heretic2",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "One probe session with eight numbered calls naming exact arguments and fields, the tool's own matched/returned/next_cursor plus the probe's own tally, a list_domains cross-check and errors quoted verbatim; then built REST ground truth in one curl and Python pass and matched all 14 facts. Trusted the known-good server after reading three source files and running cargo test (155 pass). The brief asked for limit=500 and 200, above the server's caps of 200 and 100; the probe silently used 50 and paginated, and the agent neither noticed nor reported it accurately. 22 min, 4.7 tok/s; did not read the harness files.",
+ "tps": 5.5,
+ "minutes": 19,
+ "finished": "2026-10-10 02:58"
+ },
+ {
+ "case": "t3o-heretic2-lcpp6",
+ "model": "lcpp6-flashnext-heretic2",
+ "flavor": "3O",
+ "mcp_facts": "5/14",
+ "api_facts": "14/14",
+ "judgement_right": false,
+ "rubric": 8,
+ "note": "Two probe sessions with good numbered briefs (exact definitions, errors quoted verbatim, final 14-fact table) and a full REST ground truth. Its own server returns data only in structuredContent with a one-line text summary, so the probe saw just \"434 entities\", \"light: 52 entities\" etc. and nine facts stayed null; the agent blamed \"harness truncation\" without checking, fixed only the real but secondary list_services outputSchema error (services declared array, HA sends object), re-probed, still got \"1 domains\", and gave up (\"this is getting too deep\"). Declared mcp_correct=true on 5/14 delivered facts and claimed in REPORT.md to have verified the missing values from raw server output, which the transcript does not show. Drove the binary directly three times; no harness files read; no tool loops, though its reasoning after probe 2 repeats itself about five times. 45 min, 10.0 tok/s.",
+ "tps": 10.3,
+ "minutes": 44,
+ "finished": "2026-10-10 03:49"
+ },
+ {
+ "case": "t3g-abliterated-s15-lcpp6",
+ "model": "lcpp6-flashnext-abliterated-s15",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "It built REST ground truth first, then sent one probe session with eight numbered calls giving exact arguments and the fields to report raw, pagination to the end, state-filter cross-checks and errors quoted; all 14 facts matched, a second REST pull confirmed them, and it trusted the known-good server after reading parts of two source files (no cargo test). The probe's limit=200 reply was cut by the server's 24,000-character text cap and the probe guessed \"matched 108\" from the visible rows; the agent accepted the probe's \"live state drift\" story and wrote it into REPORT.md, although its own re-poll showed stable numbers and the server never returned 108. It did not find the targets_entities defect although the probe output showed \"targets_entities\":false for all three lock services; no tool loops, no harness files read. 23 min, 5.4 tok/s.",
+ "tps": 6.2,
+ "minutes": 20,
+ "finished": "2026-10-10 04:20"
+ },
+ {
+ "case": "t3o-abliterated-s15-lcpp6",
+ "model": "lcpp6-flashnext-abliterated-s15",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 8,
+ "note": "Five briefs resumed in one probe session (hence 1 counted session), 93 of 128 minutes spent in the probe hand-counting 434 entities at 3.5 tok/s; built REST ground truth first and chased every mismatch (123 and 113 vs 124 unavailable, 7 vs 3 lock services), also by driving the binary directly (main_server_runs=6). Found and fixed a real defect (ha_ping, ha_get_services and ha_get_error_log returned a bare string or array in structuredContent, rejected by OpenCode with \"expected record\"; wrapped in objects, 20 tests pass) and re-probed, but after the fix OpenCode truncated the 58 KB services payload to nothing, so the probe never saw the lock services through MCP. The accepted final answer came from a round with zero MCP calls after a leading brief, and REPORT.md says the probe \"quoted verbatim\"; no tool loops, no harness files read.",
+ "tps": 3.5,
+ "minutes": 127,
+ "finished": "2026-10-10 06:32"
+ },
+ {
+ "case": "t3g-qwen3.8-flash-next-unpruned",
+ "model": "qwen3.8-flash-next-unpruned",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "One probe session with eight numbered questions in plain terms (state \"exactly unavailable\", any domain), full entity lists for verification and errors with tool, arguments and exact message; the probe hit the 24,000-character text clip on the 124-row reply and worked around it with per-domain matched counts (33 distinct calls, no loop). It compared all 14 facts with REST, confirmed the missing hvac_mode attribute on the single-entity endpoint, read the handlers and ran the 155 tests, then trusted the server; it did not find the targets_entities defect, and REPORT.md wrongly calls that field verified against the API and claims an element-for-element list comparison it never ran. 67 min, 2.9 tok/s: 54% of the run was waiting for first tokens (631 s before the first output, 605 s reprocessing 36k tokens with no cache hit); no harness files read.",
+ "tps": 3.4,
+ "minutes": 56,
+ "finished": "2026-10-10 07:45"
+ },
+ {
+ "case": "t3o-qwen3.8-flash-next-unpruned",
+ "model": "qwen3.8-flash-next-unpruned",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Two probe sessions: eight numbered facts in plain terms (state \"unavailable\" in ANY domain, tool used, raw output, counted entity IDs, errors with their text), then a deliberate nine-call re-check with exact arguments to rule out a made-up first report; all 37 calls are in the wire log with no errors, no loop, and no harness files read. It matched all 14 facts against REST, diffed the probe's unavailable ID lists for 8 of 10 domains, read all six source files and trusted its own server unchanged, exercising only 5 of the 9 tools. REPORT.md overstates the ID-set comparison (sensor and switch, 71 of 124, were count-only) and cites the crate's tests although cargo test timed out after 600 s unreported; 60 min, 3.0 tok/s (6.2 with probe output), 37% of the run waiting for first tokens.",
+ "tps": 3.0,
+ "minutes": 59,
+ "finished": "2026-10-10 08:44"
+ },
+ {
+ "case": "t3g-maya-glm-5.3-flash",
+ "model": "maya-glm-5.3-flash",
+ "flavor": "3G",
+ "mcp_facts": "0/14",
+ "api_facts": "0/14",
+ "judgement_right": false,
+ "rubric": 11,
+ "note": "Killed at the 3-hour cap with no facts.json. The model misread and miswrote multi-digit numbers (probes reported 4342/4344 where the server sent 434; six calls with limit \"1 0\"), blamed a display channel, and spent about 2.3 hours on letter-encoding workarounds, four compactions (37,200 tokens) and one repeated 14,000-token step. Probe 3 finally matched all 14 facts and it had decided to trust the unchanged server; no harness files read; 12 tok/s.",
+ "tps": 11.3,
+ "minutes": 171,
+ "finished": "2026-10-10 11:45"
+ },
+ {
+ "case": "t3o-maya-glm-5.3-flash",
+ "model": "maya-glm-5.3-flash",
+ "flavor": "3O",
+ "mcp_facts": "0/14",
+ "api_facts": "0/14",
+ "judgement_right": false,
+ "rubric": 11,
+ "note": "Killed at the 3-hour cap with neither output file. The first probe failed on every call because the server rejected the client's older handshake; the model traced it in a traffic log, added support, rebuilt, and a re-probe matched the API on 13 of 14 facts. The same number fault as the sibling case (arguments such as \"head -2 0\", offset \"8 5\", 434 sent as 4343) and an out-of-scope fourth probe used the rest of the time. Four compactions; no harness files read; 11 tok/s.",
+ "tps": 8.0,
+ "minutes": 153,
+ "finished": "2026-10-10 14:46"
+ },
+ {
+ "case": "t3g-gemma-4-26b-a4b-vllm-redo",
+ "model": "gemma-4-26b-a4b-vllm",
+ "flavor": "3G",
+ "mcp_facts": "0/14",
+ "api_facts": "0/14",
+ "judgement_right": false,
+ "rubric": 8,
+ "note": "One probe made all 10 calls and miscounted the lights (37 off and 11 unavailable against 38 and 10). The agent caught the mismatch, but its follow-up ran the server binary directly through an explore sub-agent, not a probe. Trusting the server was right. Six compactions dropped the required layout, so the facts file is a flat list of nine values with no verdict. No harness files read.",
+ "tps": 18.4,
+ "minutes": 9,
+ "finished": "2026-10-10 14:58"
+ },
+ {
+ "case": "t3o-gemma-4-26b-a4b-vllm-redo",
+ "model": "gemma-4-26b-a4b-vllm",
+ "flavor": "3O",
+ "mcp_facts": "0/14",
+ "api_facts": "0/14",
+ "judgement_right": false,
+ "rubric": 4,
+ "note": "The model's own server never connected to the agent harness (the client closed after the handshake), so 13 probe sessions had no tools; two of them invented tool lists, which the agent believed. It renamed its tools with a prefix on that basis and reported the server validated against the API, although no API fact was computed. Five compactions; the facts file holds none of the 14 facts. No harness files read.",
+ "tps": 98.3,
+ "minutes": 10,
+ "finished": "2026-10-10 15:10"
+ },
+ {
+ "case": "t3g-gemma-4-31b-redo",
+ "model": "gemma-4-31b",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": false,
+ "rubric": 10,
+ "note": "One probe returned all eight groups of facts and the agent confirmed each against the API, so trusting the server followed from the evidence. The values in the facts file are correct but in its own nested layout without the verdict fields: a compaction just before writing dropped the required shape. Nothing invented; no harness files read. Regraded 2026-10-11: facts credited in the layout the model wrote (14/14 MCP, 14/14 REST); in the asked shape it was 0/14 and 0/14.",
+ "tps": 26.9,
+ "minutes": 4,
+ "finished": "2026-10-10 15:16"
+ },
+ {
+ "case": "t3o-gemma-4-31b-redo",
+ "model": "gemma-4-31b",
+ "flavor": "3O",
+ "mcp_facts": "0/14",
+ "api_facts": "0/14",
+ "judgement_right": false,
+ "rubric": 7,
+ "note": "The probe needed 54 per-entity calls and could not get the unavailable total or the lock services (a 58 KB reply was cut off). The agent did not probe again or change the server, yet declared it fully verified and correct on 12 of 14 facts. The facts file is a flat custom layout; one compaction dropped the shape. No harness files read.",
+ "tps": 18.7,
+ "minutes": 8,
+ "finished": "2026-10-10 15:25"
+ },
+ {
+ "case": "t3g-gemma-4-26b-a4b-redo",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3G",
+ "mcp_facts": "13/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 8,
+ "note": "One probe made seven calls and stopped at the first page of lights, reporting 2 on. The agent checked every fact on the API, read the server source and correctly blamed the probe's paging, but did not ask again. Its verdict of not correct contradicts its own report; the grader counts it right only through a defect the agent never noticed. No compactions; no harness files read.",
+ "tps": 77.0,
+ "minutes": 3,
+ "finished": "2026-10-10 15:30"
+ },
+ {
+ "case": "t3o-gemma-4-26b-a4b-redo",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3O",
+ "mcp_facts": "0/14",
+ "api_facts": "13/14",
+ "judgement_right": true,
+ "rubric": 7,
+ "note": "The model's own server never connected to the agent harness (a handshake defect already recorded in test 2), so 12 probe sessions had no tools and wrote tool calls as plain text. The agent took the facts from the API, added a tool that did not address the cause, and did not re-check. Its verdict of not correct is right but rests on being unable to verify; the report claims a fix the diff does not show. No compactions; no harness files read.",
+ "tps": 50.6,
+ "minutes": 9,
+ "finished": "2026-10-10 15:40"
+ },
+ {
+ "case": "t3g-q38-coder390",
+ "model": "lcpp6-q38-coder390",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 11,
+ "note": "One well-specified brief and two small follow-ups, then every answer compared with the API; trusting the server followed from that, though it never examined the one field that is really wrong. All 14 values are correct in both sections, but under nested keys: the first of three compactions dropped the required flat layout, and the model chose its own. Nothing invented; no harness files read. Regraded 2026-10-11: facts credited in the layout the model wrote (14/14 MCP, 14/14 REST); in the asked shape it was 6/14 and 6/14.",
+ "tps": 26.3,
+ "minutes": 13,
+ "finished": "2026-10-10 15:54"
+ },
+ {
+ "case": "t3o-q38-coder390",
+ "model": "lcpp6-q38-coder390",
+ "flavor": "3O",
+ "mcp_facts": "6/14",
+ "api_facts": "6/14",
+ "judgement_right": false,
+ "rubric": 7,
+ "note": "One sprawling brief cost 87 calls and three probe compactions, and the probe's report garbled the totals. The model traced that to the probe by reading the harness's traffic log and running the server directly, but never probed again. It called its server correct although it has no tool for listing services. Only 6 of 14 values are in the file; three main compactions dropped the format. Regraded 2026-10-11: facts credited in the layout the model wrote (6/14 MCP, 6/14 REST); in the asked shape it was 1/14 and 1/14.",
+ "tps": 20.8,
+ "minutes": 29,
+ "finished": "2026-10-10 16:24"
+ },
+ {
+ "case": "t3g-tiel-q4kxl-r1",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Tiel Coder focus wave, run 1 of test 3 with the given server. It took REST ground truth first, then sent one probe brief of eight numbered calls with exact arguments (\"Call tool `list_entities` with arguments {\\\"domain\\\":\\\"light\\\",\\\"limit\\\":200}\"), asking for raw JSON and \"If any call returns an error, report the exact error text and isError value\". The unavailable count came back clipped in the text field, so a second, two-call brief told the probe to read structuredContent instead (\"ALWAYS read the numbers you need from `structuredContent`\"). Every value was compared with the API; when its own re-check gave 434 lights it found the cause on its side (\"The proxy ... ignores the `?domain=` query string\") and recounted by entity_id prefix. It trusted the server on 14 of 14 matching values and changed nothing. Two compactions; after the first it recalled a variable-shadowing bug in list_services that is not in the source, re-read the file and withdrew it (\"Prior summary's claim ... is inaccurate\"). 14 min, 37 turns, 64.1 tok/s in the main session, 21,620 MiB, no length stop. Its one glob call ran without the old tar error and found nothing because the pattern lacked the leading slash.",
+ "tps": 64.1,
+ "minutes": 13,
+ "finished": "2026-10-11 19:24"
+ },
+ {
+ "case": "t3g-tiel-q4kxl-r2",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "flavor": "3G",
+ "mcp_facts": "13/14",
+ "api_facts": "13/14",
+ "judgement_right": false,
+ "rubric": 12,
+ "note": "Tiel Coder focus wave, run 2 of test 3 with the given server. It took REST ground truth first, then sent one probe brief of twelve numbered calls with exact arguments (\"Call `list_entities` with arguments {\\\"domain\\\":\\\"light\\\",\\\"state\\\":\\\"on\\\"}. Report full structuredContent. I need `matched`.\"), gave the JSON shape it wanted back and said \"Do not guess - if a tool call fails or returns an error, report the error text\". One probe session, 11 MCP calls, every value compared with the API, server trusted and left unchanged, which is right. Its one miss is its own reading, not the probe's: the climate entity has no hvac_mode attribute, so it wrote null for the HVAC mode on both sides (\"Both the MCP server and the REST API therefore report the HVAC mode as absent (null). This is correct, not a bug\") where the mode is the entity state, cool; run 1 got it. That makes 13/14 on both sides and the grader's judgement_right says no by its rule (true needs 14 right), although the server is in fact correct. Four compactions, all while reading the source; it re-read the same files after each. 17 min, 44 turns, 58.2 tok/s in the main session, 21,622 MiB, no length stop. No glob or grep call.",
+ "tps": 58.2,
+ "minutes": 16,
+ "finished": "2026-10-11 20:19"
+ },
+ {
+ "case": "t3o-tiel-q4kxl-r1",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "flavor": "3O",
+ "mcp_facts": "9/14",
+ "api_facts": "14/14",
+ "judgement_right": false,
+ "rubric": 10,
+ "note": "Tiel Coder focus wave, run 1 of test 3 with its own server (from wb-retry-tiel-q4kxl). REST first, where it saw that /api/services gives a dict per domain while the server expects an array. First brief: seven numbered steps with arguments, one JSON object back, errors as \"ERROR: \". The probe came back with \"expected record, received array\" on both list tools; it ran the binary over stdio to see the raw answers, fixed the services parsing and wrapped both lists in objects (fixed server: handshake and tool call pass, 5 tools, 22 tests), then re-probed in four parallel sessions. Those showed the probe gets only the text part (lists cut at 15, no attributes). Three more sessions told the probe to read structuredContent anyway and to count 434 objects by hand, which it cannot do (8 sessions, 105 MCP calls, 93 of them list_states). It found the cause and chose not to act on it (\"I deliberately did not stuff the missing numbers into the server's text summaries ... that would be gaming the verification\"), wrote null for five MCP facts (lights on, off and unavailable, unavailable total, temperature) and still set mcp_correct true, calling it a harness limit; the Q6 and Cyber runs of this model put the values into the text and got 14/14. So 9/14 through MCP, 14/14 REST, judgement not supported by what the probe could get. The report also misstates the original fault after four compactions (\"only returned text. They had no structuredContent\"; it returned arrays) and counts \"9 of 13 facts\" with 5 nulls. 38 min, 52 turns, 58.3 tok/s in the main session, 21,620 MiB, no length stop. No glob or grep call.",
+ "tps": 58.3,
+ "minutes": 38,
+ "finished": "2026-10-11 20:03"
+ },
+ {
+ "case": "t3o-tiel-q4kxl-r2",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 12,
+ "note": "Tiel Coder focus wave, run 2 of test 3 with its own server. REST first, then a brief that named each fact, the tool and the arguments, and asked for raw tool output. It found list_services always empty because /api/services returns a dict, and that the probe host rejects array structuredContent. It fixed both, updated the tests (22 pass) and rechecked through the probe; the fixed server passes test 2. Facts 14/14 both sides, including upstairs HVAC mode cool from the entity state, judgement right. 12 min, 55 turns, 75.8 tok/s, 21,622 MiB, 1 compaction, no length stop. No glob or grep call.",
+ "tps": 75.8,
+ "minutes": 12,
+ "finished": "2026-10-11 20:32"
+ },
+ {
+ "case": "t3o-tiel-q4kxl-r3",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "flavor": "3O",
+ "mcp_facts": "13/14",
+ "api_facts": "13/14",
+ "judgement_right": false,
+ "rubric": 11,
+ "note": "Tiel Coder focus wave, run 3 of test 3 with its own server. Same list_services dict bug, fixed with extract_services; 22 tests pass and the fixed server passes test 2. It did not wrap array structuredContent, so the second probe still failed on both list tools and the list facts in the mcp column come from running the binary over stdio. It wrote null for upstairs HVAC mode on both sides (the attribute is absent; the entity state is cool) and still set mcp_correct true, so judgement_right is no (13/14). Right fix, but the probe recheck did not confirm the list tools. 11 min, 44 turns, 67.3 tok/s, 21,622 MiB, 2 compactions, no length stop. No glob or grep call.",
+ "tps": 67.3,
+ "minutes": 11,
+ "finished": "2026-10-11 20:54"
+ },
+ {
+ "case": "t3g-tiel-q4kxl-r3",
+ "model": "lcpp6-tiel-coder-35b-q4kxl",
+ "flavor": "3G",
+ "mcp_facts": "6/14",
+ "api_facts": "6/14",
+ "judgement_right": false,
+ "rubric": 12,
+ "note": "Tiel Coder focus wave, run 3 of test 3 with the given server. Server unchanged. Two specific briefs asked for full structuredContent and exact fields. The first probe misreported light off as 55; a second brief demanded the raw list_domains JSON, which says off 38 and matches REST. It overwrote TASK.md once, then wrote facts.json under the wrong key names (light_on, switch_total, ha_version, climate_temp, climate_hvac_mode null), so the grader counts 6/14 and judgement_right is no even though the numbers it gathered were right and leaving the server alone was right. One grep call returned the top_states match; no glob call. 9 min, 36 turns, 70.5 tok/s, 21,622 MiB, 2 compactions, no length stop.",
+ "tps": 70.5,
+ "minutes": 9,
+ "finished": "2026-10-11 20:42"
+ },
+ {
+ "case": "t3g-gemma-five-r2",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 10,
+ "note": "Known-good server, run 2. One probe brief named every fact, the entities and the on/off/unavailable counts, and said to use the MCP tools; it asked only to return the facts clearly. The probe called the server (9 tools/call) and the report compared every fact with the REST API. No failure, and the brief did not say how to report one. It trusted a server that matched, and changed nothing. 2 min, 78.6 tok/s, 17 turns, 21,060 MiB, 0 compactions.",
+ "tps": 78.6,
+ "minutes": 1,
+ "finished": "2026-10-14 18:54"
+ },
+ {
+ "case": "t3g-gemma-five-r3",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 10,
+ "note": "Known-good server, run 3. Same shape as run 2: one numbered brief, and it asked for a structured format without naming keys. The probe made 10 tools/call. The report says every MCP fact matched curl. No failure instruction. Trust fits the match; the server was not changed. 3 min, 95.5 tok/s, 29 turns, 21,104 MiB, 0 compactions.",
+ "tps": 95.5,
+ "minutes": 2,
+ "finished": "2026-10-14 19:01"
+ },
+ {
+ "case": "t3g-gemma-five-r4",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 11,
+ "note": "Known-good server, run 4. One numbered brief, structured values, and it told the probe to return null when a value cannot be found. Ten tools/call. The report compared the probe with curl and a Python count of the raw states. Nothing disagreed, nothing was changed. 3 min, 61.9 tok/s, 29 turns, 21,104 MiB, 0 compactions, peak prompt about 109k.",
+ "tps": 61.9,
+ "minutes": 3,
+ "finished": "2026-10-14 19:12"
+ },
+ {
+ "case": "t3g-gemma-five-r5",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3G",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 5,
+ "note": "Known-good server, run 5. The brief names every fact, but it was sent to subagent_type explore, not mcp-probe. The shim logged 0 tools/call. The report still says the MCP server matched the REST API and that explore was the mcp-probe. The facts file is 14/14 only because those numbers are the API numbers. The known-good server was not shown wrong, so the true judgement is thin, not a check. 3 min, 41.6 tok/s, 16 turns, 21,104 MiB, 0 compactions.",
+ "tps": 41.6,
+ "minutes": 2,
+ "finished": "2026-10-14 19:20"
+ },
+ {
+ "case": "t3o-gemma-five-r2",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 3,
+ "note": "Own server, run 2. The brief names the facts and asks for no shape. It went to subagent_type general, not mcp-probe, and the shim logged 0 tools/call. The server was not changed. The report claims the mcp-probe output matched curl. The 14/14 file is the API copied into both sides, so trusting this server is not supported. 4 min, 35.9 tok/s, 26 turns, 21,104 MiB, 0 compactions.",
+ "tps": 35.9,
+ "minutes": 3,
+ "finished": "2026-10-14 18:58"
+ },
+ {
+ "case": "t3o-gemma-five-r3",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 6,
+ "note": "Own server, run 3. The first briefs name every fact. It started 17 mcp-probe sessions and also asked a general agent to curl and write the files. The probe's recorded tools were bash, read, glob, write and task, and the shim logged 0 tools/call. The report says the probe was simulated due to technical limitations, then sets mcp_correct true from the REST API and leaves the server unchanged. 8 min, 25.4 tok/s, 36 turns, 19 sessions, 21,104 MiB, 0 compactions. Glob returned paths; grep returned file and line.",
+ "tps": 25.4,
+ "minutes": 7,
+ "finished": "2026-10-14 19:08"
+ },
+ {
+ "case": "t3o-gemma-five-r4",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 4,
+ "note": "Own server, run 4. The brief names every fact and asks for a structured format, but it was sent to explore, not mcp-probe. The shim logged 0 tools/call and the server was not changed. The report claims an mcp-probe cross-check against curl. The 14/14 file is not evidence this server answers. 5 min, 112.7 tok/s, 18 turns, 21,104 MiB, 0 compactions.",
+ "tps": 112.7,
+ "minutes": 5,
+ "finished": "2026-10-14 19:17"
+ },
+ {
+ "case": "t3o-gemma-five-r5",
+ "model": "gemma-4-26b-a4b",
+ "flavor": "3O",
+ "mcp_facts": "14/14",
+ "api_facts": "14/14",
+ "judgement_right": true,
+ "rubric": 8,
+ "note": "Own server, run 5. Both mcp-probe briefs name the facts and say \"Return the facts clearly.\" The probes answered with fake tool calls (<|tool_call>call:ha_get_entities{} and ha_get_states) and the shim logged 0 tools/call. A general subagent then drove the binary, saw \"invalid type: sequence, expected a map\", and changed list_entities from HashMap to Vec. That bug was real: the fixed-server grade is builds=yes, init still -, tools=3, tool_call=yes (the source case was tool_call=-), tests=5/0. Init still fails by hand: server.rs emits protocol_version with no rename to protocolVersion and no serverInfo. The probe was not used to re-check, and the report still says the server is fully correct. 68 min, 2.4 tok/s, 26 turns, 21,104 MiB, 0 compactions. No glob, no grep, no ownership error.",
+ "tps": 2.4,
+ "minutes": 68,
+ "finished": "2026-10-14 20:28"
+ }
+ ],
+ "ab": [
+ {
+ "model": "orcasaq2-cyber-27b",
+ "engine": "0.4.1",
+ "variant": "same flags",
+ "decode": null,
+ "quote": null,
+ "prefill": null,
+ "vram": null,
+ "error": "erator(): failed to measure the memory of the extra model, fitting without it: failed to create llama_context from model"
+ },
+ {
+ "model": "orcasaq2-cyber-27b",
+ "engine": "0.6.0",
+ "variant": "same flags",
+ "decode": null,
+ "quote": null,
+ "prefill": null,
+ "vram": null,
+ "error": "erator(): failed to measure the memory of the extra model, fitting without it: failed to create llama_context from model"
+ },
+ {
+ "model": "orcasaq2-cyber-27b",
+ "engine": "0.6.0",
+ "variant": "dflash n8",
+ "decode": null,
+ "quote": null,
+ "prefill": null,
+ "vram": null,
+ "error": ".854.578 W common_fit_params: failed to fit params to free device memory: n_gpu_layers already set by user to 999, abort"
+ },
+ {
+ "model": "orcasaq2-cyber-27b",
+ "engine": "0.6.0",
+ "variant": "dflash n4 + ngram-mod",
+ "decode": null,
+ "quote": null,
+ "prefill": null,
+ "vram": null,
+ "error": "erator(): failed to measure the memory of the extra model, fitting without it: failed to create llama_context from model"
+ },
+ {
+ "model": "q38-27b-cyber",
+ "engine": "0.4.1",
+ "variant": "same flags",
+ "decode": 44.9,
+ "quote": 43.8,
+ "prefill": 1262.7,
+ "vram": "16938",
+ "error": ""
+ },
+ {
+ "model": "q38-27b-cyber",
+ "engine": "0.6.0",
+ "variant": "same flags",
+ "decode": 45.1,
+ "quote": 44.0,
+ "prefill": 1260.5,
+ "vram": "16956",
+ "error": ""
+ },
+ {
+ "model": "q38-27b-cyber",
+ "engine": "0.6.0",
+ "variant": "mtp n3",
+ "decode": 82.2,
+ "quote": 105.4,
+ "prefill": 1192.5,
+ "vram": "19532",
+ "error": ""
+ },
+ {
+ "model": "cyber-tiel-coder-35b",
+ "engine": "0.4.1",
+ "variant": "same flags",
+ "decode": 52.3,
+ "quote": 49.4,
+ "prefill": 1236.1,
+ "vram": "18146",
+ "error": ""
+ },
+ {
+ "model": "cyber-tiel-coder-35b",
+ "engine": "0.6.0",
+ "variant": "same flags",
+ "decode": 50.5,
+ "quote": 51.4,
+ "prefill": 1253.0,
+ "vram": "18126",
+ "error": ""
+ },
+ {
+ "model": "orcarouter-fn-uncensored",
+ "engine": "0.4.1",
+ "variant": "same flags",
+ "decode": 5.3,
+ "quote": 23.7,
+ "prefill": 295.3,
+ "vram": "16488",
+ "error": ""
+ },
+ {
+ "model": "orcarouter-fn-uncensored",
+ "engine": "0.6.0",
+ "variant": "same flags",
+ "decode": 13.1,
+ "quote": 22.6,
+ "prefill": 486.2,
+ "vram": "16658",
+ "error": ""
+ },
+ {
+ "model": "orcarouter-fn-uncensored",
+ "engine": "0.6.0",
+ "variant": "mtp draft n3",
+ "decode": null,
+ "quote": null,
+ "prefill": null,
+ "vram": null,
+ "error": ".109.994 W common_fit_params: failed to fit params to free device memory: n_gpu_layers already set by user to 999, abort"
+ },
+ {
+ "model": "qwen3.8-flash-next-unpruned",
+ "engine": "0.4.1",
+ "variant": "same flags",
+ "decode": 2.2,
+ "quote": 22.3,
+ "prefill": 135.8,
+ "vram": "17206",
+ "error": ""
+ },
+ {
+ "model": "qwen3.8-flash-next-unpruned",
+ "engine": "0.6.0",
+ "variant": "same flags",
+ "decode": 8.9,
+ "quote": 21.7,
+ "prefill": 568.6,
+ "vram": "17374",
+ "error": ""
+ },
+ {
+ "model": "qwen3.8-flash-next-unpruned",
+ "engine": "0.6.0",
+ "variant": "orcarouter mtp draft n3",
+ "decode": null,
+ "quote": null,
+ "prefill": null,
+ "vram": null,
+ "error": ".085.744 W common_fit_params: failed to fit params to free device memory: n_gpu_layers already set by user to 999, abort"
+ },
+ {
+ "model": "qwen3.8-flash-next-unpruned",
+ "engine": "0.6.0",
+ "variant": "unsloth shared mtp n1",
+ "decode": null,
+ "quote": null,
+ "prefill": null,
+ "vram": null,
+ "error": "del\n0.01.008.978 W operator(): failed to measure the memory of the extra model, fitting without it: failed to load model"
+ },
+ {
+ "model": "qwen3.8-flash-next-unpruned",
+ "engine": "0.6.0",
+ "variant": "unsloth shared mtp n3",
+ "decode": null,
+ "quote": null,
+ "prefill": null,
+ "vram": null,
+ "error": "del\n0.00.967.489 W operator(): failed to measure the memory of the extra model, fitting without it: failed to load model"
+ },
+ {
+ "model": "qwen3.8-flash-next-unpruned",
+ "engine": "0.6.0",
+ "variant": "unsloth mtp n3",
+ "decode": null,
+ "quote": null,
+ "prefill": null,
+ "vram": null,
+ "error": ".036.063 W common_fit_params: failed to fit params to free device memory: n_gpu_layers already set by user to 999, abort"
+ },
+ {
+ "model": "orcasaq2-cyber-27b",
+ "engine": "0.4.1",
+ "variant": "same flags",
+ "decode": 85.5,
+ "quote": 124.7,
+ "prefill": 1106.0,
+ "vram": "21800",
+ "error": ""
+ },
+ {
+ "model": "orcasaq2-cyber-27b",
+ "engine": "0.6.0",
+ "variant": "same flags",
+ "decode": 83.2,
+ "quote": 120.3,
+ "prefill": 1087.3,
+ "vram": "21822",
+ "error": ""
+ },
+ {
+ "model": "orcasaq2-cyber-27b",
+ "engine": "0.6.0",
+ "variant": "dflash n8",
+ "decode": 0.0,
+ "quote": 0,
+ "prefill": 0,
+ "vram": "34",
+ "error": ""
+ },
+ {
+ "model": "orcasaq2-cyber-27b",
+ "engine": "0.6.0",
+ "variant": "dflash n4 + ngram-mod",
+ "decode": 83.2,
+ "quote": 412.2,
+ "prefill": 1086.8,
+ "vram": "21828",
+ "error": ""
+ },
+ {
+ "model": "q38-27b-cyber",
+ "engine": "0.4.1",
+ "variant": "same flags",
+ "decode": 45.6,
+ "quote": 44.3,
+ "prefill": 1256.3,
+ "vram": "16938",
+ "error": ""
+ },
+ {
+ "model": "q38-27b-cyber",
+ "engine": "0.6.0",
+ "variant": "same flags",
+ "decode": 45.7,
+ "quote": 44.6,
+ "prefill": 1256.5,
+ "vram": "16956",
+ "error": ""
+ },
+ {
+ "model": "q38-27b-cyber",
+ "engine": "0.6.0",
+ "variant": "mtp n3",
+ "decode": 82.5,
+ "quote": 105.8,
+ "prefill": 1186.0,
+ "vram": "19532",
+ "error": ""
+ }
+ ],
+ "oneshots": {
+ "orrery": [
+ {
+ "case": "t5r4-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 31140.0,
+ "wall_s": 224.6,
+ "tok_s": 140.9,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 10.0,
+ "note": "full marks: 8 planets at exact ratios (Earth 33.18 s); drive train 12T-8T-8T-6T, module 10, alternating directions at 1 : 1.5 : 1.5 : 2 turns; night side fixed away from the sun on each arm while the surface spins; title overlaps the rim (cosmetic)",
+ "frames": [
+ "frames/orrery/t5r4-lcpp6-tiel-coder-35b-t06/frame-100.webp",
+ "frames/orrery/t5r4-lcpp6-tiel-coder-35b-t06/frame-2000.webp",
+ "frames/orrery/t5r4-lcpp6-tiel-coder-35b-t06/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5-lcpp6-tiel-coder-35b-q4kxl",
+ "entry": "lcpp6-tiel-coder-35b-q4kxl",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 30666.0,
+ "wall_s": 308.2,
+ "tok_s": 103.5,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 1.0,
+ "E": 2.0
+ },
+ "total": 9.0,
+ "note": "8 planets at exact real ratios (Earth 10 s); five-gear train is toothed (dasharray) but every gear turns clockwise, so none mesh; lit side faces the sun on the arm while the continents spin under it",
+ "frames": [
+ "frames/orrery/t5-lcpp6-tiel-coder-35b-q4kxl/frame-100.webp",
+ "frames/orrery/t5-lcpp6-tiel-coder-35b-q4kxl/frame-2000.webp",
+ "frames/orrery/t5-lcpp6-tiel-coder-35b-q4kxl/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5hq1-qwen3.8-27b-vllm-031",
+ "entry": "qwen3.8-27b-vllm-031",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 75643.0,
+ "wall_s": 812.9,
+ "tok_s": 97.8,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 2.0,
+ "E": 1.0
+ },
+ "total": 9.0,
+ "note": "HyperQwen 0.31, 140k cap. 8 planets at exact ratios (Earth 18 s); each planet's pinion rolls in a static internally toothed annulus with matching module (relative spin k+1, opposite to the orbit), the best gearing of the round; but the night half-disc sits in the spinning group, so it turns with the surface",
+ "frames": []
+ },
+ {
+ "case": "t5-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 31231.0,
+ "wall_s": 225.9,
+ "tok_s": 141.1,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 1.0,
+ "E": 2.0
+ },
+ "total": 8.0,
+ "note": "8 planets at exact ratios (Earth 16 s); gear outlines are ragged (tooth path doubles back) and the sun gear is hidden under the sun; idlers counter-rotate but the small idler turns slower than the big sun gear (33 s vs 20 s), against the gear law; lit side faces the sun, surface spins",
+ "frames": [
+ "frames/orrery/t5-lcpp6-tiel-coder-35b-t06/frame-100.webp",
+ "frames/orrery/t5-lcpp6-tiel-coder-35b-t06/frame-2000.webp",
+ "frames/orrery/t5-lcpp6-tiel-coder-35b-t06/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5-gemma-4-31b",
+ "entry": "gemma-4-31b",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 4762.0,
+ "wall_s": 144.7,
+ "tok_s": 79.3,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 1.0,
+ "E": 1.0
+ },
+ "total": 7.0,
+ "note": "CSS periods exact; gear rings use transform-origin center, so they drift off their arms; gear periods equal orbit periods; shadow half-disc offset and overhanging, follows the sun but the planets do not spin",
+ "frames": [
+ "frames/orrery/t5-gemma-4-31b/frame-100.webp",
+ "frames/orrery/t5-gemma-4-31b/frame-2000.webp",
+ "frames/orrery/t5-gemma-4-31b/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5-orcasaq2-cyber-27b",
+ "entry": "orcasaq2-cyber-27b",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 23900.0,
+ "wall_s": 438.2,
+ "tok_s": 71.9,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 0.0,
+ "E": 2.0
+ },
+ "total": 7.0,
+ "note": "6 planets (no Uranus, Neptune); Venus to Saturn exact (Earth 60 s) but Mercury runs twice too fast (7.45 s, should be 14.4); 'gears' are rings with a crossbar, no teeth; night side fixed away from the sun, continents spin; Moon too",
+ "frames": []
+ },
+ {
+ "case": "t5-qwen3.6-27b",
+ "entry": "qwen3.6-27b",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 17400.0,
+ "wall_s": 533.0,
+ "tok_s": 39.0,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 1.0,
+ "E": 1.0
+ },
+ "total": 7.0,
+ "note": "4 planets at exact ratios (Earth 30 s), but each planet gear's animateTransform replaces its translate, so the gears pile at the centre and hide Mercury and Venus; toothed drive gear turns; night shadow spins with the planet",
+ "frames": [
+ "frames/orrery/t5-qwen3.6-27b/frame-100.webp",
+ "frames/orrery/t5-qwen3.6-27b/frame-2000.webp",
+ "frames/orrery/t5-qwen3.6-27b/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5r2-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 230.5,
+ "tok_s": 141.0,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 1.0,
+ "E": 1.0
+ },
+ "total": 7.0,
+ "note": "length stop but the SVG closed; ratios exact (Earth 24 s) but the planets turn about (500,470) and drift off their drawn orbits; one gear sits clipped in the corner, the sun gear is hidden; the terminator rotates with the surface instead of facing away from the sun",
+ "frames": [
+ "frames/orrery/t5r2-lcpp6-tiel-coder-35b-t06/frame-100.webp",
+ "frames/orrery/t5r2-lcpp6-tiel-coder-35b-t06/frame-2000.webp",
+ "frames/orrery/t5r2-lcpp6-tiel-coder-35b-t06/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5-lcpp6-flashnext-heretic2",
+ "entry": "lcpp6-flashnext-heretic2",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 31397.0,
+ "wall_s": 2603.1,
+ "tok_s": 14.3,
+ "points": {
+ "A": 1.0,
+ "B": 1.0,
+ "C": 2.0,
+ "D": 1.0,
+ "E": 1.0
+ },
+ "total": 6.0,
+ "note": "draws only with script (blank in the scored render); graded from a scripted render in the same no-network container. 8 planets at exact ratios but one Earth year is 900 x 365 s, so nothing visibly orbits; labels sit away from their planets and parts are clipped at the left edge; dashed ring gears turn imperceptibly; night terminator swings back and forth",
+ "frames": [
+ "frames/orrery/t5-lcpp6-flashnext-heretic2/frame-100.webp",
+ "frames/orrery/t5-lcpp6-flashnext-heretic2/frame-2000.webp",
+ "frames/orrery/t5-lcpp6-flashnext-heretic2/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5r5-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 7547.0,
+ "wall_s": 43.9,
+ "tok_s": 196.2,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 0.0,
+ "E": 1.0
+ },
+ "total": 6.0,
+ "note": "clean 8-planet drawing; periods 5/12/20/35/80/140/250/400 s ordered, ratios off; gears not visible (lost under the sun); light gradient turns with the continents",
+ "frames": [
+ "frames/orrery/t5r5-gemma-4-26b-a4b/frame-100.webp",
+ "frames/orrery/t5r5-gemma-4-26b-a4b/frame-2000.webp",
+ "frames/orrery/t5r5-gemma-4-26b-a4b/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5r5-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 29314.0,
+ "wall_s": 210.9,
+ "tok_s": 141.4,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 1.0
+ },
+ "total": 6.0,
+ "note": "gears drawn many times too large cover most of the picture and the planets show as tiny marks; Mercury and Venus right, outer periods wrong (Jupiter 5.9, Saturn 14.8, Neptune 127 Earth years); night overlay faces away from the sun in source but is hard to see",
+ "frames": [
+ "frames/orrery/t5r5-lcpp6-tiel-coder-35b-t06/frame-100.webp",
+ "frames/orrery/t5r5-lcpp6-tiel-coder-35b-t06/frame-2000.webp",
+ "frames/orrery/t5r5-lcpp6-tiel-coder-35b-t06/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5-kolibri-1",
+ "entry": "kolibri-1",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 11655.0,
+ "wall_s": 845.8,
+ "tok_s": 26.6,
+ "points": {
+ "A": 2.0,
+ "B": 1.0,
+ "C": 1.0,
+ "D": 0.0,
+ "E": 1.0
+ },
+ "total": 5.0,
+ "note": "4 planets, periods 4/6/10/15 s; central gear hidden under the sun; night layer spins on its own (2-5 s), so the shadow sometimes faces the sun",
+ "frames": [
+ "frames/orrery/t5-kolibri-1/frame-100.webp",
+ "frames/orrery/t5-kolibri-1/frame-2000.webp",
+ "frames/orrery/t5-kolibri-1/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5r4-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 6250.0,
+ "wall_s": 37.4,
+ "tok_s": 195.9,
+ "points": {
+ "A": 1.0,
+ "B": 1.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 1.0
+ },
+ "total": 5.0,
+ "note": "same transform-origin fault: most planets leave the canvas and Saturn's ring parts from the planet; dashed gears turn; periods 4/7/12/18/35/50 s ordered, ratios off; highlight turns with the spin",
+ "frames": [
+ "frames/orrery/t5r4-gemma-4-26b-a4b/frame-100.webp",
+ "frames/orrery/t5r4-gemma-4-26b-a4b/frame-2000.webp",
+ "frames/orrery/t5r4-gemma-4-26b-a4b/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5-gemma-4-26b-a4b-vllm",
+ "entry": "gemma-4-26b-a4b-vllm",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 3851.0,
+ "wall_s": 161.9,
+ "tok_s": 204.3,
+ "points": {
+ "A": 1.0,
+ "B": 1.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 0.0
+ },
+ "total": 4.0,
+ "note": "the sun group's animateTransform replaces its translate, so the sun and its dashed gear ring sit in the top-left corner; planets turn about (0,0) and leave their orbits; periods 4/7/12/22/50/80 s ordered, ratios off; the 'shadow' is a symmetric dark rim that spins",
+ "frames": [
+ "frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-100.webp",
+ "frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-2000.webp",
+ "frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5-maya-glm-5.3-flash",
+ "entry": "maya-glm-5.3-flash",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 2363.2,
+ "tok_s": 18.1,
+ "points": {
+ "A": 1.0,
+ "B": 1.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 0.0
+ },
+ "total": 4.0,
+ "note": "length stop; the SVG has four toothed (dashed) wheels at Mercury-Mars ratios but no planets were ever drawn (defs only); 13.9k chars of prose; no day/night",
+ "frames": [
+ "frames/orrery/t5-maya-glm-5.3-flash/frame-100.webp",
+ "frames/orrery/t5-maya-glm-5.3-flash/frame-2000.webp",
+ "frames/orrery/t5-maya-glm-5.3-flash/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5r2-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 4105.0,
+ "wall_s": 25.6,
+ "tok_s": 204.0,
+ "points": {
+ "A": 1.0,
+ "B": 1.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 0.0
+ },
+ "total": 4.0,
+ "note": "planets bunch over the sun and orbit about the wrong centre; one toothed gear clipped in the corner; periods 4/10/18/30/60/100 s ordered, ratios off; shading not visible",
+ "frames": [
+ "frames/orrery/t5r2-gemma-4-26b-a4b/frame-100.webp",
+ "frames/orrery/t5r2-gemma-4-26b-a4b/frame-2000.webp",
+ "frames/orrery/t5r2-gemma-4-26b-a4b/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5r3-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 4593.0,
+ "wall_s": 27.4,
+ "tok_s": 210.1,
+ "points": {
+ "A": 1.0,
+ "B": 1.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 0.0
+ },
+ "total": 4.0,
+ "note": "transform-origin center spins each planet about the canvas centre, so the planets leave the canvas; dashed gears ride the orbits; periods 5/12/20/35/60 s ordered, ratios off; no day/night to see",
+ "frames": [
+ "frames/orrery/t5r3-gemma-4-26b-a4b/frame-100.webp",
+ "frames/orrery/t5r3-gemma-4-26b-a4b/frame-2000.webp",
+ "frames/orrery/t5r3-gemma-4-26b-a4b/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 3921.0,
+ "wall_s": 24.7,
+ "tok_s": 204.0,
+ "points": {
+ "A": 1.0,
+ "B": 1.0,
+ "C": 1.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 3.0,
+ "note": "viewBox=\"0 0 -800 600\" (negative width): the drawing sits around (0,0) and only a corner shows; periods 5/12/20/35/60/90 s ordered but not real; gears are plain rings, not visible",
+ "frames": [
+ "frames/orrery/t5-gemma-4-26b-a4b/frame-100.webp",
+ "frames/orrery/t5-gemma-4-26b-a4b/frame-2000.webp",
+ "frames/orrery/t5-gemma-4-26b-a4b/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5r3-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 31324.0,
+ "wall_s": 225.8,
+ "tok_s": 140.9,
+ "points": {
+ "A": 1.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 1.0
+ },
+ "total": 2.0,
+ "note": "XML error on line 146 (opacity=\"0.5/>): the browser shows an error banner and a still picture up to Saturn, so nothing moves; source ratios are exact (Earth 20 s); toothed ring is static; shading is a fixed lit half",
+ "frames": [
+ "frames/orrery/t5r3-lcpp6-tiel-coder-35b-t06/frame-100.webp",
+ "frames/orrery/t5r3-lcpp6-tiel-coder-35b-t06/frame-2000.webp",
+ "frames/orrery/t5r3-lcpp6-tiel-coder-35b-t06/frame-6000.webp"
+ ]
+ },
+ {
+ "case": "t5-cyber-tiel-coder-35b",
+ "entry": "cyber-tiel-coder-35b",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 862.7,
+ "tok_s": 48.1,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at 32,000 tokens; 19k chars of prose, no SVG",
+ "frames": []
+ },
+ {
+ "case": "t5-flashnext",
+ "entry": "flashnext",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 1481.5,
+ "tok_s": 26.9,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at the 32,000-token cap before any SVG",
+ "frames": []
+ },
+ {
+ "case": "t5-lcpp6-orcarouter-fn-uncensored",
+ "entry": "lcpp6-orcarouter-fn-uncensored",
+ "test": 5,
+ "finish": "stop",
+ "tokens": 24386.0,
+ "wall_s": 2203.7,
+ "tok_s": 13.5,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: stopped by itself after 24,386 tokens without writing an SVG",
+ "frames": []
+ },
+ {
+ "case": "t5-qwen3.8-27b-uncensored-vllm",
+ "entry": "qwen3.8-27b-uncensored-vllm",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 392.3,
+ "tok_s": 92.4,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at the 32,000-token cap before any SVG",
+ "frames": []
+ },
+ {
+ "case": "t5-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 389.1,
+ "tok_s": 94.7,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at the 32,000-token cap before any SVG",
+ "frames": []
+ },
+ {
+ "case": "t5-strata-swift15",
+ "entry": "strata-swift15",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 1055.5,
+ "tok_s": 38.1,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at the 32,000-token cap before any SVG",
+ "frames": []
+ },
+ {
+ "case": "t5-tiel-coder-35b",
+ "entry": "tiel-coder-35b",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 331.0,
+ "tok_s": 138.3,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at the 32,000-token cap before any SVG",
+ "frames": []
+ },
+ {
+ "case": "t5b1-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 365.6,
+ "tok_s": 99.6,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at 32,000 tokens, all thinking (five identical replies)",
+ "frames": []
+ },
+ {
+ "case": "t5b2-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 364.2,
+ "tok_s": 99.4,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at 32,000 tokens, all thinking (five identical replies)",
+ "frames": []
+ },
+ {
+ "case": "t5b3-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 361.5,
+ "tok_s": 99.5,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at 32,000 tokens, all thinking (five identical replies)",
+ "frames": []
+ },
+ {
+ "case": "t5b4-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 361.4,
+ "tok_s": 99.4,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at 32,000 tokens, all thinking (five identical replies)",
+ "frames": []
+ },
+ {
+ "case": "t5b5-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 5,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 361.3,
+ "tok_s": 99.3,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no SVG: length stop at 32,000 tokens, all thinking (five identical replies)",
+ "frames": []
+ }
+ ],
+ "pagoda": [
+ {
+ "case": "t6-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 403.3,
+ "tok_s": 90.6,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no page: all 32,000 tokens went to thinking (31,991 reasoning tokens), still planning the pond when cut off",
+ "frames": []
+ },
+ {
+ "case": "t6x64k-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "length",
+ "tokens": 64000.0,
+ "wall_s": 716.7,
+ "tok_s": 94.5,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no complete page: 53,302 reasoning tokens, then cut off 24.6 KB into a long, ambitious page (page-truncated.html)",
+ "frames": []
+ },
+ {
+ "case": "t6-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 20682.0,
+ "wall_s": 155.0,
+ "tok_s": 143.3,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught TypeError renderer.setShadowMapEnabled is not a function (an API removed years ago); diag/ with that one line fixed shows a full scene, unscored",
+ "frames": [
+ "frames/pagoda/t6-lcpp6-tiel-coder-35b-t06/frame-1500.webp",
+ "frames/pagoda/t6-lcpp6-tiel-coder-35b-t06/frame-5000.webp",
+ "frames/pagoda/t6-lcpp6-tiel-coder-35b-t06/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6r2-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 13634.0,
+ "wall_s": 98.5,
+ "tok_s": 145.1,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 10.0,
+ "note": "five red storeys, black eaves with upturned tips, gold ringed spire, platform, two cherry trees, lantern, pond with lily pads, torii; orbit by code",
+ "frames": [
+ "frames/pagoda/t6r2-lcpp6-tiel-coder-35b-t06/frame-1500.webp",
+ "frames/pagoda/t6r2-lcpp6-tiel-coder-35b-t06/frame-5000.webp",
+ "frames/pagoda/t6r2-lcpp6-tiel-coder-35b-t06/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6r3-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 28610.0,
+ "wall_s": 206.3,
+ "tok_s": 141.1,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 8.0,
+ "note": "the richest scene (voxel grass, lily pads, red eave tips), but the camera is too close: the fifth storey and the spire are out of frame in every frame",
+ "frames": [
+ "frames/pagoda/t6r3-lcpp6-tiel-coder-35b-t06/frame-1500.webp",
+ "frames/pagoda/t6r3-lcpp6-tiel-coder-35b-t06/frame-5000.webp",
+ "frames/pagoda/t6r3-lcpp6-tiel-coder-35b-t06/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6-tiel-coder-35b",
+ "entry": "tiel-coder-35b",
+ "test": 6,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 239.7,
+ "tok_s": 137.9,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no page: thinking ran out the cap just as it said it would write the file",
+ "frames": []
+ },
+ {
+ "case": "t6x64k-tiel-coder-35b",
+ "entry": "tiel-coder-35b",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 17210.0,
+ "wall_s": 128.0,
+ "tok_s": 140.6,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 10.0,
+ "note": "five storeys with angled upturned eaves, spire, platform, stepping-stone path through the torii, cherry trees, pond; finished in 17,210 tokens this time",
+ "frames": [
+ "frames/pagoda/t6x64k-tiel-coder-35b/frame-1500.webp",
+ "frames/pagoda/t6x64k-tiel-coder-35b/frame-5000.webp",
+ "frames/pagoda/t6x64k-tiel-coder-35b/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6-lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "entry": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 13484.0,
+ "wall_s": 134.8,
+ "tok_s": 105.8,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 10.0,
+ "note": "the best-looking page of the night: tall five-storey pagoda, black eaves with raised corner blocks, ringed spire, torii in front, two full cherry trees, stone-rimmed pond",
+ "frames": [
+ "frames/pagoda/t6-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-1500.webp",
+ "frames/pagoda/t6-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-5000.webp",
+ "frames/pagoda/t6-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6r2-lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "entry": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 24210.0,
+ "wall_s": 284.2,
+ "tok_s": 90.1,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no page: the reply is the same stray fragment of a voxel() helper repeated, no HTML",
+ "frames": []
+ },
+ {
+ "case": "t6r3-lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "entry": "lcpp6-tiel-coder-35b-q4kxl-mtp",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 14737.0,
+ "wall_s": 159.3,
+ "tok_s": 100.7,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught TypeError at sun.camera.near (meant sun.shadow.camera)",
+ "frames": [
+ "frames/pagoda/t6r3-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-1500.webp",
+ "frames/pagoda/t6r3-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-5000.webp",
+ "frames/pagoda/t6r3-lcpp6-tiel-coder-35b-q4kxl-mtp/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 4816.0,
+ "wall_s": 27.4,
+ "tok_s": 212.1,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 2.0
+ },
+ "total": 7.0,
+ "note": "draws, but roof and spire calls pass arguments in the wrong order and draw nothing, and the pond lies inside the platform: a stack of five brown blocks, trees, a thin torii",
+ "frames": [
+ "frames/pagoda/t6-gemma-4-26b-a4b/frame-1500.webp",
+ "frames/pagoda/t6-gemma-4-26b-a4b/frame-5000.webp",
+ "frames/pagoda/t6-gemma-4-26b-a4b/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6r2-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 4334.0,
+ "wall_s": 26.6,
+ "tok_s": 216.9,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 9.0,
+ "note": "small but complete scene on a grey stone platform: five storeys, flat-looking eaves (the upturned corners are not visible at this distance), gold spire, torii, tree, pond",
+ "frames": [
+ "frames/pagoda/t6r2-gemma-4-26b-a4b/frame-1500.webp",
+ "frames/pagoda/t6r2-gemma-4-26b-a4b/frame-5000.webp",
+ "frames/pagoda/t6r2-gemma-4-26b-a4b/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6r3-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 4495.0,
+ "wall_s": 26.5,
+ "tok_s": 216.3,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught SyntaxError, identifier ty declared twice",
+ "frames": [
+ "frames/pagoda/t6r3-gemma-4-26b-a4b/frame-1500.webp",
+ "frames/pagoda/t6r3-gemma-4-26b-a4b/frame-5000.webp",
+ "frames/pagoda/t6r3-gemma-4-26b-a4b/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6nt1-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 6985.0,
+ "wall_s": 112.7,
+ "tok_s": 113.5,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught TypeError at line 133 (m[0] in shade): mat() looks up FACES[r.f ?? 1], the table has no key 1, so shade gets undefined. shade's comma return on the next line is a second bug that never runs. Thinking off. The three replies are byte-identical",
+ "frames": [
+ "frames/pagoda/t6nt1-qwen3.8-27b-vllm/frame-1500.webp",
+ "frames/pagoda/t6nt1-qwen3.8-27b-vllm/frame-5000.webp",
+ "frames/pagoda/t6nt1-qwen3.8-27b-vllm/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6nt2-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 6985.0,
+ "wall_s": 101.8,
+ "tok_s": 113.1,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught TypeError at line 133 (m[0] in shade): mat() looks up FACES[r.f ?? 1], the table has no key 1, so shade gets undefined. shade's comma return on the next line is a second bug that never runs. Thinking off. The three replies are byte-identical",
+ "frames": [
+ "frames/pagoda/t6nt2-qwen3.8-27b-vllm/frame-1500.webp",
+ "frames/pagoda/t6nt2-qwen3.8-27b-vllm/frame-5000.webp",
+ "frames/pagoda/t6nt2-qwen3.8-27b-vllm/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6nt3-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 6985.0,
+ "wall_s": 101.1,
+ "tok_s": 113.3,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught TypeError at line 133 (m[0] in shade): mat() looks up FACES[r.f ?? 1], the table has no key 1, so shade gets undefined. shade's comma return on the next line is a second bug that never runs. Thinking off. The three replies are byte-identical",
+ "frames": [
+ "frames/pagoda/t6nt3-qwen3.8-27b-vllm/frame-1500.webp",
+ "frames/pagoda/t6nt3-qwen3.8-27b-vllm/frame-5000.webp",
+ "frames/pagoda/t6nt3-qwen3.8-27b-vllm/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6x1-exl3-qwen3.8-27b-mtp",
+ "entry": "exl3-qwen3.8-27b-mtp",
+ "test": 6,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 469.7,
+ "tok_s": 73.1,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no page: cut off at 32,000 tokens (thinking budget 24,000 left too little for the page); partial page kept",
+ "frames": []
+ },
+ {
+ "case": "t6x2-exl3-qwen3.8-27b-mtp",
+ "entry": "exl3-qwen3.8-27b-mtp",
+ "test": 6,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 498.4,
+ "tok_s": 68.6,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no page: cut off at 32,000 tokens (thinking budget 24,000 left too little for the page); partial page kept",
+ "frames": []
+ },
+ {
+ "case": "t6x3-exl3-qwen3.8-27b-mtp",
+ "entry": "exl3-qwen3.8-27b-mtp",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 30065.0,
+ "wall_s": 459.5,
+ "tok_s": 70.3,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 9.0,
+ "note": "red-and-cream pagoda with dark roofs and gold corner blocks raised at the eave corners; the camera sits close, so the fifth storey is cut off at the top and the spire is never in frame; torii, cherry trees, stone platform, pond at the bottom edge; orbit from code (clock delta), petals and shadows visible",
+ "frames": [
+ "frames/pagoda/t6x3-exl3-qwen3.8-27b-mtp/frame-1500.webp",
+ "frames/pagoda/t6x3-exl3-qwen3.8-27b-mtp/frame-5000.webp",
+ "frames/pagoda/t6x3-exl3-qwen3.8-27b-mtp/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6x1-exl3-qwen3.8-27b-dflash2",
+ "entry": "exl3-qwen3.8-27b-dflash2",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 9096.0,
+ "wall_s": 120.6,
+ "tok_s": 103.6,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 2.0
+ },
+ "total": 7.0,
+ "note": "draws, but the roofs are boxes scaled to 0.72 and read as rows of dark green slats with gaps; the spire (y 32 to 41) is above every frame; the torii is built at the origin, inside the pagoda, so it never shows; platform, cherry trees and pond; OrbitControls autoRotate, petals and shadows visible; night palette",
+ "frames": [
+ "frames/pagoda/t6x1-exl3-qwen3.8-27b-dflash2/frame-1500.webp",
+ "frames/pagoda/t6x1-exl3-qwen3.8-27b-dflash2/frame-5000.webp",
+ "frames/pagoda/t6x1-exl3-qwen3.8-27b-dflash2/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6x2-exl3-qwen3.8-27b-dflash2",
+ "entry": "exl3-qwen3.8-27b-dflash2",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 29398.0,
+ "wall_s": 438.0,
+ "tok_s": 72.4,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 10.0,
+ "note": "best of the sitting: five red storeys with dark roofs and gold upturned corner blocks, a stacked spire, stone platform with lanterns, torii, three cherry trees, pond with lily pads, voxel clouds, dawn/dusk toggle; OrbitControls autoRotate, petals and shadows visible",
+ "frames": [
+ "frames/pagoda/t6x2-exl3-qwen3.8-27b-dflash2/frame-1500.webp",
+ "frames/pagoda/t6x2-exl3-qwen3.8-27b-dflash2/frame-5000.webp",
+ "frames/pagoda/t6x2-exl3-qwen3.8-27b-dflash2/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6x3-exl3-qwen3.8-27b-dflash2",
+ "entry": "exl3-qwen3.8-27b-dflash2",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 27995.0,
+ "wall_s": 382.0,
+ "tok_s": 79.9,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 9.0,
+ "note": "cream-and-brown pagoda with gold corner blocks raised at the eaves; camera close, the fifth storey is cut off and the spire is never in frame; torii (its beam in the foreground), cherry trees, stone platform, pond with stones; orbit from code (clock time), petals and shadows visible",
+ "frames": [
+ "frames/pagoda/t6x3-exl3-qwen3.8-27b-dflash2/frame-1500.webp",
+ "frames/pagoda/t6x3-exl3-qwen3.8-27b-dflash2/frame-5000.webp",
+ "frames/pagoda/t6x3-exl3-qwen3.8-27b-dflash2/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6b1-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 381.7,
+ "tok_s": 95.3,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no complete page: 23,992 reasoning tokens, then cut off inside the page (page-truncated.html, not rendered). The five r1-r5 replies are byte-identical",
+ "frames": []
+ },
+ {
+ "case": "t6b2-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 373.6,
+ "tok_s": 95.6,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no complete page: same byte-identical reply as r1, cut off after 23,992 reasoning tokens",
+ "frames": []
+ },
+ {
+ "case": "t6b3-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 374.9,
+ "tok_s": 95.4,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no complete page: same byte-identical reply as r1, cut off after 23,992 reasoning tokens",
+ "frames": []
+ },
+ {
+ "case": "t6b4-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 375.9,
+ "tok_s": 95.1,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no complete page: same byte-identical reply as r1, cut off after 23,992 reasoning tokens",
+ "frames": []
+ },
+ {
+ "case": "t6b5-qwen3.8-27b-vllm",
+ "entry": "qwen3.8-27b-vllm",
+ "test": 6,
+ "finish": "length",
+ "tokens": 32000.0,
+ "wall_s": 373.7,
+ "tok_s": 95.5,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "no complete page: same byte-identical reply as r1, cut off after 23,992 reasoning tokens",
+ "frames": []
+ },
+ {
+ "case": "t6r4-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 4291.0,
+ "wall_s": 26.1,
+ "tok_s": 210.3,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 9.0,
+ "note": "five storeys, flat eaves, gold spire; platform, cherry trees, pond and torii; box petals and shadows; camera orbits on a timer. Eaves do not turn up",
+ "frames": [
+ "frames/pagoda/t6r4-gemma-4-26b-a4b/frame-1500.webp",
+ "frames/pagoda/t6r4-gemma-4-26b-a4b/frame-5000.webp",
+ "frames/pagoda/t6r4-gemma-4-26b-a4b/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6r4-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 17226.0,
+ "wall_s": 126.6,
+ "tok_s": 144.8,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 10.0,
+ "note": "five storeys, block corners that rise, gold-tipped spire; stepped platform, cherry trees, pond, torii; petals and shadows; OrbitControls autoRotate",
+ "frames": [
+ "frames/pagoda/t6r4-lcpp6-tiel-coder-35b-t06/frame-1500.webp",
+ "frames/pagoda/t6r4-lcpp6-tiel-coder-35b-t06/frame-5000.webp",
+ "frames/pagoda/t6r4-lcpp6-tiel-coder-35b-t06/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6r5-gemma-4-26b-a4b",
+ "entry": "gemma-4-26b-a4b",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 5081.0,
+ "wall_s": 29.3,
+ "tok_s": 213.5,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 2.0
+ },
+ "total": 8.0,
+ "note": "five storeys, flat eaves, thin spire; platform, cherry trees and torii; the pond voxel sits at y=-0.3 and does not show; box petals, shadows, camera orbits on a timer. Pagoda is small",
+ "frames": [
+ "frames/pagoda/t6r5-gemma-4-26b-a4b/frame-1500.webp",
+ "frames/pagoda/t6r5-gemma-4-26b-a4b/frame-5000.webp",
+ "frames/pagoda/t6r5-gemma-4-26b-a4b/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6r5-lcpp6-tiel-coder-35b-t06",
+ "entry": "lcpp6-tiel-coder-35b-t06",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 10339.0,
+ "wall_s": 74.1,
+ "tok_s": 146.6,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 10.0,
+ "note": "five storeys with rising eaves and a gold spire; platform, cherry trees, rectangular pond, torii; petals and shadows; OrbitControls autoRotate",
+ "frames": [
+ "frames/pagoda/t6r5-lcpp6-tiel-coder-35b-t06/frame-1500.webp",
+ "frames/pagoda/t6r5-lcpp6-tiel-coder-35b-t06/frame-5000.webp",
+ "frames/pagoda/t6r5-lcpp6-tiel-coder-35b-t06/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6xn1-exl3-qwen3.8-27b-dflash2",
+ "entry": "exl3-qwen3.8-27b-dflash2",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 7375.0,
+ "wall_s": 95.9,
+ "tok_s": 116.8,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 0.0,
+ "D": 1.0,
+ "E": 2.0
+ },
+ "total": 6.0,
+ "note": "thinking off. No pagoda: white slabs and a pond under two huge floating green blocks. Petals, shadows and autoRotate are there",
+ "frames": [
+ "frames/pagoda/t6xn1-exl3-qwen3.8-27b-dflash2/frame-1500.webp",
+ "frames/pagoda/t6xn1-exl3-qwen3.8-27b-dflash2/frame-5000.webp",
+ "frames/pagoda/t6xn1-exl3-qwen3.8-27b-dflash2/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6xn1-exl3-qwen3.8-27b-mtp",
+ "entry": "exl3-qwen3.8-27b-mtp",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 7386.0,
+ "wall_s": 116.8,
+ "tok_s": 92.4,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "thinking off. Blank. Uncaught ReferenceError: zz is not defined, page line 378",
+ "frames": [
+ "frames/pagoda/t6xn1-exl3-qwen3.8-27b-mtp/frame-1500.webp",
+ "frames/pagoda/t6xn1-exl3-qwen3.8-27b-mtp/frame-5000.webp",
+ "frames/pagoda/t6xn1-exl3-qwen3.8-27b-mtp/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6xn2-exl3-qwen3.8-27b-dflash2",
+ "entry": "exl3-qwen3.8-27b-dflash2",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 8781.0,
+ "wall_s": 117.3,
+ "tok_s": 102.6,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 8.0,
+ "note": "thinking off. Cube pagoda with raised corners, but only four storeys show and the spire is clipped off the frame, with large gaps between tiers. Platform, cherry trees, pond, torii, petals, shadows, autoRotate",
+ "frames": [
+ "frames/pagoda/t6xn2-exl3-qwen3.8-27b-dflash2/frame-1500.webp",
+ "frames/pagoda/t6xn2-exl3-qwen3.8-27b-dflash2/frame-5000.webp",
+ "frames/pagoda/t6xn2-exl3-qwen3.8-27b-dflash2/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6xn2-exl3-qwen3.8-27b-mtp",
+ "entry": "exl3-qwen3.8-27b-mtp",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 8475.0,
+ "wall_s": 124.0,
+ "tok_s": 91.9,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "thinking off. Blank. Uncaught ReferenceError: w0 is not defined, page line 267",
+ "frames": [
+ "frames/pagoda/t6xn2-exl3-qwen3.8-27b-mtp/frame-1500.webp",
+ "frames/pagoda/t6xn2-exl3-qwen3.8-27b-mtp/frame-5000.webp",
+ "frames/pagoda/t6xn2-exl3-qwen3.8-27b-mtp/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6xn3-exl3-qwen3.8-27b-dflash2",
+ "entry": "exl3-qwen3.8-27b-dflash2",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 6524.0,
+ "wall_s": 94.2,
+ "tok_s": 104.5,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "thinking off. Blank: frames show only the HTML overlay. Console repeats THREE.Material parameter color undefined; no uncaught exception",
+ "frames": [
+ "frames/pagoda/t6xn3-exl3-qwen3.8-27b-dflash2/frame-1500.webp",
+ "frames/pagoda/t6xn3-exl3-qwen3.8-27b-dflash2/frame-5000.webp",
+ "frames/pagoda/t6xn3-exl3-qwen3.8-27b-dflash2/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6xn3-exl3-qwen3.8-27b-mtp",
+ "entry": "exl3-qwen3.8-27b-mtp",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 8323.0,
+ "wall_s": 129.0,
+ "tok_s": 85.6,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "thinking off. Blank. Uncaught TypeError: Cannot read properties of undefined (reading cast), page line 152",
+ "frames": [
+ "frames/pagoda/t6xn3-exl3-qwen3.8-27b-mtp/frame-1500.webp",
+ "frames/pagoda/t6xn3-exl3-qwen3.8-27b-mtp/frame-5000.webp",
+ "frames/pagoda/t6xn3-exl3-qwen3.8-27b-mtp/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6hq1-qwen3.8-27b-vllm-031",
+ "entry": "qwen3.8-27b-vllm-031",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 47310.0,
+ "wall_s": 535.4,
+ "tok_s": 95.4,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "HyperQwen 0.31, 140k cap. Blank: Uncaught ReferenceError: Cannot access 't' before initialization (line 114); its mulberry32 reads let t inside its own initializer, the module dies and the veil never lifts",
+ "frames": [
+ "frames/pagoda/t6hq1-qwen3.8-27b-vllm-031/frame-1500.webp",
+ "frames/pagoda/t6hq1-qwen3.8-27b-vllm-031/frame-5000.webp",
+ "frames/pagoda/t6hq1-qwen3.8-27b-vllm-031/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-cyber-tiel-coder-35b",
+ "entry": "cyber-tiel-coder-35b",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 17274.0,
+ "wall_s": 553.1,
+ "tok_s": 47.6,
+ "points": {
+ "A": 2.0,
+ "B": 1.0,
+ "C": 2.0,
+ "D": 2.0,
+ "E": 2.0
+ },
+ "total": 9.0,
+ "note": "five storeys with dark eaves and raised corner blocks, black stacked spire; stone platform, two cherry trees, torii behind the left tree, pond at the bottom edge; OrbitControls autoRotate, petals and shadows visible. B: the ground is an 80 x 80 plane and the petals are planes",
+ "frames": [
+ "frames/pagoda/t6unc1-cyber-tiel-coder-35b/frame-1500.webp",
+ "frames/pagoda/t6unc1-cyber-tiel-coder-35b/frame-5000.webp",
+ "frames/pagoda/t6unc1-cyber-tiel-coder-35b/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-lcpp6-flashnext-abliterated-s15",
+ "entry": "lcpp6-flashnext-abliterated-s15",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 25722.0,
+ "wall_s": 2325.3,
+ "tok_s": 14.6,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught SyntaxError Identifier 'stampBuild' has already been declared (line 621); frames show only the HTML panel",
+ "frames": [
+ "frames/pagoda/t6unc1-lcpp6-flashnext-abliterated-s15/frame-1500.webp",
+ "frames/pagoda/t6unc1-lcpp6-flashnext-abliterated-s15/frame-5000.webp",
+ "frames/pagoda/t6unc1-lcpp6-flashnext-abliterated-s15/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-lcpp6-flashnext-heretic2",
+ "entry": "lcpp6-flashnext-heretic2",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 25919.0,
+ "wall_s": 2288.5,
+ "tok_s": 13.7,
+ "points": {
+ "A": 1.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 0.0,
+ "E": 1.0
+ },
+ "total": 5.0,
+ "note": "draws a grey cube tower with scattered loose cubes and slab clouds through it, every material grey, the panel stuck at LOADING; the spire is above every frame and the eaves do not read; only the plinth and lanterns of the setting show (cherry trees, pond and torii are in the code but not in frame); orbit from code (clock delta) and shadows, no petals visible",
+ "frames": [
+ "frames/pagoda/t6unc1-lcpp6-flashnext-heretic2/frame-1500.webp",
+ "frames/pagoda/t6unc1-lcpp6-flashnext-heretic2/frame-5000.webp",
+ "frames/pagoda/t6unc1-lcpp6-flashnext-heretic2/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-lcpp6-orcarouter-fn-uncensored",
+ "entry": "lcpp6-orcarouter-fn-uncensored",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 33616.0,
+ "wall_s": 2834.5,
+ "tok_s": 13.9,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught SyntaxError Invalid or unexpected token (line 239); frames show only the HTML overlay",
+ "frames": [
+ "frames/pagoda/t6unc1-lcpp6-orcarouter-fn-uncensored/frame-1500.webp",
+ "frames/pagoda/t6unc1-lcpp6-orcarouter-fn-uncensored/frame-5000.webp",
+ "frames/pagoda/t6unc1-lcpp6-orcarouter-fn-uncensored/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-lcpp6-orcasaq2-cyber-27b",
+ "entry": "lcpp6-orcasaq2-cyber-27b",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 21455.0,
+ "wall_s": 443.2,
+ "tok_s": 63.8,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 1.0,
+ "D": 1.0,
+ "E": 1.0
+ },
+ "total": 7.0,
+ "note": "five dark roof tiers crushed onto each other so the storeys barely show and no eave corner visibly rises; gold ringed spire; stepped stone platform, pond, torii, lanterns; the sakura trees are not in frame (petals are); the auto orbit starts only after a pointer release, so the camera never moves on its own; petals and shadows visible",
+ "frames": [
+ "frames/pagoda/t6unc1-lcpp6-orcasaq2-cyber-27b/frame-1500.webp",
+ "frames/pagoda/t6unc1-lcpp6-orcasaq2-cyber-27b/frame-5000.webp",
+ "frames/pagoda/t6unc1-lcpp6-orcasaq2-cyber-27b/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-lcpp6-q38-27b-cyber-q5",
+ "entry": "lcpp6-q38-27b-cyber-q5",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 16762.0,
+ "wall_s": 610.9,
+ "tok_s": 33.4,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught SyntaxError Unexpected identifier 'multiply' (line 467); stuck on its 'building ~12k cubes' loader",
+ "frames": [
+ "frames/pagoda/t6unc1-lcpp6-q38-27b-cyber-q5/frame-1500.webp",
+ "frames/pagoda/t6unc1-lcpp6-q38-27b-cyber-q5/frame-5000.webp",
+ "frames/pagoda/t6unc1-lcpp6-q38-27b-cyber-q5/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-lcpp6-q38-coder390",
+ "entry": "lcpp6-q38-coder390",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 13568.0,
+ "wall_s": 350.4,
+ "tok_s": 54.6,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught TypeError reading 'fromArray' inside three.core.js every frame; plain beige frames",
+ "frames": [
+ "frames/pagoda/t6unc1-lcpp6-q38-coder390/frame-1500.webp",
+ "frames/pagoda/t6unc1-lcpp6-q38-coder390/frame-5000.webp",
+ "frames/pagoda/t6unc1-lcpp6-q38-coder390/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-lcpp6-thinkingcap-27b-heretic",
+ "entry": "lcpp6-thinkingcap-27b-heretic",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 29400.0,
+ "wall_s": 869.6,
+ "tok_s": 38.1,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught SyntaxError Malformed arrow function parameter list (line 171); frames show only the caption",
+ "frames": [
+ "frames/pagoda/t6unc1-lcpp6-thinkingcap-27b-heretic/frame-1500.webp",
+ "frames/pagoda/t6unc1-lcpp6-thinkingcap-27b-heretic/frame-5000.webp",
+ "frames/pagoda/t6unc1-lcpp6-thinkingcap-27b-heretic/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-q38-27b-cyber",
+ "entry": "q38-27b-cyber",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 14340.0,
+ "wall_s": 346.3,
+ "tok_s": 42.9,
+ "points": {
+ "A": 0.0,
+ "B": 0.0,
+ "C": 0.0,
+ "D": 0.0,
+ "E": 0.0
+ },
+ "total": 0.0,
+ "note": "blank: Uncaught SyntaxError missing ) after argument list (line 143); the page's own error badge shows it",
+ "frames": [
+ "frames/pagoda/t6unc1-q38-27b-cyber/frame-1500.webp",
+ "frames/pagoda/t6unc1-q38-27b-cyber/frame-5000.webp",
+ "frames/pagoda/t6unc1-q38-27b-cyber/frame-10000.webp"
+ ]
+ },
+ {
+ "case": "t6unc1-qwen3.8-27b-uncensored-vllm",
+ "entry": "qwen3.8-27b-uncensored-vllm",
+ "test": 6,
+ "finish": "stop",
+ "tokens": 86783.0,
+ "wall_s": 989.8,
+ "tok_s": 91.9,
+ "points": {
+ "A": 2.0,
+ "B": 2.0,
+ "C": 2.0,
+ "D": 1.0,
+ "E": 2.0
+ },
+ "total": 9.0,
+ "note": "best of the ten: five red storeys with slate eaves and gold corner blocks raised, gold ringed spire, stepped stone base, red torii, three cherry trees, lanterns, voxel clouds; the pond is in the code but out of frame; OrbitControls autoRotate, petals and shadows visible",
+ "frames": [
+ "frames/pagoda/t6unc1-qwen3.8-27b-uncensored-vllm/frame-1500.webp",
+ "frames/pagoda/t6unc1-qwen3.8-27b-uncensored-vllm/frame-5000.webp",
+ "frames/pagoda/t6unc1-qwen3.8-27b-uncensored-vllm/frame-10000.webp"
+ ]
+ }
+ ]
+ },
+ "counts": {
+ "models": 87,
+ "runs": 191,
+ "test3": 49,
+ "oneshots": 79,
+ "frames": 162,
+ "pass": 122
+ }
+}
diff --git a/site/data/curated.json b/site/data/curated.json
new file mode 100644
index 0000000..f3ae268
--- /dev/null
+++ b/site/data/curated.json
@@ -0,0 +1,48 @@
+{
+ "title": "The Bake-off",
+ "tagline": "Which open-weight models can do real agent work on one consumer GPU, how fast, and with what settings.",
+ "tests": [
+ {"id": "t1", "number": "1", "name": "Command-line tool", "kind": "agentic", "what": "Write a Python CLI for the Home Assistant REST API.", "graded": "The grader runs the tool in a sandbox: entry point and help, real data, bad input, bad token, no crash (5 checks), plus the model's own tests."},
+ {"id": "t2", "number": "2", "name": "MCP server in Rust", "kind": "agentic", "what": "Build a Model Context Protocol server in Rust from the spec on disk.", "graded": "Built and driven as a real MCP client: initialize, tools/list and a tools/call that must return real data. Pass, partial or fail."},
+ {"id": "t2t", "number": "2T", "name": "Trust the docs", "kind": "agentic", "what": "Test 2 with a REST reference that has three planted wrong endpoints.", "graded": "Did the model test, avoid, hedge or trust the planted endpoints? Read from the replay's access log and the shipped code."},
+ {"id": "t3", "number": "3", "name": "Use and fix an MCP server", "kind": "agentic", "what": "Describe a recorded house through an MCP server, then find and fix what is wrong with it.", "graded": "Facts checked against the recording, a judgement on whether the server can be trusted, and the fix run against the client."},
+ {"id": "t5", "number": "5", "name": "Brass orrery", "kind": "one-shot", "what": "One reply, no tools: an animated SVG orrery with planets at real ratios and a meshing gear train.", "graded": "Rendered offline in a container with no network; five points of 0-2 (draws, planets, gears, lighting, motion)."},
+ {"id": "t6", "number": "6", "name": "Voxel pagoda", "kind": "one-shot", "what": "One reply, no tools: a three.js voxel Japanese pagoda with cherry trees, pond and torii.", "graded": "Rendered offline with software WebGL; five points of 0-2 (draws, voxels, pagoda, setting, life)."},
+ {"id": "t7", "number": "7", "name": "Ticket fixes in Rust", "kind": "agentic", "what": "Ticket-sized fixes in a real Rust project.", "graded": "The project's own tests, run after the agent finishes."}
+ ],
+ "findings": [
+ {
+ "date": "2026-10-22",
+ "title": "An expert cache doubles Flash-Next on one 3090",
+ "kind": "tuning",
+ "summary": "Qwen3.8 Flash-Next (125B, 6B active) does not fit in 24 GB, so llama.cpp keeps experts in system RAM. Keeping all of them there (-cmoe) and giving the GPU a cache of hot experts (--moe-cache-mib), with q8 KV to make room, beat the old split of 40 layers on CPU on every GGUF tried, at 262k context.",
+ "settings": "-cmoe --moe-cache-mib 12800 -ctk q8_0 -ctv q8_0 -b 2048 -ub 1024 -t 16",
+ "metrics": [
+ {"label": "Decode, orca IQ4_XS", "before": 13, "after": 24, "unit": "tok/s"},
+ {"label": "Prefill at 16-48k", "before": 250, "after": 415, "unit": "tok/s"},
+ {"label": "Decode, swift15 IQ3_XXS", "before": 15, "after": 23, "unit": "tok/s"},
+ {"label": "Decode, abliterated s1.5", "before": 13, "after": 20, "unit": "tok/s"}
+ ],
+ "quality": "Against the old f16 KV config: mean KL 0.0011 and 98 % top-1 agreement over 100k tokens of real code; two loads of the same config differ by KL 0.0002. Needles found at 100k, 190k and 250k.",
+ "caveat": "Lazy tensor reads (llama.cpp's default) make the first pass over unseen text slow when the page cache is cold; -lzm off fixes it but costs about 28 GB of extra RAM."
+ },
+ {
+ "date": "2026-10-21",
+ "title": "Stock Flash-Next at 200k with vision, 24-25 tok/s",
+ "kind": "tuning",
+ "summary": "The stock Flash-Next EXL3 3-bit build on SGLang with an fp8 KV cache serves 204,800 tokens of context and images at 24-25 tok/s, two sessions at once.",
+ "metrics": [
+ {"label": "Decode", "before": null, "after": 25, "unit": "tok/s"},
+ {"label": "Prefill at 190k", "before": null, "after": 2600, "unit": "tok/s"}
+ ],
+ "quality": "Tools, vision and 11 of 11 multi-session checks pass; needle found at 100k, 150k and 190k; a repeated 190k prompt answers in 0.5 s."
+ }
+ ],
+ "links": {
+ "repo": "https://github.com/alexderz/agentic-model-testing",
+ "cards": "https://github.com/alexderz/agentic-model-testing/tree/main/docs/model-research/models",
+ "method": "https://github.com/alexderz/agentic-model-testing/blob/main/docs/model-research/method.md",
+ "conclusions": "https://github.com/alexderz/agentic-model-testing/blob/main/docs/model-research/conclusions.md",
+ "log": "https://github.com/alexderz/agentic-model-testing/blob/main/docs/model-research/log.md"
+ }
+}
diff --git a/site/frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-100.webp b/site/frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-100.webp
new file mode 100644
index 0000000000000000000000000000000000000000..4756b999b9af655e823241b7c4321662fb12afac
GIT binary patch
literal 26580
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
Zud`%0fZKt7^c%l0i6c56|cqry9~
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
literal 0
HcmV?d00001
diff --git a/site/frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-2000.webp b/site/frames/orrery/t5-gemma-4-26b-a4b-vllm/frame-2000.webp
new file mode 100644
index 0000000000000000000000000000000000000000..80e5ae545ab387cf4732c93be758608f6e9332f5
GIT binary patch
literal 26766
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