Repository navigation
Releases: ktwu01/benchmark-radar
Release list
Benchmark Radar v0.13.0: stable release
Stable release from main at commit 9c65d4b. CI passed on 929a342: https://github.com/ktwu01/benchmark-radar/actions/runs/38715540031. The commits after it change only docs, contributor scores and a maintainer skill.
Since v0.12.0 the project gained a wider set of discovery sources, more benchmarks with dated releases, and a search that ranks the same way on the site and in the CLI.
- More sources. Discovery now reads DataCite, OpenAIRE, Crossref, the XBsleepy daily agent-benchmarks digest, and the Benchmark-Radar.com corpus.
- Better dates. About 150 more benchmark release dates were recovered from the papers that introduced them.
- Search. The website ranks catalog search with the same algorithm as the CLI, tells full matches from partial candidates, and finds Chinese and Japanese source text.
- Leaderboard. It opens on the latest releases, the benchmark browser filters by scored model, and reported scores are listed below each chart.
- New benchmarks and scores. Logical-reasoning, negation, abstract-reasoning, scientific fact-checking and emotion benchmarks, the VBench family, and Seed2.0 and DeepSeek V4.1 model cards.
- A sturdier daily run. Sources are fetched in parallel, and a failed GPT briefing no longer costs the day its snapshot.
What's Changed
- Publish one finding per Zenodo archive, not one per archived file by @ktwu01 in #680
- Stop publishing a Hub template's card as a repo's own description by @ktwu01 in #679
- Add model cards for Seed2.0 and DeepSeek V4.1 (issue #607) by @jellyfishing2346 in #610
- Import Benchmark-Radar.com corpus as a catalog source by @Claire1217 in #693
- Match report affiliations written with non-breaking spaces by @ktwu01 in #713
- Restore search evaluation labels after the Claire Radar import by @ktwu01 in #714
- Search Chinese and Japanese source text without changing English tokens by @ktwu01 in #715
- Make Chinese source descriptions searchable in the catalog by @rudycelekli in #706
- docs: add permanent Discord group QR code by @ktwu01 in #741
- chore(deps): bump urllib3 from 2.7.0 to 2.8.0 by @dependabot[bot] in #744
- chore(deps): bump pyjwt from 2.13.0 to 2.15.0 by @dependabot[bot] in #743
- chore(deps): bump actions/deploy-pages from 5.0.0 to 5.0.1 by @dependabot[bot] in #736
- feat: derive a merged neuroscience science-domain tag for radar records by @Physics-Lee in #647
- docs: simplify branch rules by @ktwu01 in #750
- ci: skip tests for docs-only changes by @ktwu01 in #752
- docs: remove implemented superpowers plan and spec by @ktwu01 in #751
- fix(site): preserve search query in CLI handoff by @bigdu332 in #674
- Reject IPv4-mapped loopback project URLs by @dajiaohuang in #740
- feat(scores): add real reported scores for JointAVBench, OmniVideoBench, ASI-Bench and SWE-bench Science by @kawacukennedy in #666
- Add DataCite as a daily-discovery source by @lazizbekravshanov in #613
- Add OpenAIRE as a daily-discovery source by @lazizbekravshanov in #614
- chore: remove implemented source-neutral snapshot plan and spec by @ktwu01 in #756
- docs: add agent gotchas and working rules; remove stale catalog docs by @ktwu01 in #757
- docs: separate reports from dashboards; let docs-only PRs skip local CI by @ktwu01 in #755
- Fix false boilerplate rejection of same-owner task-result cards by @ktwu01 in #758
- Add GitHub Sponsors funding and README badge by @ktwu01 in #762
- Add IBM logo to researchers institutions strip (partial #735) by @ktwu01 in #804
- Stop non-vital failures from costing the daily radar its snapshot by @ktwu01 in #803
- Make Daily Radar faster: fetch sources in parallel lanes by @ktwu01 in #807
- Preserve distinct models when display slugs collide by @rudycelekli in #723
- Keep distinct Zenodo deposits when creators are unknown by @rudycelekli in #774
- ci: close a new issue or PR when its author has 10 open ones by @ktwu01 in #808
- feat(attention): collect the ranking signals behind the latest-releases leaderboard by @lazizbekravshanov in #616
- feat(site): open the leaderboard on the latest releases by @lazizbekravshanov in #617
- Register the VBench visual-generation family in the model-report registry by @lazizbekravshanov in #615
- Filter benchmark browser by scored model by @maxffarrell in #697
- List reported scores below benchmark charts by @maxffarrell in #698
- feat(related-work): append references and offer manuscript citation locations by @ktwu01 in #701
- Ask users to cite Benchmark Radar and let agents add the citation by @ktwu01 in #760
- Restore declared score scale for zero-observation series by @MorningStar0709 in #739
- Retain same-named Hugging Face repositories from different resource kinds by @rudycelekli in #773
- Fix Deploy Dashboard: stop slug-twin models from sharing a logo review ID by @ktwu01 in #814
- fix(report): retain generated questions on same-day reruns by @rudycelekli in #815
- docs: make CONTRIBUTING the single English entry point by @ktwu01 in #818
- Preserve successful arXiv queries through RSS fallback by @rudycelekli in #829
- Decode gzip HTTP bodies before parsing source feeds by @rudycelekli in #821
- docs: reject PRs that add technical burden without a real failure by @ktwu01 in #830
- Add logical-reasoning, negation, abstract-reasoning, scientific fact-checking and emotion benchmarks by @14H034160212 in #811
- docs: ask outcome questions before a PR and avoid unneeded burden by @ktwu01 in #833
- docs: link agent-pr-gate from contributor questions by @ktwu01 in #837
- Remove stale report artifacts and frozen-paper CI burden by @ktwu01 in #836
- Add XBsleepy daily-agent-benchmarks digest connector (issue #380, part 1/3) by @Jeffyaoliang in #632
- Recover 83 cited benchmark release dates and audit remaining gaps by @Jeffyaoliang in #834
- Preserve digest evidence across primary revisions by @Jeffyaoliang in #840
- docs: link Discord QR image to invite by @ktwu01 in #848
- Add Benchmark Radar reply skill with citation and Discord example by @ktwu01 in #849
- Cite CONTRIBUTING.md four questions in AGENTS.md by @ktwu01 in #856
- Point dataset links at the Hugging Face dataset by @ktwu01 in #850
- fix(sources): preserve unknown adoption counters across connectors by @Jeffyaoliang in #831
- Add maintainer review guide by @ktwu01 in #859
- Rank website catalog search with QueryService's algorithm by @14H034160212 in #857
- State the goal for keeping branches on the latest main by @ktwu01 in #860
- Add maintainer-local-clean skill by @ktwu01 in #870
New Contributors
- @jellyfishing2346 made their first contribution in #610
- @Claire1217 made their first contribution in #693
- @rudycelekli made their first contribution in #706
- @Physics-Lee made their first contribution in https://github.com/ktwu01/benchmark...
Benchmark Radar v0.12.0: published dataset, citable everywhere
Stable release from main at commit 990c132. CI passed for this commit: https://github.com/ktwu01/benchmark-radar/actions/runs/35503344189
Since v0.11.0 the project gained a published dataset, a complete set of citation pages, and a website that is easier to read.
The data is now a Hugging Face dataset. The benchmark catalog is published at ktwu01/benchmark-radar, and a scheduled job keeps it in step with the site. You can load it straight into your own code instead of downloading and unpacking the data zip. The export is checked before it is published, so a broken or empty catalog is rejected rather than shipped.
Citing the project. The technical report is on arXiv at 2609.11115, and every place that mentions the project now points at it: a Cite entry in the top menu, a Publications page, a CITATION.md file in the repository, and the machine-readable summary that automated tools read. The leaderboards and score sources the project builds on are credited there too.
A site that says what it is. The homepage now states its purpose in the first line. A new About page explains the project for someone arriving cold. Benchmark pages were rewritten around what a reader is actually looking for, paper links go to arXiv rather than to a redirect, and each row used to show its priority score five different ways at once. It now shows three: the number, the bar, and a link to how the number is worked out.
Clearer terms of use. The software stays under the MIT license. The technical report and the original writing moved to CC BY-NC-SA 4.0, which lets anyone share and adapt that material for non-commercial purposes as long as they give credit. The name is marked Benchmark Radar™ and contributors are named in the copyright line.
Fixes. Benchmark page addresses stay unique even when a benchmark's own name already looks like one. A tie for a benchmark's best reported score is broken the same way the leaderboard breaks it, so the two never disagree. Scores that arrive without a model identifier are kept instead of silently dropped. Links inside the site's feeds now resolve correctly from the feed's own address.
At this commit the catalog holds 1,284 benchmark records from four score sources (LLM Stats 687, OpenCompass 461, model reports 111, Artificial Analysis 25) and 58 days of daily snapshots covering 17,325 collected observations. A clean checkout built with the CI recipe passes all 1,386 tests.
This is a code and site release. The rolling cli-data release and the frozen paper data attached to v0.11.0 are unchanged and remain the right sources for those uses.
What's Changed
- Pin the technical paper to the v0.11.0 data release by @ktwu01 in #576
- feat: polish professional UI surfaces by @ktwu01 in #580
- Update restored paper while preserving the frozen v0.11.0 evidence by @ktwu01 in #577
- Require explicit request before touching main or the paper pointer by @ktwu01 in #584
- Add FrontierChallenge scores with benchmark-publisher provenance by @JunkaiWang-TheoPhy in #491
- Credit the score sources on the citation page by @ktwu01 in #597
- Add an Abstract section to both READMEs by @ktwu01 in #596
- Describe the score sources accurately in both READMEs by @ktwu01 in #595
- Check the frozen paper data in CI by @ktwu01 in #598
- Add a Cite entry to the top navigation bar by @ktwu01 in #602
- Cite the arXiv paper across all citation surfaces by @ktwu01 in #601
- Collapse APA and BibTeX blocks by default on the Cite dialog by @ktwu01 in #603
- Make the Cite card reader-first and add CITATION.md (#464) by @ktwu01 in #604
- Resolve relative first-party feed links against the feed URL by @ktwu01 in #606
- Fix the isPartOf structured-data warning and date benchmark pages individually by @ktwu01 in #609
- SEO: an About page, Publications aliases, and benchmark pages that answer the search by @ktwu01 in #612
- Cite the paper inside the query payload and llms.txt by @junjiezhou1122 in #618
- Mark the name as Benchmark Radar™ and add a contributors copyright line by @ktwu01 in #621
- Add a model card SOP and split AGENTS.md into reference guides by @ktwu01 in #619
- Add researchers-by-institution section to README by @ktwu01 in #622
- v0.11.0 fix: point paper links to arXiv by @ktwu01 in #642
- feat: add Hugging Face upvote CTA by @ktwu01 in #645
- fix: use a compact #1 Hugging Face laurel badge by @ktwu01 in #649
- feat(dataset): export Hugging Face dataset and automated sync (close #644) by @junjiezhou1122 in #657
- docs(agents): require starting from an up-to-date main by @ktwu01 in #672
- Break the saturation record-holder tie the way the frontier does by @winklemad in #662
- Keep assign_slugs unique against natural slugs, not just per-base by @winklemad in #664
New Contributors
- @winklemad made their first contribution in #662
Full Changelog: v0.11.0...v0.12.0
Benchmark Radar v0.11.0: full-catalog evidence and frozen paper data
Benchmark Radar v0.11.0 brings benchmark evidence into one catalog and freezes the data used by the technical paper.
- 1,283 source records across four sources, including 790 with numeric scores and 493 without. Of the unscored records, 464 still link to a paper, repository, or dataset.
- The shared catalog keeps model reports, OpenCompass Hub, Artificial Analysis, and LLM Stats under one evidence contract. Records remain separate by source; missing measurements remain visible in discovery.
- Benchmark Frontier uses reported scores, benchmark dates, and measured model or document counts. Saturation provides benchmark browsing and full score histories.
The paper's discovery cutoff is 2026-09-07: 11,068 observations and 6,546 artifacts across 46 dated snapshots. Registry inputs retain their recorded collection dates. All paper data is frozen to this release; later website updates and the rolling cli-data release are outside its scope.
The release pins software commit 8f46bbf. The paper revision records the same release and cutoff.
Assets:
benchmark-radar-paper-data-v0.11.0.zip: the exact 1,332 audited input files—catalog index and detail shards, model registry, discovery JSON, and dated snapshots—plusrelease-data.jsonwith per-file hashes and provenance.benchmark-radar-paper-v0.11.0.pdf: the rebuilt paper citing this release.SHA256SUMS: checksums for both assets.
The frozen site/data/radar.json SHA-256 is 029dc413770f39cad1fcd1c3ec2abeeea214544e3c909e2772b1fe2d9c52c4b9. Every input matches the existing paper audit. The clean release checkout passes all six CI steps and all 1,314 tests; the paper and its independently compiled submission package also build successfully. The v0.9.0 Zenodo deposit is unchanged.
stable one
Stable release from main at commit 76a6180. Includes the daily brief blog, CLI setup and citation pages, broader discovery, and search and dashboard fixes shipped since v0.9.0. CI passed for this commit: https://github.com/ktwu01/benchmark-radar/actions/runs/34023798632
What's Changed
- Fix Pages publishing and retry unsafe zh translations by @ktwu01 in #427
- fix: use saturation chart for social image by @ktwu01 in #428
- Fix contributor image workflow for protected main by @ktwu01 in #429
- Fix broken contributor avatars and the failing contributors workflow by @ktwu01 in #431
- [12 points] Add local-first benchmark query CLI, managed data sync, and Agent Skill by @junjiezhou1122 in #426
- docs(readme): simplify intro source count and move internal docs to foldable section by @ktwu01 in #435
- docs: cite technical report and simplify local setup by @ktwu01 in #441
- SEO: per-benchmark pages, absolute internal links, and structured data by @ktwu01 in #442
- fix(seo): correct the benchmark page interactive link by @ktwu01 in #443
- docs(readme): thank Xiaopai Liu, move Acknowledgements last, flag CLI version by @ktwu01 in #444
- feat: publish contributor score ledger by @ktwu01 in #449
- fix: score only contributor-completable work by @ktwu01 in #450
- fix: raise collaborator threshold to 12 points by @ktwu01 in #451
- docs: link scored paper research issues by @ktwu01 in #458
- [3 points] fix(site): fold verbose privacy notice behind a disclosure by @JiayuuWang in #463
- Wire reviewed llm-stats identity into catalog outputs by @ktwu01 in #466
- fix: make lexical retrieval evidence agent-judged by @junjiezhou1122 in #459
- [3 points] feat(model_cards): 新增腾讯 Hy4 preview 模型卡(37 个分数) by @JiayuuWang in #472
- chore: update contributors image by @github-actions[bot] in #474
- feat(site): add a citation pop-out at /#cite by @ktwu01 in #480
- feat(site): add a CLI setup sheet at /#cli by @ktwu01 in #482
- fix(site): search all dates by default by @ktwu01 in #484
- chore(deps): bump actions/checkout from 4 to 7 by @dependabot[bot] in #485
- chore(deps): bump actions/setup-python from 5 to 7 by @dependabot[bot] in #486
- docs: add Junjie Zhou to the technical report draft by @junjiezhou1122 in #489
- Make singular daily briefing sources directly clickable by @JunkaiWang-TheoPhy in #494
- Preserve Radar UI while adding SEO pages and an evidence blog by @ktwu01 in #476
- chore: update contributors image by @github-actions[bot] in #502
- ci: push the contributors image straight to main by @ktwu01 in #509
- [3 points] End every query CLI round with a citation reminder by @junjiezhou1122 in #507
- [3 points] Fix Today rendering empty after closing a utility sheet or pressing Back by @junjiezhou1122 in #505
- Clarify Agent Skill and CLI setup by @ktwu01 in #517
- Simplify dashboard navigation and repository badges by @ktwu01 in #525
- Add a daily brief blog at /blog/ by @ktwu01 in #521
- Reduce local CLI setup to the install command by @ktwu01 in #519
- fix(blog): match dashboard chrome and keep untranslated bodies visible by @junjiezhou1122 in #526
- ci: publish contributor scores with Radar App by @ktwu01 in #535
- UI: make the shared chrome simpler by @ktwu01 in #536
- Fix citation authors and stale UI names by @ktwu01 in #537
- feat: consolidate traction social checklist by @ktwu01 in #538
- feat: expand Bilibili and US social distribution by @ktwu01 in #539
- Restore discovery for RSI-Exam releases by @JunkaiWang-TheoPhy in #495
- feat: add Crossref discovery source by @ktwu01 in #546
- docs: add Jiayu Wang real use case and byline to report draft by @JiayuuWang in #542
- feat: implement data contract and ranking engine for recent releases (phase 1, #530) by @junjiezhou1122 in #531
- [12 points] Audit report finding 6.2: which near-ceiling scores survive protocol controls? by @JunkaiWang-TheoPhy in #514
- fix: include sunblaze-ucb in organization discovery by @pengqianhan in #556
New Contributors
- @JiayuuWang made their first contribution in #463
- @github-actions[bot] made their first contribution in #474
- @JunkaiWang-TheoPhy made their first contribution in #494
- @pengqianhan made their first contribution in #556
Full Changelog: v0.9.0...v0.10.0
Benchmark Radar v0.9.0: broader discovery, sharper signal
Benchmark Radar v0.9.0 finds more benchmark releases, makes ranking and data
failures harder to miss, and gives readers a clearer daily picture of what
changed.
Broader discovery
- Artificial Analysis now joins LLM Stats and OpenCompass in the normalized
benchmark catalog, adding another independent source of models and scores. - Release discovery no longer depends on a repository saying “benchmark” in
its metadata, closing a blind spot that hid relevant GitHub releases. - arXiv recovery, four newly released benchmarks, and the GLM-5.3-Flash model
card expand the evidence readers can search and compare.
More trustworthy signal
- Ranking v5 fixes release-adoption and recency behavior so recent, credible
benchmark activity is less likely to be buried. - Silent pipeline data errors now fail visibly instead of producing plausible
but incomplete output. - Source-specific score scales, duplicate-record handling, readable release
titles, and score-chart citation fixes make the dashboard easier to audit.
Clearer for readers
- Daily briefings can surface up to ten useful insights and follow stronger
plain-language rules in English and Chinese. - The README now shows the Today and Leaderboard experiences directly, using
SWE-bench Verified to demonstrate score saturation over time. - The audience-facing Daily Ledger is folded into a small developer checker,
keeping implementation diagnostics out of the main reading flow. - Canonicals, feeds, robots, sitemaps, and documentation now consistently use
benchmark-radar.org, with a practical search-indexing guide for maintainers.
Verification
- 986 tests pass in a clean checkout.
- Ruff lint and formatting checks pass.
- External normalization and classification complete successfully from a
checkout with no generated artifacts. - The locked environment installs Benchmark Radar as version 0.9.0.
Full changelog: v0.8.0...v0.9.0
Benchmark Radar CLI data
Checksummed data used by benchmark-radar init and sync.
Benchmark Radar v0.8.0: faster, citable, bilingual
Benchmark Radar v0.8.0 makes the dashboard faster to open, easier to cite, and clearer in both English and Chinese.
Faster first load
- The browser starts from a compact bootstrap payload containing the latest day, aggregate corpus counts, curated leaderboard data, and score progression.
- History-heavy views still upgrade lazily to the complete public dataset.
- Today results use explicit pagination, while the complete machine-readable dataset remains freely downloadable.
Better citation and discovery
- The README now includes BibTeX guidance, an LLM Stats acknowledgement, and clearer language navigation.
- The homepage adds a cite action plus Highwire and cite-as metadata for machine-readable attribution.
- Navigation uses crawlable links, the document has a single H1, and social titles and internal metadata are aligned.
Clearer interface
- Missing Chinese strings were added for dynamic interface content.
- Heading hierarchy, result counts, sharing controls, and footer layout were tightened.
- The English and Chinese README language controls are consistently left-aligned.
Verification
- 890 tests pass, with 6 expected skips, in a clean checkout.
- Ruff lint and formatting checks pass.
- The classification build completes successfully.
- Main-branch GitHub CI passes on the tagged commit.
Benchmark Radar v0.7.0: discoverable, clearer views
Benchmark Radar v0.7.0 makes the published dashboard easier to discover, scan, and navigate.
Technical SEO that matches the deployed site
- A deterministic sitemap is generated from snapshot history and published at the site root.
- robots.txt advertises the live sitemap.
- Today, Leaderboard, Trends, and Explore receive distinct titles, descriptions, and clean canonical URLs.
- Open Graph and Twitter metadata use the production custom domain.
- WebSite/SearchAction and Dataset JSON-LD describe the searchable leaderboard and downloadable corpus.
Clearer dashboard views
- Today loads records a page at a time and routes data requests to the contact path.
- The leaderboard now has explicit ranking columns, proportional bars, and a lighter methodology disclosure.
- The saturation view reveals in reading order, and the leaderboard heading is shorter with a stable information control.
- Benchmark detail content is available in Chinese.
Better external identity coverage
Twenty-one OpenCompass benchmark identities are now resolved into matching llm-stats records, with stricter validation and documented catalog behavior.
Verification
- 891 tests pass locally and in post-merge CI.
- Ruff lint and formatting checks pass.
- The production Pages build and deployment pass on the tagged commit.
- The live robots.txt, sitemap.xml, canonical metadata, social metadata, and structured data were fetched and verified before release.
Benchmark Radar v0.6.0: score maps at scale
Benchmark Radar now turns a benchmark catalog into a score-over-time explorer at useful scale.
5,614 score observations
The published data now carries 5,544 crawled score observations plus 70 observations read from cited model documents. The searchable catalog contains 1,148 benchmark records, with per-benchmark shards that keep source identity, provenance, openness, artifacts, and score rows inspectable.
Score maps for 700 benchmark entries
The score-over-time picker now reaches 679 crawled benchmarks with reported scores and 21 benchmarks in the curated registry. The two evidence layers stay visibly separate: curated points come from cited model cards and technical reports, while crawled points retain their aggregator provenance.
Charts place scores on model announcement dates, label models before interaction, expose undated rows instead of silently drawing them, and preserve direct links through search, selection, Back, and repaired stale URLs. Era filters include an explicit unknown-date path.
Search the whole benchmark catalog
Name search now covers scored and unscored benchmarks across the registry rather than only the daily feed. Results state when the catalog is still loading, when matches were omitted, and when a benchmark exists but has no collected observation for the selected day.
One model registry
A unified published registry now tracks 355 models across both evidence layers: 16 curated-only, 321 crawled-only, and 18 present in both. Charts, logo review, and model counts use that shared structure. Brand coverage also expanded with 19 additional upstream marks.
More reliable evidence and clearer failure states
- Nine verified first-party vendor feeds were added, with reviewed gaps recorded for vendors without one.
- Broad publisher feeds reject unrelated posts before they enter scored evidence.
- OpenAI rate-limit errors now surface quota details.
- The dashboard distinguishes fresh, stale, and degraded data with plain-language recovery actions.
- Reporting terminology, empty states, chart explanations, and issue intake were simplified around what a reader can verify.
Verification
- 870 tests pass.
- Ruff lint and format checks pass.
- CI and the dashboard deployment pass on the tagged commit.
Benchmark Radar v0.5.0: normalization
One organization now has one name, and every brand mark on the site is a real one.
One name per organization
The crawled aggregator spells an organization however its own catalog does, and that spelling was not always the one the curated registry used for the same company. Nothing normalized the two, so four companies existed as two separate identities each, splitting 2,593 score rows:
| vendor name | canonical | rows |
|---|---|---|
Google DeepMind (curated) |
Google |
611 crawled + 54 curated |
Alibaba Cloud / Qwen Team |
Qwen |
1,652 |
Mistral AI |
Mistral |
199 |
Zhipu AI |
Z.ai |
131 |
To every count, color and brand glyph these were different organizations, so the two largest crawled publishers drew no brand mark at all: not because no mark existed, but because the key did not match.
Each merge was confirmed by reading the model lines on both sides rather than by name similarity. The vendor's Alibaba Cloud / Qwen Team rows are Qwen models; its Zhipu AI rows are GLM models. Organizations that merely sound related stay separate: Microsoft publishes Phi and is not OpenAI, OpenBMB publishes MiniCPM and has no curated twin. 29 of the 33 crawled publishers are distinct companies and were left alone.
Google is canonical over the curated layer's Google DeepMind, on the reasoning that the releasing entity names the organization. That runs opposite to the other three merges, so the curated YAML was rewritten to match (43 organization and 7 reported_by attributions) rather than aliased in the normalizer. The reported_by rename matters as much as the attribution one: those seven rows are Google citing competitors' scores in its own Gemini 2.5 report, and leaving them would have split the entity back apart in the "cited by" field.
Normalization happens where the vendor string enters the pipeline, so the browser only ever receives canonical names and a test asserts no alias reaches a shard.
Real brand marks
Two paths were wrong on every chart that drew them.
OpenAI was a six-petal rosette drawn by hand, because simple-icons does not carry the mark. Lobe Icons does, under MIT, and the model-family marks already came from there. Every GPT row had been drawing a stand-in for no reason.
Meta was byte-identical to simple-icons for 395 characters and invented for the next 1,200, including a duplicated second lobe. It rendered as a malformed blob at every size.
Both now come from upstream verbatim. Every mark is pinned to its source URL and a digest, verified offline on each test run, so a hand-edited brand path fails the suite. xAI and Z.ai have no licensed upstream mark and are drawn in this repo; they are recorded as declared placeholders, because a hand-drawn mark is fine and a hand-drawn mark presenting itself as a brand mark is what went wrong.
The charts respond to hover and click again
Hover and click both looked dead on the curated score points. Neither handler was broken: they wrote the card into a hidden element.
frontierTooltip() hardcoded one id and is mounted twice, once by the curated chart and once per crawled source block. getElementById returns the first match in document order, and #frontier-external sits above #frontier-chart, so all eight lookups resolved to the crawled panel's tooltip. Hover and click shared that lookup, which is why both symptoms appeared together.
The container made it permanent: leaving a crawled record set hidden but never emptied the panel, so one visit left its DOM in the document for the rest of the session. hidden stops painting; it does not remove a node from getElementById, from a document-wide query, or from the tab order.
Each chart now owns its tooltip, every call site resolves it from the point's own chart, and leaving a crawled record empties its panel.
A page where a wrong logo is visible
Three marks shipped wrong and stayed wrong because nothing showed them side by side at a size where a bad path is visible, and a path is not something a reader reviews in a diff.
/logos.html renders every organization and model-family mark through the real resolvers the charts import, at true chart size and enlarged, next to the name the code resolved and the color it pairs with. Every card carries a permanent ID, so review feedback survives a rebuild: O-07 → Anthropic points at the same card next month.
Current state: 68 marks, 25 without a brand mark, 0 with suspect geometry.
Notes
- 823 tests pass, up from 812. Both fixed regressions were confirmed to fail the new tests before the fix.
- 25 organizations still draw a generic spark because no licensed mark was sourced for them. Tracked in #266.
Refs #261