Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-08-01 20:26 UTC

robertknight / rten

ONNX neural network inference engine

RustЛіцензію не виявлено★ 329 зірок⑂ 24 форкиз серп. 2022 р.Переглянути на GitHub ↗

robertknight/rten має індекс здоров’я 69 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (88/100), найнижчий — Community & Adoption (55/100). Останнє оновлення — сьогодні. Більшість нещодавньої роботи виконує один учасник.

69
загалом / 100
Помірний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

69
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

Robert KnightОсобистий обліковий запис
451 підписник177 публічних репозиторіївз бер. 2008 р.Shortest Path Software

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
crates.iorten0.25.0233 184320 днів тому
crates.iorten-cli0.25.037270 днів тому
crates.iorten-base0.25.0232 22360 днів тому
crates.iorten-gemm0.25.0230 30760 днів тому
crates.iorten-onnx0.25.0225 11630 днів тому
crates.iorten-simd0.25.0234 638160 днів тому
crates.iorten-text0.25.0579210 днів тому

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

88Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 0 дн. тому
30.5/36Ритм комітів — 44/52 тижнів із комітами
18/18Обсяг комітів — 1 245 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 26 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year1 245
human_commit_share1
days_since_last_push0
active_weeks_last_year44
Як обчислюється оцінка
16.2/27Випускає релізи — 11 тегів версій (без релізів GitHub)
36/36Свіжість релізів — останній реліз 0 дн. тому
19.8/27Ритм релізів — реліз кожні ~50 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count11
latest_release_tagv0.25.0
releases_from_tagsтак
days_since_latest_release0
mean_days_between_releases50
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

55Помірний · 18% загального індексу
Як обчислюється оцінка
40.8/60Зірки — 329 зірок
11.3/25Форки — 24 форків
1.7/15Спостерігачі — 3 спостерігачів
Використані вхідні дані
forks24
stars329
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
0/22.5Ліцензія — файлу ліцензії не виявлено
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseні
has_contributingні
has_issue_templateні
has_code_of_conductні
has_pull_request_templateні
Як обчислюється оцінка
80/80Щомісячні завантаження — 1 156 084 завантажень/місяць у crates
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagesrten, rten-cli, rten-base, rten-gemm, rten-onnx, rten-simd, rten-text
dependents
ecosystemscrates
total_downloads5 131 549
monthly_downloads1 156 084
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

63Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0.1/22.5Розподіл комітів — головний контриб’ютор — автор 100% комітів
6.8/13.5Широта контриб’юторів — 5 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 6 contributing companies or organizations
Використані вхідні дані
bus_factor1
contributors_sampled5
top_contributor_share0,995
Як обчислюється оцінка
33.7/46.8Вирішення issue — закрито 72% issue
37.8/38.3Прийняття PR — злито 1 221/1 236 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 0/17 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs1 221
open_issues42
closed_issues108
issue_closed_ratio0,72
closed_unmerged_prs15
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
19.1/25Охоплення власника — 451 підписників у robertknight
25/25Послужний список — 177 публічних репозиторіїв, вік облікового запису ~18 р.
Використані вхідні дані
followers451
owner_typeUser
is_verified
owner_loginrobertknight
public_repos177
account_age_days6 721
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 7 пакет(ів) у crates
35/35Свіжість публікацій — остання публікація 0 дн. тому
20/20Історія версій — 32 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesrten, rten-cli, rten-base, rten-gemm, rten-onnx, rten-simd, rten-text
ecosystemscrates
any_deprecatedні
min_days_since_publish0

Інженерна якість

Чи наявні базові інженерні практики та документація?

75Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 1 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 12 out of 12 merged PRs checked by a CI test -- score normalized to 10
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні

Документація

85Відмінний
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
10/10Теми — 3 тем
10/10Wiki
Використані вхідні дані
topicsmachine-learning, onnx, rust
has_wikiтак
homepage
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

59Помірний · 16% загального індексу

Стан безпеки

51Помірний
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 12 out of 12 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/17 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 6 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Ліцензія — license file not detected
7.5/7.5Maintained — 30 commit(s) and 26 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
4.5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
5.2/7.5Vulnerabilities — 3 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5,1
Виключено з оцінювання (немає даних або не застосовно): packaging, signed_releases. Залишкові ваги перенормовано.
Як обчислюється оцінка
26.6/35Прямі залежності без відомих сповіщень — уражено 1: memmap2 0.9.10 (unknown)
0/25Непрямі залежності без відомих сповіщень — транзитивний набір не відокремлюється від залежностей розробки й тестування в цьому обсязі
40/40Немає задавнених сповіщень — жодне сповіщення не є публічним довше за 90 дн.
Використані вхідні дані
sourceosv
advisories3
affected_packages3
assessed_packages128
unassessed_packages22
affected_by_severityhigh 1, unknown 2
direct_affected_packages1
Виключено з оцінювання (немає даних або не застосовно): Непрямі залежності без відомих сповіщень. Залишкові ваги перенормовано. Звірено 128 резолвлених залежностей із OSV. 22 не вдалося оцінити — немає резолвленої версії, непідтримувана екосистема або поза межами звітованого переліку пакетів. Цей репозиторій не публікує пакета, який резолвить індекс, тож натомість оцінено граф залежностей репозиторію. Цей граф змішує закріплені версії для розробки й тестування зі справді постачаними залежностями, тож оцінюються лише задекларовані runtime-залежності; транзитивні знахідки подаються як контекст і в оцінку не входять. Досяжність не аналізується.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

67Помірний · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 97 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,97
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
18/18Розгортання однією командою — Makefile, js-examples/image-classification/Makefile, rten-convert/Makefile
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — Rust (статично типізована)
10/10Відтворюване середовище — lockfile
10/10Підтверджена практика роботи з агентами — 46 з останніх 100 комітів створено агентом або з його зазначенням
5/8Автоматизоване супроводження — автоматизацію залежностей налаштовано, але у вибірці комітів її не видно
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilesCargo.lock, package-lock.json
has_dockerfileні
typed_languageтак
bootstrap_filesMakefile, js-examples/image-classification/Makefile, rten-convert/Makefile
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0,46
toolchain_manifestsCargo.toml, rten-base/Cargo.toml, rten-bench/Cargo.toml, rten-cli/Cargo.toml, rten-examples/Cargo.toml, rten-gemm/Cargo.toml, rten-generate/Cargo.toml, rten-imageio/Cargo.toml, rten-imageproc/Cargo.toml, rten-model-file/Cargo.toml, rten-onnx/Cargo.toml, rten-parallel/Cargo.toml, rten-serialize/Cargo.toml, rten-shape-inference/Cargo.toml, rten-simd/Cargo.toml, rten-tensor/Cargo.toml, rten-testing/Cargo.toml, rten-text/Cargo.toml, rten-vecmath/Cargo.toml
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Rust (статично типізована)
52.4/55Керовані розміри файлів — 14/300 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageRust
largest_source_bytes472 621
source_files_sampled300
oversized_source_files14

Ключові факти

329зірок GitHub
5контриб'юторів
1 245комітів за останні 12 місяців
0днів від останнього пушу
11релізів
1бас-фактор
42відкритих issue
crates.io, npm, PyPIпакетних екосистем

Попередження щодо збору даних

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • Could not fetch npm package 'rten' from its registry
  • deps.dev does not index crates:rten@0.25.0; advisories assessed against the repository dependency graph instead

Докладніше

Історія зірок і форків 0 ★ / 24 ⇿
0Зірки
24Форки
10Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

048121620242422024-042025-052026-07
Мажорні 0Мінорні 8Патчі 2

Кожна точка охоплює 3 днів.

OpenSSF Scorecard 5.1 / 10
5.1сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-08-01 20:26 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests12 out of 12 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/17 approved changesets -- score normalized to 0
10Contributorsproject has 6 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
10Maintained30 commit(s) and 26 issue activity found in the last 90 days -- score normalized to 10
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
9Security-Policysecurity policy file detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
7Vulnerabilities3 existing vulnerabilities detected
Прямі залежності 89
РеєстрПакетОбмеження версіїМаніфест
crates.iofastrandCargo.toml
crates.iofastrand-contribCargo.toml
crates.ioflatbuffersCargo.toml
crates.iomemmap20.9.4Cargo.toml
crates.ionum_cpus1.16.0Cargo.toml
crates.iorayonCargo.toml
crates.iorten-base0.25.0Cargo.toml
crates.iorten-gemm0.25.0Cargo.toml
crates.iorten-model-file0.25.0Cargo.toml
crates.iorten-onnx0.25.0Cargo.toml
crates.iorten-parallel0.25.0Cargo.toml
crates.iorten-shape-inference0.25.0Cargo.toml
crates.iorten-simd0.25.0Cargo.toml
crates.iorten-tensor0.25.0Cargo.toml
crates.iorten-vecmath0.25.0Cargo.toml
crates.iorustc-hashCargo.toml
crates.iorustfftCargo.toml
crates.iosmallvecCargo.toml
crates.iotypeidCargo.toml
crates.ioarghrten-cli/Cargo.toml
crates.iofastrandrten-cli/Cargo.toml
crates.iorten0.25.0rten-cli/Cargo.toml
crates.iorten-base0.25.0rten-cli/Cargo.toml
crates.iorten-serialize0.25.0rten-cli/Cargo.toml
crates.iorten-tensor0.25.0rten-cli/Cargo.toml
PyPIflatbuffersrten-convert/pyproject.toml
PyPIonnxrten-convert/pyproject.toml
PyPInumpyrten-convert/pyproject.toml
crates.ioarghrten-examples/Cargo.toml
crates.iofastrandrten-examples/Cargo.toml
crates.iohound3.5.1rten-examples/Cargo.toml
crates.ioimagerten-examples/Cargo.toml
crates.iopng0.18rten-examples/Cargo.toml
crates.ioserderten-examples/Cargo.toml
crates.ioserde_deriverten-examples/Cargo.toml
crates.ioserde_jsonrten-examples/Cargo.toml
crates.iorten0.25.0rten-examples/Cargo.toml
crates.iorten-generaterten-examples/Cargo.toml
crates.iorten-imageiorten-examples/Cargo.toml
crates.iorten-imageprocrten-examples/Cargo.toml
crates.iorten-tensorrten-examples/Cargo.toml
crates.iorten-textrten-examples/Cargo.toml
crates.iorustfftrten-examples/Cargo.toml
crates.iosmallvecrten-examples/Cargo.toml
crates.iorayonrten-gemm/Cargo.toml
crates.iorten-base0.25.0rten-gemm/Cargo.toml
crates.iorten-parallel0.25.0rten-gemm/Cargo.toml
crates.iorten-simd0.25.0rten-gemm/Cargo.toml
crates.iorten-tensor0.25.0rten-gemm/Cargo.toml
crates.iofastrandrten-generate/Cargo.toml
crates.iorten0.25.0rten-generate/Cargo.toml
crates.iorten-base0.25.0rten-generate/Cargo.toml
crates.iorten-simd0.25.0rten-generate/Cargo.toml
crates.iorten-text0.25.0rten-generate/Cargo.toml
crates.iorten-tensor0.25.0rten-generate/Cargo.toml
crates.iorten-vecmath0.25.0rten-generate/Cargo.toml
crates.iopng0.18rten-imageio/Cargo.toml
crates.iorten-base0.25.0rten-imageio/Cargo.toml
crates.iorten-tensor0.25.0rten-imageio/Cargo.toml
crates.ioimagerten-imageio/Cargo.toml
crates.iorten-tensor0.25.0rten-imageproc/Cargo.toml
crates.ioserderten-imageproc/Cargo.toml
crates.ioserde_deriverten-imageproc/Cargo.toml
crates.ioflatbuffersrten-model-file/Cargo.toml
crates.iorten-base0.25.0rten-model-file/Cargo.toml
crates.iorayonrten-parallel/Cargo.toml
crates.iorten-base0.25.0rten-parallel/Cargo.toml
crates.iorten-base0.25.0rten-serialize/Cargo.toml
crates.iorten-tensor0.25.0rten-serialize/Cargo.toml
crates.iosafetensors0.8.0rten-serialize/Cargo.toml
crates.iozip8.6.0rten-serialize/Cargo.toml
crates.iorten-tensor0.25.0rten-shape-inference/Cargo.toml
crates.iosmallvecrten-shape-inference/Cargo.toml
crates.iorayonrten-tensor/Cargo.toml
crates.iorten-base0.25.0rten-tensor/Cargo.toml
crates.iorten-parallel0.25.0rten-tensor/Cargo.toml
crates.ioserderten-tensor/Cargo.toml
crates.iosmallvecrten-tensor/Cargo.toml
crates.iotypeidrten-tensor/Cargo.toml
crates.iofancy-regex0.18.0rten-text/Cargo.toml
crates.iorten-base0.25.0rten-text/Cargo.toml
crates.iorustc-hashrten-text/Cargo.toml
crates.ioserderten-text/Cargo.toml
crates.ioserde_deriverten-text/Cargo.toml
crates.ioserde_jsonrten-text/Cargo.toml
crates.iounicode_categories0.1.1rten-text/Cargo.toml
crates.iounicode-normalization0.1.22rten-text/Cargo.toml
crates.iorten-base0.25.0rten-vecmath/Cargo.toml
crates.iorten-simd0.25.0rten-vecmath/Cargo.toml
Усі залежності 150

Повний розв'язаний набір залежностей із графа залежностей GitHub: 40 прямих і 110 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.

РеєстрПакетВерсіяЗв'язок
crates.ioargh0.1.19пряма
crates.iofancy-regexпряма
crates.iofancy-regex0.18.0пряма
crates.iofastrand2.3.0пряма
crates.iofastrand-contrib0.1.0пряма
crates.ioflatbuffers24.12.23пряма
crates.iohoundпряма
crates.iohound3.5.1пряма
crates.ioimage0.25.10пряма
crates.iomemmap20.9.10пряма
crates.ionum_cpus1.17.0пряма
crates.iopngпряма
crates.iopng0.18.1пряма
crates.iorayon1.12.0пряма
crates.iortenпряма
crates.iorten-baseпряма
crates.iorten-parallelпряма
crates.iorten-serializeпряма
crates.iorten-simdпряма
crates.iorten-tensorпряма
crates.iorten-textпряма
crates.iorten-vecmathпряма
crates.iorustc-hash2.1.2пряма
crates.iorustfft6.4.1пряма
crates.iosafetensorsпряма
crates.iosafetensors0.8.0пряма
crates.ioserde1.0.228пряма
crates.ioserde_derive1.0.228пряма
crates.ioserde_json1.0.150пряма
crates.iosmallvec1.15.2пряма
crates.iotypeid1.0.3пряма
crates.iounicode-normalizationпряма
crates.iounicode-normalization0.1.25пряма
crates.iounicode_categoriesпряма
crates.iounicode_categories0.1.1пряма
crates.iozipпряма
crates.iozip8.6.0пряма
PyPIflatbuffersпряма
PyPInumpyпряма
PyPIonnxпряма
crates.ioadler22.0.1непряма
crates.ioaho-corasick1.1.4непряма
crates.ioallocator-api20.2.21непряма
crates.ioargh_derive0.1.19непряма
crates.ioargh_shared0.1.19непряма
crates.ioautocfg1.5.0непряма
crates.iobit-set0.8.0непряма
crates.iobit-vec0.8.0непряма
crates.iobitflags1.3.2непряма
crates.iobitflags2.10.0непряма
crates.iobumpalo3.19.0непряма
crates.iobytemuck1.24.0непряма
crates.iobyteorder-lite0.1.0непряма
crates.iocfg-if1.0.4непряма
crates.iocrc32fast1.5.0непряма
crates.iocrossbeam-deque0.8.6непряма
crates.iocrossbeam-epoch0.9.18непряма
crates.iocrossbeam-utils0.8.21непряма
crates.ioeither1.15.0непряма
crates.ioequivalent1.0.2непряма
crates.iofdeflate0.3.7непряма
crates.ioflate21.1.5непряма
crates.iofoldhash0.2.0непряма
crates.iohashbrown0.16.1непряма
crates.iohashbrown0.17.1непряма
crates.iohermit-abi0.5.2непряма
crates.ioimage-webp0.2.4непряма
crates.ioindexmap2.14.0непряма
crates.ioitoa1.0.15непряма
crates.iolibc0.2.177непряма
crates.iolibm0.2.16непряма
crates.iolibz-rs-sys0.5.5непряма
crates.iolog0.4.33непряма
crates.iomemchr2.7.6непряма
crates.iominiz_oxide0.8.9непряма
crates.iomoxcms0.8.1непряма
crates.ionum-complex0.4.6непряма
crates.ionum-integer0.1.46непряма
crates.ionum-traits0.2.19непряма
crates.ioonce_cell1.21.3непряма
crates.ioprimal-check0.3.4непряма
crates.ioproc-macro21.0.103непряма
crates.iopxfm0.1.25непряма
crates.ioquick-error2.0.1непряма
crates.ioquote1.0.42непряма
crates.iorayon-core1.13.0непряма
crates.ioregex-automata0.4.14непряма
crates.ioregex-syntax0.8.8непряма
crates.iorustc_version0.4.1непряма
crates.iorustversion1.0.22непряма
crates.iosemver1.0.27непряма
crates.ioserde_core1.0.228непряма
crates.iosimd-adler320.3.7непряма
crates.iostrength_reduce0.2.4непряма
crates.iosyn2.0.110непряма
crates.iotinyvec1.10.0непряма
crates.iotinyvec_macros0.1.1непряма
crates.iotranspose0.2.3непряма
crates.iotyped-path0.12.3непряма
crates.iounicode-ident1.0.22непряма
crates.iowasm-bindgen0.2.105непряма
crates.iowasm-bindgen-macro0.2.105непряма
crates.iowasm-bindgen-macro-support0.2.105непряма
crates.iowasm-bindgen-shared0.2.105непряма
crates.iozlib-rs0.5.5непряма
crates.iozmij1.0.21непряма
crates.iozopfli0.8.3непряма
crates.iozune-core0.5.0непряма
crates.iozune-jpeg0.5.5непряма
npm../..1.0.0непряма
npm@emnapi/runtime0.44.0непряма
npm@img/sharp-darwin-arm640.33.1непряма
npm@img/sharp-darwin-x640.33.1непряма
npm@img/sharp-libvips-darwin-arm641.0.0непряма
npm@img/sharp-libvips-darwin-x641.0.0непряма
npm@img/sharp-libvips-linux-arm1.0.0непряма
npm@img/sharp-libvips-linux-arm641.0.0непряма
npm@img/sharp-libvips-linux-s390x1.0.0непряма
npm@img/sharp-libvips-linux-x641.0.0непряма
npm@img/sharp-libvips-linuxmusl-arm641.0.0непряма
npm@img/sharp-libvips-linuxmusl-x641.0.0непряма
npm@img/sharp-linux-arm0.33.1непряма
npm@img/sharp-linux-arm640.33.1непряма
npm@img/sharp-linux-s390x0.33.1непряма
npm@img/sharp-linux-x640.33.1непряма
npm@img/sharp-linuxmusl-arm640.33.1непряма
npm@img/sharp-linuxmusl-x640.33.1непряма
npm@img/sharp-wasm320.33.1непряма
npm@img/sharp-win32-ia320.33.1непряма
npm@img/sharp-win32-x640.33.1непряма
npmcolor4.2.3непряма
npmcolor-convert2.0.1непряма
npmcolor-name1.1.4непряма
npmcolor-string1.9.1непряма
npmdetect-libc2.0.2непряма
npmis-arrayish0.3.2непряма
npmlru-cache6.0.0непряма
npmsemver7.5.4непряма
npmsharp0.33.1непряма
npmsimple-swizzle0.2.2непряма
npmtslib2.6.2непряма
npmyallist4.0.0непряма
PyPImypy1.10.0непряма
PyPIonnxruntimeнепряма
PyPIpillowнепряма
PyPIruff0.4.3непряма
PyPItimmнепряма
PyPItokenizers0.15.0непряма
PyPItorchнепряма
PyPIwikipedia-api0.6.0непряма
Сповіщення про залежності 3

Цей репозиторій не публікує пакета, який розпізнає індекс, тож оцінено його власний граф залежностей — 128 пакетів, серед яких є й піниї розробки та тестування, що ніколи не постачаються: 3 мають відомі сповіщення, з них 1 прямі. 22 не вдалося оцінити — немає резолвленої версії, непідтримувана екосистема або поза наведеним переліком пакетів.

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
sharp0.33.1непрямависока10.35.0
memmap20.9.10пряманевідома10.9.11
crossbeam-epoch0.9.18непряманевідома10.9.20

Сповіщення означає, що версія, записана в графі залежностей, потрапляє в уражений діапазон. Досяжність не аналізується, а граф містить піниї розробки й тестування — знахідка може стосуватися інструментів, а не поставленого коду.

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "machine-learning",
        "onnx",
        "rust"
      ],
      "is_fork": false,
      "size_kb": 15320,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "HTML": 673,
        "Rust": 4349121,
        "Shell": 958,
        "Python": 129732,
        "Makefile": 4181,
        "JavaScript": 44450
      },
      "pushed_at": "2026-08-01T20:20:12Z",
      "created_at": "2022-08-31T20:43:45Z",
      "owner_type": "User",
      "updated_at": "2026-08-01T20:10:57Z",
      "description": "ONNX neural network inference engine",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Rust",
      "significant_languages": [
        "Rust"
      ]
    },
    "owner": {
      "blog": "https://robertknight.me.uk",
      "name": "Robert Knight",
      "type": "User",
      "login": "robertknight",
      "company": "Shortest Path Software",
      "location": "London, United Kingdom",
      "followers": 451,
      "avatar_url": "https://avatars.githubusercontent.com/u/2458?v=4",
      "created_at": "2008-03-06T21:28:28Z",
      "is_verified": null,
      "public_repos": 177,
      "account_age_days": 6721
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.25.0",
          "kind": "minor",
          "published_at": "2026-08-01T07:27:20Z"
        },
        {
          "tag": "v0.24.0",
          "kind": "minor",
          "published_at": "2025-12-23T14:59:30Z"
        },
        {
          "tag": "v0.23.0",
          "kind": "minor",
          "published_at": "2025-10-16T06:28:38Z"
        },
        {
          "tag": "v0.22.1",
          "kind": "patch",
          "published_at": "2025-09-18T18:19:52Z"
        },
        {
          "tag": "v0.22.0",
          "kind": "minor",
          "published_at": "2025-09-11T17:26:49Z"
        },
        {
          "tag": "v0.21.1",
          "kind": "patch",
          "published_at": "2025-08-08T20:23:03Z"
        },
        {
          "tag": "v0.21.0",
          "kind": "minor",
          "published_at": "2025-08-05T18:19:18Z"
        },
        {
          "tag": "v0.20.0",
          "kind": "minor",
          "published_at": "2025-07-06T11:10:36Z"
        },
        {
          "tag": "v0.19.0",
          "kind": "minor",
          "published_at": "2025-06-16T07:07:18Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2025-05-08T06:32:18Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2025-04-09T19:41:19Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "8de4ddaa881d669670eabc08674bd2b28153b823",
          "body": "Fix two soundness issues in LaneMut",
          "is_bot": false,
          "headline": "Merge pull request #1412 from robertknight/tensor-lane-fixes",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T20:10:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4939ff23146ac2dc76bacf280a97bdc60d60f07",
          "body": "`LaneMut::nth` could wrap the cursor around and re-yield an element which had\nalready been yielded as a `&mut` reference. `LaneMut::into_view` could yield a\nview that aliased references already yielded by the iterator, so it now requires\nthat the lane has not been stepped.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix two soundness issues in LaneMut",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T20:02:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "73213a996d9dd48c411fe25f87f7d0da50b314bc",
          "body": "Implement DoubleEndedIterator for `Lane` and `LaneMut`",
          "is_bot": false,
          "headline": "Merge pull request #1411 from robertknight/tensor-lane-rev",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T19:36:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b37c1b09b1e62f8e32739b7844b758c66504c0f",
          "body": "Enable reverse iteration for lanes produced by `TensorBase::lanes`.\n\nThis also corrects `{Lane, LaneMut}::size_hint`, which previously reported the\nfull lane size rather than the number of elements remaining.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Implement DoubleEndedIterator for Lane and LaneMut",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T19:25:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ffe953dc7ba3a48c10973e91a91445d446140456",
          "body": "Move scatter operators into a separate module",
          "is_bot": false,
          "headline": "Merge pull request #1410 from robertknight/move-scatter-ops",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T18:50:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "236827a07852d8f528bff439875037afe68eacab",
          "body": "Move Scatter, ScatterElements and ScatterND, along with the\n`scatter_elements` and `scatter_nd` functions and their tests, from\n`ops::gather` into a new `ops::scatter` module.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Move scatter operators into a separate module",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T18:44:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "85657e761767f31cba533a88878806d678da9738",
          "body": "Support packed QKV format in `GroupQueryAttention` operator",
          "is_bot": false,
          "headline": "Merge pull request #1409 from robertknight/gqa-packed-qkv",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T13:24:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a63f0654824dbfbca2402fc7fa7e2b466aaca51",
          "body": "The rotation is applied to each head vector separately, so only the head\nsize dimension has to be contiguous. Iterate over the input's lanes instead\nof chunks of its data, and copy it only if the lanes are strided.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Avoid copying the rotary embedding input if it is not contiguous",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T13:20:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b143ce211c56cb0b1ec24b8882a381e54d7f1b46",
          "body": "Split the query, key and value inputs into (batch, seq, heads, head_size)\nviews up front, instead of reshaping them separately later. The packed QKV\nformat then becomes three slices of the query, which avoids copying it into\nseparate tensors.\n\nThe rotary embedding is applied to the 4D views instead of the 3D inputs.\nQ, K and V may now be non-contiguous, which the GEMM inputs and present\ncache construction already support.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Avoid copying Q, K and V in GroupQueryAttention",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T12:55:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "80e060ef36fb410761df854c6d1bb39bbc752efb",
          "body": "When the `key` and `value` inputs are absent, the `query` input contains\nthe Q, K and V heads concatenated along the hidden axis and the per-head\nsize is `q_hidden / (num_heads + 2 * kv_num_heads)`. Unpack them into\nseparate tensors before computing attention.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support packed QKV in GroupQueryAttention",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T12:01:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3422b7ea84e3a26117fc390e529d0029f694fd81",
          "body": "Fix bias values used by grouped ConvTranspose",
          "is_bot": false,
          "headline": "Merge pull request #1408 from robertknight/conv-transpose-group-bias-fix",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T11:39:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e3dc2619921157adafd0afd809096d899c48cc3",
          "body": "`col2im` indexes the bias vector by the output channel's position within\nthe current group, but was passed the bias for all output channels. Every\ngroup therefore used the bias values belonging to the first group.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix bias values used by grouped ConvTranspose",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T11:34:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "546aea1eecf9b6109c818a675cf45f4147730549",
          "body": "Support dilations in ConvTranspose",
          "is_bot": false,
          "headline": "Merge pull request #1407 from robertknight/conv-transpose-dilations",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T11:34:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34b847b20c62ef99377d09dfc463728db6a4cf41",
          "body": "The col2im-based implementation maps each input position to an output\nposition as `out_x = in_x * stride + k_x - pad`. Dilation only changes this\nmapping to `out_x = in_x * stride + k_x * dilation - pad`; the GEMM which\ncomputes the column matrix is unaffected. The output shape and padding\ncalculations use the effective kernel size `(k - 1) * dilation + 1`.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support dilations in ConvTranspose",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T11:11:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f389a3dd250ae7fcec32054c087e4d098deb2a72",
          "body": "Support negative pads in Pad operator",
          "is_bot": false,
          "headline": "Merge pull request #1406 from robertknight/pad-negative-pads",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T10:53:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2820a9b7377c255c39f076c6df417a70ea225c84",
          "body": "Negative pads are handled by cropping the input before padding it.\n\nA few edge cases were found where other runtimes differ in behavior:\n\n - When the negative padding amount exceeds the size of the axis. PyTorch\n   rejects this, whereas ONNX Runtime returns an output where all elements are\n   the pa\n[…]\nd there are no\n   positive pad values. RTen just returns the cropped input as there is no\n   padding needed. PyTorch errors however.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support negative pads in Pad operator",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T10:49:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eef9c1d3987d24c6ffe5bae33999b1b0e9c10d8d",
          "body": "This is needed because crate documentation references docs/security.md via\n`include_str`.",
          "is_bot": false,
          "headline": "Add docs/ to main crate content",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T07:27:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f4df954ab874f3314251d34118b2adf6354190fd",
          "body": null,
          "is_bot": false,
          "headline": "chore: Release",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T07:23:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b428bbd7940d96038e462a7708fd7891fc21516",
          "body": null,
          "is_bot": false,
          "headline": "Add missing fields to rten-serialize Cargo.toml file",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T07:22:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d04efe06a7c0a86aa5cfbc57a92b91405d03eee7",
          "body": null,
          "is_bot": false,
          "headline": "Update changelog version",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T07:19:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69ad4e49909ce843b66f69dc2386d3adcba6bca8",
          "body": "Cover PRs merged after https://github.com/robertknight/rten/pull/1374.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update changelog",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-08-01T07:12:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7be5539edf37012eea7b79f582652fe536d7d087",
          "body": "Fix constant propagation error when a graph output is also a graph input",
          "is_bot": false,
          "headline": "Merge pull request #1405 from robertknight/graph-input-as-output",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-31T08:13:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f453c8011deb06a82c4317908ef10d7be63f3249",
          "body": "The constant propagation optimization pass failed with a planning error when a\nmodel had a graph output that is also a graph input. During this pass\n`Graph::partial_run` is called with no inputs provided, which runs the planner\nwith `allow_missing_inputs` set. The planner already allows for operator\n[…]\n_missing_inputs` is set.\n\nThe issue was found while testing fp16 chunk models from\nhttps://huggingface.co/safetype/blackbar-nano/tree/main/onnx.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix constant propagation error when a graph output is also a graph input",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-31T08:05:46Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "737d33ab775fa0454033a42837e70f707fe9e46f",
          "body": "Remove 64-output limit for operators",
          "is_bot": false,
          "headline": "Merge pull request #1404 from robertknight/variable-outputs-v2",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-31T07:34:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe272cbcdb4cc0f29ea5fc3b75de5cae8e8e5761",
          "body": "Change the type of the requested-outputs mask in `OpRunContext` and the\ncached used-outputs mask in `OperatorNode` from `BitSet<u64>` to a new\n`OutputMask` type which tracks which of the first 32 outputs are used, plus\nthe total output count. Outputs beyond the first 32 are always treated as\nused. T\n[…]\n keeping the mask small\nand `Copy`. Operators loaded from ONNX models are now limited only by their\nown `max_outputs` value, if any.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Replace output mask with OutputMask type to remove 64-output limit",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-31T07:29:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "641b1bcdf3eaf96ddeb471151445d5bb527e84e8",
          "body": "Accept any dtype that maps to f32 in Random* operators",
          "is_bot": false,
          "headline": "Merge pull request #1402 from robertknight/random-f16",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T16:34:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "682f1404711f8e931cdd64acb5d8f9ec71c0bff2",
          "body": "The `RandomNormal`, `RandomNormalLike`, `RandomUniform` and\n`RandomUniformLike` operators previously required the `dtype` attribute to\nbe exactly `FLOAT`. Accept any dtype which RTen maps to f32 (float16,\ndouble), since values of these types are converted to f32 when the model is\nloaded.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Accept any dtype that maps to f32 in Random* operators",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T16:32:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "66fc8f34e431383878a8bae7857627ca54f6d890",
          "body": "Add support for `Gelu` and `FastGelu` contrib (`com.microsoft`) ops",
          "is_bot": false,
          "headline": "Merge pull request #1401 from robertknight/msft-gelu",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T16:27:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0a7e6002a726fa2d4ee15a5fe10f7b0b6e4ab62",
          "body": "Fix Range shape inference for zero and negative deltas",
          "is_bot": false,
          "headline": "Merge pull request #1400 from robertknight/range-shape-inference-fixes",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T16:26:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbafc4ce82de7bdc9027a3dba14c1af247802053",
          "body": "`com.microsoft.Gelu` is an alias for the standard non-approximate `Gelu`.\n`FastGelu` is the same as `BiasGelu` except that the tanh approximation of\nGelu is used and the bias input is optional.\n\nOutputs verified against ONNX Runtime for all three variants (Gelu,\nFastGelu with and without bias).\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add support for com.microsoft Gelu and FastGelu operators",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T16:17:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ea1ff12c8505db15a0be9fb56f1b2eee8a75738a",
          "body": "Fix several cases where `Range` shape inference produced incorrect results when\n`start`/`limit`/`delta` are known constants.\n\n - A negative delta produced an empty tensor, because `while val <\n   limit` was true before the first iteration.\n - A zero delta resulted in an infinite loop. Shape inferenc\n[…]\n)` would\n   materialize 100M symbolic expressions. Change this so only the length is\n   inferred for ranges longer than a threshold.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Range shape inference for zero and negative deltas",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T15:57:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "683712332e1ba30a2287601570c151d4a16c993c",
          "body": "Fix padding order mixup for \"same\" padding in ConvTranspose",
          "is_bot": false,
          "headline": "Merge pull request #1399 from robertknight/conv-transpose-same-pad-order",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T08:23:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e01f1d416b44760873fbd22d3f772a240c04618b",
          "body": "`conv_transpose_output_size_and_padding` returned padding sizes in the wrong\norder in the `Padding::Same` branch, which did not match the destructuring\nelsewhere. This issue reveals itself with an asymmetric kernel.",
          "is_bot": false,
          "headline": "Fix padding order mixup for \"same\" padding in ConvTranspose",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T08:00:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be9ef28b6886ca085b39496895f4d1dfdc3779a7",
          "body": "Fix out-of-bounds write in ConvTranspose",
          "is_bot": false,
          "headline": "Merge pull request #1398 from robertknight/conv-transpose-oob-fix",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T07:50:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bb61837c84504b04e09ab9b9a3116a308917bb2",
          "body": "When the input sizes and attributes of a ConvTranspose were such that, for some\nkernel positions, no input positions contributed to the output,\n`col2im_input_range` produced an incorrect result. This could result in output\npositions being computed which were too small or too large, leading to an\nout\n[…]\n_stages.onnx](https://huggingface.co/eugenehp/chatterbox/blob/main/onnx/hift_stages.onnx)\nmodels from `eugenehp/chatterbox` during compatibility testing of recent\nONNX models uploaded to Hugging Face.",
          "is_bot": false,
          "headline": "Fix out-of-bounds write in ConvTranspose",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-30T07:41:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "19d7a4ba005d9187d3c0302e47b71029f85aa15d",
          "body": "Split `Extend::extend` into `extend_low` and `extend_high`",
          "is_bot": false,
          "headline": "Merge pull request #1397 from robertknight/simd-split-extend-low-high",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-29T08:00:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ca21851244faeb9176cb1c65b7139edc7f0b067",
          "body": "This method returned a tuple of SIMD vectors. Scalable vectors cannot be tuple\nfields, so this won't work on ISAs such as Arm SVE. Split this into two methods\nwhich each return a single SIMD vector.\n\nPart of https://github.com/robertknight/rten/issues/1396.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Split `Extend::extend` into `extend_low` and `extend_high`",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-29T07:52:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "631ecded33f3103fd4e8795360aa921b84d44648",
          "body": "Fix a confusingly-worded error message for `--range`",
          "is_bot": false,
          "headline": "Merge pull request #1395 from robertknight/cli-range-error",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-29T07:16:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33d2238b219507cd9a72592701ff1777efd46985",
          "body": "Change the error message for unknown input names for `--range` to match the one\nreported for `--size`. This makes them clearer by removing unnecessary words.\nAlso use the present tense for consistency with other messages.",
          "is_bot": false,
          "headline": "Fix a confusingly-worded error message for `--range`",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-29T07:10:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8c9d04bb7b7aa6751331b491ea7ad3737a69ccf",
          "body": "Accept the opset-20 spelling of GridSample's linear mode",
          "is_bot": false,
          "headline": "Merge pull request #1393 from robertknight/grid-sample-linear",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T21:39:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4919cbb6a3abf210f25c73f8eca4fa948b25da8d",
          "body": "The \"bilinear\" mode was renamed to \"linear\" in opset to 20.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Accept the opset-20 spelling of GridSample's linear mode",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T21:31:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b3b516d1da8c81cddece059a2fbbded64ba5a554",
          "body": "Support reading `pads` and `value` from attributes in `Pad`",
          "is_bot": false,
          "headline": "Merge pull request #1392 from robertknight/pad-pre-opset-11",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T21:20:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42929262508db2348a64dafb94b5f0643c410e0a",
          "body": "Support the pre-opset 11 version of the `Pad` operator which took `pads` and\n`value` as attributes instead of inputs. If these attributes exist, promote them\nto inputs.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support reading `pads` and `value` from attributes in `Pad`",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T21:11:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d805959c3615e966bbcbb6391ba9e1babd8b272a",
          "body": "…panic\n\nFix panic loading an external tensor with zero length",
          "is_bot": false,
          "headline": "Merge pull request #1391 from robertknight/external-data-zero-length-…",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T20:47:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "804ccc208d3e1dc881e7cd43979ac9d60669b81b",
          "body": "Fix a panic when loading a tensor from an external data file where the length is\nempty. https://github.com/robertknight/rten/pull/1383 made a change which caused\n`cast_slice` to return a slice whose start pointer is outside the range of the\ninput slice if the input is empty. When such a slice was pa\n[…]\ncase for empty slices so\nthe result is always `Some`. If the slice pointer lies outside storage, it uses\nzero as the storage offset.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix panic loading an external tensor with zero length",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T20:40:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4829d9b869ef9983211d0602fc3131921c2431bd",
          "body": "Fix handling of negative indices in GatherND fast path",
          "is_bot": false,
          "headline": "Merge pull request #1390 from robertknight/gather-nd-negative",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T19:46:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69783b3e398aa0eb4aed701239ed334aed6175c9",
          "body": "The non-contiguous path uses tensor slicing methods which handle\nnegative indices, but the contiguous path computed the offset to copy\nfrom using `*idx as usize * stride`, which is wrong for negative\nindices. The resulting offset would usually be out of bounds, causing\nthe operator to return an \"Invalid index\" error.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix handling of negative indices in GatherND fast path",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T19:40:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fb92f92c5f91620732a32043c5bc44497854cb58",
          "body": "Fix GatherND panic when output is empty",
          "is_bot": false,
          "headline": "Merge pull request #1389 from robertknight/gather-nd-panic",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T19:20:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ddf1a20cfc9fc8af4e2369669e78ec71d14f076",
          "body": "`gather_nd` computes `out_slice_len` as the product of input dimensions that are\nnot indexed, then splits the output buffer with `chunks_mut(out_slice_len)`.\nThis panics if `out_slice_len` is empty.\n\nFix this with an early exit if the output is empty.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix GatherND panic when output is empty",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T19:06:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "17a6e7d31d4a3923ca8ea28104f23ffc8d5da224",
          "body": null,
          "is_bot": false,
          "headline": "Use `TensorBase::init_if_empty` to eliminate `unsafe` blocks",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T19:06:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "12bd69a5ad78fcb43dffa82a4a3b01945f9aaedc",
          "body": "Add a safe method to convert an uninitialized tensor to an initialized one, if\nit is empty.\n\nThis will be useful for a pattern that appears a few times in rten ops where\noperators exit early if the output is empty.",
          "is_bot": false,
          "headline": "Add `TensorBase::init_if_empty`",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-27T18:55:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c58578784242742a9ed06c33c5242f1194daf1f",
          "body": "Support upper-case letters in Einsum equations",
          "is_bot": false,
          "headline": "Merge pull request #1387 from robertknight/einsum-upper-case",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-26T10:08:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20d4e09a1e980995486e33e064de935b56a63af2",
          "body": "`numpy.einsum` and ONNX Runtime both accept upper-case letters as\ndimension labels and treat them as distinct from lower-case ones, even\nthough the ONNX spec says that labels must be lower-case. Some models\nuse them.\n\nAccept any ASCII letter as a label and order the implicit output term by\nASCII cod\n[…]\ny used\nupper-case letters to avoid conflicting with equation labels. These now\nuse non-alphanumeric characters instead.\n\nFixes #1386\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support upper-case letters in Einsum equations",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-26T10:02:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8a25c96dd56ebd467b35ab1c6473c4620ca8362b",
          "body": "Fix incorrect use of `Vec::set_len` in `TensorBase::append`",
          "is_bot": false,
          "headline": "Merge pull request #1384 from robertknight/append-fix",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-26T08:37:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4489182d838bd287a4c849c6b3161b443b1497a3",
          "body": "When `TensorBase::append` was used to extend a tensor along an axis other than\nzero, it could incorrectly extend the storage length to include uninitialized\nelements.\n\nIf a tensor was allocated with capacity for (2, 4) and initial shape (2,\n0) and then a new column was appended, the storage length w\n[…]\nage type\nwhich permits initialized and uninitialized elements to be interleaved, or use a\ntensor with `MaybeUninit<T>` storage and defer marking storage as initialized\nuntil the tensor is fully grown.",
          "is_bot": false,
          "headline": "Fix incorrect use of `Vec::set_len` in `TensorBase::append`",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-26T08:27:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "70050b5111bf2144da91decf0edc60f06c35ea5c",
          "body": "Preserve value type when replacing values with inferred constants",
          "is_bot": false,
          "headline": "Merge pull request #1382 from robertknight/shape-inference-type-fix",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T15:37:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b3d2b4ca9a7e80d4e45bd87cc7f295824758c0e",
          "body": "Fix `cast_slice` issue causing loading of empty f16 tensors to fail",
          "is_bot": false,
          "headline": "Merge pull request #1383 from robertknight/empty-slice-cast-fix",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T15:27:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b606f76f3de7336da8fcd8aae973b8576f51e2ca",
          "body": "When `cast_slice` is called on the slice corresponding to an empty `Vec`, the\ncast could fail because empty containers use a dangling pointer with value 0x1,\nwhich caused the check for the slice being suitably aligned for the destination\ntype to fail. Change these functions to check for an empty sli\n[…]\normally holds because `raw_data` is allocated by\nthe system allocator which always uses some minimal alignment (typically 16\nbytes).\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix `cast_slice` issue causing loading of empty f16 tensors to fail",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T15:21:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d7a349f37185ba87a689da4f98be01c999bc2045",
          "body": "Fix a bug where the optimizer could replace float values with integer constants\ninferred by shape inference. Changing the type of the value caused subsequent\noperations to fail.\n\nWhen constructing shape inference inputs, float values that are exact integers\nare converted to integer constants in symb\n[…]\nhe original value\ntype from the graph node. If the inferred value is out of range for the type,\nreplacement is skipped.\n\nFixes #1381\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Preserve value type when replacing values with inferred constants",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T15:00:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f0348516ae4803c78dd6b885e5a62c9c32c089a0",
          "body": "Support all tensor data types in ConstantOfShape `value` attribute",
          "is_bot": false,
          "headline": "Merge pull request #1380 from robertknight/constant-of-shape-more-dtypes",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T13:19:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66a679210aede0ca3144b6f0f42f7fe4619b1b26",
          "body": "The ONNX deserializer for `ConstantOfShape` parsed this attribute with a bespoke\nhelper which only supported float, int32, int64 and bool tensors, rejecting\nanything else with an error. It also only supported `TensorProto` initializers\nwhere the data was stored in the `raw_data` field. This prevente\n[…]\ndtypes and data sources\n(`TensorProto.raw_data`, other fields on `TensorProto`, external data) that are\nsupported for model weights.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support all tensor data types in ConstantOfShape `value` attribute",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T13:12:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "14d6334a5ff96f881f2b1395aea3b88a352a4b1d",
          "body": "Generate `use_cache_branch` input with declared shape in CLI",
          "is_bot": false,
          "headline": "Merge pull request #1379 from robertknight/use-cache-shape",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T12:36:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d14f4ea03389a908af976256eb6ce43ac217cd91",
          "body": "Validate `Conv` channel counts before the pointwise fast path",
          "is_bot": false,
          "headline": "Merge pull request #1378 from robertknight/conv-pointwise-validation",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T12:34:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c82fd93d639626b0b8d85ab35220350257d08b07",
          "body": "The input generator has a special case for inputs named `use_cache_branch`, but\nthis case did not respect the input's declared shape and always generated a\nscalar. Fix this by using the declared shape.\n\nThis fixes an issue with models that have a `use_cache_branch` input which is a\nsingle-element vector.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Generate `use_cache_branch` input with the declared shape",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T12:28:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c3b64b0e93f2ec90a2cdf743bc05552d7af07ca6",
          "body": "The checks which validate that the input and kernel channel counts are\ncompatible happened after the pointwise convolution fast path was called. As a\nresult it was possible to trigger a panic in the pointwise fast path if there\nwas a channel count mismatch.\n\nFix this by moving the checks before the pointwise dispatch.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Validate `Conv` channel counts before the pointwise fast path",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T12:26:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "956714adf7514dfbb3ae817a9c75dc0ee974be32",
          "body": "Add `ConvIntegerToFloat` fusion",
          "is_bot": false,
          "headline": "Merge pull request #1377 from robertknight/conv-integer-to-float",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T10:51:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e3492d92f7afa09e354949872e667b1feb50599",
          "body": "Quantized models produced by dynamic quantization convert the output of\n`ConvInteger` back to float via `Cast` followed by a `Mul` with the product of\nthe input and weight scales. Fuse the `ConvInteger`, `Cast` and final `Mul` into\na single `ConvIntegerToFloat` operator, mirroring the existing\n`MatM\n[…]\n as a scalar. Previously such a scale took the\nper-column path and failed unless the output's last dimension also had a\nsize of one.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add ConvIntegerToFloat fusion",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T10:44:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "62a05ac43576d75eb410ce5a17d7e7969d9e3cbb",
          "body": "Add `--range` option in CLI to set range of generated input values",
          "is_bot": false,
          "headline": "Merge pull request #1376 from robertknight/cli-input-range",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T07:03:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d074795bd8b3ac2328e577e4f3621108f0ee8c5e",
          "body": "Models can have inputs which are used as indices (eg. by `Gather`) but whose\nnames don't match the existing `*_ids` heuristic. Generating values from the\ndefault range for the dtype then results in model inference failing.\n\nAdd a `--range` option specifying the range of randomly generated values for\n[…]\nize`, is factored\nout into a new `name_value` module. `RandomInputGenerator` and its tests\nmove into a new `input_generator` module.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add `--range` option in CLI to set range of generated input values",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-25T06:55:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d64d54be081df20fdff02640f1f6f72dd54835ee",
          "body": "Fix false-positive internal-overlap panic for size-1 dimensions",
          "is_bot": false,
          "headline": "Merge pull request #1375 from robertknight/fix-overlap-size1-dim",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-23T19:48:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad1a583a1cb7cd5d6a78901d383ddd5246412583",
          "body": "Fix an issue where `may_have_internal_overlap` could incorrectly return true if\na non-contiguous tensor had a leading 1-sized dim with a stride that was smaller\nthan the sum of `(size - 1) * stride)` of following dims. For a 1-sized dim the\nonly valid index is 0 so the stride should be ignored. Such\n[…]\nis model a combination of in-place Concat + Slice + Mul ops trigger this\nvia `TensorBase::{append -> clip_dim -> inner_iter_mut}`.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix false-positive internal-overlap panic for size-1 dimensions",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-23T19:40:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1cb60bcd2732c8be5281779fb11e0b353e7dcdd6",
          "body": "Update change log",
          "is_bot": false,
          "headline": "Merge pull request #1374 from robertknight/changelog-update",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-23T07:04:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7d309d05976beae869a69948dd09d4a7db4ad83",
          "body": "Add entries for PRs merged since the last update (#1292 - #1372).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update change log",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-23T06:51:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b116d14977080bd514db7529bf64c7791bb33ed7",
          "body": "Use correct associated types in `from_shape_and_strides` impl",
          "is_bot": false,
          "headline": "Merge pull request #1372 from robertknight/use-shape-stride-types",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-22T06:57:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8219d82b6cc7b5e71c527925a878c8a837048957",
          "body": "Use `Shape`/`Strides` associated types instead of `Index` in `<NdLayout\nas MutLayout>::from_shape_and_strides`.",
          "is_bot": false,
          "headline": "Use correct associated types in `from_shape_and_strides` impl",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-22T06:50:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f002caed607f0f0680161cd6ca1ae1ee2adf46f",
          "body": "Fix `MutLayout::index_axis` for empty tensors",
          "is_bot": false,
          "headline": "Merge pull request #1370 from robertknight/empty-tensor-fuzz",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-21T19:33:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5136bb27f102b21b4095b7ea06b1d2b3ee833411",
          "body": "Fix an issue where the default implementation of `MutLayout::index_axis` could\nreturn invalid storage offsets for empty tensors.\n\nThis bug is similar to https://github.com/robertknight/rten/pull/1364 and was\nfound by asking Claude to search for similar issues.\n\nThis bug was reachable via `TensorBase::axis_iter` and several other methods.",
          "is_bot": false,
          "headline": "Fix `MutLayout::index_axis` for empty tensors",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-21T19:24:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d5525434b2bbba83112ec79530af8873fe497f6",
          "body": "Fix two bugs in Einsum broadcasting",
          "is_bot": false,
          "headline": "Merge pull request #1369 from robertknight/einsum-broadcast-fix",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-21T08:34:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f40b8d3363df51b6a8602144e852216006fb92ca",
          "body": "Fix two bugs in broadcasting of 1-sized dimensions:\n\n - Broadcasting did not happen for a reduced label which became the `K`\n   dimension of a matmul. The `Einsum` op relied on `matmul` to do\n   broadcasting of dims, but this only works for batch dims, not the `K`\n   dimension.\n\n - The broadcast siz\n[…]\nor steps with multiple reduced dimensions used `max`,\n   which is correct for 1 vs N but not for 1 vs 0, where the result is 0\n   rather than 1.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix two bugs in Einsum broadcasting",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-21T08:29:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "02df184e8286196249e05d2454ba523abfa28456",
          "body": "Fix Einsum errors when equations with 3+ terms contain repeated labels or ellipses",
          "is_bot": false,
          "headline": "Merge pull request #1368 from robertknight/einsum-fuzz-1",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-21T07:45:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1058dd04375bf3440a257b6286710037cf16107f",
          "body": "The multi-input einsum path planner constructed intermediate step\noutputs from the raw input terms, in which ellipses have not yet been\nexpanded to digit labels. The literal \".\" characters were then treated\nas dimension labels, mismatching the expanded terms used for the\nsteps' inputs. Depending on \n[…]\nllers, as the counts\nare now derived from the expanded terms, so remove it.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Einsum handling of ellipses in equations with 3+ terms",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-21T07:38:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2ece80906c2b28038c5376a21aa5899720ab985f",
          "body": "The multi-input einsum path planner tracked, for each reduced\ndimension, the number of terms which have yet to use it. The counts\nwere initialized per term but decremented once per label occurrence, so\na term with a repeated label (eg. \"ii\" in \"ii,j,i->\") subtracted too\nmuch. This underflowed the co\n[…]\nls instead, and deduplicate\nlabels when building intermediate step outputs.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Einsum errors when equations with 3+ terms contain repeated labels",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-21T07:12:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6797c1f1213126747a41fe5f36ff9e1b458c2817",
          "body": "Support Einsum equations with an empty left-hand side",
          "is_bot": false,
          "headline": "Merge pull request #1366 from robertknight/einsum-empty-lhs",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T22:00:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e6ee08185f0fdd3ed4b90257e1eeaea4d0d2cc8",
          "body": "The equation parser rejected equations where the left-hand side is\nempty (\"\" or \"->\"), but these are valid: they consist of a single\nempty term corresponding to a scalar input, and both numpy and ONNX\nRuntime accept them. Empty terms were already accepted when the\nleft-hand side contains a comma (eg\n[…]\ngle empty term. Equations with\nthe wrong number of terms for the provided inputs are still rejected,\nby input validation rather than the parser.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Support Einsum equations with an empty left-hand side",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T21:52:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cfecb253c87d8465f9ff6d20c1366795710e7d24",
          "body": "Fix reduction op fast path computing wrong size for reduced chunks",
          "is_bot": false,
          "headline": "Merge pull request #1365 from robertknight/reduce-one-fix",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T21:11:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "245d2e0de9f3dcd6cd915d65db017c642b0e8344",
          "body": "The fast path in `reduce` for reducing over trailing dimensions of a\ncontiguous tensor computed the chunk length from the stride of the\ninnermost non-reduced dimension. This is incorrect for views where a\n1-sized dimension has a non-standard stride, which can happen when\npermuting 1-sized dimensions\n[…]\neduced dimensions\ninstead.\n\nThis affected Einsum equations which reduce an input with a 1-sized\nkept dimension, eg. \"ba->a\" with a [2, 1] input.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix reduction ops computing wrong chunk size for some contiguous views",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T21:03:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "501f83bbbcbd68ec079196f2eac3dd5c1aae23bd",
          "body": "Fix panic in `TensorBase::inner_iter` if the inner views are empty",
          "is_bot": false,
          "headline": "Merge pull request #1364 from robertknight/inner-iter-empty-views",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T20:37:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43c54282427b9b6f50d7724bd05645b71e985b17",
          "body": "InnerIter computed each inner view's storage range as `offset..offset +\ninner_data_len`, where the offsets are enumerated from the outer dims' strides.\nFor non-empty tensors, layout validity guarantees these ranges lie within the\nstorage. For an empty tensor that guarantee is vacuous: any strides ar\n[…]\nslice range 1..1 for\nstorage length 0\").\n\nWhen the inner views are empty, use zeroed outer strides so that every view's\nstorage range is `0..0`.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix InnerIter panic when iterating empty views",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T20:32:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "977363f7eb75090864d4189c5f483ae04412908a",
          "body": "Fix several panics and incorrect outputs in Einsum operator",
          "is_bot": false,
          "headline": "Merge pull request #1362 from robertknight/einsum-panic",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T17:50:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb51bbbb42bc62dadb64f94437d181942491c881",
          "body": "`einsum_matmul` requires that the reduced dimension appears in both\nterms, so `!term1.contains(*c)` and `!term2.contains(*c)` already\nexclude it as an `N` / `M` candidate and the `*c != matmul_k` checks\ncould never change the result.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove dead reduced-dim guards in Einsum matmul dimension selection",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T17:33:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e8ef6ccf82fd336f02e346d3c8ad772e71e8b6d8",
          "body": "The general reduction path in `einsum_step` handled a reduced dimension\npresent in only one term by broadcasting the other input along it, then\nmultiplying and reducing. This materializes a temporary of size\n`prod(output dims) * reduced size` and does the corresponding amount of\nmultiply-add work, w\n[…]\n, so the single-reduced-dimension case now always maps onto a\nmatmul and the general path's expansion only handles 1-sized broadcast\ndimensions.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Sum out Einsum dimensions which appear in only one term before combining",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T17:33:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9d8a3a868dfe95db2e414d8f34bff13b9145a0cf",
          "body": "`einsum_matmul` denotes inserted 1-sized M/N dimensions with upper-case\nletters, but used `is_ascii_lowercase` to test whether a dimension was\nreal. Ellipsis dimensions are expanded to digit labels, which are\nneither upper nor lower case, so when the matmul N (or M) dimension was\nan ellipsis dimensi\n[…]\ninserted: it was omitted from the output order and\n`remove_axis` panicked on the real, non-1-sized axis. Test for\nupper-case (inserted) instead.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Einsum panic when RHS non-shared dimensions come from an ellipsis",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T17:33:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eabc48d00edad2e643e82bb135b1713bc11fc0c5",
          "body": "The general reduction path in `einsum_step` computed the combined size\nof the reduced dimensions from the pre-expansion LHS view. If the LHS\nwas the input lacking a reduced dimension (eg. \"ik,ij->ik\" or\n\"ik,ijk->i\"), its 1-sized inserted axis was expanded to match the RHS,\nand reshaping the expanded tensor with the stale size panicked with an\nelement count mismatch. Compute the size from the expanded shape\ninstead.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Einsum panic when only the RHS contains a reduced dimension",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T17:33:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cb18bcac8542885ca6f0e262f8d9ec1dbaa0248f",
          "body": "…ed dims\n\nWhen a single-input Einsum equation reduced two or more dimensions and\nkept at least one output dimension (eg. \"ijk->i\"), the reduction axis\nlist was computed as `[-1, 0, 1, ...]` instead of the last N axes of the\npermuted view, so output dimensions were summed instead of reduced ones,\nsilently producing a result with the wrong shape and values.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Einsum reducing wrong axes when a single input has multiple reduc…",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T16:46:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "df27ad8896ae9fef766cee8f3497b462ed70e56a",
          "body": "`einsum_step` routed any step with exactly one reduced dimension to\n`einsum_matmul`, which assumes that dimension is shared by both terms and\ncan be used as the `K` dimension of a matmul. For an equation such as\n`ij,ik->ik`, where the reduced dimension occurs in the LHS only, this\nbuilt the invalid \n[…]\nteps to the general case instead, which permutes the reduced\ndimension into both inputs and expands it, giving the correct result.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Einsum error when a reduced dimension appears in only one term",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T16:46:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d2f809dc76b2a04baf94e99c7bf43591c526f27b",
          "body": "The path in `einsum_step` which handles more than one reduced dimension\npermuted its inputs into a common dimension order as `xp` and `yp`, but\nthen made the *original* views contiguous and reshaped those, silently\ndiscarding the permutation.\n\nThis produced incorrect results, with no error, for any \n[…]\n Equations where the permutation happened\nto be a no-op, such as `bhwc,bhwc->`, were unaffected, which is why this\nwent unnoticed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Einsum ignoring input permutation when reducing several dimensions",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T16:46:01Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "95223a51c29c113e41ce9655a575c176ebc297fa",
          "body": "`einsum_matmul` chose a single dimension from the RHS term as the `N`\ndimension of the matmul, and took the batch dimensions from the LHS term\nonly. If the RHS had more than one dimension that did not appear in the\nLHS, the extra dimensions were assigned to neither `N` nor a batch\ndimension, and wer\n[…]\ng model is `mf,bft->bmt`, taken from the\nmusicfm-int8.onnx model at\nhttps://huggingface.co/akineAItech/CUE-Uttaro-SongFormer-ONNX.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix Einsum panic when one input has several non-shared dimensions",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-19T16:45:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fde83df574655d7360ece4e7633421bda09e135d",
          "body": "…removal\n\nPrevent optimizer removing values captured by subgraphs",
          "is_bot": false,
          "headline": "Merge pull request #1360 from robertknight/fix-fusion-captured-value-…",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-18T21:50:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a9389c7c2c53d1445a34f58c8e7a2db479776b9",
          "body": "Fix an issue where fusions like `CastElimination` could remove values that were\nstill referenced by subgraphs. Identity fusions like this one replace references\nto an operator's output with an operator's input in the current graph, but\nfailed to check for subgraphs referencing the removed operator's\n[…]\nis just to detect when a fusion would remove\na captured value and skip it.\n\nFixes https://github.com/robertknight/rten/issues/1359\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Prevent optimizer removing values captured by subgraphs",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-18T21:44:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9b80a5761595a27489b3d1c6cf940623421d6c65",
          "body": "Support broadcasting scale/bias in LayerNormalization, RMSNormalization",
          "is_bot": false,
          "headline": "Merge pull request #1357 from robertknight/layer-norm-scalar-scale",
          "author_name": "Robert Knight",
          "author_login": "robertknight",
          "committed_at": "2026-07-17T19:59:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 11,
      "commits_last_year": 1245,
      "latest_release_at": "2026-08-01T07:27:20Z",
      "latest_release_tag": "v0.25.0",
      "releases_from_tags": true,
      "days_since_last_push": 0,
      "active_weeks_last_year": 44,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 50
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "rten",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/rten",
          "is_deprecated": false,
          "latest_version": "0.25.0",
          "repository_url": "https://github.com/robertknight/rten",
          "versions_count": 32,
          "total_downloads": 1079699,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 233184,
          "first_published_at": "2023-12-31T20:37:19.711330Z",
          "latest_published_at": "2026-08-01T07:30:48.317830Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "rten-cli",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/rten-cli",
          "is_deprecated": false,
          "latest_version": "0.25.0",
          "repository_url": "https://github.com/robertknight/rten",
          "versions_count": 27,
          "total_downloads": 20635,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 37,
          "first_published_at": "2024-02-08T08:15:44.238163Z",
          "latest_published_at": "2026-08-01T07:31:05.786883Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "rten-base",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/rten-base",
          "is_deprecated": false,
          "latest_version": "0.25.0",
          "repository_url": "https://github.com/robertknight/rten",
          "versions_count": 6,
          "total_downloads": 1001984,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 232223,
          "first_published_at": "2025-08-05T18:19:20.356442Z",
          "latest_published_at": "2026-08-01T07:24:33.208685Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "rten-gemm",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/rten-gemm",
          "is_deprecated": false,
          "latest_version": "0.25.0",
          "repository_url": "https://github.com/robertknight/rten",
          "versions_count": 6,
          "total_downloads": 994392,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 230307,
          "first_published_at": "2025-08-05T18:19:40.545720Z",
          "latest_published_at": "2026-08-01T07:25:48.673399Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "rten-onnx",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/rten-onnx",
          "is_deprecated": false,
          "latest_version": "0.25.0",
          "repository_url": "https://github.com/robertknight/rten",
          "versions_count": 3,
          "total_downloads": 961816,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 225116,
          "first_published_at": "2025-10-16T06:29:13.584644Z",
          "latest_published_at": "2026-08-01T07:25:54.048029Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "rten-simd",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/rten-simd",
          "is_deprecated": false,
          "latest_version": "0.25.0",
          "repository_url": "https://github.com/robertknight/rten",
          "versions_count": 16,
          "total_downloads": 1055873,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 234638,
          "first_published_at": "2024-05-25T07:53:06.645655Z",
          "latest_published_at": "2026-08-01T07:25:40.133089Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        },
        {
          "name": "rten-text",
          "exists": true,
          "license": "MIT OR Apache-2.0",
          "keywords": [],
          "ecosystem": "crates",
          "matches_repo": true,
          "registry_url": "https://crates.io/crates/rten-text",
          "is_deprecated": false,
          "latest_version": "0.25.0",
          "repository_url": "https://github.com/robertknight/rten",
          "versions_count": 21,
          "total_downloads": 17150,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 579,
          "first_published_at": "2023-12-31T20:31:52.485095Z",
          "latest_published_at": "2026-08-01T07:31:10.643860Z",
          "latest_version_yanked": false,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 24,
      "stars": 329,
      "watchers": 3,
      "fork_history": {
        "days": [
          {
            "date": "2024-04-11",
            "count": 1
          },
          {
            "date": "2024-05-21",
            "count": 1
          },
          {
            "date": "2024-06-26",
            "count": 1
          },
          {
            "date": "2024-08-08",
            "count": 1
          },
          {
            "date": "2024-08-20",
            "count": 1
          },
          {
            "date": "2024-08-22",
            "count": 1
          },
          {
            "date": "2024-08-25",
            "count": 1
          },
          {
            "date": "2024-09-20",
            "count": 1
          },
          {
            "date": "2024-10-17",
            "count": 1
          },
          {
            "date": "2025-01-01",
            "count": 1
          },
          {
            "date": "2025-01-16",
            "count": 1
          },
          {
            "date": "2025-10-12",
            "count": 1
          },
          {
            "date": "2025-12-18",
            "count": 1
          },
          {
            "date": "2025-12-20",
            "count": 1
          },
          {
            "date": "2025-12-26",
            "count": 1
          },
          {
            "date": "2025-12-28",
            "count": 1
          },
          {
            "date": "2026-01-08",
            "count": 1
          },
          {
            "date": "2026-03-10",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-04-05",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-10",
            "count": 1
          },
          {
            "date": "2026-06-26",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 24,
        "total_forks": 24
      },
      "star_history": null,
      "open_issues_and_prs": 49
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "js-examples/image-classification/Makefile",
        "rten-convert/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "Cargo.toml",
        "rten-base/Cargo.toml",
        "rten-bench/Cargo.toml",
        "rten-cli/Cargo.toml",
        "rten-examples/Cargo.toml",
        "rten-gemm/Cargo.toml",
        "rten-generate/Cargo.toml",
        "rten-imageio/Cargo.toml",
        "rten-imageproc/Cargo.toml",
        "rten-model-file/Cargo.toml",
        "rten-onnx/Cargo.toml",
        "rten-parallel/Cargo.toml",
        "rten-serialize/Cargo.toml",
        "rten-shape-inference/Cargo.toml",
        "rten-simd/Cargo.toml",
        "rten-tensor/Cargo.toml",
        "rten-testing/Cargo.toml",
        "rten-text/Cargo.toml",
        "rten-vecmath/Cargo.toml"
      ],
      "largest_source_bytes": 472621,
      "source_files_sampled": 300,
      "oversized_source_files": 14,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "Cargo.toml",
        "package.json",
        "rten-base/Cargo.toml",
        "rten-bench/Cargo.toml",
        "rten-cli/Cargo.toml",
        "rten-convert/pyproject.toml",
        "rten-convert/requirements.dev.txt",
        "rten-examples/Cargo.toml",
        "rten-gemm/Cargo.toml",
        "rten-generate/Cargo.toml",
        "rten-imageio/Cargo.toml",
        "rten-imageproc/Cargo.toml",
        "rten-model-file/Cargo.toml",
        "rten-onnx/Cargo.toml",
        "rten-parallel/Cargo.toml",
        "rten-serialize/Cargo.toml",
        "rten-shape-inference/Cargo.toml",
        "rten-simd/Cargo.toml",
        "rten-tensor/Cargo.toml",
        "rten-testing/Cargo.toml",
        "rten-text/Cargo.toml",
        "rten-vecmath/Cargo.toml",
        "tools/requirements.txt"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "sharp",
            "direct": false,
            "version": "0.33.1",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.3,
            "advisory_ids": [
              "GHSA-f88m-g3jw-g9cj"
            ],
            "fixed_version": "0.35.0",
            "advisory_count": 1,
            "oldest_advisory_days": 10
          },
          {
            "name": "memmap2",
            "direct": true,
            "version": "0.9.10",
            "severity": "unknown",
            "ecosystem": "crates",
            "cvss_score": null,
            "advisory_ids": [
              "RUSTSEC-2026-0186"
            ],
            "fixed_version": "0.9.11",
            "advisory_count": 1,
            "oldest_advisory_days": 42
          },
          {
            "name": "crossbeam-epoch",
            "direct": false,
            "version": "0.9.18",
            "severity": "unknown",
            "ecosystem": "crates",
            "cvss_score": null,
            "advisory_ids": [
              "RUSTSEC-2026-0204"
            ],
            "fixed_version": "0.9.20",
            "advisory_count": 1,
            "oldest_advisory_days": 26
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 1,
          "unknown": 2
        },
        "advisory_count": 3,
        "affected_count": 3,
        "assessed_count": 128,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 22,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "crates",
        "npm",
        "pypi"
      ],
      "dependencies": [
        {
          "name": "fastrand",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "fastrand-contrib",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "flatbuffers",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "memmap2",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.9.4"
        },
        {
          "name": "num_cpus",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "1.16.0"
        },
        {
          "name": "rayon",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-base",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-gemm",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-model-file",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-onnx",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-parallel",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-shape-inference",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-simd",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-tensor",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-vecmath",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rustc-hash",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rustfft",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallvec",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "typeid",
          "manifest": "Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "argh",
          "manifest": "rten-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "fastrand",
          "manifest": "rten-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten",
          "manifest": "rten-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-base",
          "manifest": "rten-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-serialize",
          "manifest": "rten-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-tensor",
          "manifest": "rten-cli/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "flatbuffers",
          "manifest": "rten-convert/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "onnx",
          "manifest": "rten-convert/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "numpy",
          "manifest": "rten-convert/pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "argh",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "fastrand",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "hound",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "3.5.1"
        },
        {
          "name": "image",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "png",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.18"
        },
        {
          "name": "serde",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_derive",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-generate",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-imageio",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-imageproc",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-tensor",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-text",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rustfft",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallvec",
          "manifest": "rten-examples/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rayon",
          "manifest": "rten-gemm/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-base",
          "manifest": "rten-gemm/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-parallel",
          "manifest": "rten-gemm/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-simd",
          "manifest": "rten-gemm/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-tensor",
          "manifest": "rten-gemm/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "fastrand",
          "manifest": "rten-generate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten",
          "manifest": "rten-generate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-base",
          "manifest": "rten-generate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-simd",
          "manifest": "rten-generate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-text",
          "manifest": "rten-generate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-tensor",
          "manifest": "rten-generate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-vecmath",
          "manifest": "rten-generate/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "png",
          "manifest": "rten-imageio/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.18"
        },
        {
          "name": "rten-base",
          "manifest": "rten-imageio/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-tensor",
          "manifest": "rten-imageio/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "image",
          "manifest": "rten-imageio/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-tensor",
          "manifest": "rten-imageproc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "serde",
          "manifest": "rten-imageproc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_derive",
          "manifest": "rten-imageproc/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "flatbuffers",
          "manifest": "rten-model-file/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-base",
          "manifest": "rten-model-file/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rayon",
          "manifest": "rten-parallel/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-base",
          "manifest": "rten-parallel/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-base",
          "manifest": "rten-serialize/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-tensor",
          "manifest": "rten-serialize/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "safetensors",
          "manifest": "rten-serialize/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.8.0"
        },
        {
          "name": "zip",
          "manifest": "rten-serialize/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "8.6.0"
        },
        {
          "name": "rten-tensor",
          "manifest": "rten-shape-inference/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "smallvec",
          "manifest": "rten-shape-inference/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rayon",
          "manifest": "rten-tensor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "rten-base",
          "manifest": "rten-tensor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-parallel",
          "manifest": "rten-tensor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "serde",
          "manifest": "rten-tensor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "smallvec",
          "manifest": "rten-tensor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "typeid",
          "manifest": "rten-tensor/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "fancy-regex",
          "manifest": "rten-text/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.18.0"
        },
        {
          "name": "rten-base",
          "manifest": "rten-text/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rustc-hash",
          "manifest": "rten-text/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde",
          "manifest": "rten-text/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_derive",
          "manifest": "rten-text/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "serde_json",
          "manifest": "rten-text/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": null
        },
        {
          "name": "unicode_categories",
          "manifest": "rten-text/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.1"
        },
        {
          "name": "unicode-normalization",
          "manifest": "rten-text/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.1.22"
        },
        {
          "name": "rten-base",
          "manifest": "rten-vecmath/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        },
        {
          "name": "rten-simd",
          "manifest": "rten-vecmath/Cargo.toml",
          "ecosystem": "crates",
          "version_constraint": "0.25.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "argh",
            "direct": true,
            "version": "0.1.19",
            "ecosystem": "crates"
          },
          {
            "name": "fancy-regex",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "fancy-regex",
            "direct": true,
            "version": "0.18.0",
            "ecosystem": "crates"
          },
          {
            "name": "fastrand",
            "direct": true,
            "version": "2.3.0",
            "ecosystem": "crates"
          },
          {
            "name": "fastrand-contrib",
            "direct": true,
            "version": "0.1.0",
            "ecosystem": "crates"
          },
          {
            "name": "flatbuffers",
            "direct": true,
            "version": "24.12.23",
            "ecosystem": "crates"
          },
          {
            "name": "hound",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "hound",
            "direct": true,
            "version": "3.5.1",
            "ecosystem": "crates"
          },
          {
            "name": "image",
            "direct": true,
            "version": "0.25.10",
            "ecosystem": "crates"
          },
          {
            "name": "memmap2",
            "direct": true,
            "version": "0.9.10",
            "ecosystem": "crates"
          },
          {
            "name": "num_cpus",
            "direct": true,
            "version": "1.17.0",
            "ecosystem": "crates"
          },
          {
            "name": "png",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "png",
            "direct": true,
            "version": "0.18.1",
            "ecosystem": "crates"
          },
          {
            "name": "rayon",
            "direct": true,
            "version": "1.12.0",
            "ecosystem": "crates"
          },
          {
            "name": "rten",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rten-base",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rten-parallel",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rten-serialize",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rten-simd",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rten-tensor",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rten-text",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rten-vecmath",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "rustc-hash",
            "direct": true,
            "version": "2.1.2",
            "ecosystem": "crates"
          },
          {
            "name": "rustfft",
            "direct": true,
            "version": "6.4.1",
            "ecosystem": "crates"
          },
          {
            "name": "safetensors",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "safetensors",
            "direct": true,
            "version": "0.8.0",
            "ecosystem": "crates"
          },
          {
            "name": "serde",
            "direct": true,
            "version": "1.0.228",
            "ecosystem": "crates"
          },
          {
            "name": "serde_derive",
            "direct": true,
            "version": "1.0.228",
            "ecosystem": "crates"
          },
          {
            "name": "serde_json",
            "direct": true,
            "version": "1.0.150",
            "ecosystem": "crates"
          },
          {
            "name": "smallvec",
            "direct": true,
            "version": "1.15.2",
            "ecosystem": "crates"
          },
          {
            "name": "typeid",
            "direct": true,
            "version": "1.0.3",
            "ecosystem": "crates"
          },
          {
            "name": "unicode-normalization",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "unicode-normalization",
            "direct": true,
            "version": "0.1.25",
            "ecosystem": "crates"
          },
          {
            "name": "unicode_categories",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "unicode_categories",
            "direct": true,
            "version": "0.1.1",
            "ecosystem": "crates"
          },
          {
            "name": "zip",
            "direct": true,
            "version": null,
            "ecosystem": "crates"
          },
          {
            "name": "zip",
            "direct": true,
            "version": "8.6.0",
            "ecosystem": "crates"
          },
          {
            "name": "flatbuffers",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "numpy",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "onnx",
            "direct": true,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "adler2",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "crates"
          },
          {
            "name": "aho-corasick",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "crates"
          },
          {
            "name": "allocator-api2",
            "direct": false,
            "version": "0.2.21",
            "ecosystem": "crates"
          },
          {
            "name": "argh_derive",
            "direct": false,
            "version": "0.1.19",
            "ecosystem": "crates"
          },
          {
            "name": "argh_shared",
            "direct": false,
            "version": "0.1.19",
            "ecosystem": "crates"
          },
          {
            "name": "autocfg",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "crates"
          },
          {
            "name": "bit-set",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "crates"
          },
          {
            "name": "bit-vec",
            "direct": false,
            "version": "0.8.0",
            "ecosystem": "crates"
          },
          {
            "name": "bitflags",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "crates"
          },
          {
            "name": "bitflags",
            "direct": false,
            "version": "2.10.0",
            "ecosystem": "crates"
          },
          {
            "name": "bumpalo",
            "direct": false,
            "version": "3.19.0",
            "ecosystem": "crates"
          },
          {
            "name": "bytemuck",
            "direct": false,
            "version": "1.24.0",
            "ecosystem": "crates"
          },
          {
            "name": "byteorder-lite",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "crates"
          },
          {
            "name": "cfg-if",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "crates"
          },
          {
            "name": "crc32fast",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "crates"
          },
          {
            "name": "crossbeam-deque",
            "direct": false,
            "version": "0.8.6",
            "ecosystem": "crates"
          },
          {
            "name": "crossbeam-epoch",
            "direct": false,
            "version": "0.9.18",
            "ecosystem": "crates"
          },
          {
            "name": "crossbeam-utils",
            "direct": false,
            "version": "0.8.21",
            "ecosystem": "crates"
          },
          {
            "name": "either",
            "direct": false,
            "version": "1.15.0",
            "ecosystem": "crates"
          },
          {
            "name": "equivalent",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "crates"
          },
          {
            "name": "fdeflate",
            "direct": false,
            "version": "0.3.7",
            "ecosystem": "crates"
          },
          {
            "name": "flate2",
            "direct": false,
            "version": "1.1.5",
            "ecosystem": "crates"
          },
          {
            "name": "foldhash",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "crates"
          },
          {
            "name": "hashbrown",
            "direct": false,
            "version": "0.16.1",
            "ecosystem": "crates"
          },
          {
            "name": "hashbrown",
            "direct": false,
            "version": "0.17.1",
            "ecosystem": "crates"
          },
          {
            "name": "hermit-abi",
            "direct": false,
            "version": "0.5.2",
            "ecosystem": "crates"
          },
          {
            "name": "image-webp",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "crates"
          },
          {
            "name": "indexmap",
            "direct": false,
            "version": "2.14.0",
            "ecosystem": "crates"
          },
          {
            "name": "itoa",
            "direct": false,
            "version": "1.0.15",
            "ecosystem": "crates"
          },
          {
            "name": "libc",
            "direct": false,
            "version": "0.2.177",
            "ecosystem": "crates"
          },
          {
            "name": "libm",
            "direct": false,
            "version": "0.2.16",
            "ecosystem": "crates"
          },
          {
            "name": "libz-rs-sys",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "crates"
          },
          {
            "name": "log",
            "direct": false,
            "version": "0.4.33",
            "ecosystem": "crates"
          },
          {
            "name": "memchr",
            "direct": false,
            "version": "2.7.6",
            "ecosystem": "crates"
          },
          {
            "name": "miniz_oxide",
            "direct": false,
            "version": "0.8.9",
            "ecosystem": "crates"
          },
          {
            "name": "moxcms",
            "direct": false,
            "version": "0.8.1",
            "ecosystem": "crates"
          },
          {
            "name": "num-complex",
            "direct": false,
            "version": "0.4.6",
            "ecosystem": "crates"
          },
          {
            "name": "num-integer",
            "direct": false,
            "version": "0.1.46",
            "ecosystem": "crates"
          },
          {
            "name": "num-traits",
            "direct": false,
            "version": "0.2.19",
            "ecosystem": "crates"
          },
          {
            "name": "once_cell",
            "direct": false,
            "version": "1.21.3",
            "ecosystem": "crates"
          },
          {
            "name": "primal-check",
            "direct": false,
            "version": "0.3.4",
            "ecosystem": "crates"
          },
          {
            "name": "proc-macro2",
            "direct": false,
            "version": "1.0.103",
            "ecosystem": "crates"
          },
          {
            "name": "pxfm",
            "direct": false,
            "version": "0.1.25",
            "ecosystem": "crates"
          },
          {
            "name": "quick-error",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "crates"
          },
          {
            "name": "quote",
            "direct": false,
            "version": "1.0.42",
            "ecosystem": "crates"
          },
          {
            "name": "rayon-core",
            "direct": false,
            "version": "1.13.0",
            "ecosystem": "crates"
          },
          {
            "name": "regex-automata",
            "direct": false,
            "version": "0.4.14",
            "ecosystem": "crates"
          },
          {
            "name": "regex-syntax",
            "direct": false,
            "version": "0.8.8",
            "ecosystem": "crates"
          },
          {
            "name": "rustc_version",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "crates"
          },
          {
            "name": "rustversion",
            "direct": false,
            "version": "1.0.22",
            "ecosystem": "crates"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "1.0.27",
            "ecosystem": "crates"
          },
          {
            "name": "serde_core",
            "direct": false,
            "version": "1.0.228",
            "ecosystem": "crates"
          },
          {
            "name": "simd-adler32",
            "direct": false,
            "version": "0.3.7",
            "ecosystem": "crates"
          },
          {
            "name": "strength_reduce",
            "direct": false,
            "version": "0.2.4",
            "ecosystem": "crates"
          },
          {
            "name": "syn",
            "direct": false,
            "version": "2.0.110",
            "ecosystem": "crates"
          },
          {
            "name": "tinyvec",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "crates"
          },
          {
            "name": "tinyvec_macros",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "crates"
          },
          {
            "name": "transpose",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "crates"
          },
          {
            "name": "typed-path",
            "direct": false,
            "version": "0.12.3",
            "ecosystem": "crates"
          },
          {
            "name": "unicode-ident",
            "direct": false,
            "version": "1.0.22",
            "ecosystem": "crates"
          },
          {
            "name": "wasm-bindgen",
            "direct": false,
            "version": "0.2.105",
            "ecosystem": "crates"
          },
          {
            "name": "wasm-bindgen-macro",
            "direct": false,
            "version": "0.2.105",
            "ecosystem": "crates"
          },
          {
            "name": "wasm-bindgen-macro-support",
            "direct": false,
            "version": "0.2.105",
            "ecosystem": "crates"
          },
          {
            "name": "wasm-bindgen-shared",
            "direct": false,
            "version": "0.2.105",
            "ecosystem": "crates"
          },
          {
            "name": "zlib-rs",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "crates"
          },
          {
            "name": "zmij",
            "direct": false,
            "version": "1.0.21",
            "ecosystem": "crates"
          },
          {
            "name": "zopfli",
            "direct": false,
            "version": "0.8.3",
            "ecosystem": "crates"
          },
          {
            "name": "zune-core",
            "direct": false,
            "version": "0.5.0",
            "ecosystem": "crates"
          },
          {
            "name": "zune-jpeg",
            "direct": false,
            "version": "0.5.5",
            "ecosystem": "crates"
          },
          {
            "name": "../..",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@emnapi/runtime",
            "direct": false,
            "version": "0.44.0",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-darwin-arm64",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-darwin-x64",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-libvips-darwin-arm64",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-libvips-darwin-x64",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-libvips-linux-arm",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-libvips-linux-arm64",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-libvips-linux-s390x",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-libvips-linux-x64",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-libvips-linuxmusl-arm64",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-libvips-linuxmusl-x64",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-linux-arm",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-linux-arm64",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-linux-s390x",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-linux-x64",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-linuxmusl-arm64",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-linuxmusl-x64",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-wasm32",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-win32-ia32",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "@img/sharp-win32-x64",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "color",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "color-string",
            "direct": false,
            "version": "1.9.1",
            "ecosystem": "npm"
          },
          {
            "name": "detect-libc",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "is-arrayish",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "lru-cache",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.5.4",
            "ecosystem": "npm"
          },
          {
            "name": "sharp",
            "direct": false,
            "version": "0.33.1",
            "ecosystem": "npm"
          },
          {
            "name": "simple-swizzle",
            "direct": false,
            "version": "0.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "yallist",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "mypy",
            "direct": false,
            "version": "1.10.0",
            "ecosystem": "pypi"
          },
          {
            "name": "onnxruntime",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "pillow",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "ruff",
            "direct": false,
            "version": "0.4.3",
            "ecosystem": "pypi"
          },
          {
            "name": "timm",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "tokenizers",
            "direct": false,
            "version": "0.15.0",
            "ecosystem": "pypi"
          },
          {
            "name": "torch",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          },
          {
            "name": "wikipedia-api",
            "direct": false,
            "version": "0.6.0",
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 150,
        "direct_count": 40,
        "indirect_count": 110
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 7,
        "merged_prs": 1221,
        "open_issues": 42,
        "closed_ratio": 0.72,
        "closed_issues": 108,
        "closed_unmerged_prs": 15
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "robertknight",
          "commits": 4694,
          "avatar_url": "https://avatars.githubusercontent.com/u/2458?v=4"
        },
        {
          "type": "User",
          "login": "xd009642",
          "commits": 21,
          "avatar_url": "https://avatars.githubusercontent.com/u/3472518?v=4"
        },
        {
          "type": "User",
          "login": "luketpeterson",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/36806965?v=4"
        },
        {
          "type": "User",
          "login": "hsfzxjy",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/4702188?v=4"
        },
        {
          "type": "User",
          "login": "igor-yusupov",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/47746505?v=4"
        }
      ],
      "contributors_sampled": 5,
      "top_contributor_share": 0.995
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "Cargo.lock",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "12 out of 12 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/17 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 6 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 26 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 9,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 7,
            "reason": "3 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "8de4ddaa881d669670eabc08674bd2b28153b823",
        "ran_at": "2026-08-01T20:26:44Z",
        "aggregate_score": 5.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-08-01T20:14:29Z",
      "oldest_open_prs": [
        {
          "number": 315,
          "created_at": "2024-08-22T04:37:59Z",
          "last_comment_at": "2024-09-15T13:09:45Z",
          "last_comment_author": "hsfzxjy"
        },
        {
          "number": 1187,
          "created_at": "2026-01-06T07:43:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1337,
          "created_at": "2026-07-09T06:36:54Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1358,
          "created_at": "2026-07-18T17:41:21Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1363,
          "created_at": "2026-07-19T18:46:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1385,
          "created_at": "2026-07-26T08:48:02Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 1413,
          "created_at": "2026-08-01T20:23:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-08-01T20:10:54Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 14,
          "created_at": "2023-09-17T07:11:52Z",
          "last_comment_at": "2026-07-12T14:42:32Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 15,
          "created_at": "2023-11-18T15:31:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 17,
          "created_at": "2023-12-30T12:59:39Z",
          "last_comment_at": "2023-12-30T13:02:45Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 18,
          "created_at": "2023-12-31T08:04:35Z",
          "last_comment_at": "2024-05-26T10:06:06Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 38,
          "created_at": "2024-01-07T22:47:25Z",
          "last_comment_at": "2024-01-08T08:30:04Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 52,
          "created_at": "2024-02-08T08:50:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 71,
          "created_at": "2024-03-30T10:59:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 122,
          "created_at": "2024-04-26T08:26:09Z",
          "last_comment_at": "2025-07-12T07:00:53Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 151,
          "created_at": "2024-05-05T09:54:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 244,
          "created_at": "2024-06-21T08:30:52Z",
          "last_comment_at": "2024-06-21T08:44:04Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 270,
          "created_at": "2024-07-05T08:48:14Z",
          "last_comment_at": "2025-07-21T18:04:10Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 370,
          "created_at": "2024-09-21T05:45:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 371,
          "created_at": "2024-09-21T05:50:53Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 389,
          "created_at": "2024-10-18T19:14:44Z",
          "last_comment_at": "2024-11-14T18:57:11Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 414,
          "created_at": "2024-11-24T10:31:18Z",
          "last_comment_at": "2025-05-29T16:52:45Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 427,
          "created_at": "2024-12-02T08:06:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 484,
          "created_at": "2024-12-25T08:35:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 578,
          "created_at": "2025-02-04T09:33:03Z",
          "last_comment_at": "2025-10-27T12:05:36Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 596,
          "created_at": "2025-02-12T08:48:26Z",
          "last_comment_at": "2025-03-29T06:40:06Z",
          "last_comment_author": "robertknight"
        },
        {
          "number": 655,
          "created_at": "2025-04-09T05:44:31Z",
          "last_comment_at": "2025-04-13T17:49:34Z",
          "last_comment_author": "robertknight"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/robertknight/rten",
    "host": "github.com",
    "name": "rten",
    "owner": "robertknight"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 69,
      "inputs": {
        "security": 59,
        "vitality": 88,
        "community": 55,
        "governance": 63,
        "engineering": 75
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 88,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 94,
            "inputs": {
              "commits_last_year": 1245,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 44
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "44/52 weeks with commits",
                "points": 30.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 44
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1245 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1245
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 26 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "releases_count": 11,
              "latest_release_tag": "v0.25.0",
              "releases_from_tags": true,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 50
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "11 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~50 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 50
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 55,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "forks": 24,
              "stars": 329,
              "watchers": 3,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "329 stars",
                "points": 40.8,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 329
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "24 forks",
                "points": 11.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 24
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "3 watchers",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "packages": [
                "rten",
                "rten-cli",
                "rten-base",
                "rten-gemm",
                "rten-onnx",
                "rten-simd",
                "rten-text"
              ],
              "dependents": null,
              "ecosystems": "crates",
              "total_downloads": 5131549,
              "monthly_downloads": 1156084
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "1,156,084 downloads/month across crates",
                "points": 80,
                "status": "met",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 1156084,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 63,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 26,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 5,
              "top_contributor_share": 0.995
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "5 contributors",
                "points": 6.8,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 6 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "merged_prs": 1221,
              "open_issues": 42,
              "closed_issues": 108,
              "issue_closed_ratio": 0.72,
              "closed_unmerged_prs": 15
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "72% of issues closed",
                "points": 33.7,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 72
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "1221/1236 decided PRs merged",
                "points": 37.8,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 1221,
                      "decided": 1236
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/17 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 68,
            "inputs": {
              "followers": 451,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "robertknight",
              "public_repos": 177,
              "account_age_days": 6721
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "451 followers of robertknight",
                "points": 19.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 451,
                      "login": "robertknight"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "177 public repos, account ~18 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 177
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 18
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "rten",
                "rten-cli",
                "rten-base",
                "rten-gemm",
                "rten-onnx",
                "rten-simd",
                "rten-text"
              ],
              "ecosystems": "crates",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "7 package(s) on crates",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 7,
                      "ecosystems": "crates"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "32 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 75,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "12 out of 12 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "machine-learning",
                "onnx",
                "rust"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "3 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 59,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "12 out of 12 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/17 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 6 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 26 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "3 existing vulnerabilities detected",
                "points": 5.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 128 resolved dependencies against OSV; 22 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 128
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 22
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 89,
            "inputs": {
              "source": "osv",
              "advisories": 3,
              "affected_packages": 3,
              "assessed_packages": 128,
              "unassessed_packages": 22,
              "affected_by_severity": "high 1, unknown 2",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: memmap2 0.9.10 (unknown)",
                "points": 26.6,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "memmap2 0.9.10 (unknown)"
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 128,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 3
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 67,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.97,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "97 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 97,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "Cargo.lock",
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "js-examples/image-classification/Makefile",
                "rten-convert/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.46,
              "toolchain_manifests": [
                "Cargo.toml",
                "rten-base/Cargo.toml",
                "rten-bench/Cargo.toml",
                "rten-cli/Cargo.toml",
                "rten-examples/Cargo.toml",
                "rten-gemm/Cargo.toml",
                "rten-generate/Cargo.toml",
                "rten-imageio/Cargo.toml",
                "rten-imageproc/Cargo.toml",
                "rten-model-file/Cargo.toml",
                "rten-onnx/Cargo.toml",
                "rten-parallel/Cargo.toml",
                "rten-serialize/Cargo.toml",
                "rten-shape-inference/Cargo.toml",
                "rten-simd/Cargo.toml",
                "rten-tensor/Cargo.toml",
                "rten-testing/Cargo.toml",
                "rten-text/Cargo.toml",
                "rten-vecmath/Cargo.toml"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, js-examples/image-classification/Makefile, rten-convert/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, js-examples/image-classification/Makefile, rten-convert/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Rust (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "46 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 46,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "primary_language": "Rust",
              "largest_source_bytes": 472621,
              "source_files_sampled": 300,
              "oversized_source_files": 14
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Rust (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Rust"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "14/300 source files over 60KB",
                "points": 52.4,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 300,
                      "oversized": 14
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "Could not fetch npm package 'rten' from its registry",
    "deps.dev does not index crates:rten@0.25.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-08-01T20:26:58.064570Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/robertknight/rten.svg",
  "full_name": "robertknight/rten",
  "license_state": "absent",
  "license_spdx": null
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаcrates.io.