Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-26 22:12 UTC

JuliaPy / PythonCall.jl

Python and Julia in harmony.

JuliaMIT★ 1.059 Sterne⑂ 84 Forksseit Nov. 2020Auf GitHub ansehen ↗

JuliaPy/PythonCall.jl erreicht einen Gesundheitsindex von 73 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (88/100) ab, am schwächsten bei AI Readiness (52/100). Zuletzt vor 1 Tag aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

73
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

73
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

JuliaPyOrganisation
106 Follower15 öffentliche Reposseit Sept. 2016

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
PyPIjuliacall0.9.35194.65944vor 48 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

88Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 1 Tagen
17.3/36Commit-Rhythmus — 25/52 Wochen mit Commits
16.6/18Commit-Volumen — 69 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 25 commit(s) and 11 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year69
human_commit_share0,82
days_since_last_push1
active_weeks_last_year25

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 50 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 48 Tagen
27/27Release-Rhythmus — ein Release etwa alle 36,4 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count50
latest_release_tagv0.9.35
releases_from_tagsnein
days_since_latest_release48
mean_days_between_releases36,4
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

67Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
49.1/60Stars — 1.059 Stars
16/25Forks — 84 Forks
3.3/15Watcher — 5 Watcher
Verwendete Eingangsdaten
forks84
stars1.059
watchers5
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
70.5/80Downloads pro Monat — 194.659 Downloads/Monat über pypi
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesjuliacall
dependents
ecosystemspypi
total_downloads
monthly_downloads194.659
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

65Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
10.5/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 53 % der Commits
13.5/13.5Breite der Beitragenden — 42 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 9 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor1
contributors_sampled42
top_contributor_share0,534
Wie die Bewertung erfolgt
31/46.8Issue-Lösungsquote — 66 % der Issues geschlossen
29.4/38.3PR-Annahme — 155/202 entschiedene PRs gemergt
4.5/15OpenSSF Scorecard: Code-Review — Found 7/23 approved changesets -- score normalized to 3
Verwendete Eingangsdaten
merged_prs155
open_issues179
closed_issues353
issue_closed_ratio0,664
closed_unmerged_prs47
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
14.6/25Reichweite des Inhabers — 106 Follower von JuliaPy
20.8/25Kontohistorie — 15 öffentliche Repos, Kontoalter ca. 9 Jahre
Verwendete Eingangsdaten
followers106
owner_typeOrganization
is_verified
owner_loginJuliaPy
public_repos15
account_age_days3.610

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf pypi
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 48 Tagen
20/20Versionshistorie — 44 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesjuliacall
ecosystemspypi
any_deprecatednein
min_days_since_publish48

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

81Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 9 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 22 out of 22 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein

Dokumentation

100Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://juliapy.github.io/PythonCall.jl/stable/
10/10Repository-Beschreibung
10/10Topics — 4 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsjulia, python, interoperability, ffi
has_wikija
homepagehttps://juliapy.github.io/PythonCall.jl/stable/
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

63Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
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.5Lizenz — 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 — keine Daten
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 — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5,4
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages5
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von pypi:juliacall@0.9.35 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 5 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

52Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md
0/15Maschinenlesbare Doku (llms.txt)
39.7/40Lesbare Commit-Historie — 61 von 82 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,744
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes1.080
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
0/11Statische Typprüfung
0/10Reproduzierbare Umgebung
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
8/8Automatisierte Wartung — 18 der letzten 100 Commits sind automatisierte Abhängigkeits-Updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,18
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — Julia ohne Typprüfungs-Konfiguration
55/55Handhabbare Dateigrößen — 0/9 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJulia
largest_source_bytes13.535
source_files_sampled9
oversized_source_files0
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples, notebooks
Verwendete Eingangsdaten
example_dirsexamples, notebooks
has_mcp_signalnein
api_schema_files

Eckdaten

1.059GitHub-Sterne
42Mitwirkende
69Commits, letzte 12 Monate
1Tage seit letztem Push
50Releases
1Bus-Faktor
179offene Issues
PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

  • 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

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 84 ⇿
0Sterne
84Forks
50Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

0204060801008432021-022023-102026-06
Major 0Minor 9Patch 41

Jeder Punkt umfasst 5 Tage.

OpenSSF Scorecard 5.4 / 10
5.4Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
k. A.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
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 1
RegistryPaketVersionsvorgabeManifest
PyPIjuliapkg>=0.1.24, <0.2pyproject.toml
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Abhängigkeits-Advisories 0

Die Installation von pypi:juliacall@0.9.35 zieht 5 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPyPI.