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

JuliaPy / PythonCall.jl

Python and Julia in harmony.

JuliaMIT★ 1 059 зірок⑂ 84 форкиз лист. 2020 р.Переглянути на GitHub ↗

JuliaPy/PythonCall.jl має індекс здоров’я 73 зі 100, що відповідає смузі «Добрий». Найвищий показник — Vitality (88/100), найнижчий — AI Readiness (52/100). Останнє оновлення було 1 день тому. Більшість нещодавньої роботи виконує один учасник.

73
загалом / 100
Добрий

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

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

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

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

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

Власність

JuliaPyОрганізація
106 підписників15 публічних репозиторіївз вер. 2016 р.

За цим репозиторієм стоїть організація — спільна, підзвітна опіка, здатна пережити будь-якого окремого мейнтейнера.

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
PyPIjuliacall0.9.35194 6594448 днів тому

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

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

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

88Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 1 дн. тому
17.3/36Ритм комітів — 25/52 тижнів із комітами
16.6/18Обсяг комітів — 69 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 25 commit(s) and 11 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year69
human_commit_share0,82
days_since_last_push1
active_weeks_last_year25
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 50 релізів
36/36Свіжість релізів — останній реліз 48 дн. тому
27/27Ритм релізів — реліз кожні ~36,4 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count50
latest_release_tagv0.9.35
releases_from_tagsні
days_since_latest_release48
mean_days_between_releases36,4
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

67Помірний · 18% загального індексу
Як обчислюється оцінка
49.1/60Зірки — 1 059 зірок
16/25Форки — 84 форків
3.3/15Спостерігачі — 5 спостерігачів
Використані вхідні дані
forks84
stars1 059
watchers5
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
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ні
Як обчислюється оцінка
70.5/80Щомісячні завантаження — 194 659 завантажень/місяць у pypi
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagesjuliacall
dependents
ecosystemspypi
total_downloads
monthly_downloads194 659
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

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

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

65Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
10.5/22.5Розподіл комітів — головний контриб’ютор — автор 53% комітів
13.5/13.5Широта контриб’юторів — 42 контриб’юторів
10/10OpenSSF Scorecard: Contributors — project has 9 contributing companies or organizations
Використані вхідні дані
bus_factor1
contributors_sampled42
top_contributor_share0,534
Як обчислюється оцінка
31/46.8Вирішення issue — закрито 66% issue
29.4/38.3Прийняття PR — злито 155/202 вирішених PR
4.5/15OpenSSF Scorecard: Code-Review — Found 7/23 approved changesets -- score normalized to 3
Використані вхідні дані
merged_prs155
open_issues179
closed_issues353
issue_closed_ratio0,664
closed_unmerged_prs47
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
14.6/25Охоплення власника — 106 підписників у JuliaPy
20.8/25Послужний список — 15 публічних репозиторіїв, вік облікового запису ~9 р.
Використані вхідні дані
followers106
owner_typeOrganization
is_verified
owner_loginJuliaPy
public_repos15
account_age_days3 610

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

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у pypi
35/35Свіжість публікацій — остання публікація 48 дн. тому
20/20Історія версій — 44 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesjuliacall
ecosystemspypi
any_deprecatedні
min_days_since_publish48

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

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

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

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

100Відмінний
Як обчислюється оцінка
30/30README
25/25Каталог документації
15/15Сайт документації / домашня сторінка — https://juliapy.github.io/PythonCall.jl/stable/
10/10Опис репозиторію
10/10Теми — 4 тем
10/10Wiki
Використані вхідні дані
topicsjulia, python, interoperability, ffi
has_wikiтак
homepagehttps://juliapy.github.io/PythonCall.jl/stable/
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

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

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

Стан безпеки

54Помірний
Як обчислюється оцінка
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 — 22 out of 22 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
2.2/7.5Code-Review — Found 7/23 approved changesets -- score normalized to 3
2.5/2.5Contributors — project has 9 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
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 25 commit(s) and 11 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
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5,4
Виключено з оцінювання (немає даних або не застосовно): packaging, signed_releases. Залишкові ваги перенормовано.
Як обчислюється оцінка
35/35Прямі залежності без відомих сповіщень — жодна пряма залежність не має відомих сповіщень
25/25Непрямі залежності без відомих сповіщень — жодна непряма залежність не має відомих сповіщень
0/40Немає задавнених сповіщень — жодне сповіщення не має дати публікації
Використані вхідні дані
sourceosv
advisories0
affected_packages0
assessed_packages5
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Виключено з оцінювання (немає даних або не застосовно): Немає задавнених сповіщень. Залишкові ваги перенормовано. Звірено з runtime-замиканням залежностей pypi:juliacall@0.9.35 — тим, що тягне за собою встановлення опублікованого пакета, — 5 пакетів. Досяжність не аналізується.

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

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

52Помірний · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — AGENTS.md
0/15Машиночитана документація (llms.txt)
39.7/40Читабельна історія комітів — намір зазначено у 61 з 82 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,744
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes1 080
Як обчислюється оцінка
0/18Розгортання однією командою
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
0/11Статична перевірка типів
0/10Відтворюване середовище
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
8/8Автоматизоване супроводження — 18 з останніх 100 комітів — автоматичні оновлення залежностей
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfiles
has_dockerfileні
typed_languageні
bootstrap_files
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,18
Як обчислюється оцінка
0/45Типізований код — Julia без конфігурації перевірки типів
55/55Керовані розміри файлів — 0/9 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageJulia
largest_source_bytes13 535
source_files_sampled9
oversized_source_files0
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
0/20Сервер MCP
40/40Придатні до запуску приклади — examples, notebooks
Використані вхідні дані
example_dirsexamples, notebooks
has_mcp_signalні
api_schema_files

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

1 059зірок GitHub
42контриб'юторів
69комітів за останні 12 місяців
1днів від останнього пушу
50релізів
1бас-фактор
179відкритих issue
PyPIпакетних екосистем

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

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Докладніше

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

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

0204060801008432021-022023-102026-06
Мажорні 0Мінорні 9Патчі 41

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

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

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests22 out of 22 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
3Code-ReviewFound 7/23 approved changesets -- score normalized to 3
10Contributorsproject has 9 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained25 commit(s) and 11 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
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Прямі залежності 1
РеєстрПакетОбмеження версіїМаніфест
PyPIjuliapkg>=0.1.24, <0.2pyproject.toml
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Сповіщення про залежності 0

Встановлення pypi:juliacall@0.9.35 тягне 5 пакетів, прямих і транзитивних: 0 мають відомі сповіщення, з них 0 — прямі залежності.

Жодне відоме сповіщення не стосується оцінених залежностей.

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

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [
        "julia",
        "python",
        "interoperability",
        "ffi"
      ],
      "is_fork": false,
      "size_kb": 6501,
      "has_wiki": true,
      "homepage": "https://juliapy.github.io/PythonCall.jl/stable/",
      "languages": {
        "Julia": 544991,
        "Python": 40329,
        "Jupyter Notebook": 2273
      },
      "pushed_at": "2026-07-25T16:33:18Z",
      "created_at": "2020-11-03T16:11:11Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-25T13:40:50Z",
      "description": "Python and Julia in harmony.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Julia",
      "significant_languages": [
        "Julia"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "JuliaPy",
      "company": null,
      "location": null,
      "followers": 106,
      "avatar_url": "https://avatars.githubusercontent.com/u/22030672?v=4",
      "created_at": "2016-09-06T14:36:08Z",
      "is_verified": null,
      "public_repos": 15,
      "account_age_days": 3610
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.9.35",
          "kind": "patch",
          "published_at": "2026-06-08T07:48:18Z"
        },
        {
          "tag": "v0.9.34",
          "kind": "patch",
          "published_at": "2026-05-18T14:03:53Z"
        },
        {
          "tag": "v0.9.33",
          "kind": "patch",
          "published_at": "2026-05-18T10:17:11Z"
        },
        {
          "tag": "v0.9.32",
          "kind": "patch",
          "published_at": "2026-05-14T20:41:49Z"
        },
        {
          "tag": "v0.9.31",
          "kind": "patch",
          "published_at": "2025-12-17T10:03:27Z"
        },
        {
          "tag": "v0.9.30",
          "kind": "patch",
          "published_at": "2025-11-18T12:48:42Z"
        },
        {
          "tag": "v0.9.29",
          "kind": "patch",
          "published_at": "2025-11-14T21:49:09Z"
        },
        {
          "tag": "v0.9.28",
          "kind": "patch",
          "published_at": "2025-09-17T21:58:04Z"
        },
        {
          "tag": "v0.9.27",
          "kind": "patch",
          "published_at": "2025-08-19T20:39:06Z"
        },
        {
          "tag": "v0.9.26",
          "kind": "patch",
          "published_at": "2025-07-15T18:49:09Z"
        },
        {
          "tag": "v0.9.25",
          "kind": "patch",
          "published_at": "2025-05-13T22:33:03Z"
        },
        {
          "tag": "v0.9.24",
          "kind": "patch",
          "published_at": "2025-01-22T10:32:05Z"
        },
        {
          "tag": "v0.9.23",
          "kind": "patch",
          "published_at": "2024-08-22T20:08:14Z"
        },
        {
          "tag": "v0.9.22",
          "kind": "patch",
          "published_at": "2024-08-07T06:40:23Z"
        },
        {
          "tag": "v0.9.21",
          "kind": "patch",
          "published_at": "2024-07-20T21:50:22Z"
        },
        {
          "tag": "v0.9.20",
          "kind": "patch",
          "published_at": "2024-05-01T13:41:27Z"
        },
        {
          "tag": "v0.9.19",
          "kind": "patch",
          "published_at": "2024-03-19T18:54:37Z"
        },
        {
          "tag": "v0.9.18",
          "kind": "patch",
          "published_at": "2024-03-18T19:01:11Z"
        },
        {
          "tag": "v0.9.17",
          "kind": "patch",
          "published_at": "2024-03-16T18:09:32Z"
        },
        {
          "tag": "v0.9.16",
          "kind": "patch",
          "published_at": "2024-03-14T19:17:43Z"
        },
        {
          "tag": "v0.9.15",
          "kind": "patch",
          "published_at": "2023-10-25T17:55:58Z"
        },
        {
          "tag": "v0.9.14",
          "kind": "patch",
          "published_at": "2023-07-26T20:27:49Z"
        },
        {
          "tag": "v0.9.13",
          "kind": "patch",
          "published_at": "2023-05-14T14:21:52Z"
        },
        {
          "tag": "v0.9.12",
          "kind": "patch",
          "published_at": "2023-02-28T13:50:07Z"
        },
        {
          "tag": "v0.9.11",
          "kind": "patch",
          "published_at": "2023-02-15T18:59:21Z"
        },
        {
          "tag": "v0.9.10",
          "kind": "patch",
          "published_at": "2022-12-02T22:43:39Z"
        },
        {
          "tag": "v0.9.9",
          "kind": "patch",
          "published_at": "2022-10-20T18:30:41Z"
        },
        {
          "tag": "v0.9.8",
          "kind": "patch",
          "published_at": "2022-10-18T10:56:21Z"
        },
        {
          "tag": "v0.9.7",
          "kind": "patch",
          "published_at": "2022-10-11T13:55:44Z"
        },
        {
          "tag": "v0.9.6",
          "kind": "patch",
          "published_at": "2022-09-09T19:06:23Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2022-08-19T16:15:34Z"
        },
        {
          "tag": "v0.9.4",
          "kind": "patch",
          "published_at": "2022-07-26T11:25:24Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2022-07-02T18:02:38Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2022-07-02T17:26:47Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2022-06-18T20:38:53Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2022-05-27T00:55:56Z"
        },
        {
          "tag": "v0.8.0",
          "kind": "minor",
          "published_at": "2022-03-17T18:36:08Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2022-03-17T17:26:16Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2022-02-21T19:18:36Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2022-02-17T15:51:52Z"
        },
        {
          "tag": "v0.5.1",
          "kind": "patch",
          "published_at": "2022-01-24T10:59:35Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2021-12-21T18:18:50Z"
        },
        {
          "tag": "v0.4.3",
          "kind": "patch",
          "published_at": "2021-11-03T18:53:29Z"
        },
        {
          "tag": "v0.4.2",
          "kind": "patch",
          "published_at": "2021-10-23T16:17:16Z"
        },
        {
          "tag": "v0.4.1",
          "kind": "patch",
          "published_at": "2021-10-22T10:10:53Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2021-10-21T18:05:40Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2021-09-21T15:01:19Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2021-03-25T10:50:27Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2021-03-08T18:59:33Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2021-03-04T21:47:11Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "6024344c3c46a560dbd92c8ece51b0b2859dc952",
          "body": "Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6 to 7.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n  dependency-\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/setup-python from 6 to 7 (#803)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-25T13:40:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "190ba5c95d3d7cf0d29eed58ab8c5343ef5401a2",
          "body": "Previously was restricted because the python available in the runner had an old version of openssl so required Julia 1.11 or older.",
          "is_bot": false,
          "headline": "unrestrict Julia version in python tests",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-07-25T13:35:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "acce04205409688f486246755ab7a1f75a004acf",
          "body": "Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/cache from 5 to 6 (#793)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T07:45:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "256d473bb651e74012a4e4559f1cdda50fa80948",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 6 to 7 (#794)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T07:45:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e477d4d805f5136c274576cc37cea6101bebe4c5",
          "body": "Update installation command for the JuliaCall package.\r\n\r\nThe pyjuliacall conda package was split out from the pyjuliapkg conda package (and depends on it).",
          "is_bot": false,
          "headline": "Fix conda installation command for pyjuliacall (#791)",
          "author_name": "Jonas Hörsch",
          "author_login": "coroa",
          "committed_at": "2026-06-12T20:14:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d8884fe2631be5a2e8c0b22631de3742db8470e",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 6 to 7.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 6 to 7 (#789)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-12T20:12:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "509390a1982428140dcfa15b60f1dcfd42df7a4b",
          "body": null,
          "is_bot": false,
          "headline": "release v0.9.35",
          "author_name": "Christopher Rowley",
          "author_login": null,
          "committed_at": "2026-06-08T07:27:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79e8a440687d0b199fe2f9a46051986cf65e93da",
          "body": "* pass libptr by env var instead\n\n* update changelog\n\n---------\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Libptr by env (#781)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-06-02T17:03:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34d3f55f6051de5d57739d0064d04f8de0005b9e",
          "body": "Co-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "add method pynext(x, d) (#783)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-05-31T19:59:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "241709dcacf53acec78ce003954683b2ec31dd11",
          "body": "* fix: rare crash due to race condition\n\nThe vectors PYJLVALUES and PYJLFREEVALUES are modified without any protection against GC-triggered re-entrancy.\n\n  _pyjl_dealloc(o1) or PyJuliaValue_SetValue\n    └→ push!(PYJLFREEVALUES, idx)          # begins resize (sets internal flag)\n         └→ vector mu\n[…]\n.\nAdded a SpinLock as defense-in-depth against true multi-thread races.\n\n* fix: no GC disable. avoid resize PYJLFREEVALUES in dealloc\n\n---------\n\nCo-authored-by: Dani Pinyol <dani@avatarcognition.com>",
          "is_bot": false,
          "headline": "fix crashes using multithreaded julia from python (#758)",
          "author_name": "Daniel Pinyol",
          "author_login": "dpinol",
          "committed_at": "2026-05-31T15:31:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b26f202e1393b7a6d2efa9911ff002d94e8bf9d0",
          "body": "Co-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "use juliapkg.libjulia() for faster init in juliacall (#782)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-05-31T15:23:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6aeeba05fa0f6c38a11751168552cc8ac025dac1",
          "body": "* feat(juliacall): allow supplying libjulia path / bindir to skip discovery subprocess\n\ninit() starts a short-lived Julia process solely to print libjulia's\npath and Sys.BINDIR. In pre-built containers / system images these are\nstatic and known ahead of time; allow supplying them via the libpath /\nd\n[…]\nif others are set\n\n* remove 'if' that is always true\n\n---------\n\nCo-authored-by: Nicolae Cudlenco <146981376+ncudlenco@users.noreply.github.com>\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "774 v2 (#779)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-05-24T15:09:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b4cd8cf83acdc42d37bdc3b531d80da19bd5bee9",
          "body": "…ed (#778)\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "only set JULIA_DEBUG=PythonCall when running with debug logging enabl…",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-05-24T13:56:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1974b203af8572fd8744b2032abdace5b91487b8",
          "body": "* Reject PyArray buffer with suboffsets\n\n* nest new test under existing PyArray testitem\n\n* update changelog\n\n---------\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Reject PyArray buffer with suboffsets (#776)",
          "author_name": "Nathan Zimmerberg",
          "author_login": "nhz2",
          "committed_at": "2026-05-24T13:55:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "beec1ec0363d21886558962b6c78689cd1ddee41",
          "body": null,
          "is_bot": false,
          "headline": "release v0.9.34",
          "author_name": "Christopher Rowley",
          "author_login": null,
          "committed_at": "2026-05-18T13:34:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1961556f2153c7aec29c866b31bb9596ded888e3",
          "body": null,
          "is_bot": false,
          "headline": "hotfix: revert juliapkg.json to non-dev version",
          "author_name": "Christopher Rowley",
          "author_login": null,
          "committed_at": "2026-05-18T13:33:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58904d4975aab34d054b2d21c0390a1e5d6975d0",
          "body": null,
          "is_bot": false,
          "headline": "release v0.9.33",
          "author_name": "Christopher Rowley",
          "author_login": null,
          "committed_at": "2026-05-18T09:51:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be253f5ab306f6feef54a814decf60c6fa18e13a",
          "body": "…dled properly (#770)\n\nthe fix is to do the propertynames logic directly on the current thread when it already holds the gil, rather than using on_main_thread\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "fix bug when calling propertynames on a different thread with gil han…",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-05-18T09:45:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26b5482ead6726c8f360070073cbb9efb0edeaca",
          "body": "* skip importing CondaPkg if not needed\n\n* remove dependence on Pkg\n\n* apply suggestion\n\n* remove unused arg\n\n---------\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "skip importing CondaPkg if not needed (take 3) (#769)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-05-18T09:10:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcb5502efbaeb99b35b61a4bb189c966196550b7",
          "body": "* remove PYNULL_CACHE\n\n* restore PYNULL_CACHE but with a lock now\n\n* back to removing PYNULL_CACHE but now skip the finalizer\n\n* revert to some default settings in benchmark ci\n\n* docstring clarification\n\n---------\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "remove PYNULL_CACHE (#767)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-05-17T14:44:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2381ce196ef79993867bc73eb447a062e11b19b6",
          "body": null,
          "is_bot": false,
          "headline": "update changelog",
          "author_name": "Christopher Rowley",
          "author_login": null,
          "committed_at": "2026-05-16T13:57:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3aa16029e2e2771204cea0606852a72d44665f17",
          "body": "* add Preferences.jl-based configuration\n\n* nitpicks\n\n* docs nitpicks\n\n---------\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "add Preferences.jl-based configuration (#742)",
          "author_name": "Marius Millea",
          "author_login": "marius311",
          "committed_at": "2026-05-16T13:53:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e364646d125d1b3052cd43906a00266558babe4d",
          "body": null,
          "is_bot": false,
          "headline": "release v0.9.32",
          "author_name": "Christopher Rowley",
          "author_login": null,
          "committed_at": "2026-05-14T20:12:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d690417ea2a36b8c436e4886674169008810419",
          "body": "Co-authored-by: Dani Pinyol <dani@avatarcognition.com>",
          "is_bot": false,
          "headline": "fix: honour JULIA_NUM_THREADS (#761)",
          "author_name": "Daniel Pinyol",
          "author_login": "dpinol",
          "committed_at": "2026-05-12T13:04:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c95352538d4847c6be430ce3b37244e48a70cd20",
          "body": "* Bump julia-actions/setup-julia from 2 to 3\n\nBumps [julia-actions/setup-julia](https://github.com/julia-actions/setup-julia) from 2 to 3.\n- [Release notes](https://github.com/julia-actions/setup-julia/releases)\n- [Commits](https://github.com/julia-actions/setup-julia/compare/v2...v3)\n\n---\nupdated-d\n[…]\n--------\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>\nCo-authored-by: Christopher Rowley <cjdrwly@gmail.com>",
          "is_bot": true,
          "headline": "Bump julia-actions/setup-julia from 2 to 3 (#766)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-07T10:42:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8f7baa5e716375219125175eb0e9a592d573f4c7",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 5 to 6.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 5 to 6 (#756)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-04-03T21:36:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a3565aa48c3cd438b2bbcad4d7871386adcae8e6",
          "body": "Bumps [julia-actions/cache](https://github.com/julia-actions/cache) from 2 to 3.\n- [Release notes](https://github.com/julia-actions/cache/releases)\n- [Commits](https://github.com/julia-actions/cache/compare/v2...v3)\n\n---\nupdated-dependencies:\n- dependency-name: julia-actions/cache\n  dependency-versi\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump julia-actions/cache from 2 to 3 (#753)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-03-12T22:42:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4adeb0ab808b5df6b2c09618816e4128d11d32d3",
          "body": "* fix: support CPython free-threaded builds\n\nCo-authored-by: Miles Cranmer <miles.cranmer@gmail.com>\n\n* ci: test with python3.14t\n\nCo-authored-by: Miles Cranmer <miles.cranmer@gmail.com>\n\n* refactor: centralize free-threaded layout branching\n\nCo-authored-by: Miles Cranmer <miles.cranmer@gmail.com>\n\n\n[…]\nngelog\n\n* extra care to ensure pythoncall uses the correct python executable\n\n---------\n\nCo-authored-by: Miles Cranmer <miles.cranmer@gmail.com>\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Fix: support CPython free-threaded builds (3.14t) (#746)",
          "author_name": "MilesCranmerBot",
          "author_login": "MilesCranmerBot",
          "committed_at": "2026-02-16T13:44:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9de4d94d24d7afc7ae3a1a8883d58581a5476b59",
          "body": "* Add trace-compile configuration and internal config helpers\n\n* tweak implementation of new options and document\n\n---------\n\nCo-authored-by: Guillem Ramirez Miranda <guillem@avatarcognition.com>\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Add trace-compile configuration and internal config helpers (#743)",
          "author_name": "Guillem Ramírez Miranda",
          "author_login": "gnuille",
          "committed_at": "2026-02-16T11:37:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "175f80708d1df66c43378634d27c8ed4f500b92c",
          "body": null,
          "is_bot": false,
          "headline": "Activate dependabot for julia",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-02-15T18:29:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3067e530386a28ae887b0f4024e7e43c4c11a58",
          "body": "Co-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "juliacall now starts julia with one thread by default (#750)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-02-15T18:21:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcddcb6fade2f7f416d1fd12cb2c3d4980976f73",
          "body": "* Drop redundant word\n\n* corrections and punctuation\n\n---------\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Drop redundant word (#740)",
          "author_name": "Páll Haraldsson",
          "author_login": "PallHaraldsson",
          "committed_at": "2026-02-15T16:50:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8100cb91e35ec641a0cea13eb619faf9d9387a47",
          "body": "Co-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "fix compatibility with pandas 3 (#747)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-02-07T07:50:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef6c4040d8ac4cbaf0fa387bacbd09b03a8287ad",
          "body": "That is, np.array(array).dtype == np.dtype(eltype(array)).\n\nFor this to hold, we needed to restrict to only creating dtypes for\nprimitives, tuples and named tuples. We removed support for arbitrary\nstructs (which are not supported by our implementation of the array\ninterface and buffer protocol).\n\nW\n[…]\n The fix here is to compute a\ndifferent representation of the same information for the dtype - namely\nthe dict of names, types and offsets way.\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Adds tests (and fixes) for the dtype invariant. (#739)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-01-23T21:56:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f0365a924c229ce77b1c41b3b869acdb16fa36e8",
          "body": "* Add numpy dtype mapping for TypeValue\n\n* Move numpy dtype mapping to Julia\n\n* tidying\n\n* add support for datetime64 and timedelta64\n\n* add tests for struct types\n\n* document struct support\n\n* test simplifications and comments\n\n* update changelog\n\n---------\n\nCo-authored-by: Christopher Rowley <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Add numpy dtype access for TypeValue (#738)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2026-01-23T12:11:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be1634298ff27633bc3b4ce414526100bad2fe2c",
          "body": null,
          "is_bot": false,
          "headline": "release v0.9.31",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-12-17T09:28:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78e2f7c2126ed1206a9ab673b4b847fe0b45030c",
          "body": "Co-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "support python 3.14 (#733)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-12-15T21:51:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90f81a3681c467ca1dedea35784c842c77297329",
          "body": "Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/cache from 4 to 5 (#732)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-12-15T09:23:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "04f85fdfe0052c756963e09d7f130c7b6980d208",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v5...v6)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 5 to 6 (#726)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-11-25T22:46:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4bf3e37f41f868f3200cc77cc0eff6e44c492b9b",
          "body": null,
          "is_bot": false,
          "headline": "release 0.9.30",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-11-18T11:30:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f496cd16b34ce39fa6e9ec4e2f4b7612e0e5f982",
          "body": "* Add top-level testing instructions\n\n* Update AGENTS testing guidance\n\n* Update AGENTS after rerunning Python tests\n\n* Update AGENTS.md",
          "is_bot": false,
          "headline": "Add top-level testing instructions (#725)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-11-17T10:22:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b385d620cbdcb66e2dbc4d0a773e49dbd48c77d",
          "body": "Co-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "remove support for python 3.14 (#723)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-11-14T22:06:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "099da1afee570c4b849bb86afc0ed44b0f5f2818",
          "body": "Co-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "add a step to build PyCall (#722)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-11-14T21:48:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "582d59ccf32fe7ca7d8af7fb2d88b6950619fb05",
          "body": null,
          "is_bot": false,
          "headline": "release 0.9.29",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-11-14T21:19:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ff3c8413cb13c1f05bba3f087ee11fb17937b36",
          "body": "Co-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "add CHANGELOG.md (#721)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-11-14T21:17:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1b9d5413c347f3854e2cb4abb609a025b442f74",
          "body": "- Base already defines a IndexStyle(::AbstractArray) method for object arguments\n  that uses the object type, so we can implement that directly and avoid the\n  invalidations from implement Base.IndexStyle(::PyObjectArray).\n- The Dates stdlib already defines a method that does the same thing for any\n  `Period`.",
          "is_bot": false,
          "headline": "Fix some sources of invalidations (#716)",
          "author_name": "James Wrigley",
          "author_login": "JamesWrigley",
          "committed_at": "2025-11-14T10:10:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "625f7866002862e85f011903f6980d53477502ad",
          "body": "* Improve @py macro documentation\n\n* docstring edits",
          "is_bot": false,
          "headline": "Improve @py macro documentation (#712)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-11-02T19:35:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8eed6ee1a244d95a8adf6b26df7eb3863ec996cd",
          "body": "* Add numpy-backed ArrayValue tests\n\n* Guard ArrayValue numpy tests on devdeps\n\n* Use Setup module for ArrayValue numpy tests",
          "is_bot": false,
          "headline": "Add tests for ArrayValue __array__ copy semantics (#710)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-11-02T12:50:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52db81d8564f86b3699a5229597956c7110ed13f",
          "body": "* use workspaces for test, docs and benchmarks projects\n\n* test against python 3.13 (not 3.14) for now\n\n* missed a 3 -> 3.13 in the matrix\n\n* actually do test python 3 as well as 3.13 and 3.10\n\n* put the python dep into the dev deps so it is picked up in the magical test env\n\n* actually no don't test python 3.14 for now\n\n* remove AGENTS.md for now\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "use workspaces for test, docs and benchmarks projects (#708)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-11-01T21:24:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f3d45e454f8dc21fdf98e9862ada6b980a6ef1f",
          "body": "* Force propertynames(::Py) to occur on the main thread\n\n* Refactor, document, make more robust and remove a lock\n\n* Make setup_onfixedthread robust against errors\n\n* Make on_main_thread test more reliable\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Force `propertynames(::Py)` to occur on the main thread (#677)",
          "author_name": "Lionel Zoubritzky",
          "author_login": "Liozou",
          "committed_at": "2025-10-16T13:54:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6dba5120457222513c8dd9d7559e2b331f3ca6f",
          "body": "* require python 3.10\n\n* require julia 1.10\n\n* document the julia/python version support policy\n\n* update release notes\n\n* document that multi-threading support is experimental\n\n* add conda install instructions\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Housekeeping (#696)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-10-16T13:04:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee54574ea550777ff2565a98add085a2bb4e1032",
          "body": null,
          "is_bot": false,
          "headline": "Specify that JuliaDict / JuliaSet it is a MutableMapping/Set (#692)",
          "author_name": "Frames White",
          "author_login": "oxinabox",
          "committed_at": "2025-10-15T07:06:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92bef8ab44cb4bb4f915e6bf3b2ec4f51405852e",
          "body": "Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 6 to 7.\n- [Release notes](https://github.com/astral-sh/setup-uv/releases)\n- [Commits](https://github.com/astral-sh/setup-uv/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: astral-sh/setup-uv\n  dependency-version: '\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump astral-sh/setup-uv from 6 to 7 (#690)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-10-13T11:01:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3e128c9c0d50342b9de1c2b6a4055be51e1770d7",
          "body": "* added some text\n\n* updated with input/output syntax",
          "is_bot": false,
          "headline": "docs: Add python block usage examples (#687)",
          "author_name": "Ian Weaver",
          "author_login": "icweaver",
          "committed_at": "2025-10-10T15:39:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efa5464ce4b559d0f3086f6a26571a8fead62dd8",
          "body": "… flushing text PyIO (#688)\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "fix #679 - defer printing of partial characters at end of buffer when…",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-10-09T21:13:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e358a52c762b5368c9161d09d26d7cd83b156274",
          "body": "* better compact printing of Py\n\n* add tests for compact printing\n\n* update release notes\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "better compact printing of Py (#684)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-10-09T20:00:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f8f8f7745f1c0ef8a21f9bcb227b83fbeaf9606",
          "body": "* fix #676 and test GUI compat better along the way\n\n* remove debug printing\n\n* require newer juliapkg\n\n* skip some tests in CI if using system python\n\n* fix ci attempt 2\n\n* fix world age issue on Julia 1.12\n\n* install julia 1.11 in python test workflow\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "fix #676 and test GUI compat better along the way (#683)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-10-09T19:37:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71666ca0a30eafee2456a191fa2490cdd0b0ed22",
          "body": null,
          "is_bot": false,
          "headline": "release v0.9.28",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-09-17T21:31:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f687935abe32e4cab86c415ff6acad18fa590ba2",
          "body": "* Allow pydict accept Pair args\n\n* ensure pydict(::Pair...) method has at least one argument\n\n* simplify test for pydict(::Pair...)\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Allow pydict accept Pair args (#616)",
          "author_name": "Mark Kittisopikul",
          "author_login": "mkitti",
          "committed_at": "2025-09-17T18:47:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb771e1c8864cae17afac624c0af584ebc9fb172",
          "body": "* Allow any string or integer to be converted to python\n\nSpecifically this adds methods `Py(::AbstractString)`, `Py(::AbstractChar)`, `Py(::Integer)`, `Py(::Rational{<:Integer})`, `Py(::AbstractRange{<:Integer})` whereas previously we only allowed the builtin Julia string, char and integer types.\n\n* update the docs for conversion to python\n\n* document new methods\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Relax conversions to python (#671)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-09-17T18:07:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9b77e4604be24e4a9c0b711d2b3fdca972e73f7",
          "body": "* Add options for the Julia binary and project path\n\nThis makes using JuliaPkg optional.\n\n* fixup! Add options for the Julia binary and project path\n\n* nitpicks\n\n* allow exe option to be found in the path\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Add options for the Julia binary and project path (#667)",
          "author_name": "James Wrigley",
          "author_login": "JamesWrigley",
          "committed_at": "2025-09-17T17:13:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad228ce4b20635f2cb551ece6d3bf07fb90914ca",
          "body": "…LL_EXE (#670)\n\nAdd new option `@venv` to use a Python virtual environment located at `.venv` in the active project directory. Relative paths for `JULIA_PYTHONCALL_EXE` are now resolved relative to the active project. Includes documentation updates and release notes.\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "feat(exe): add support for @venv and relative paths in JULIA_PYTHONCA…",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-09-17T15:40:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3633da04b7ac568cfcf10e459116aa171f9db830",
          "body": "* add NumpyDates module with DateTime64 and TimeDelta64 types, plus conversion support\n\n* feat(numpydates): add constructors and conversions for delta64 types\n\nImplement constructors, accessors, and display for TimeDelta64 and\nInlineTimeDelta64. Add conversions from Dates.Period and NaT strings.\nUni\n[…]\n release notes with NumpyDates features\n\n* refactor(numpydates): remove unbound units export\n\n* test(numpydates): fixes for julia 1.9\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "NumpyDates (#666)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-09-17T14:51:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f7fa4c2185078ba287f615a2d16ef320733fc106",
          "body": "* stop using Requires.jl (use extensions instead)\n\n* update changelog\n\n* don't build PyCall in tests\n\ninstead, add a case to CI where we use system python for both, ensuring we test the same case. we also add tests for the non-same case.\n\n* typo\n\n* only test PyCall when we can guarantee same interpreter\n\n* Update PyCallExt.jl\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "stop using Requires.jl (use extensions instead) (#662)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-09-13T19:22:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22cbe26454802d4b56741495710154e5273a0a22",
          "body": "Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n  dependency-\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/setup-python from 5 to 6 (#664)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-09-10T19:12:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0b32b08cbe0f68e5eae9ab862b8767a9d41c9e67",
          "body": "* Remove `Core` reference, fixes #657\n\n* Explicitly import Core.Py into Compat module\n\n* test(pycall): add tests for interop with pycall\n\n* test(pycall): explicitly test that pycall is using the same python\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Remove `Core` reference from `Compat/pycall.jl` (#658)",
          "author_name": "Chris Garling",
          "author_login": "cgarling",
          "committed_at": "2025-08-29T13:40:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57d143f33fa9db313929a4c6b3a620eb46dba99a",
          "body": null,
          "is_bot": false,
          "headline": "release 0.9.27",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-08-19T20:14:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4beb28150f43c2f456130b45afbe3e953749eea",
          "body": "Add libstdcxx to CondaPkg.toml with version \"<=julia\" to improve\nlibstdc++ compatibility with the Julia toolchain. Bump CondaPkg\ncompat to 0.2.30 to leverage related fixes. Update release notes to\nreflect the improved compatibility.\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "build(deps): add libstdcxx pin, bump CondaPkg (#656)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-08-19T17:46:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc2282a9c2fc2a56ec2aaed8818fd0fdf8399ef4",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v5)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 4 to 5 (#652)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-08-18T12:19:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "951e093b4afecbfbf86205d97c9615203e7872c4",
          "body": null,
          "is_bot": false,
          "headline": "fix reference",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-07-20T21:09:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0a5634e7afea97119238cda365fe06f98c14636",
          "body": "* partial work creating central api\n\n* add ispy to the api\n\n* add Py to the API\n\n* add PyException to the API\n\n* add pybuiltins to the API\n\n* fix Py constructor\n\n* fix imports\n\n* remove unneeded exports\n\n* add pyconst macro to the API\n\n* add wrapper types to API\n\n* add py macro to API\n\n* add pytable\n[…]\nto re-export now\n\n* fix imports\n\n* remove unused imports\n\n* fix version\n\n* version has moved file\n\n* sort/deduplicate imports/exports\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Centralize Public API into dedicated API module (#648)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-07-20T20:56:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b9fee86efce16c2c11bf8488117e8a9c77c3782d",
          "body": "Co-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "removing dead code supporting old versions of julia or python (#647)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-07-19T21:12:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b3ddb2e431e5af79f0427201088b1e6940e44d4",
          "body": "* Bump minimum supported Python version from 3.8 to 3.9\n\n* Fix release notes: add new entry for Python 3.9 minimum instead of modifying old one\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Bump minimum supported Python version from 3.8 to 3.9 (#645)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-07-17T20:26:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cb07d1d33dac538bf2ebf3f475cf1850991842f",
          "body": "* Switch to heap types using PyType_FromSpec\n\n- Convert PyJuliaBase_Type creation from manual PyTypeObject to PyType_FromSpec\n- Add PyType_Spec and PyType_Slot structs to C API bindings\n- Add all Python type slot constants from typeslots.h\n- Use __weaklistoffset__ member definition for older Python \n[…]\ner protocol methods are now handled through PyType_Slot mechanism,\nmaking the old _pyjlbase_as_buffer constant unnecessary.\n\n* revert\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Switch to heap types using PyType_FromSpec (#643)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-07-17T13:08:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a0d4ee8ec34f20fa7666662aad1ca73d22aa091a",
          "body": "* remove unused type\n\n* test more python versions\n\n* correct field names and types\n\n* use julia signal handling when testing python\n\n* revert set of tested python versions\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Test with PYTHON_JULIACALL_HANDLE_SIGNALS=yes (#642)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-07-15T21:29:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ac1b2b02f4b17619c9494e7b777e8939a8de255",
          "body": null,
          "is_bot": false,
          "headline": "release 0.9.26",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-07-15T18:18:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abaf13628f4facce1ed3d0f23a10854ae5e28a03",
          "body": null,
          "is_bot": false,
          "headline": "update release notes",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-07-15T18:17:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07eb7268125afac66738ded4ddd44d7cde5f0c50",
          "body": "* hotfix: misaligned pointer cast\n\n* Correct field type\n\n* Revert version\n\n* Revert version\n\n* fix type\n\n---------\n\nCo-authored-by: Christopher Rowley <cjdrwly@gmail.com>",
          "is_bot": false,
          "headline": "hotfix: misaligned pointer cast (#640)",
          "author_name": "Miles Cranmer",
          "author_login": "MilesCranmer",
          "committed_at": "2025-07-15T16:51:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "815c0de27a5a175411447dea250e82d52e40f7c5",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'main' of https://github.com/JuliaPy/PythonCall.jl",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-07-12T20:24:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6ea6c8ea8a347985c31281a0c79bef8c5afd2e4e",
          "body": null,
          "is_bot": false,
          "headline": "Update release notes with recent changes",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-07-12T20:23:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8212978857e78998606e39afd2f79fe177379c4",
          "body": "* Add PySide6 support to gui.jl\n\n- Update fix_qt_plugin_path() to support qt6.conf files used by PySide6\n- Use Libraries path from qt6.conf instead of Prefix for Qt6 plugin path\n- Set QT_PLUGIN_PATH to {libraries}/qt6/plugins for PySide6\n- Add PySide6 to event loop callback function\n- Add PySide6 mo\n[…]\nfor automatic plugin path fixing\n- Update documentation to include PySide6 support\n\nFixes #632\n\n* Add PySide6 to GUI event loop tests\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Add PySide6 support to gui.jl (#634)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-07-12T20:11:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c75ce08588532a8555fced21897c98d0271e4b4b",
          "body": "* create simple benchmark suite\n\n* more hierarchy in benchmark\n\n* create AirspeedVelocity github action for benchmarks\n\n* fix imports in benchmark\n\n* fix default branch name in CI\n\n* benchmarks: more hierarchy\n\n* timing + benchmark\n\n* benchmarks: include gcbench in runs\n\n* benchmarks: remove unused \n[…]\nain\n\n* ci: run tuned benchmarks\n\n* undo changes from merge\n\n---------\n\nCo-authored-by: Eric Hanson <5846501+ericphanson@users.noreply.github.com>\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "CI benchmarking suite take 2 (#636)",
          "author_name": "Miles Cranmer",
          "author_login": "MilesCranmer",
          "committed_at": "2025-07-12T20:03:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b649be20e97f18f387fee0317a498e65e10219b1",
          "body": "* Add FAQ on interactive threads\n\nDocuments https://github.com/JuliaPy/PythonCall.jl/issues/586.\n\n* Add link to the issue",
          "is_bot": false,
          "headline": "Add FAQ on interactive threads (#638)",
          "author_name": "Martijn Visser",
          "author_login": "visr",
          "committed_at": "2025-07-10T09:43:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c84c05954bf5e8da93e2e8efacd4177c032b0465",
          "body": "Bumps [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) from 5 to 6.\n- [Release notes](https://github.com/astral-sh/setup-uv/releases)\n- [Commits](https://github.com/astral-sh/setup-uv/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: astral-sh/setup-uv\n  dependency-version: '\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump astral-sh/setup-uv from 5 to 6 (#623)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-07-02T15:45:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a06ee77d0ef3f1277cda55402929bcfb69b7bf8f",
          "body": "* added some docs for code loading edge case\n\n* moved to faq",
          "is_bot": false,
          "headline": "docs: Code loading order (#625)",
          "author_name": "Ian Weaver",
          "author_login": "icweaver",
          "committed_at": "2025-07-01T11:48:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3e96f871368251c78d509295a63bb7468545069",
          "body": "- Change Julia job names from 'Test (os, julia version)' to 'Test Julia (version, os)'\n- Change Python job names from 'Test (os, python version)' to 'Test Python (version, os)'\n- Simplify Python version matrix from '>=3.8' to '3' for cleaner job names\n- Update nightly test job names similarly\n\nThis makes it easier to quickly identify which language and version is being tested.\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Improve GitHub workflow job names for better clarity (#633)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-07-01T11:39:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "752534bb0c6fc7ed223b7f4278ff97e7e3be0456",
          "body": "* use getptr a lot less\n\n* Don't fail fast\n\n* typo\n\n* Fix: Use GC.@preserve in pyconvert_rule_ctypessimplevalue\n\n* preserve in incref/decref (use-after-free)\n\n* more preserve\n\n* more preserve\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "use getptr a lot less (#618)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-07-01T11:25:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b8ac73a24d08110d90c5410c35546522f4e1b52",
          "body": "* use uv more\n\n* fix python version\n\n* fix source folder to be linted\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "use uv more (#621)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-06-04T14:56:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a7d49f274147e9876fee47981d9aa5459f6eb8c",
          "body": "Co-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "bump min required julia version to 1.9 (#614)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-05-14T12:46:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08157ccb94f94491854ceac139c20955849475e2",
          "body": null,
          "is_bot": false,
          "headline": "release 0.9.25",
          "author_name": "Christopher Doris",
          "author_login": null,
          "committed_at": "2025-05-13T21:41:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd6240129b2de491eeb752e1530fc33b04d49677",
          "body": "* add openssl-compat for juliacall using juliapkg 0.1.17\n\n* use range specifiers\n\n* update gitignore for uv\n\n* update release notes\n\n---------\n\nCo-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "OpenSSL compat (#613)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-05-13T21:29:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7be3398ff20bcd10d947f9fcac96f41f3510cbf2",
          "body": null,
          "is_bot": false,
          "headline": "Update dependabot.yml",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-04-10T09:31:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f126ce245006e496e9ac73671aaf1ca3168c211d",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 4.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v2...v4)\n\n---\nupdated-dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/checkout from 2 to 4 (#604)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-04-10T09:00:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0f1ef23c1887c8b54ec0b957edf6d383f811c89b",
          "body": null,
          "is_bot": false,
          "headline": "Update tests.yml",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-04-10T09:00:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2e83cfea94f1fad2874dfa5f6ed5c1468f0f7ba",
          "body": "Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 1 to 5.\n- [Release notes](https://github.com/codecov/codecov-action/releases)\n- [Changelog](https://github.com/codecov/codecov-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codecov/codecov-action/compare/v\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump codecov/codecov-action from 1 to 5 (#605)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-04-10T08:56:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5a281dcd9cb91c3281e08044ab86a4e14ec5b514",
          "body": "Bumps [actions/setup-python](https://github.com/actions/setup-python) from 3 to 5.\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/v3...v5)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n  dependency-\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/setup-python from 3 to 5 (#606)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-04-10T08:56:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2a42b27c728b2fe641141bd319435a456997c41b",
          "body": "Bumps [julia-actions/setup-julia](https://github.com/julia-actions/setup-julia) from 1 to 2.\n- [Release notes](https://github.com/julia-actions/setup-julia/releases)\n- [Changelog](https://github.com/julia-actions/setup-julia/blob/master/devdocs/making_a_new_release.md)\n- [Commits](https://github.com\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump julia-actions/setup-julia from 1 to 2 (#603)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-04-10T08:54:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3b6f91e12dd6b2febc2d6da9ccfb7e964e2d411b",
          "body": "Bumps [actions/cache](https://github.com/actions/cache) from 1 to 4.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/v1...v4)\n\n---\nupdated-dependencies:\n- dependenc\n[…]\nirect:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump actions/cache from 1 to 4 (#602)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2025-04-10T08:54:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a3aa8f4d41df90eff28db09b51ef1c81941c4b5b",
          "body": null,
          "is_bot": false,
          "headline": "Create dependabot.yml",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-04-10T08:52:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d4baa18a261636eb4e45e820809244dfd595f5b5",
          "body": "Co-authored-by: Christopher Doris <github.com/cjdoris>",
          "is_bot": false,
          "headline": "Add `elsize` method for PyArray (#593)",
          "author_name": "Christopher Rowley",
          "author_login": "cjdoris",
          "committed_at": "2025-02-21T23:29:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 50,
      "commits_last_year": 69,
      "latest_release_at": "2026-06-08T07:48:18Z",
      "latest_release_tag": "v0.9.35",
      "releases_from_tags": false,
      "days_since_last_push": 1,
      "active_weeks_last_year": 25,
      "days_since_latest_release": 48,
      "mean_days_between_releases": 36.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "juliacall",
          "exists": true,
          "license": null,
          "keywords": [
            "License :: OSI Approved :: MIT License",
            "Operating System :: OS Independent",
            "Programming Language :: Python :: 3"
          ],
          "ecosystem": "pypi",
          "matches_repo": null,
          "registry_url": "https://pypi.org/project/juliacall/",
          "is_deprecated": false,
          "latest_version": "0.9.35",
          "repository_url": null,
          "versions_count": 44,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 194659,
          "first_published_at": "2021-10-23T15:07:13.168172Z",
          "latest_published_at": "2026-06-08T07:37:56.782587Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 48
        }
      ]
    },
    "popularity": {
      "forks": 84,
      "stars": 1059,
      "watchers": 5,
      "fork_history": {
        "days": [
          {
            "date": "2021-02-28",
            "count": 1
          },
          {
            "date": "2021-03-01",
            "count": 2
          },
          {
            "date": "2021-06-18",
            "count": 1
          },
          {
            "date": "2021-08-23",
            "count": 1
          },
          {
            "date": "2021-09-25",
            "count": 1
          },
          {
            "date": "2021-09-29",
            "count": 1
          },
          {
            "date": "2021-10-06",
            "count": 1
          },
          {
            "date": "2022-01-31",
            "count": 1
          },
          {
            "date": "2022-02-11",
            "count": 1
          },
          {
            "date": "2022-02-17",
            "count": 1
          },
          {
            "date": "2022-02-21",
            "count": 2
          },
          {
            "date": "2022-02-23",
            "count": 1
          },
          {
            "date": "2022-02-24",
            "count": 1
          },
          {
            "date": "2022-03-01",
            "count": 1
          },
          {
            "date": "2022-04-05",
            "count": 1
          },
          {
            "date": "2022-04-13",
            "count": 1
          },
          {
            "date": "2022-05-09",
            "count": 1
          },
          {
            "date": "2022-06-26",
            "count": 1
          },
          {
            "date": "2022-06-27",
            "count": 1
          },
          {
            "date": "2022-07-13",
            "count": 1
          },
          {
            "date": "2022-07-16",
            "count": 1
          },
          {
            "date": "2022-08-03",
            "count": 1
          },
          {
            "date": "2022-08-22",
            "count": 1
          },
          {
            "date": "2022-09-14",
            "count": 1
          },
          {
            "date": "2022-10-05",
            "count": 1
          },
          {
            "date": "2022-11-08",
            "count": 1
          },
          {
            "date": "2022-11-23",
            "count": 1
          },
          {
            "date": "2023-01-15",
            "count": 1
          },
          {
            "date": "2023-03-03",
            "count": 1
          },
          {
            "date": "2023-03-10",
            "count": 1
          },
          {
            "date": "2023-03-31",
            "count": 1
          },
          {
            "date": "2023-05-11",
            "count": 1
          },
          {
            "date": "2023-05-15",
            "count": 1
          },
          {
            "date": "2023-06-08",
            "count": 1
          },
          {
            "date": "2023-06-22",
            "count": 1
          },
          {
            "date": "2023-06-28",
            "count": 2
          },
          {
            "date": "2023-09-14",
            "count": 1
          },
          {
            "date": "2023-09-18",
            "count": 1
          },
          {
            "date": "2023-09-20",
            "count": 1
          },
          {
            "date": "2023-10-15",
            "count": 1
          },
          {
            "date": "2023-12-09",
            "count": 1
          },
          {
            "date": "2023-12-21",
            "count": 1
          },
          {
            "date": "2024-01-13",
            "count": 1
          },
          {
            "date": "2024-01-22",
            "count": 1
          },
          {
            "date": "2024-01-26",
            "count": 1
          },
          {
            "date": "2024-02-01",
            "count": 1
          },
          {
            "date": "2024-02-02",
            "count": 1
          },
          {
            "date": "2024-02-09",
            "count": 1
          },
          {
            "date": "2024-02-11",
            "count": 1
          },
          {
            "date": "2024-03-07",
            "count": 1
          },
          {
            "date": "2024-03-18",
            "count": 2
          },
          {
            "date": "2024-04-24",
            "count": 1
          },
          {
            "date": "2024-04-28",
            "count": 1
          },
          {
            "date": "2024-05-18",
            "count": 1
          },
          {
            "date": "2024-05-27",
            "count": 1
          },
          {
            "date": "2024-08-15",
            "count": 1
          },
          {
            "date": "2024-09-19",
            "count": 1
          },
          {
            "date": "2024-11-17",
            "count": 1
          },
          {
            "date": "2024-11-23",
            "count": 1
          },
          {
            "date": "2025-01-23",
            "count": 1
          },
          {
            "date": "2025-02-28",
            "count": 1
          },
          {
            "date": "2025-05-02",
            "count": 1
          },
          {
            "date": "2025-05-09",
            "count": 1
          },
          {
            "date": "2025-05-20",
            "count": 1
          },
          {
            "date": "2025-06-04",
            "count": 1
          },
          {
            "date": "2025-06-10",
            "count": 1
          },
          {
            "date": "2025-07-02",
            "count": 1
          },
          {
            "date": "2025-07-21",
            "count": 1
          },
          {
            "date": "2025-08-20",
            "count": 1
          },
          {
            "date": "2025-08-28",
            "count": 1
          },
          {
            "date": "2025-09-13",
            "count": 1
          },
          {
            "date": "2025-09-24",
            "count": 1
          },
          {
            "date": "2025-10-14",
            "count": 1
          },
          {
            "date": "2026-02-04",
            "count": 1
          },
          {
            "date": "2026-04-27",
            "count": 1
          },
          {
            "date": "2026-05-18",
            "count": 1
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-05-22",
            "count": 1
          },
          {
            "date": "2026-05-26",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 84,
        "total_forks": 84
      },
      "star_history": null,
      "open_issues_and_prs": 199
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples",
        "notebooks"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 13535,
      "source_files_sampled": 9,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 1080
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 5,
        "malicious_count": 0,
        "assessed_package": "pypi:juliacall@0.9.35",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "juliapkg",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.1.24, <0.2"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 20,
        "merged_prs": 155,
        "open_issues": 179,
        "closed_ratio": 0.664,
        "closed_issues": 353,
        "closed_unmerged_prs": 47
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "cjdoris",
          "commits": 79,
          "avatar_url": "https://avatars.githubusercontent.com/u/1844215?v=4"
        },
        {
          "type": "User",
          "login": "MilesCranmer",
          "commits": 9,
          "avatar_url": "https://avatars.githubusercontent.com/u/7593028?v=4"
        },
        {
          "type": "User",
          "login": "dpinol",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/1954955?v=4"
        },
        {
          "type": "User",
          "login": "LilithHafner",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/60898866?v=4"
        },
        {
          "type": "User",
          "login": "PallHaraldsson",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/8005416?v=4"
        },
        {
          "type": "User",
          "login": "helgee",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/1408922?v=4"
        },
        {
          "type": "User",
          "login": "pitmonticone",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/38562595?v=4"
        },
        {
          "type": "User",
          "login": "cdsousa",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/333519?v=4"
        },
        {
          "type": "User",
          "login": "gnuille",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/20164802?v=4"
        },
        {
          "type": "User",
          "login": "icweaver",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/25312320?v=4"
        }
      ],
      "contributors_sampled": 42,
      "top_contributor_share": 0.534
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "CompatHelper.yml",
        "benchmark_pr.yml",
        "docs.yml",
        "docscleanup.yml",
        "register-pypi.yml",
        "register.yml",
        "tagbot.yml",
        "tests-nightly.yml",
        "tests.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "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": "22 out of 22 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": 3,
            "reason": "Found 7/23 approved changesets -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 9 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": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "25 commit(s) and 11 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": 0,
            "reason": "security policy file not 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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "6024344c3c46a560dbd92c8ece51b0b2859dc952",
        "ran_at": "2026-07-26T22:11:44Z",
        "aggregate_score": 5.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-26T00:45:19Z",
      "oldest_open_prs": [
        {
          "number": 367,
          "created_at": "2023-09-21T17:14:59Z",
          "last_comment_at": "2023-09-21T21:20:28Z",
          "last_comment_author": "cjdoris"
        },
        {
          "number": 377,
          "created_at": "2023-10-05T20:20:00Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 411,
          "created_at": "2023-11-04T19:39:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 414,
          "created_at": "2023-11-06T18:25:41Z",
          "last_comment_at": "2024-06-20T17:23:26Z",
          "last_comment_author": "cjdoris"
        },
        {
          "number": 461,
          "created_at": "2024-02-12T06:13:18Z",
          "last_comment_at": "2024-08-23T04:36:56Z",
          "last_comment_author": "MilesCranmer"
        },
        {
          "number": 505,
          "created_at": "2024-05-27T15:52:47Z",
          "last_comment_at": "2024-06-10T20:54:45Z",
          "last_comment_author": "hhaensel"
        },
        {
          "number": 509,
          "created_at": "2024-06-16T22:34:33Z",
          "last_comment_at": "2025-03-04T20:36:49Z",
          "last_comment_author": "MilesCranmer"
        },
        {
          "number": 589,
          "created_at": "2025-01-20T10:29:15Z",
          "last_comment_at": "2025-01-22T08:07:50Z",
          "last_comment_author": "hhaensel"
        },
        {
          "number": 595,
          "created_at": "2025-02-28T14:20:22Z",
          "last_comment_at": "2025-09-21T14:08:58Z",
          "last_comment_author": "cjdoris"
        },
        {
          "number": 637,
          "created_at": "2025-07-07T03:50:14Z",
          "last_comment_at": "2025-11-18T23:09:42Z",
          "last_comment_author": "mkitti"
        },
        {
          "number": 672,
          "created_at": "2025-09-18T14:41:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 673,
          "created_at": "2025-09-18T15:52:55Z",
          "last_comment_at": "2026-05-31T15:50:59Z",
          "last_comment_author": "cjdoris"
        },
        {
          "number": 705,
          "created_at": "2025-10-25T20:47:11Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 724,
          "created_at": "2025-11-16T19:00:51Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 736,
          "created_at": "2025-12-24T15:39:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 763,
          "created_at": "2026-04-21T14:33:09Z",
          "last_comment_at": "2026-06-01T12:23:34Z",
          "last_comment_author": "dpinol"
        },
        {
          "number": 772,
          "created_at": "2026-05-18T15:30:25Z",
          "last_comment_at": "2026-05-18T18:13:54Z",
          "last_comment_author": "Beforerr"
        },
        {
          "number": 777,
          "created_at": "2026-05-19T18:12:28Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 792,
          "created_at": "2026-06-20T14:48:29Z",
          "last_comment_at": "2026-06-20T14:56:34Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 802,
          "created_at": "2026-07-19T15:42:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-25T13:40:45Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 32,
          "created_at": "2021-07-21T02:48:00Z",
          "last_comment_at": "2021-07-22T22:57:32Z",
          "last_comment_author": "msundvick"
        },
        {
          "number": 35,
          "created_at": "2021-08-23T15:41:27Z",
          "last_comment_at": "2023-09-23T16:40:13Z",
          "last_comment_author": "stevengj"
        },
        {
          "number": 36,
          "created_at": "2021-08-23T17:43:01Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 44,
          "created_at": "2021-10-02T08:49:41Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 45,
          "created_at": "2021-10-02T08:53:27Z",
          "last_comment_at": "2023-04-09T16:56:57Z",
          "last_comment_author": "PallHaraldsson"
        },
        {
          "number": 49,
          "created_at": "2021-10-02T08:59:30Z",
          "last_comment_at": "2022-04-04T15:41:19Z",
          "last_comment_author": "fzeiser"
        },
        {
          "number": 53,
          "created_at": "2021-10-02T09:02:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 61,
          "created_at": "2021-10-18T09:09:52Z",
          "last_comment_at": "2022-09-09T12:50:15Z",
          "last_comment_author": "cjdoris"
        },
        {
          "number": 68,
          "created_at": "2021-11-10T14:03:29Z",
          "last_comment_at": "2023-11-29T08:49:09Z",
          "last_comment_author": "cjdoris"
        },
        {
          "number": 76,
          "created_at": "2021-12-02T18:41:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 84,
          "created_at": "2021-12-10T09:22:50Z",
          "last_comment_at": "2022-04-21T11:04:54Z",
          "last_comment_author": "cjdoris"
        },
        {
          "number": 88,
          "created_at": "2022-01-03T14:06:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 90,
          "created_at": "2022-01-05T02:11:35Z",
          "last_comment_at": "2023-09-21T01:48:02Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 93,
          "created_at": "2022-01-08T07:10:06Z",
          "last_comment_at": "2026-03-03T03:56:08Z",
          "last_comment_author": "Yuan-Ru-Lin"
        },
        {
          "number": 94,
          "created_at": "2022-01-08T12:16:16Z",
          "last_comment_at": "2023-09-19T01:48:36Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 129,
          "created_at": "2022-03-07T23:00:44Z",
          "last_comment_at": "2023-09-14T11:36:41Z",
          "last_comment_author": "ericphanson"
        },
        {
          "number": 146,
          "created_at": "2022-04-11T12:39:52Z",
          "last_comment_at": "2023-09-18T01:48:20Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 153,
          "created_at": "2022-04-13T14:13:20Z",
          "last_comment_at": "2023-09-18T01:48:18Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 163,
          "created_at": "2022-04-22T16:06:27Z",
          "last_comment_at": "2023-09-18T01:48:16Z",
          "last_comment_author": "github-actions"
        },
        {
          "number": 172,
          "created_at": "2022-05-14T09:49:29Z",
          "last_comment_at": "2023-09-18T01:48:14Z",
          "last_comment_author": "github-actions"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/JuliaPy/PythonCall.jl",
    "host": "github.com",
    "name": "PythonCall.jl",
    "owner": "JuliaPy"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 73,
      "inputs": {
        "security": 63,
        "vitality": 88,
        "community": 67,
        "governance": 65,
        "engineering": 81
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 88,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "commits_last_year": 69,
              "human_commit_share": 0.82,
              "days_since_last_push": 1,
              "active_weeks_last_year": 25
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "25/52 weeks with commits",
                "points": 17.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 25
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "69 commits in the last year",
                "points": 16.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 69
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "25 commit(s) and 11 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "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": 100,
            "inputs": {
              "releases_count": 50,
              "latest_release_tag": "v0.9.35",
              "releases_from_tags": false,
              "days_since_latest_release": 48,
              "mean_days_between_releases": 36.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "50 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 50
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 48 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 48
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~36.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 36.4
                    }
                  }
                ],
                "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": 1,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 1 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 67,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "forks": 84,
              "stars": 1059,
              "watchers": 5,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1,059 stars",
                "points": 49.1,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1059
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "84 forks",
                "points": 16,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 84
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "5 watchers",
                "points": 3.3,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "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": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "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": 88,
            "inputs": {
              "packages": [
                "juliacall"
              ],
              "dependents": null,
              "ecosystems": "pypi",
              "total_downloads": null,
              "monthly_downloads": 194659
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "194,659 downloads/month across pypi",
                "points": 70.5,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 194659,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "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": 65,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 43,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 42,
              "top_contributor_share": 0.534
            },
            "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 53% of commits",
                "points": 10.5,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 53
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "42 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 42
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 9 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "merged_prs": 155,
              "open_issues": 179,
              "closed_issues": 353,
              "issue_closed_ratio": 0.664,
              "closed_unmerged_prs": 47
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "66% of issues closed",
                "points": 31,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 66
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "155/202 decided PRs merged",
                "points": 29.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 155,
                      "decided": 202
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 7/23 approved changesets -- score normalized to 3",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "followers": 106,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "JuliaPy",
              "public_repos": 15,
              "account_age_days": 3610
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "106 followers of JuliaPy",
                "points": 14.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 106,
                      "login": "JuliaPy"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "15 public repos, account ~9 yr old",
                "points": 20.8,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 15
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 9
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "juliacall"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 48
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 48 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 48
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "44 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 44
                    }
                  }
                ],
                "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": 81,
        "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": "9 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "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": "22 out of 22 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": 100,
            "inputs": {
              "topics": [
                "julia",
                "python",
                "interoperability",
                "ffi"
              ],
              "has_wiki": true,
              "homepage": "https://juliapy.github.io/PythonCall.jl/stable/",
              "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": "https://juliapy.github.io/PythonCall.jl/stable/",
                "points": 15,
                "status": "met",
                "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": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "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": 63,
        "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": 54,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.4
            },
            "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": "22 out of 22 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 7/23 approved changesets -- score normalized to 3",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 9 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 detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "25 commit(s) and 11 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 not detected",
                "points": 0,
                "status": "missed",
                "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the pypi:juliacall@0.9.35 runtime dependency closure — what installing the published package pulls in — 5 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "pypi:juliacall@0.9.35",
                  "assessed": 5
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 5,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "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": 5,
              "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": 15
            },
            "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": 52,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.744,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 1080
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  }
                ],
                "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": "61 of 82 human commits state their intent (structured subject or explanatory body)",
                "points": 39.7,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 61,
                      "sampled": 82
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 30,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.18
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "18 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 18,
                      "sampled": 100
                    }
                  }
                ],
                "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": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "Julia",
              "largest_source_bytes": 13535,
              "source_files_sampled": 9,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Julia without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Julia"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/9 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 9,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples",
                "notebooks"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples, notebooks",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples, notebooks"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "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",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T22:12:08.118062Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/j/JuliaPy/PythonCall.jl.svg",
  "full_name": "JuliaPy/PythonCall.jl",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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