Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 02:00 UTC

xapi-project / xen-api

The Xapi Project's XenAPI Server

OCamlEigene Lizenz★ 365 Sterne⑂ 302 Forksseit Okt. 2010Auf GitHub ansehen ↗

xapi-project/xen-api erreicht einen Gesundheitsindex von 84 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (96/100) ab, am schwächsten bei AI Readiness (64/100). Zuletzt heute aktualisiert. 5 Mitwirkende tragen den Großteil der jüngsten Arbeit.

84
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.

84
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

Xapi ProjectOrganisation
53 Follower102 öffentliche Reposseit Juni 2010

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

Metriken nach Kategorie

Vitalität

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

96Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
36/36Commit-Rhythmus — 52/52 Wochen mit Commits
18/18Commit-Volumen — 1.185 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year1.185
human_commit_share0,99
days_since_last_push0
active_weeks_last_year52
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 100 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 0 Tagen
27/27Release-Rhythmus — ein Release etwa alle 7 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count100
latest_release_tagv26.1.17
releases_from_tagsnein
days_since_latest_release0
mean_days_between_releases7

Community & Verbreitung

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

68Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
41.5/60Stars — 365 Stars
20.7/25Forks — 302 Forks
9.4/15Watcher — 51 Watcher
Verwendete Eingangsdaten
forks302
stars365
watchers51
growth_stateorganic
growth_factor_pct100
Wie die Bewertung erfolgt
22.5/22.5README
16.9/22.5Lizenz — Lizenzdatei vorhanden, keine anerkannte Lizenz
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

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

77Gut · 24 % des Gesamtindex
Wie die Bewertung erfolgt
45.9/54Bus-Faktor — 5 Beitragende decken die Hälfte aller Commits ab
18.6/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 18 % der Commits
13.5/13.5Breite der Beitragenden — 100 Beitragende
10/10OpenSSF Scorecard: Contributors — project has 33 contributing companies or organizations
Verwendete Eingangsdaten
bus_factor5
contributors_sampled100
top_contributor_share0,175
Wie die Bewertung erfolgt
25.2/46.8Issue-Lösungsquote — 54 % der Issues geschlossen
34/38.3PR-Annahme — 6.210/6.992 entschiedene PRs gemergt
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Verwendete Eingangsdaten
merged_prs6.210
open_issues82
closed_issues96
issue_closed_ratio0,539
closed_unmerged_prs782
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
12.5/25Reichweite des Inhabers — 53 Follower von xapi-project
25/25Kontohistorie — 102 öffentliche Repos, Kontoalter ca. 16 Jahre
Verwendete Eingangsdaten
followers53
owner_typeOrganization
is_verified
owner_loginxapi-project
public_repos102
account_age_days5.866

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

96Exzellent · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 12 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .golangci.yml
9.6/9.6Pre-Commit-Hooks
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 11 out of 11 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfigja
has_linter_configja
has_precommit_configja

Dokumentation

90Exzellent
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://xenproject.org/projects/xapi/
10/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepagehttps://xenproject.org/projects/xapi/
has_readmeja
has_docs_dirja
has_descriptionja

Sicherheit

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

78Gut · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
6/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 11 out of 11 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
7.5/7.5Code-Review — all changesets reviewed
2.5/2.5Contributors — project has 33 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.2/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
5/5SAST — SAST tool is run on all commits
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
5.2/7.5Vulnerabilities — 3 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate7,2
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
0/25Indirekte Abhängigkeiten ohne bekannte Advisories — transitive Menge in diesem Bereich nicht von Entwicklungs- und Test-Abhängigkeiten trennbar
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories2
affected_packages1
assessed_packages16
unassessed_packages1
affected_by_severitymoderate 1
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Indirekte Abhängigkeiten ohne bekannte Advisories, Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. 16 aufgelöste Abhängigkeiten wurden mit OSV abgeglichen. 1 konnten nicht bewertet werden — keine aufgelöste Version, ein nicht unterstütztes Ökosystem oder außerhalb der ausgewiesenen Paketliste. Dieses Repository veröffentlicht kein Paket, das der Index auflöst; bewertet wurde daher der Abhängigkeitsgraph des Repositorys. Dieser Graph vermischt Entwicklungs- und Test-Pins mit ausgelieferten Abhängigkeiten, daher werden nur die deklarierten Laufzeit-Abhängigkeiten bewertet; transitive Befunde werden als Kontext ausgewiesen und fließen nicht in die Bewertung ein. 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.

64Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 90 von 99 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,909
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile, ocaml/forkexecd/helper/Makefile, ocaml/ktls-helper/helper/Makefile, ocaml/libs/vhd/Makefile, ocaml/libs/xenctrl-ext/Makefile, ocaml/xapi-storage/python/Makefile, python3/Makefile, python3/examples/Makefile, scripts/Makefile, unixpwd/Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .golangci.yml
11/11Statische Typprüfung — OCaml (statisch typisiert)
0/10Reproduzierbare Umgebung
8/10Belegte Agentenpraxis — 4 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
8/8Automatisierte Wartung — 1 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_languageja
bootstrap_filesMakefile, ocaml/forkexecd/helper/Makefile, ocaml/ktls-helper/helper/Makefile, ocaml/libs/vhd/Makefile, ocaml/libs/xenctrl-ext/Makefile, ocaml/xapi-storage/python/Makefile, python3/Makefile, python3/examples/Makefile, scripts/Makefile, unixpwd/Makefile
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0,04
toolchain_manifestsdoc/go.mod, ocaml/sdk-gen/component-test/jsonrpc-client/go/go.mod, ocaml/sdk-gen/csharp/autogen/XenServerTest/XenServerTest.csproj, ocaml/sdk-gen/csharp/autogen/src/XenServer.csproj, ocaml/sdk-gen/go/autogen/src/go.mod, ocaml/sdk-gen/java/autogen/xen-api/pom.xml, ocaml/sdk-gen/powershell/autogen/src/XenServerPowerShell.csproj
dependency_bot_commit_share0,01
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — OCaml (statisch typisiert)
54.7/55Handhabbare Dateigrößen — 1/184 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageOCaml
largest_source_bytes93.868
source_files_sampled184
oversized_source_files1
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — example, examples
Verwendete Eingangsdaten
example_dirsexample, examples
has_mcp_signalnein
api_schema_files

Eckdaten

365GitHub-Sterne
100Mitwirkende
1.185Commits, letzte 12 Monate
0Tage seit letztem Push
100Releases
5Bus-Faktor
82offene Issues
Go, PyPIPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Could not fetch pypi package 'xen-api' from its registry

Weitere Details

Stern- und Fork-Verlauf 365 ★ / 302 ⇿
365Sterne
302Forks
93Releases

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.

0125250375363284392010-102018-082026-06
Major 2Minor 73Patch 18

Jeder Punkt umfasst 15 Tage.

OpenSSF Scorecard 7.2 / 10
7.2Gesamtwert

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-22 01:59 UTC

10Binary-Artifactsno binaries found in the repo
8Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests11 out of 11 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
10Contributorsproject has 33 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
9Licenselicense file detected
10Maintained30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
10SASTSAST tool is run on all commits
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
7Vulnerabilities3 existing vulnerabilities detected
Alle Abhängigkeiten 17

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 0 direkte und 17 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
Gogithub.com/mcshelby/hugo-theme-relearn0.0.0-20250126200037-60bb1c65c5fcindirekt
Mavencom.fasterxml.jackson.core:jackson-databind2.22.0indirekt
Mavenorg.apache.httpcomponents.client5:httpclient55.3indirekt
Mavenorg.apache.maven.plugins:maven-compiler-plugin3.12.1indirekt
Mavenorg.apache.maven.plugins:maven-javadoc-plugin3.6.3indirekt
Mavenorg.apache.maven.plugins:maven-source-plugin3.3.0indirekt
Mavenorg.apache.maven.plugins:maven-surefire-plugin3.5.0indirekt
Mavenorg.junit.jupiter:junit-jupiter5.11.1indirekt
NuGetcoverlet.collector3.2.0indirekt
NuGetMicrosoft.NET.Test.Sdk17.5.0indirekt
NuGetMicrosoft.PowerShell.5.ReferenceAssemblies1.1.0indirekt
NuGetMSTest.TestAdapter2.2.10indirekt
NuGetMSTest.TestFramework2.2.10indirekt
NuGetNewtonsoft.Json13.0.3indirekt
NuGetSystem.Management.Automation7.4.14indirekt
NuGetXenServer.NET0.0.0indirekt
PyPIaiohttpindirekt
Abhängigkeits-Advisories 1

Dieses Repository veröffentlicht kein vom Index auflösbares Paket, daher wurde sein eigener Abhängigkeitsgraph bewertet – 16 Pakete, darunter auch Entwicklungs- und Test-Pins, die nie ausgeliefert werden: 1 tragen bekannte Advisories, davon 0 direkte. 1 konnten nicht bewertet werden – keine aufgelöste Version, ein nicht unterstütztes Ökosystem, oder außerhalb der ausgewiesenen Paketliste.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
com.fasterxml.jackson.core:jackson-databind2.22.0indirektmittel23.2.1

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": [],
      "is_fork": false,
      "size_kb": 95370,
      "has_wiki": true,
      "homepage": "https://xenproject.org/projects/xapi/",
      "languages": {
        "C": 216972,
        "C#": 211694,
        "Go": 56561,
        "Awk": 2212,
        "CSS": 4815,
        "Dune": 16367,
        "HTML": 8686,
        "Java": 49804,
        "Perl": 19100,
        "Raku": 10741,
        "Roff": 2855,
        "OCaml": 12620629,
        "Shell": 133910,
        "Python": 648662,
        "Makefile": 24821,
        "Mustache": 129805,
        "JavaScript": 12624,
        "PowerShell": 2047,
        "Standard ML": 10317
      },
      "pushed_at": "2026-07-21T07:29:17Z",
      "created_at": "2010-10-04T10:52:57Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T07:28:16Z",
      "description": "The Xapi Project's XenAPI Server",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "master",
      "license_spdx_raw": "NOASSERTION",
      "primary_language": "OCaml",
      "significant_languages": [
        "OCaml"
      ]
    },
    "owner": {
      "blog": "http://xenproject.org/developers/teams/xapi.html",
      "name": "Xapi Project",
      "type": "Organization",
      "login": "xapi-project",
      "company": null,
      "location": "Cambridge, UK",
      "followers": 53,
      "avatar_url": "https://avatars.githubusercontent.com/u/317268?v=4",
      "created_at": "2010-06-29T09:31:21Z",
      "is_verified": null,
      "public_repos": 102,
      "account_age_days": 5866
    },
    "license": {
      "state": "custom",
      "spdx_id": null,
      "raw_spdx": "NOASSERTION",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v26.1.17",
          "kind": "patch",
          "published_at": "2026-07-21T03:04:19Z"
        },
        {
          "tag": "v26.16.1",
          "kind": "patch",
          "published_at": "2026-07-17T02:33:01Z"
        },
        {
          "tag": "v26.1.16",
          "kind": "patch",
          "published_at": "2026-07-15T07:36:06Z"
        },
        {
          "tag": "v26.15.1",
          "kind": "patch",
          "published_at": "2026-07-14T11:08:11Z"
        },
        {
          "tag": "v26.16.0",
          "kind": "minor",
          "published_at": "2026-07-03T02:34:37Z"
        },
        {
          "tag": "v26.1.15",
          "kind": "patch",
          "published_at": "2026-07-02T10:07:06Z"
        },
        {
          "tag": "v26.1.14",
          "kind": "patch",
          "published_at": "2026-06-30T01:41:24Z"
        },
        {
          "tag": "v26.15.0",
          "kind": "minor",
          "published_at": "2026-06-03T01:40:23Z"
        },
        {
          "tag": "v26.1.13",
          "kind": "patch",
          "published_at": "2026-06-02T03:17:35Z"
        },
        {
          "tag": "v26.14.0",
          "kind": "minor",
          "published_at": "2026-05-19T09:37:10Z"
        },
        {
          "tag": "v26.1.12",
          "kind": "patch",
          "published_at": "2026-05-11T09:31:16Z"
        },
        {
          "tag": "v26.13.0",
          "kind": "minor",
          "published_at": "2026-05-07T01:46:41Z"
        },
        {
          "tag": "v26.1.11",
          "kind": "patch",
          "published_at": "2026-04-29T15:15:58Z"
        },
        {
          "tag": "v26.12.0",
          "kind": "minor",
          "published_at": "2026-04-29T09:49:58Z"
        },
        {
          "tag": "v26.11.0",
          "kind": "minor",
          "published_at": "2026-04-24T05:03:21Z"
        },
        {
          "tag": "v26.1.10",
          "kind": "patch",
          "published_at": "2026-04-21T10:02:00Z"
        },
        {
          "tag": "v26.1.9",
          "kind": "patch",
          "published_at": "2026-04-15T09:48:08Z"
        },
        {
          "tag": "v26.10.0",
          "kind": "minor",
          "published_at": "2026-04-15T09:18:39Z"
        },
        {
          "tag": "v26.1.8",
          "kind": "patch",
          "published_at": "2026-04-14T03:32:07Z"
        },
        {
          "tag": "v26.9.0",
          "kind": "minor",
          "published_at": "2026-04-14T02:04:05Z"
        },
        {
          "tag": "v26.1.7",
          "kind": "patch",
          "published_at": "2026-03-31T05:39:25Z"
        },
        {
          "tag": "v26.8.0",
          "kind": "minor",
          "published_at": "2026-03-31T02:49:08Z"
        },
        {
          "tag": "v26.1.6",
          "kind": "patch",
          "published_at": "2026-03-19T09:24:21Z"
        },
        {
          "tag": "v26.7.0",
          "kind": "minor",
          "published_at": "2026-03-19T08:49:12Z"
        },
        {
          "tag": "v26.1.5",
          "kind": "patch",
          "published_at": "2026-03-10T02:55:33Z"
        },
        {
          "tag": "v26.6.0",
          "kind": "minor",
          "published_at": "2026-03-05T10:57:59Z"
        },
        {
          "tag": "v26.5.0",
          "kind": "minor",
          "published_at": "2026-02-12T14:32:15Z"
        },
        {
          "tag": "v26.1.3",
          "kind": "patch",
          "published_at": "2026-02-19T13:45:10Z"
        },
        {
          "tag": "v26.1.2",
          "kind": "patch",
          "published_at": "2026-02-19T13:44:47Z"
        },
        {
          "tag": "v26.4.0",
          "kind": "minor",
          "published_at": "2026-02-04T17:13:56Z"
        },
        {
          "tag": "v26.1.1",
          "kind": "patch",
          "published_at": "2026-02-19T13:43:23Z"
        },
        {
          "tag": "v26.3.0",
          "kind": "minor",
          "published_at": "2026-01-30T13:32:03Z"
        },
        {
          "tag": "v26.2.0",
          "kind": "minor",
          "published_at": "2026-01-19T14:44:22Z"
        },
        {
          "tag": "v26.1.0",
          "kind": "minor",
          "published_at": "2026-01-13T16:04:47Z"
        },
        {
          "tag": "v26.0.0",
          "kind": "major",
          "published_at": "2026-01-08T16:13:54Z"
        },
        {
          "tag": "v25.37.1",
          "kind": "patch",
          "published_at": "2025-12-16T16:10:01Z"
        },
        {
          "tag": "v25.38.0",
          "kind": "minor",
          "published_at": "2025-11-27T11:19:32Z"
        },
        {
          "tag": "v25.37.0",
          "kind": "minor",
          "published_at": "2025-11-12T14:39:36Z"
        },
        {
          "tag": "v25.33.2",
          "kind": "patch",
          "published_at": "2025-11-11T12:30:45Z"
        },
        {
          "tag": "v25.36.0",
          "kind": "minor",
          "published_at": "2025-10-31T16:03:57Z"
        },
        {
          "tag": "v25.33.1",
          "kind": "patch",
          "published_at": "2025-10-30T13:47:50Z"
        },
        {
          "tag": "v25.35.0",
          "kind": "minor",
          "published_at": "2025-10-29T11:20:25Z"
        },
        {
          "tag": "v25.34.0",
          "kind": "minor",
          "published_at": "2025-10-22T16:02:00Z"
        },
        {
          "tag": "v25.33.0",
          "kind": "minor",
          "published_at": "2025-10-14T15:43:51Z"
        },
        {
          "tag": "v25.32.0",
          "kind": "minor",
          "published_at": "2025-09-30T15:02:35Z"
        },
        {
          "tag": "v25.31.0",
          "kind": "minor",
          "published_at": "2025-09-24T13:36:10Z"
        },
        {
          "tag": "v25.30.0",
          "kind": "minor",
          "published_at": "2025-09-02T14:37:56Z"
        },
        {
          "tag": "v25.29.0",
          "kind": "minor",
          "published_at": "2025-08-21T09:14:11Z"
        },
        {
          "tag": "v25.28.0",
          "kind": "minor",
          "published_at": "2025-08-06T12:44:07Z"
        },
        {
          "tag": "v25.27.0",
          "kind": "minor",
          "published_at": "2025-07-22T11:12:58Z"
        },
        {
          "tag": "v25.26.0",
          "kind": "minor",
          "published_at": "2025-07-16T12:16:42Z"
        },
        {
          "tag": "v25.25.0",
          "kind": "minor",
          "published_at": "2025-07-13T13:49:00Z"
        },
        {
          "tag": "v25.24.0",
          "kind": "minor",
          "published_at": "2025-07-08T09:16:11Z"
        },
        {
          "tag": "v25.23.0",
          "kind": "minor",
          "published_at": "2025-06-25T03:37:28Z"
        },
        {
          "tag": "v25.22.0",
          "kind": "minor",
          "published_at": "2025-06-11T10:36:15Z"
        },
        {
          "tag": "v25.21.0",
          "kind": "minor",
          "published_at": "2025-06-06T01:43:42Z"
        },
        {
          "tag": "v25.20.0",
          "kind": "minor",
          "published_at": "2025-05-23T01:29:57Z"
        },
        {
          "tag": "v25.19.0",
          "kind": "minor",
          "published_at": "2025-05-14T23:21:51Z"
        },
        {
          "tag": "v25.18.0",
          "kind": "minor",
          "published_at": "2025-05-08T14:48:48Z"
        },
        {
          "tag": "v25.17.0",
          "kind": "minor",
          "published_at": "2025-04-24T05:56:28Z"
        },
        {
          "tag": "v25.16.0",
          "kind": "minor",
          "published_at": "2025-04-15T11:08:20Z"
        },
        {
          "tag": "v25.15.0",
          "kind": "minor",
          "published_at": "2025-04-08T10:32:08Z"
        },
        {
          "tag": "v25.14.0",
          "kind": "minor",
          "published_at": "2025-03-18T12:34:32Z"
        },
        {
          "tag": "v25.13.0",
          "kind": "minor",
          "published_at": "2025-03-17T11:54:19Z"
        },
        {
          "tag": "v25.12.0",
          "kind": "minor",
          "published_at": "2025-03-12T13:08:35Z"
        },
        {
          "tag": "v25.11.0",
          "kind": "minor",
          "published_at": "2025-03-11T12:30:56Z"
        },
        {
          "tag": "v25.10.0",
          "kind": "minor",
          "published_at": "2025-03-07T12:34:58Z"
        },
        {
          "tag": "v25.9.0",
          "kind": "minor",
          "published_at": "2025-02-28T11:14:55Z"
        },
        {
          "tag": "v25.7.0",
          "kind": "minor",
          "published_at": "2025-02-18T11:24:48Z"
        },
        {
          "tag": "v25.6.0",
          "kind": "minor",
          "published_at": "2025-02-10T11:05:17Z"
        },
        {
          "tag": "v25.5.0",
          "kind": "minor",
          "published_at": "2025-02-03T12:17:16Z"
        },
        {
          "tag": "v25.4.0",
          "kind": "minor",
          "published_at": "2025-01-29T13:52:04Z"
        },
        {
          "tag": "v25.3.0",
          "kind": "minor",
          "published_at": "2025-01-27T12:35:51Z"
        },
        {
          "tag": "v25.2.0",
          "kind": "minor",
          "published_at": "2025-01-17T10:25:50Z"
        },
        {
          "tag": "v24.39.1",
          "kind": "patch",
          "published_at": "2025-01-15T16:22:50Z"
        },
        {
          "tag": "v25.1.0",
          "kind": "minor",
          "published_at": "2025-01-15T12:12:44Z"
        },
        {
          "tag": "v25.0.0",
          "kind": "major",
          "published_at": "2025-01-09T05:57:34Z"
        },
        {
          "tag": "v24.40.0",
          "kind": "minor",
          "published_at": "2024-12-18T09:50:31Z"
        },
        {
          "tag": "v24.39.0",
          "kind": "minor",
          "published_at": "2024-11-25T10:25:48Z"
        },
        {
          "tag": "v24.38.0",
          "kind": "minor",
          "published_at": "2024-11-25T09:44:42Z"
        },
        {
          "tag": "v24.37.0",
          "kind": "minor",
          "published_at": "2024-11-11T13:57:37Z"
        },
        {
          "tag": "v24.36.0",
          "kind": "minor",
          "published_at": "2024-10-29T10:13:12Z"
        },
        {
          "tag": "v24.35.0",
          "kind": "minor",
          "published_at": "2024-10-23T09:38:59Z"
        },
        {
          "tag": "v24.34.0",
          "kind": "minor",
          "published_at": "2024-10-21T15:47:26Z"
        },
        {
          "tag": "v24.33.0",
          "kind": "minor",
          "published_at": "2024-10-14T09:45:30Z"
        },
        {
          "tag": "v24.32.0",
          "kind": "minor",
          "published_at": "2024-10-10T08:45:20Z"
        },
        {
          "tag": "v24.31.0",
          "kind": "minor",
          "published_at": "2024-10-04T08:59:48Z"
        },
        {
          "tag": "v24.30.0",
          "kind": "minor",
          "published_at": "2024-09-23T12:30:20Z"
        },
        {
          "tag": "v24.29.0",
          "kind": "minor",
          "published_at": "2024-09-16T12:29:57Z"
        },
        {
          "tag": "v24.28.0",
          "kind": "minor",
          "published_at": "2024-09-10T09:52:27Z"
        },
        {
          "tag": "v24.27.0",
          "kind": "minor",
          "published_at": "2024-09-04T10:51:24Z"
        },
        {
          "tag": "v24.26.0",
          "kind": "minor",
          "published_at": "2024-08-29T12:59:20Z"
        },
        {
          "tag": "v24.25.0",
          "kind": "minor",
          "published_at": "2024-08-29T09:24:03Z"
        },
        {
          "tag": "v24.24.0",
          "kind": "minor",
          "published_at": "2024-08-22T09:56:22Z"
        },
        {
          "tag": "v24.23.0",
          "kind": "minor",
          "published_at": "2024-08-20T09:51:44Z"
        },
        {
          "tag": "v24.22.0",
          "kind": "minor",
          "published_at": "2024-08-15T08:58:01Z"
        },
        {
          "tag": "v24.21.0",
          "kind": "minor",
          "published_at": "2024-07-26T11:05:02Z"
        },
        {
          "tag": "v24.20.0",
          "kind": "minor",
          "published_at": "2024-07-24T03:10:06Z"
        },
        {
          "tag": "v24.19.2",
          "kind": "patch",
          "published_at": "2024-07-16T04:04:51Z"
        },
        {
          "tag": "v24.19.1",
          "kind": "patch",
          "published_at": "2024-07-09T12:25:31Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "b08a580bbf78d2a774a065ed21b135c0af14a3cf",
          "body": "Following #7181, after renaming to README.md, the Makefile need to be\nupdated to clean the README.md.\nNow koji build complains\n```\nerror: Installed (but unpackaged) file(s) found:\n   /opt/xensource/doc/xapi-debug/README.md\n   /opt/xensource/doc/xapi/README.md\n   /opt/xensource/doc/xe/README.md\n```",
          "is_bot": false,
          "headline": "Following action for README.markdown to README.md (#7183)",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-07-21T07:19:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f13f3c9ea04eb6f60745b3a3e8574efd41dc949b",
          "body": "Signed-off-by: Changlei Li <changlei.li@citrix.com>",
          "is_bot": false,
          "headline": "Following action for README.markdown to README.md",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-07-21T06:39:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2de2f25e6894cd83261b989db52c4b1b66a2a9aa",
          "body": "- update idl/datamodel to add trunks property on VIF\n- add validation constraints (trunks filtering on access port isn't\nvalid)\n- add support inside `vif-real` for initial configuration\n- add support inside xenopsd for dynamic changes\n- add test coverage to new attributes\n\nReferences:\n\n- [design\ndoc\n[…]\n-api/blob/788869e5a92e10332ba2428eb91e5a2caf4c7131/doc/content/design/vlan-filtering.md)\n\nInternal references:\n\n- XCPNG-768 : initial spike (with PoC)\n- XCPNG-3258: design\n- XCPNG-3259: implementation",
          "is_bot": false,
          "headline": "VLAN filtering on VIF (#7123)",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-07-21T05:22:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1a2cfbbec6206ee5480d13edbf82f829abc448cf",
          "body": " * Rename README.markdown to README.md\n * Update lin to the OCaml web site",
          "is_bot": false,
          "headline": "Cosmetic changes to README (#7181)",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-07-17T12:00:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "499980545670fce0b7978fcb3797aa988f29052d",
          "body": "Point to ocaml.org and use an https rather than http link\n\nSigned-off-by: Seb Hinderer <sebastien.hinderer@vates.tech>",
          "is_bot": false,
          "headline": "Update the URL of the OCaml web site",
          "author_name": "Seb Hinderer",
          "author_login": "shindere",
          "committed_at": "2026-07-17T10:12:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "473877adfc11bdde251bb9854fc0845dfa074bc1",
          "body": "The latter is more usual and there already is CONTRIBUTING.md\n\nSigned-off-by: Seb Hinderer <sebastien.hinderer@vates.tech>",
          "is_bot": false,
          "headline": "Rename README.markdown to README.md",
          "author_name": "Seb Hinderer",
          "author_login": "shindere",
          "committed_at": "2026-07-17T10:12:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f5038057f237a031506134ba9aadab0a98e38cd",
          "body": "- test_trunks_coherence_vif_set: Xapi_vif.add_trunks and Xapi_vif.set_trunks\n- test_trunks_coherence_pif_vlan: T.make_pif (Xapi_pif.pool_introduce) and Xapi_vlan.create_internal (WIP)\n\nSigned-off-by: Sebastien Rodot <sebastien.rodot@vates.tech>",
          "is_bot": false,
          "headline": "test_vif_trunks: cover more coherence checks",
          "author_name": "Sebastien Rodot",
          "author_login": "semarie",
          "committed_at": "2026-07-16T06:55:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "887d6ac7095b2d7c04040ee49756bb2957e21e62",
          "body": "Signed-off-by: Sebastien Rodot <sebastien.rodot@vates.tech>",
          "is_bot": false,
          "headline": "xenopsd: update xenstore while updating xapi db",
          "author_name": "Sebastien Rodot",
          "author_login": "semarie",
          "committed_at": "2026-07-16T06:55:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8fcd26a92dd1372c6b3b87397ba816ea7a2e07d",
          "body": "Signed-off-by: Sebastien Rodot <sebastien.rodot@vates.tech>",
          "is_bot": false,
          "headline": "xenopsd: Device.Vif.add: add trunks attribute in debug string",
          "author_name": "Sebastien Rodot",
          "author_login": "semarie",
          "committed_at": "2026-07-16T06:55:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68c50c38a87d0addc743f2ab93b3b1d032033a6b",
          "body": "- update idl/datamodel to add trunks property on VIF\n- add validation constraints (trunks filtering on access port isn't valid)\n- add support inside `vif-real` for initial configuration\n- add support inside xenopsd for dynamic changes\n- add test coverage to new attributes\n\nReferences:\n\n- Design document: https://github.com/xapi-project/xen-api/blob/788869e5a92e10332ba2428eb91e5a2caf4c7131/doc/content/design/vlan-filtering.md\n\nSigned-off-by: Sebastien Rodot <sebastien.rodot@vates.tech>",
          "is_bot": false,
          "headline": "VLAN filtering on VIF",
          "author_name": "Sebastien Rodot",
          "author_login": "semarie",
          "committed_at": "2026-07-16T06:55:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48db100b2b6a3e6dc3c8ab0be2b86065978437ec",
          "body": "Use a more generic message to permit to use it in other context than VLAN creation.\n\nSigned-off-by: Sebastien Marie <semarie@kapouay.eu.org>",
          "is_bot": false,
          "headline": "vlan_tag_invalid: change the documentation string",
          "author_name": "Sebastien Marie",
          "author_login": "semarie",
          "committed_at": "2026-07-16T06:55:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d5bcc0166ee3faf26542c8ce403abf99147d09d",
          "body": "Adds a GC rule for tunnels to remove them if one of their PIFs is\ninvalid.",
          "is_bot": false,
          "headline": "XCPNG-3545: Clear tunnels with corrupted PIFs (#7172)",
          "author_name": "Colin James",
          "author_login": "contificate",
          "committed_at": "2026-07-15T09:28:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00cb2ac8127b1a56f3e42b67f7f1b8fead775f42",
          "body": "This is XSA-498 / CVE-2026-42491.\n\nSigned-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>\nReviewed-by: Mohammed Zahid <mohammed.zahid@citrix.com>",
          "is_bot": false,
          "headline": "[SDK] Corrected certificate validation for HTTP calls (#7176)",
          "author_name": "Ming Lu",
          "author_login": "minglumlu",
          "committed_at": "2026-07-15T02:41:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61388693abc2825c88e5a76e9b91ad9cf332d922",
          "body": "This is XSA-498 / CVE-2026-42491.\n\nSigned-off-by: Konstantina Chremmou <konstantina.chremmou@citrix.com>\nReviewed-by: Mohammed Zahid <mohammed.zahid@citrix.com>",
          "is_bot": false,
          "headline": "Corrected certificate validation for HTTP calls",
          "author_name": "Konstantina Chremmou",
          "author_login": "kc284",
          "committed_at": "2026-07-14T12:13:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "481997fac24e03eae074b87ad57b8b5c02746f21",
          "body": "…) instead of stunnel (#7154)\n\nstunnel is an external process that provides secure TLS transport for\nthe xenguest VM-migrate stream. It's a separate process from xenguest,\nand the dom0 kernel pipes the data between these processes, wasting cpu\nand memory throughput. The result is a slower VM-migrate\n[…]\nafea33095d3e70b27d0d0ee495a5950d004e4b7561780b6aebf5ebd)).\n\nActivation uses a new xenopsd.conf flag, so the existing stunnel\ndatapath remains the default.\n\nTested with:\n* performance tests\n* ring3 BVT",
          "is_bot": false,
          "headline": "CP-313264: introduce faster migration datapath using kernel TLS (kTLS…",
          "author_name": "Marcus Granado",
          "author_login": "mg12",
          "committed_at": "2026-07-14T10:12:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94abfa90551b11786f24048fb127ef6654adccad",
          "body": "The ktls-helper prints the negotiated TLS version and cipher of the\nkTLS socket to stdout just before handing the fd to xenopsd, and\nxenopsd routes the helper's stdout and stderr to syslog under the\n\"ktls-helper\" key. The helper's output previously went to /dev/null,\nso a migration left no record of which algorithm the kTLS path\nnegotiated. Both the success line and any error line are now visible\nfor diagnostics.\n\nSigned-off-by: Marcus Granado <marcus.granado@citrix.com>",
          "is_bot": false,
          "headline": "CP-313264: xenopsd: log the negotiated kTLS version and cipher",
          "author_name": "Marcus Granado",
          "author_login": "mg12ctx",
          "committed_at": "2026-07-13T17:52:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7917d804c73ea003dfc09a7e9ea40fa48f4dac8",
          "body": "Signed-off-by: Marcus Granado <marcus.granado@citrix.com>",
          "is_bot": false,
          "headline": "CP-313264: xenopsd: migration-tls.md: add design document",
          "author_name": "Marcus Granado",
          "author_login": "mg12ctx",
          "committed_at": "2026-07-13T17:52:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d0ef6453f8ee7f36825d41fa0e300f4d87e664a",
          "body": "stunnel is an external process that provides secure TLS transport for the\nxenguest VM-migrate stream. It's a separate process from xenguest, and\nthe dom0 kernel pipes the data between these processes, wasting cpu and\nmemory throughput. The result is a slower VM-migrate experience, and\nconsequently a\n[…]\n\n\nand transparently falls back to the original Open_uri.with_open_uri so\nthe migration still proceeds using stunnel as before for the sender.\n\nSigned-off-by: Marcus Granado <marcus.granado@citrix.com>",
          "is_bot": false,
          "headline": "CP-312949: xenopsd: optional kTLS sender for VM live migration",
          "author_name": "Marcus Granado",
          "author_login": "mg12ctx",
          "committed_at": "2026-07-13T17:52:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9e49a3b0ed7df907b7b2963f623434dd43f1265e",
          "body": "Adds a GC rule for tunnels to remove them if one of their PIFs is\ninvalid.\n\nTracking-reference: XCPNG-3545\nSigned-off-by: Colin James <colin.barr@vates.tech>",
          "is_bot": false,
          "headline": "XCPNG-3545: Clear tunnels with corrupted PIFs",
          "author_name": "Colin James",
          "author_login": "contificate",
          "committed_at": "2026-07-13T13:22:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7dffaf0b37308b790c6c0c9748f709412b227fed",
          "body": "Specify that an OpaqueRef of the VDI is submitted as the last argument\nto vdi_revert, not the UUID.\n\nFixes: https://github.com/xapi-project/xen-api/issues/7150",
          "is_bot": false,
          "headline": "doc: Update snapshot revert design to follow the implementation (#7170)",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-07-10T07:38:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c518d66f57cc492368223994b81eb176890e4c69",
          "body": "Every VM import operation (VM.import, VM.import_metadata, DR recover,\ncross-pool migrate) creates the VM through create_from_record, which\ndrives\nVM.create -> Xapi_vm.create. That already computes\nsecureboot_certificates_state against the importing pool.",
          "is_bot": false,
          "headline": "Drop redundant secureboot_certificates_state recompute (#7167)",
          "author_name": "Stephen Cheng",
          "author_login": "stephenchengCloud",
          "committed_at": "2026-07-10T05:52:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "406574e9889611ec7880b95f74a047ce34f29a8d",
          "body": "Every VM import operation (VM.import, VM.import_metadata, DR recover,\ncross-pool migrate) creates the VM through create_from_record, which drives\nVM.create -> Xapi_vm.create. That already computes\nsecureboot_certificates_state against the importing pool.\n\nSigned-off-by: Stephen Cheng <stephen.cheng@citrix.com>",
          "is_bot": false,
          "headline": "Drop redundant secureboot_certificates_state recompute",
          "author_name": "Stephen Cheng",
          "author_login": null,
          "committed_at": "2026-07-10T05:24:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85724ce12cc04733a9679b9096713b78ec61cde0",
          "body": "Specify that an OpaqueRef of the VDI is submitted as the last argument to\nvdi_revert, not the UUID.\n\nFixes: https://github.com/xapi-project/xen-api/issues/7150\nSigned-off-by: Andrii Sultanov <andriy.sultanov@vates.tech>",
          "is_bot": false,
          "headline": "doc: Update snapshot revert design to follow the implementation",
          "author_name": "Andrii Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-07-09T13:45:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9b42e6b5a166c2528d98991348765369dc9aa01",
          "body": "…cted VMs (#7145)\n\n## Why\n\nWhen HA is enabled on a pool, `host.evacuate` refuses to plan the\nevacuation of\nany VM that is not HA-protected, that is, whose `ha_restart_priority` is\nnot\n`restart`. This is by design: the HA planner only accounts for protected\nVMs, so\nunprotected ones are left out of th\n[…]\nt, CodeChecker\nand\nShellCheck all green on a fork branch). The change is a pure diagnostic\nimprovement with no change to which VMs can be evacuated, so no new\nautomated\ntest is included.\n\nCloses #4323",
          "is_bot": false,
          "headline": "xapi: report a clear error when host evacuation is blocked by unprote…",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-07-08T14:37:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c02d204365a363d9fa996eddbad26776ae77e33",
          "body": "Microsoft's 2011 Secure Boot certificates expire between June and\nOctober 2026. XenServer already has a remediation workflow (the per-VM\nfield `VM.secureboot_certificates_state` plus\n`VM.update_secureboot_certificates_on_boot`) that lets an admin mark a\nVM so its Secure Boot certificates are replace\n[…]\nk to always return `update_required`.\n2. Use `VM.create` to trigger the logic:\n```\nTest A (flag=true):  state = update_on_boot  (expect update_on_boot)\nTest B (flag=false): state = ok  (expect ok)\n```",
          "is_bot": false,
          "headline": "auto-mark new VMs for Secure Boot certificate update on boot (#7155)",
          "author_name": "Stephen Cheng",
          "author_login": "stephenchengCloud",
          "committed_at": "2026-07-07T06:01:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "651d067aed76aeb5938187ebaa312e74d108cf6d",
          "body": "Signed-off-by: Stephen Cheng <stephen.cheng@citrix.com>",
          "is_bot": false,
          "headline": "change release version",
          "author_name": "Stephen Cheng",
          "author_login": null,
          "committed_at": "2026-07-06T09:10:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c1acbda60d325e864779a91f89be2f77df674c5",
          "body": "In VM.create, run check_secureboot_certificates_state regardless of the\npool's auto_update_vm_secureboot_certificates setting. When auto-update is\nenabled and an update is available, schedule it on next boot\n(update_on_boot); otherwise just record the detected state (ok /\nupdate_available) so it is visible to the user.\n\nSigned-off-by: Stephen Cheng <stephen.cheng@citrix.com>",
          "is_bot": false,
          "headline": "always record VM secureboot_certificates_state at creation",
          "author_name": "Stephen Cheng",
          "author_login": null,
          "committed_at": "2026-07-06T09:10:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d862fade4fc75a8277cea3505adf6abab6a2bdcf",
          "body": "Signed-off-by: Stephen Cheng <stephen.cheng@citrix.com>",
          "is_bot": false,
          "headline": "change schema hash",
          "author_name": "Stephen Cheng",
          "author_login": null,
          "committed_at": "2026-07-06T09:10:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22bfccbdeb1750e485b273a5ee85a78222037474",
          "body": "1. Add a pool-level boolean Pool.auto_update_vm_secureboot_certificates\n(RW, default false).\n\nThis is the opt-in switch for automatically updating expiring Secure Boot\ncertificates on newly created VMs; it defaults to disabled so xapi never\nmodifies VM NVRAM unless the admin opts in.\n\n2. When the po\n[…]\niables (e.g. BIOS VMs), so no external check is run in that\ncase. The behaviour is gated on the pool opt-in, so default behaviour is\nunchanged.\n\nSigned-off-by: Stephen Cheng <stephen.cheng@citrix.com>",
          "is_bot": false,
          "headline": "auto-mark new VMs for Secure Boot certificate update on boot",
          "author_name": "Stephen Cheng",
          "author_login": null,
          "committed_at": "2026-07-06T09:10:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c3b3ebd429f115271431501f983f5302992a29f",
          "body": "In `shutdown_agent`, the `xapi_pre_shutdown` may raise exception, then\nthe `light_fuse_and_dont_restart` is skipped. A DB data loss is found\nbecause db flush in that function is not executed.",
          "is_bot": false,
          "headline": "CA-428532: Ensure db flush is executed in shutdown_agent (#7164)",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-07-06T08:12:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad4e6bba40d24d4d292301fc4908fb86f0c47454",
          "body": "…7163)\n\nThis is a follow-up to https://github.com/xapi-project/xen-api/pull/7156\n\nThis quicktest fails without the fix above, and passes with it.",
          "is_bot": false,
          "headline": "quicktest: Verify non-snapshotted VBDs are not leaked on VM.revert (#…",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-07-06T07:57:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6bf6cf1bb97c770b04e49fc7b9428428401ece1",
          "body": "Signed-off-by: Changlei Li <changlei.li@citrix.com>",
          "is_bot": false,
          "headline": "Update lifecycle",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-07-06T06:48:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "331227c1a4debd00eee3c9673c71ccaa6305f6eb",
          "body": "In `shutdown_agent`, the `xapi_pre_shutdown` may raise exception,\nthen the `light_fuse_and_dont_restart` is skipped. A DB data\nloss is found because db flush in that funtion is not executed.\n\nSigned-off-by: Changlei Li <changlei.li@citrix.com>",
          "is_bot": false,
          "headline": "CA-428532: Ensure db flush is executed in shutdown_agent",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-07-06T06:48:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19c438684541bc5826fdc646334718f5f74dbcd6",
          "body": "This is a follow-up to https://github.com/xapi-project/xen-api/pull/7156\n\nThis quicktest fails without the fix above, and passes with it.\n\nSigned-off-by: Andrii Sultanov <andriy.sultanov@vates.tech>",
          "is_bot": false,
          "headline": "quicktest: Verify non-snapshotted VBDs are not leaked on VM.revert",
          "author_name": "Andrii Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-07-03T09:13:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b63bc07a7ee8e5b021d30341590c29220139b2e",
          "body": "…cted VMs\n\nWhen HA is enabled on the pool, host.evacuate refuses to plan the evacuation\nof any VM that is not HA-protected, that is, whose ha_restart_priority is not\n\"restart\". This is intentional: the HA planner only accounts for protected\nVMs, so unprotected ones are excluded from the evacuation p\n[…]\nefore evacuating). Behaviour is otherwise\nunchanged: the evacuation still fails for these VMs, it is just reported\ncorrectly.\n\nCloses #4323\n\nSigned-off-by: Olivier Lambert <olivier.lambert@vates.tech>",
          "is_bot": false,
          "headline": "xapi: report a clear error when host evacuation is blocked by unprote…",
          "author_name": "Olivier Lambert",
          "author_login": "olivierlambert",
          "committed_at": "2026-07-02T20:49:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f29f5effe8f819ebf17d8dfe4f3e8bad12e1a8e",
          "body": "Revert xcp-networkd: dhclient cleanup (#7138) after regression spotted.",
          "is_bot": false,
          "headline": "Revert xcp-networkd: dhclient cleanup (#7138) (#7159)",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-07-02T09:35:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3fda4faf700395d09091c5fba83de8ae73aa17d2",
          "body": "… the interface if running and to unconfigure addresses.\"\n\nThis reverts commit 8109f32aa5c0ef499e4c92d7984a87874e65c75f.\n\nSigned-off-by: Sebastien Rodot <sebastien.rodot@vates.tech>",
          "is_bot": false,
          "headline": "Revert \"networkd: make Dhclient.stop to stop the DHCP client managing…",
          "author_name": "Sebastien Rodot",
          "author_login": "semarie",
          "committed_at": "2026-07-02T05:58:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b212573a8de18aba94ea44837f42b16a915e17a",
          "body": "…assigned addresses.\"\n\nThis reverts commit 0d3b9a6d324c61dda2b2414c72336c0160261601.\n\nSigned-off-by: Sebastien Rodot <sebastien.rodot@vates.tech>",
          "is_bot": false,
          "headline": "Revert \"networkd: make Dhclient.ensure_running to discard previously …",
          "author_name": "Sebastien Rodot",
          "author_login": "semarie",
          "committed_at": "2026-07-02T05:58:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7658162c78a69279e1c0cbb54222e663129bbfe3",
          "body": "This reverts commit 2ea48ef60d1ebe39d8e564215586e3145cb9d317.\n\nSigned-off-by: Sebastien Rodot <sebastien.rodot@vates.tech>",
          "is_bot": false,
          "headline": "Revert \"dhclient: add comments on functions\"",
          "author_name": "Sebastien Rodot",
          "author_login": "semarie",
          "committed_at": "2026-07-02T05:58:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1dfc571a44dab2b83ede0c7930fa8b4bd46dc58",
          "body": "This reverts commit 83e7241d4bfaccd10a684ac778a94974ca6efcb8.\n\nSigned-off-by: Sebastien Rodot <sebastien.rodot@vates.tech>",
          "is_bot": false,
          "headline": "Revert \"networkd: refactor set_ipv{4,6}_conf functions\"",
          "author_name": "Sebastien Rodot",
          "author_login": "semarie",
          "committed_at": "2026-07-02T05:58:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a68366b9c534341323f0e04a5905bdd140d7a44",
          "body": "…public interface\"\n\nThis reverts commit 616b58c2a36ba9e9e3bd777351aafe7dbdbbca71.\n\nSigned-off-by: Sebastien Rodot <sebastien.rodot@vates.tech>",
          "is_bot": false,
          "headline": "Revert \"dhclient: add `set_stale` (and remove `remove_conf_file`) in …",
          "author_name": "Sebastien Rodot",
          "author_login": "semarie",
          "committed_at": "2026-07-02T05:58:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5bd7c8db538ffe3935eab2b5d52115707300927",
          "body": "…21.2 to 2.22.0 in /ocaml/sdk-gen/java/autogen/xen-api (#7153)\n\nBumps\n[com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson)\nfrom 2.21.2 to 2.22.0.\n<details>\n<summary>Commits</summary>\n<ul>\n<li>See full diff in <a\nhref=\"https://github.com/FasterXML/jackson/commits\">compa\n[…]\nu reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts\npage](https://github.com/xapi-project/xen-api/network/alerts).\n\n</details>",
          "is_bot": false,
          "headline": "build(deps): bump com.fasterxml.jackson.core:jackson-databind from 2.…",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-07-01T13:29:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d7e6fc220238de51c785df69c0941d43db3fd690",
          "body": "Disks without snapshot are left unattached after the revert is complete.\nThis is right but the vbds should be removed.\nFix\nhttps://github.com/xapi-project/xen-api/pull/7116#discussion_r3502974505",
          "is_bot": false,
          "headline": "CA-429144: Do not leak new vbds after snapshot (#7156)",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-07-01T10:06:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a1d7145180df5250af005c06a9a8652b4ae7902",
          "body": "Disks without snapshot are left unattached after the revert\nis complete. This is right but the vbds should be removed.\n\nSigned-off-by: Changlei Li <changlei.li@citrix.com>",
          "is_bot": false,
          "headline": "CA-429144: Do not leak new vbds after snapshot",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-07-01T03:08:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bc7574b54fee31dd835be5ef0c531cc85ea4bab",
          "body": "Bumps [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) from 2.21.2 to 2.22.0.\n- [Commits](https://github.com/FasterXML/jackson/commits)\n\n---\nupdated-dependencies:\n- dependency-name: com.fasterxml.jackson.core:jackson-databind\n  dependency-version: 2.22.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump com.fasterxml.jackson.core:jackson-databind",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-30T03:44:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6a72e44d661fff058db4871d5c7eacc2599c944",
          "body": "Test report:\n\nhttps://xenserver.atlassian.net/wiki/spaces/xenserver/pages/1208909838/Quality+Status+Report+for+Secure+LDAP+Support+XS9",
          "is_bot": false,
          "headline": "Merge feature branch to master (#7149)",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-06-30T03:20:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9913e47b604b6625bcec11784da894c8dcb9254e",
          "body": "When the chosen HA cluster_stack is corosync (i.e. for a gfs2 heartbeat\nSR) every pool host must have an enabled, joined cluster_host on the\nmatching cluster stack, and this host must currently be quorate. Without\nthis preflight, that failure surfaces much later inside\nXha_statefile.check_sr_can_hos\n[…]\ntics directly rather than reading the Cluster_host.live DB field,\nwhich the corosync_notifyd watcher only updates asynchronously and which\nis reset to false for all hosts on any transient quorum blip.",
          "is_bot": false,
          "headline": "CA-403379: pre-flight cluster_host state before pool-ha-enable (#7130)",
          "author_name": "LunfanZhang",
          "author_login": "LunfanZhang",
          "committed_at": "2026-06-30T02:55:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fce34362161c50de32087b4ab00b153e59360b73",
          "body": null,
          "is_bot": false,
          "headline": "Update release version to 26.15.0-next (#7152)",
          "author_name": "Ming Lu",
          "author_login": "minglumlu",
          "committed_at": "2026-06-29T10:48:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfa60cc2a53a2650f0da898aa221bd2ad85464e3",
          "body": "…cates_from\n\npool.sync_trusted_certificates_from is a new message declared with an empty\n~lifecycle:[], so (like its sibling trusted-certificate messages) its\nprototyped version must be recorded in the generated\nocaml/idl/datamodel_lifecycle.ml. That entry was missing, leaving the\ngenerated file out\n[…]\n15.0-next).\n\nGenerated with: dune build @ocaml/idl/update-dm-lifecycle --auto-promote\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nSigned-off-by: Lin Liu <Lin.Liu01@cloud.com>",
          "is_bot": false,
          "headline": "CP-312131: regenerate datamodel_lifecycle.ml for sync_trusted_certifi…",
          "author_name": "Lin Liu",
          "author_login": "liulinC",
          "committed_at": "2026-06-29T09:57:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ccf0368b5b3b9c75a3568a51d6e7049912b9a3b3",
          "body": "external_auth_set_ldaps (host and pool) declared its ~lifecycle and\nparam_release versions as 26.12.0-next. The lifecycle auto-generation\ntool does not recognise -next versions, so the release must be set\nmanually to the current development version. Update all 8 occurrences\n(ocaml/idl/datamodel_host\n[…]\nool.ml: 4) from\n26.12.0-next to 26.15.0-next.\n\nAddresses review feedback on PR #7149.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nSigned-off-by: Lin Liu <Lin.Liu01@cloud.com>",
          "is_bot": false,
          "headline": "CP-312131: set LDAPS datamodel lifecycle version to 26.15.0-next",
          "author_name": "Lin Liu",
          "author_login": "liulinC",
          "committed_at": "2026-06-29T08:22:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "242f6db863994094c5b2cf9f0d1eeb5a29a080de",
          "body": "The field image_format added to receive_start and receive_start2 breaks\nmigration from old XAPI to new XAPI.\n\nBoth are sending RPC to the destination, which runs them locally. If the\ndestination has the field but not the source it breaks compatibility. On\nthe other hand, receive_start3 runs on the s\n[…]\nto choose the format of the destination when migrating from old version\nof XAPI to new version of XAPI. As receive_start and receive_start2 are\ndeprecated the situation will become more and more rare.",
          "is_bot": false,
          "headline": "Remove image format from deprecated receive start (#7144)",
          "author_name": "Changlei Li",
          "author_login": "changlei-li",
          "committed_at": "2026-06-29T08:09:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "67dad046ff8522cddc8feac41c934b246f5504e8",
          "body": null,
          "is_bot": false,
          "headline": "sync master to feature branch (#7148)",
          "author_name": "Lin Liu",
          "author_login": "liulinC",
          "committed_at": "2026-06-29T04:42:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5dacc6f9fdb644a39cbaf2957d0ff5726b537e8",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into private/linl/sync",
          "author_name": "Lin Liu",
          "author_login": null,
          "committed_at": "2026-06-29T02:53:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71a2576b7aed6d9caf6b940ad5c13b142dab4eeb",
          "body": "The field image_format added to receive_start and receive_start2 breaks\nmigration from old XAPI to new XAPI.\n\nBoth are sending RPC to the destination, which runs them locally. If the\ndestination has the field but not the source it breaks compatibility. On the\nother hand, receive_start3 runs on the s\n[…]\non of XAPI to\nnew version of XAPI. As receive_start and receive_start2 are deprecated the\nsituation will become more and more rare.\n\nSigned-off-by: Guillaume Thouvenin <guillaume.thouvenin@vates.tech>",
          "is_bot": false,
          "headline": "Remove image format from deprecated receive start",
          "author_name": "Guillaume",
          "author_login": "gthvn1",
          "committed_at": "2026-06-26T15:40:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3e43f1ffe58816e29d3a3e6d8cb92f424c8180a1",
          "body": "Before:\n\n    $ xe vlan-create pif-uuid=<TAB>\n    3c1548f0-343f-b629-939a-e832512085f5  -\n    98d4cc1f-d97f-2126-7005-7c721e43c29f  -\n    93ba9954-b286-b984-9277-e62ec56f12c9  -\n\nAfter:\n\n    $ xe vlan-create pif-uuid=<TAB>\n    3c1548f0-343f-b629-939a-e832512085f5  - eth0\n    93ba9954-b286-b984-9277-e62ec56f12c9  - eth1\n    93dbac2c-b3e4-292f-ac35-1352b5ba9a75  - eth0",
          "is_bot": false,
          "headline": "xe: Fix bash completion for 'xe vlan-create pif-uuid=' (#7142)",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-06-26T09:30:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "385fba2c4af94cd923741224ada07d57ffd47cc6",
          "body": "The following commits are a first step for doing some cleanup in DHCP\nclient.\n\nThe purpose is to abstract the module and clarify function contracts, in\norder to permit alternative DHCP client to current (unmaintained)\n`dhclient` binary from ISC.\n\nNo functional changes are expected, even if some operations are\nreordered.",
          "is_bot": false,
          "headline": "xcp-networkd: dhclient cleanup (#7138)",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-06-25T13:39:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0fc1d1ba24a17f4389150789bb63e9b0ffa695d",
          "body": "Before:\n\n    $ xe vlan-create pif-uuid=<TAB>\n    3c1548f0-343f-b629-939a-e832512085f5  -\n    98d4cc1f-d97f-2126-7005-7c721e43c29f  -\n    93ba9954-b286-b984-9277-e62ec56f12c9  -\n\nAfter:\n\n    $ xe vlan-create pif-uuid=<TAB>\n    3c1548f0-343f-b629-939a-e832512085f5  - eth0\n    93ba9954-b286-b984-9277-e62ec56f12c9  - eth1\n    93dbac2c-b3e4-292f-ac35-1352b5ba9a75  - eth0\n\nSigned-off-by: Andrii Sultanov <andriy.sultanov@vates.tech>",
          "is_bot": false,
          "headline": "xe: Fix bash completion for 'xe vlan-create pif-uuid='",
          "author_name": "Andrii Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-06-25T13:22:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "616b58c2a36ba9e9e3bd777351aafe7dbdbbca71",
          "body": "…nterface\n\nIn `set_gateway_interface` and `set_dns_interface` we are removing the \nconfiguration file to trigger a restart of Dhclient on the next `ensure_running` \ncall.\n\nBy setting gateway or DNS interface, it affects the (possibly) running dhclient \nprocess and it will need restarting on the old \n[…]\non will be the same,\nbut a restart it still needed.\n\nBy marking the configuration as dirty, it ensures that the DHCP client will be restarted.\n\n\nSigned-off-by: Sebastien Marie <semarie@kapouay.eu.org>",
          "is_bot": false,
          "headline": "dhclient: add `set_stale` (and remove `remove_conf_file`) in public i…",
          "author_name": "Sebastien Marie",
          "author_login": "semarie",
          "committed_at": "2026-06-25T11:52:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "593360e0ab22c3db5b3d8085a3d12c8aa6a0d8db",
          "body": "The stunnel proxy process needs to be waited/reaped when 'use_daemon' is\nfalse. When it is false, vfork is used when a process creates stunnel\nprocesses. Hence the process is the parent of them. The process needs\nto wait for the stunnel processes after they are killed. Otherwise,\nthese stunnel processes would become zombie.\n\nThe value of 'use_daemon' is determined by the existence of file\n\"/etc/xensource/forkexec-uses-daemon\".",
          "is_bot": false,
          "headline": "CA-417915: stunnel proxy process is not reaped during stop (#7140)",
          "author_name": "Ming Lu",
          "author_login": "minglumlu",
          "committed_at": "2026-06-25T08:05:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79135d06eea6ee371817b809fb188503378b27c4",
          "body": "The stunnel proxy process needs to be waited/reaped when 'use_daemon' is\nfalse. When it is false, vfork is used when a process creates stunnel\nprocesses. Hence the process is the parent of them. The process needs\nto wait for the stunnel processes after they are killed. Otherwise,\nthese stunnel processes would become zombie.\n\nThe value of 'use_daemon' is determined by the existence of file\n\"/etc/xensource/forkexec-uses-daemon\".\n\nSigned-off-by: Ming Lu <ming.lu@cloud.com>",
          "is_bot": false,
          "headline": "CA-417915: stunnel proxy process is not reaped during stop",
          "author_name": "Ming Lu",
          "author_login": "minglumlu",
          "committed_at": "2026-06-25T07:46:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83e7241d4bfaccd10a684ac778a94974ca6efcb8",
          "body": "- deconfigure the previous configuration before configuring the new configuration\n  (instead of unconfiguring all possible configurations)\n- ignore exception in deconfiguration to ensure configuration is always called\n- if DHCP client needs restarting, do it with minimal disruption on the interface\n\nSigned-off-by: Sebastien Marie <semarie@kapouay.eu.org>",
          "is_bot": false,
          "headline": "networkd: refactor set_ipv{4,6}_conf functions",
          "author_name": "Sebastien Marie",
          "author_login": "semarie",
          "committed_at": "2026-06-24T09:09:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ea48ef60d1ebe39d8e564215586e3145cb9d317",
          "body": "Signed-off-by: Sebastien Marie <semarie@kapouay.eu.org>",
          "is_bot": false,
          "headline": "dhclient: add comments on functions",
          "author_name": "Sebastien Marie",
          "author_login": "semarie",
          "committed_at": "2026-06-24T09:06:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d3b9a6d324c61dda2b2414c72336c0160261601",
          "body": "… addresses.\n\nSigned-off-by: Sebastien Marie <semarie@kapouay.eu.org>",
          "is_bot": false,
          "headline": "networkd: make Dhclient.ensure_running to discard previously assigned…",
          "author_name": "Sebastien Marie",
          "author_login": "semarie",
          "committed_at": "2026-06-24T09:06:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8109f32aa5c0ef499e4c92d7984a87874e65c75f",
          "body": "…erface if running and to unconfigure addresses.\n\nSigned-off-by: Sebastien Marie <semarie@kapouay.eu.org>",
          "is_bot": false,
          "headline": "networkd: make Dhclient.stop to stop the DHCP client managing the int…",
          "author_name": "Sebastien Marie",
          "author_login": "semarie",
          "committed_at": "2026-06-24T09:06:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea81df80c0b96d8bbd6b50a9f404d3c3e14375fc",
          "body": "Signed-off-by: Sola.Zhang <Sola.Zhang@cloud.com>",
          "is_bot": false,
          "headline": "CP-310955: Update friendly error messages (#7108)",
          "author_name": "xueqingz",
          "author_login": "xueqingz",
          "committed_at": "2026-06-23T10:28:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74bdf429842caf4d5cf03ad4e325ff4c04ddb1bb",
          "body": null,
          "is_bot": false,
          "headline": "README: Add instructions for installing developer tools (#7136)",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-06-23T08:58:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f6edc15bef006f27f2dfa0a18380c12756c809c",
          "body": "Signed-off-by: Andrii Sultanov <andriy.sultanov@vates.tech>",
          "is_bot": false,
          "headline": "README: Add instructions for installing developer tools",
          "author_name": "Andrii Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-06-22T09:59:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6ba38d7facb6106f9f7ed6a48ee91253d8075bb",
          "body": "The xenctrlext_stubs use libxenctrl symbols (e.g. xc_cpumap_alloc) but\ndid not declare it as a link dependency. So, the produced\ndllxenctrl_ext_stubs.so had no NEEDED entry for libxenctrl.\n\nWhen I try to run `dune utop` on my Debian Trixie the loading fails\nwith:\n  Fatal error: cannot load shared li\n[…]\n\n  Reason: .../ocaml/libs/xenctrl-ext/dllxenctrl_ext_stubs.so:\n          undefined symbol: xc_cpumap_alloc\n\nThis patch adds -lxenctrl to c_library_flags so the stubs declare the\ndependency themselves.",
          "is_bot": false,
          "headline": "xenctrl-ext: link stubs explicitly agains libxenctrl (#7135)",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-06-19T11:47:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3d869135530024ed462150242d51d11a766e0398",
          "body": "The xenctrlext_stubs use libxenctrl symbols (e.g. xc_cpumap_alloc)\nbut did not declare it as a link dependency. So, the produced\ndllxenctrl_ext_stubs.so had no NEEDED entry for libxenctrl.\n\nWhen I try to run `dune utop` on my Debian Trixie the loading fails\nwith:\n  Fatal error: cannot load shared li\n[…]\nso:\n          undefined symbol: xc_cpumap_alloc\n\nThis patch adds -lxenctrl to c_library_flags so the stubs declare the\ndependency themselves.\n\nSigned-off-by: Guillaume <guillaume.thouvenin@vates.tech>",
          "is_bot": false,
          "headline": "xenctrl-ext: link stubs explicitly agains libxenctrl",
          "author_name": "Guillaume",
          "author_login": "gthvn1",
          "committed_at": "2026-06-19T08:32:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "362b9921e9c9f8b0b9f07acb6ad50e4528fcb01b",
          "body": "This PR contains the changes needed to implement the proposal shown in\nhttps://github.com/xapi-project/xen-api/blob/master/doc/content/design/snapshot-revert.md\n\nPlease note that the storage backends need to implement VDI_REVERT in\norder to benefit from this change.\n\nThe fallback logic to the previo\n[…]\ne's one change in user-visible behaviour: now the UUID of the VDIs\ndo not change when reverting if VDI.revert is used.\n\nThis PR is a port to master of\nhttps://github.com/xapi-project/xen-api/pull/7116",
          "is_bot": false,
          "headline": "Implement Better VM revert using VDI revert (#7132)",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-18T13:14:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e68fa904dd2a725e5811951fa662defe2719eabc",
          "body": "When the chosen HA cluster_stack is corosync (i.e. for a gfs2 heartbeat\nSR) every pool host must have an enabled, joined cluster_host on the\nmatching cluster stack, and this host must currently be quorate.\nWithout this preflight, that failure surfaces much later inside\nXha_statefile.check_sr_can_hos\n[…]\nich the corosync_notifyd watcher only updates asynchronously\nand which is reset to false for all hosts on any transient quorum\nblip.\n\nSigned-off-by: Lunfan Zhang[Lunfan.Zhang] <Lunfan.Zhang@cloud.com>",
          "is_bot": false,
          "headline": "CA-403379: pre-flight cluster_host state before pool-ha-enable",
          "author_name": "Lunfan Zhang[Lunfan.Zhang]",
          "author_login": "LunfanZhang",
          "committed_at": "2026-06-18T06:38:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f32689258f5c5e86b26e5f3fd195dc453ed55ede",
          "body": "Because all the snapshot's CD VBDs are cloned in all cases, the reverted\nVM's CD VBDs must be destroyed in all cases, add them unconditionally to\nthe VBDs being destroyed.\n\nSigned-off-by: Pau Ruiz Safont <pau.safont@vates.tech>\n(cherry picked from commit 20e8b3bb5b44406560d08fa6d5c925b089bfa091)",
          "is_bot": false,
          "headline": "xapi_vm_snapshot: do not leak CD VBDs",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-17T15:30:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22d53790f263320082989faf598c32940904e915",
          "body": "This shows the current code leaks the VBDs\n\nSigned-off-by: Pau Ruiz Safont <pau.safont@vates.tech>\n(cherry picked from commit 38cfbc549040b68f85d50e963546864ac2606a40)",
          "is_bot": false,
          "headline": "quicktest: test for number of CD VBDs",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-17T15:30:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1480fbdd785619833235c612b99d5aaf64576f76",
          "body": "This needed a fix for the datamodel_lifecycle and the datamodel hash\n\nThe minor schema version does not need to be changed since it was\nalready bumped in the corresponding cherry-pick that bumped it. I\nelected to do that instead of keeping it the same.\n\nSigned-off-by: Pau Ruiz Safont <pau.safont@vates.tech>",
          "is_bot": false,
          "headline": "cherry-pick fixes from better VM revert",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-17T09:38:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c6eb2c4da6d20776d853723002e114ebe56c34a",
          "body": "In case where there's an error while reverting on the Storage Backend,\nthe state of the SR might become unstable, and a recovery using the\nclone method for reverting might introduce bigger issues. Instead stop\nthe revert immediately.\n\nThe cases where ignoring the errors is acceptable is when either \n[…]\nif the SR implements\nthe revert for only some of the formats it implements.\n\nSigned-off-by: Pau Ruiz Safont <pau.safont@vates.tech>\n(cherry picked from commit f887de1b17b39875d2c4301d654544d6247d9758)",
          "is_bot": false,
          "headline": "xapi_vm_snapshot: Fail VM.revert when a VDI.revert actually fails",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-17T09:38:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9e66f92bd849721a3d25cfee438fc2a917092c23",
          "body": "Signed-off-by: Pau Ruiz Safont <pau.safont@vates.tech>\n(cherry picked from commit 97823b4f7c015872b108dd4b2ba79a0b68daeadb)",
          "is_bot": false,
          "headline": "datamodel_lifecycle: refresh",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-17T09:38:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e990679d6ccbd37063d03f7412cb656c90362c52",
          "body": "The code now tries to call VDI.revert on all the disk VDIs, and if that\nfails, it falls back to the original revert method that destroys VM\ndisks, clones snapshot disks and then fixes up metadata.\n\nThis means that the successfully reverted disks must be excluded from\nthe original method. This is don\n[…]\nnal method\nto the native one: now VDI UUIDs are not changed when reverting.\n\nSigned-off-by: Pau Ruiz Safont <pau.safont@vates.tech>\n(cherry picked from commit d1ae2a7dd9ad83dc49b79ee1987200eeb0f87d89)",
          "is_bot": false,
          "headline": "xapi_vm_snapshot: change VM.revert to use VDI.revert",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-17T09:38:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d24549a7743bb40339e2c3c8710f6b2ff6955608",
          "body": "The API function is needed to be able to forward it across the pool and\nto block other operations on the VDI while it's running.\n\nIt's unused for the time being.\n\nCo-authored-by: John Else <john.else@citrix.com>\nSigned-off-by: Pau Ruiz Safont <pau.safont@vates.tech>\n(cherry picked from commit 6c95e340f6501a1fd17b049fcb89eca25d601029)",
          "is_bot": false,
          "headline": "CA-143836: Add VDI.revert API call",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-17T09:38:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e31cd0bffc975cb68d26e732ac1126e137e5c1e",
          "body": "This operation allows storage backends to implement VDI revert natively,\nas well as advertise it. The operation is unused by xapi for the time\nbeing.\n\nCo-authored-by: David Scott <dave.scott@eu.citrix.com>\nCo-authored-by: John Else <john.else@citrix.com>\nSigned-off-by: Pau Ruiz Safont <pau.safont@vates.tech>\n(cherry picked from commit c368ca80b45a72acfbd6841d8643bbe4a658c895)",
          "is_bot": false,
          "headline": "storage: add VDI.revert",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-17T09:38:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f487aefcd26d0e66ab2c1cf15a21b6fd41ca853a",
          "body": "This is for both the live VDI (revert_from) and the snapshot (revert_to)\n\nThese correspond to the VM operations `reverting` and `revert`,\nrespectively.\n\nOnly snapshots backed by an SR that allows clones are allowed to be\nreverted to. This is because SRs supporting revert is not enough to use\nvdi rev\n[…]\nerted to an attached leaf.\n\nCo-authored-by: John Else <john.else@citrix.com>\nSigned-off-by: Pau Ruiz Safont <pau.safont@vates.tech>\n(cherry picked from commit 639bc3d69d5dc5c937f191af2b8e64733a42dd1c)",
          "is_bot": false,
          "headline": "xapi_vdi: Introduce VDI operations needed for revert",
          "author_name": "John Else",
          "author_login": "johnelse",
          "committed_at": "2026-06-17T09:38:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2bb61f03388542d6c39944832a8eba1b98b35473",
          "body": "Signed-off-by: Pau Ruiz Safont <pau.safont@vates.tech>\n(cherry picked from commit 7f931c11c9ed4d7b0ba73fc9360e32cb653264c7)",
          "is_bot": false,
          "headline": "xapi_vm_snapshot: shorten length of comments",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-17T09:38:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff7657ddfb07c820b97f8d3ad78956d4092a2963",
          "body": "Chassis_id, system_name and system_description are shared by all NICs on\na host. Adding them into networkd interface so that they can be prepared\nby XAPI and pushed to networkd. Otherwise, it would be costly for\nnetworkd to query XAPI for each NIC.",
          "is_bot": false,
          "headline": "[design doc] Add shared LLDP data into networkd interface (#7120)",
          "author_name": "Ming Lu",
          "author_login": "minglumlu",
          "committed_at": "2026-06-17T02:22:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a4b39fe08a3e76bc2b21e1f691c81b77f9995f8",
          "body": "Fold Wbinfo.kdc_of_domain (wbinfo --getdcname) into the same match as\nLdap.query_user in query_subject_information_user, so a DC-location or\nLDAP query failure falls back to default_account instead of aborting\nsubject creation via let*. Fixes subject-add for one-way trusted-domain\nusers when getdcname cannot locate the trusted DC; attributes are\nrefreshed later by update_all_subjects.",
          "is_bot": false,
          "headline": "CA-428461: make trusted-domain attribute enrichment best-effort (#7126)",
          "author_name": "Lin Liu",
          "author_login": "liulinC",
          "committed_at": "2026-06-15T05:26:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c731400433c41bec7926a49137bc4b3d553dd740",
          "body": null,
          "is_bot": false,
          "headline": "Update datamodel_lifecycle for supported_image_formats (#7125)",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-06-12T07:39:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d57c84d2e1ebf8ac8d15b4223ee39615d8c5c85e",
          "body": "Fold Wbinfo.kdc_of_domain (wbinfo --getdcname) into the same match as\nLdap.query_user in query_subject_information_user, so a DC-location or\nLDAP query failure falls back to default_account instead of aborting\nsubject creation via let*. Fixes subject-add for one-way trusted-domain\nusers when getdcna\n[…]\n cannot locate the trusted DC; attributes are\nrefreshed later by update_all_subjects.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nSigned-off-by: Lin Liu <Lin.Liu01@cloud.com>",
          "is_bot": false,
          "headline": "CA-428461: make trusted-domain attribute enrichment best-effort",
          "author_name": "Lin Liu",
          "author_login": "liulinC",
          "committed_at": "2026-06-12T06:35:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c4886eb9dacbd78a456a5abbf89ba5841852c0eb",
          "body": null,
          "is_bot": false,
          "headline": "Sync master to feature branch (#7128)",
          "author_name": "Lin Liu",
          "author_login": "liulinC",
          "committed_at": "2026-06-12T06:33:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45b356fffac685ffc389db3deccbcffbb9f6f6ff",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' into private/linl/sync",
          "author_name": "Lin Liu",
          "author_login": "liulinC",
          "committed_at": "2026-06-12T06:18:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb2e37c9812c45af3476a7363b7eb4132b50ef2c",
          "body": "When LDAPS is enabled, pool.enable_external_auth could intermittently\nfail with POOL_AUTH_ENABLE_FAILED_SETUP_TLS_CONNECTION: \"net ads join\"\nauto-selects a domain controller via DsGetDcName without considering its\nTLS certificate, so if the chosen DC presents a certificate that does\nnot chain to a t\n[…]\nid takes optional ?duser/?dpass arguments: when both\nare given it authenticates via the USER/PASSWD environment variables\ninstead of --machine-pass.\n\nWhen ldaps is disabled the behaviour is unchanged.",
          "is_bot": false,
          "headline": "CA-428436: validate DC LDAPS certificate before joining domain (#7121)",
          "author_name": "Lin Liu",
          "author_login": "liulinC",
          "committed_at": "2026-06-12T03:07:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b517e68425b3c139cd0bae3cb985f518abdf9d94",
          "body": "Signed-off-by: Guillaume Thouvenin <guillaume.thouvenin@vates.tech>",
          "is_bot": false,
          "headline": "Update datamodel_lifecycle for supported_image_formats",
          "author_name": "Guillaume Thouvenin",
          "author_login": "gthvn1",
          "committed_at": "2026-06-11T15:09:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f6406f5d217e11c8fc5a482ad6313d9eac8210f",
          "body": "This is a forward-port of\nhttps://github.com/xapi-project/xen-api/pull/6895 (with the exception of\ncommits later reverted in\nhttps://github.com/xapi-project/xen-api/pull/7030 and\nhttps://github.com/xapi-project/xen-api/pull/7022).\n\nChanges to VHD code are gated behind a feature flag (with previous\nb\n[…]\nt). XCP-ng has been running the new VHD and QCOW\ncode for a while now with no issues.\n\nThis PR needs to be merged before the corresponding xs-opam PR\n(https://github.com/xapi-project/xs-opam/pull/768)",
          "is_bot": false,
          "headline": "[master] Optimize data cluster format for VHD and QCOW (#7106)",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-11T10:30:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "457e48a64fceced465ad3da08988c56469e00f30",
          "body": "These changes add both unit-tests and quicktests to make sure that\nregressions introduced with VDI.revert will be visible as early as\npossible.\n\nIn particular:\n- unit tests have been added to make sure adding the VDI_REVERT SR\noperation doesn't break important internal properties.\n- quicktests have \n[…]\n conflicting in a dune file, which had an easy resolution to\ntake both into account\n- One function in the quicktests changed, and needed a change in the new\ntests, which was added as a separate commit",
          "is_bot": false,
          "headline": "Prepare for VDI.revert: add tests and robustify error paths (#7104)",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-11T08:31:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b7d853b25141840738dce4de6e69cfde79bf1949",
          "body": "Chassis_id, system_name and system_description are shared by all NICs on\na host. Adding them into networkd interface so that they can be prepared\nby XAPI and pushed to networkd. Otherwise, it would be costly for\nnetworkd to query XAPI for each NIC.\n\nSigned-off-by: Ming Lu <ming.lu@cloud.com>",
          "is_bot": false,
          "headline": "[design doc] Add shared LLDP data into networkd interface",
          "author_name": "Ming Lu",
          "author_login": "minglumlu",
          "committed_at": "2026-06-10T09:48:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "788869e5a92e10332ba2428eb91e5a2caf4c7131",
          "body": "XAPI exposes a `VIF.configure_ipv4/v6` message to instruct guest agents\nto configure the VM's IP settings on the host's behalf.\n\nThis feature currently works by setting\n`/local/domain/<domid>/xenserver/device/vif/<N>/static-ip-setting/enabled`\nto one of the following values:\n\n- `enabled=0`: None (un\n[…]\n3821f1c95a5ed46efdf59bf4/src/xenguestlib/FeatureStaticIpSetting.cs#L534)\nsince a very long time, and from my testing with the XS 9.6.0 guest\nagent, is capable of reverting to DHCP if enabled=2 is set.",
          "is_bot": false,
          "headline": "Add DHCP setting for VIF IP configuration (#7118)",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-10T08:09:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d045710cbe934c49c7021db6d021c32637384b00",
          "body": "XAPI exposes a VIF.configure_ipv4/v6 message to instruct guest agents to\nconfigure the VM's IP settings on the host's behalf.\n\nThis feature currently works by setting /local/domain/<domid>/xenserver/\ndevice/vif/<N>/static-ip-setting/enabled to one of the following values:\n\nenabled=0: None (unconfigu\n[…]\n2. This mode\ninstructs the guest to configure its VIF to use DHCP (on IPv4) or any\nappropriate method to obtain an IP address automatically (on IPv6).\n\nSigned-off-by: Tu Dinh <ngoc-tu.dinh@vates.tech>",
          "is_bot": false,
          "headline": "Add DHCP setting for VIF IP configuration",
          "author_name": "Tu Dinh",
          "author_login": "dinhngtu",
          "committed_at": "2026-06-09T15:03:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb6925055aba91ceb8c035824f693fd459619c1e",
          "body": "When LDAPS is enabled, pool.enable_external_auth could intermittently\nfail with POOL_AUTH_ENABLE_FAILED_SETUP_TLS_CONNECTION: \"net ads join\"\nauto-selects a domain controller via DsGetDcName without considering its\nTLS certificate, so if the chosen DC presents a certificate that does not\nchain to a t\n[…]\nables instead\nof --machine-pass.\n\nWhen ldaps is disabled the behaviour is unchanged.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\nSigned-off-by: Lin Liu <lin.liu01@citrix.com>",
          "is_bot": false,
          "headline": "CA-428436: validate DC LDAPS certificate before joining domain",
          "author_name": "Lin Liu",
          "author_login": null,
          "committed_at": "2026-06-09T09:35:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f2c5d557b47e525b91fd7fdc43f66fe3305905de",
          "body": null,
          "is_bot": false,
          "headline": "Update examples (#7117)",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-08T13:09:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "132059b4a5d71129179713f2570d33798e072a39",
          "body": null,
          "is_bot": false,
          "headline": "Enhancements to the XAPI documentation (#7100)",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-08T12:54:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4db1de694e7a0f77c080963f6b3dcf36b528f11c",
          "body": "Looks like this mechanism was used in the past, and only one vestigial\ncheck on VBD creation was used.\n\nIt does not make sense to create a VBD associated with a task and\nimmediately check whether it has leaked.",
          "is_bot": false,
          "headline": "xapi/attach_helpers: remove useless check for leaked vbds  (#7035)",
          "author_name": "Pau Ruiz Safont",
          "author_login": "psafont",
          "committed_at": "2026-06-08T12:40:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3edd2a2c33d734b1443229777e80edb2899fc540",
          "body": "It is currently possible to accidentally pass through a PCI device\nbacking the boot drive, making the system unbootable and requiring\nmanual intervention (since dom0 will no longer be able to access the PCI\ndevice).\n\nFix this at least for the drive behind '/', refusing to pass through its\nPCI device\n[…]\ndisable-dom0-access uuid=$UUID\n    Passing through a PCI device backing a boot disk is disallowed\n    device: /dev/sda1\n    $ /opt/xensource/libexec/xen-cmdline --get-dom0 xen-pciback.hide\n    <empty>",
          "is_bot": false,
          "headline": "xapi_pci: Disallow passthrough for boot devices (#7113)",
          "author_name": "Andriy Sultanov",
          "author_login": "last-genius",
          "committed_at": "2026-06-08T12:33:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2501b2868be1d11319184e04450e99bc585a253b",
          "body": null,
          "is_bot": false,
          "headline": "[design doc] LLDP support (#7105)",
          "author_name": "Ming Lu",
          "author_login": "minglumlu",
          "committed_at": "2026-06-08T10:50:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 1185,
      "latest_release_at": "2026-07-21T03:04:19Z",
      "latest_release_tag": "v26.1.17",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 52,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 302,
      "stars": 365,
      "watchers": 51,
      "fork_history": {
        "days": [
          {
            "date": "2010-12-16",
            "count": 1
          },
          {
            "date": "2011-01-06",
            "count": 1
          },
          {
            "date": "2011-02-01",
            "count": 2
          },
          {
            "date": "2011-02-03",
            "count": 2
          },
          {
            "date": "2011-02-08",
            "count": 1
          },
          {
            "date": "2011-02-11",
            "count": 1
          },
          {
            "date": "2011-02-16",
            "count": 1
          },
          {
            "date": "2011-02-17",
            "count": 1
          },
          {
            "date": "2011-03-07",
            "count": 2
          },
          {
            "date": "2011-03-28",
            "count": 2
          },
          {
            "date": "2011-03-29",
            "count": 1
          },
          {
            "date": "2011-04-03",
            "count": 1
          },
          {
            "date": "2011-04-07",
            "count": 1
          },
          {
            "date": "2011-04-11",
            "count": 1
          },
          {
            "date": "2011-06-01",
            "count": 1
          },
          {
            "date": "2011-08-08",
            "count": 1
          },
          {
            "date": "2011-08-09",
            "count": 1
          },
          {
            "date": "2011-10-27",
            "count": 1
          },
          {
            "date": "2011-11-03",
            "count": 1
          },
          {
            "date": "2012-01-09",
            "count": 1
          },
          {
            "date": "2012-03-07",
            "count": 1
          },
          {
            "date": "2012-06-06",
            "count": 1
          },
          {
            "date": "2012-07-05",
            "count": 1
          },
          {
            "date": "2012-07-25",
            "count": 1
          },
          {
            "date": "2012-08-15",
            "count": 2
          },
          {
            "date": "2012-09-08",
            "count": 1
          },
          {
            "date": "2012-10-26",
            "count": 1
          },
          {
            "date": "2012-11-21",
            "count": 1
          },
          {
            "date": "2012-12-01",
            "count": 1
          },
          {
            "date": "2012-12-07",
            "count": 1
          },
          {
            "date": "2012-12-17",
            "count": 1
          },
          {
            "date": "2012-12-18",
            "count": 1
          },
          {
            "date": "2012-12-22",
            "count": 1
          },
          {
            "date": "2013-01-03",
            "count": 1
          },
          {
            "date": "2013-01-09",
            "count": 1
          },
          {
            "date": "2013-01-27",
            "count": 1
          },
          {
            "date": "2013-02-11",
            "count": 1
          },
          {
            "date": "2013-02-13",
            "count": 1
          },
          {
            "date": "2013-02-26",
            "count": 1
          },
          {
            "date": "2013-03-01",
            "count": 2
          },
          {
            "date": "2013-03-21",
            "count": 1
          },
          {
            "date": "2013-04-29",
            "count": 1
          },
          {
            "date": "2013-04-30",
            "count": 1
          },
          {
            "date": "2013-06-08",
            "count": 1
          },
          {
            "date": "2013-06-10",
            "count": 1
          },
          {
            "date": "2013-06-28",
            "count": 1
          },
          {
            "date": "2013-07-20",
            "count": 1
          },
          {
            "date": "2013-07-26",
            "count": 1
          },
          {
            "date": "2013-08-16",
            "count": 1
          },
          {
            "date": "2013-09-08",
            "count": 1
          },
          {
            "date": "2013-10-09",
            "count": 1
          },
          {
            "date": "2013-10-18",
            "count": 1
          },
          {
            "date": "2013-10-25",
            "count": 1
          },
          {
            "date": "2013-10-28",
            "count": 1
          },
          {
            "date": "2013-10-31",
            "count": 2
          },
          {
            "date": "2013-11-02",
            "count": 1
          },
          {
            "date": "2013-11-05",
            "count": 3
          },
          {
            "date": "2013-11-14",
            "count": 1
          },
          {
            "date": "2013-12-16",
            "count": 1
          },
          {
            "date": "2013-12-27",
            "count": 1
          },
          {
            "date": "2014-01-15",
            "count": 2
          },
          {
            "date": "2014-01-16",
            "count": 1
          },
          {
            "date": "2014-02-13",
            "count": 1
          },
          {
            "date": "2014-03-03",
            "count": 1
          },
          {
            "date": "2014-03-17",
            "count": 1
          },
          {
            "date": "2014-04-10",
            "count": 1
          },
          {
            "date": "2014-04-15",
            "count": 1
          },
          {
            "date": "2014-04-21",
            "count": 1
          },
          {
            "date": "2014-05-29",
            "count": 1
          },
          {
            "date": "2014-05-31",
            "count": 1
          },
          {
            "date": "2014-06-10",
            "count": 1
          },
          {
            "date": "2014-06-12",
            "count": 1
          },
          {
            "date": "2014-06-25",
            "count": 1
          },
          {
            "date": "2014-07-15",
            "count": 1
          },
          {
            "date": "2014-07-23",
            "count": 1
          },
          {
            "date": "2014-07-29",
            "count": 1
          },
          {
            "date": "2014-08-08",
            "count": 1
          },
          {
            "date": "2014-08-13",
            "count": 1
          },
          {
            "date": "2014-09-18",
            "count": 2
          },
          {
            "date": "2014-09-19",
            "count": 1
          },
          {
            "date": "2014-10-06",
            "count": 1
          },
          {
            "date": "2014-10-08",
            "count": 1
          },
          {
            "date": "2014-11-19",
            "count": 1
          },
          {
            "date": "2014-12-16",
            "count": 1
          },
          {
            "date": "2015-01-14",
            "count": 1
          },
          {
            "date": "2015-02-25",
            "count": 1
          },
          {
            "date": "2015-03-04",
            "count": 1
          },
          {
            "date": "2015-03-20",
            "count": 1
          },
          {
            "date": "2015-03-28",
            "count": 1
          },
          {
            "date": "2015-06-10",
            "count": 1
          },
          {
            "date": "2015-06-18",
            "count": 1
          },
          {
            "date": "2015-09-05",
            "count": 1
          },
          {
            "date": "2015-09-08",
            "count": 1
          },
          {
            "date": "2015-09-15",
            "count": 1
          },
          {
            "date": "2015-09-16",
            "count": 1
          },
          {
            "date": "2015-09-30",
            "count": 1
          },
          {
            "date": "2015-10-20",
            "count": 1
          },
          {
            "date": "2016-02-10",
            "count": 1
          },
          {
            "date": "2016-02-19",
            "count": 2
          },
          {
            "date": "2016-04-04",
            "count": 1
          },
          {
            "date": "2016-05-01",
            "count": 1
          },
          {
            "date": "2016-06-21",
            "count": 2
          },
          {
            "date": "2016-07-18",
            "count": 1
          },
          {
            "date": "2016-07-27",
            "count": 1
          },
          {
            "date": "2016-08-08",
            "count": 1
          },
          {
            "date": "2016-08-09",
            "count": 1
          },
          {
            "date": "2016-08-23",
            "count": 1
          },
          {
            "date": "2016-08-30",
            "count": 1
          },
          {
            "date": "2016-09-29",
            "count": 1
          },
          {
            "date": "2017-01-05",
            "count": 1
          },
          {
            "date": "2017-01-06",
            "count": 1
          },
          {
            "date": "2017-01-15",
            "count": 1
          },
          {
            "date": "2017-01-31",
            "count": 1
          },
          {
            "date": "2017-02-03",
            "count": 1
          },
          {
            "date": "2017-02-09",
            "count": 1
          },
          {
            "date": "2017-02-23",
            "count": 1
          },
          {
            "date": "2017-03-07",
            "count": 1
          },
          {
            "date": "2017-03-15",
            "count": 1
          },
          {
            "date": "2017-03-25",
            "count": 1
          },
          {
            "date": "2017-04-03",
            "count": 1
          },
          {
            "date": "2017-04-07",
            "count": 1
          },
          {
            "date": "2017-04-20",
            "count": 2
          },
          {
            "date": "2017-04-21",
            "count": 1
          },
          {
            "date": "2017-04-28",
            "count": 1
          },
          {
            "date": "2017-05-04",
            "count": 1
          },
          {
            "date": "2017-05-10",
            "count": 1
          },
          {
            "date": "2017-05-15",
            "count": 1
          },
          {
            "date": "2017-06-09",
            "count": 1
          },
          {
            "date": "2017-06-27",
            "count": 1
          },
          {
            "date": "2017-08-03",
            "count": 1
          },
          {
            "date": "2017-08-07",
            "count": 1
          },
          {
            "date": "2017-08-12",
            "count": 1
          },
          {
            "date": "2017-08-16",
            "count": 1
          },
          {
            "date": "2017-08-21",
            "count": 1
          },
          {
            "date": "2017-09-01",
            "count": 1
          },
          {
            "date": "2017-09-20",
            "count": 1
          },
          {
            "date": "2017-11-07",
            "count": 1
          },
          {
            "date": "2017-11-08",
            "count": 1
          },
          {
            "date": "2017-11-13",
            "count": 1
          },
          {
            "date": "2017-11-14",
            "count": 1
          },
          {
            "date": "2017-11-17",
            "count": 1
          },
          {
            "date": "2017-12-27",
            "count": 1
          },
          {
            "date": "2018-01-07",
            "count": 1
          },
          {
            "date": "2018-01-24",
            "count": 1
          },
          {
            "date": "2018-02-02",
            "count": 1
          },
          {
            "date": "2018-02-07",
            "count": 1
          },
          {
            "date": "2018-02-11",
            "count": 1
          },
          {
            "date": "2018-02-23",
            "count": 1
          },
          {
            "date": "2018-03-19",
            "count": 1
          },
          {
            "date": "2018-04-12",
            "count": 1
          },
          {
            "date": "2018-04-30",
            "count": 1
          },
          {
            "date": "2018-05-25",
            "count": 1
          },
          {
            "date": "2018-06-01",
            "count": 1
          },
          {
            "date": "2018-07-26",
            "count": 1
          },
          {
            "date": "2018-09-13",
            "count": 1
          },
          {
            "date": "2018-10-09",
            "count": 1
          },
          {
            "date": "2018-10-22",
            "count": 2
          },
          {
            "date": "2018-11-28",
            "count": 1
          },
          {
            "date": "2018-12-03",
            "count": 1
          },
          {
            "date": "2018-12-11",
            "count": 1
          },
          {
            "date": "2018-12-17",
            "count": 1
          },
          {
            "date": "2019-01-07",
            "count": 1
          },
          {
            "date": "2019-01-11",
            "count": 1
          },
          {
            "date": "2019-01-16",
            "count": 1
          },
          {
            "date": "2019-01-22",
            "count": 1
          },
          {
            "date": "2019-01-29",
            "count": 1
          },
          {
            "date": "2019-02-16",
            "count": 1
          },
          {
            "date": "2019-02-27",
            "count": 1
          },
          {
            "date": "2019-04-11",
            "count": 1
          },
          {
            "date": "2019-04-12",
            "count": 1
          },
          {
            "date": "2019-04-29",
            "count": 1
          },
          {
            "date": "2019-05-28",
            "count": 1
          },
          {
            "date": "2019-06-26",
            "count": 1
          },
          {
            "date": "2019-07-03",
            "count": 1
          },
          {
            "date": "2019-07-04",
            "count": 1
          },
          {
            "date": "2019-07-17",
            "count": 1
          },
          {
            "date": "2019-08-27",
            "count": 1
          },
          {
            "date": "2019-09-10",
            "count": 1
          },
          {
            "date": "2019-10-18",
            "count": 1
          },
          {
            "date": "2019-10-22",
            "count": 1
          },
          {
            "date": "2019-10-24",
            "count": 1
          },
          {
            "date": "2019-10-25",
            "count": 1
          },
          {
            "date": "2019-11-18",
            "count": 1
          },
          {
            "date": "2019-11-27",
            "count": 1
          },
          {
            "date": "2019-12-06",
            "count": 1
          },
          {
            "date": "2020-01-17",
            "count": 1
          },
          {
            "date": "2020-01-29",
            "count": 1
          },
          {
            "date": "2020-03-24",
            "count": 1
          },
          {
            "date": "2020-04-11",
            "count": 1
          },
          {
            "date": "2020-04-13",
            "count": 1
          },
          {
            "date": "2020-04-17",
            "count": 1
          },
          {
            "date": "2020-05-29",
            "count": 1
          },
          {
            "date": "2020-06-22",
            "count": 1
          },
          {
            "date": "2020-07-29",
            "count": 1
          },
          {
            "date": "2020-11-24",
            "count": 1
          },
          {
            "date": "2021-01-11",
            "count": 1
          },
          {
            "date": "2021-01-19",
            "count": 1
          },
          {
            "date": "2021-03-20",
            "count": 1
          },
          {
            "date": "2021-03-30",
            "count": 1
          },
          {
            "date": "2021-04-07",
            "count": 1
          },
          {
            "date": "2021-04-15",
            "count": 1
          },
          {
            "date": "2021-05-01",
            "count": 1
          },
          {
            "date": "2021-05-08",
            "count": 1
          },
          {
            "date": "2021-08-06",
            "count": 1
          },
          {
            "date": "2021-08-09",
            "count": 1
          },
          {
            "date": "2021-08-11",
            "count": 1
          },
          {
            "date": "2021-11-30",
            "count": 1
          },
          {
            "date": "2021-12-06",
            "count": 1
          },
          {
            "date": "2022-03-24",
            "count": 1
          },
          {
            "date": "2022-04-09",
            "count": 1
          },
          {
            "date": "2022-08-31",
            "count": 1
          },
          {
            "date": "2022-09-09",
            "count": 1
          },
          {
            "date": "2022-09-15",
            "count": 1
          },
          {
            "date": "2022-10-17",
            "count": 1
          },
          {
            "date": "2022-11-02",
            "count": 1
          },
          {
            "date": "2022-11-22",
            "count": 1
          },
          {
            "date": "2022-12-06",
            "count": 1
          },
          {
            "date": "2022-12-09",
            "count": 1
          },
          {
            "date": "2023-02-10",
            "count": 1
          },
          {
            "date": "2023-02-16",
            "count": 1
          },
          {
            "date": "2023-03-02",
            "count": 1
          },
          {
            "date": "2023-04-20",
            "count": 1
          },
          {
            "date": "2023-06-04",
            "count": 1
          },
          {
            "date": "2023-07-10",
            "count": 1
          },
          {
            "date": "2023-07-14",
            "count": 1
          },
          {
            "date": "2023-08-02",
            "count": 1
          },
          {
            "date": "2023-08-06",
            "count": 1
          },
          {
            "date": "2023-08-21",
            "count": 1
          },
          {
            "date": "2023-08-30",
            "count": 1
          },
          {
            "date": "2023-09-01",
            "count": 1
          },
          {
            "date": "2023-09-19",
            "count": 1
          },
          {
            "date": "2023-10-03",
            "count": 1
          },
          {
            "date": "2023-11-06",
            "count": 1
          },
          {
            "date": "2023-11-15",
            "count": 1
          },
          {
            "date": "2023-11-16",
            "count": 2
          },
          {
            "date": "2024-01-16",
            "count": 1
          },
          {
            "date": "2024-02-12",
            "count": 1
          },
          {
            "date": "2024-02-21",
            "count": 1
          },
          {
            "date": "2024-03-07",
            "count": 1
          },
          {
            "date": "2024-03-15",
            "count": 1
          },
          {
            "date": "2024-04-18",
            "count": 1
          },
          {
            "date": "2024-05-16",
            "count": 1
          },
          {
            "date": "2024-05-17",
            "count": 1
          },
          {
            "date": "2024-05-28",
            "count": 1
          },
          {
            "date": "2024-06-21",
            "count": 1
          },
          {
            "date": "2024-06-28",
            "count": 1
          },
          {
            "date": "2024-07-19",
            "count": 1
          },
          {
            "date": "2024-10-08",
            "count": 1
          },
          {
            "date": "2024-10-21",
            "count": 1
          },
          {
            "date": "2024-11-08",
            "count": 1
          },
          {
            "date": "2025-02-06",
            "count": 1
          },
          {
            "date": "2025-02-09",
            "count": 1
          },
          {
            "date": "2025-04-30",
            "count": 1
          },
          {
            "date": "2025-05-30",
            "count": 1
          },
          {
            "date": "2025-09-15",
            "count": 1
          },
          {
            "date": "2025-10-27",
            "count": 1
          },
          {
            "date": "2025-11-27",
            "count": 1
          },
          {
            "date": "2025-12-03",
            "count": 1
          },
          {
            "date": "2025-12-10",
            "count": 1
          },
          {
            "date": "2025-12-11",
            "count": 1
          },
          {
            "date": "2026-01-27",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-05-09",
            "count": 1
          },
          {
            "date": "2026-05-12",
            "count": 1
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-06-01",
            "count": 1
          },
          {
            "date": "2026-06-03",
            "count": 1
          },
          {
            "date": "2026-06-28",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 284,
        "total_forks": 302
      },
      "star_history": {
        "days": [
          {
            "date": "2010-10-04",
            "count": 37
          },
          {
            "date": "2010-10-07",
            "count": 1
          },
          {
            "date": "2010-10-13",
            "count": 1
          },
          {
            "date": "2010-10-24",
            "count": 1
          },
          {
            "date": "2010-11-06",
            "count": 1
          },
          {
            "date": "2010-12-20",
            "count": 1
          },
          {
            "date": "2011-01-27",
            "count": 1
          },
          {
            "date": "2011-01-29",
            "count": 1
          },
          {
            "date": "2011-02-07",
            "count": 2
          },
          {
            "date": "2011-02-11",
            "count": 1
          },
          {
            "date": "2011-02-17",
            "count": 1
          },
          {
            "date": "2011-02-22",
            "count": 2
          },
          {
            "date": "2011-03-05",
            "count": 1
          },
          {
            "date": "2011-03-07",
            "count": 2
          },
          {
            "date": "2011-03-28",
            "count": 1
          },
          {
            "date": "2011-03-29",
            "count": 1
          },
          {
            "date": "2011-04-02",
            "count": 1
          },
          {
            "date": "2011-04-06",
            "count": 1
          },
          {
            "date": "2011-05-27",
            "count": 1
          },
          {
            "date": "2011-06-01",
            "count": 1
          },
          {
            "date": "2011-06-03",
            "count": 1
          },
          {
            "date": "2011-06-13",
            "count": 1
          },
          {
            "date": "2011-06-26",
            "count": 1
          },
          {
            "date": "2011-08-09",
            "count": 1
          },
          {
            "date": "2011-11-19",
            "count": 1
          },
          {
            "date": "2011-11-27",
            "count": 1
          },
          {
            "date": "2011-12-07",
            "count": 1
          },
          {
            "date": "2011-12-08",
            "count": 1
          },
          {
            "date": "2011-12-13",
            "count": 1
          },
          {
            "date": "2012-01-09",
            "count": 1
          },
          {
            "date": "2012-02-06",
            "count": 1
          },
          {
            "date": "2012-03-07",
            "count": 1
          },
          {
            "date": "2012-03-11",
            "count": 1
          },
          {
            "date": "2012-05-23",
            "count": 2
          },
          {
            "date": "2012-07-04",
            "count": 1
          },
          {
            "date": "2012-07-05",
            "count": 1
          },
          {
            "date": "2012-07-30",
            "count": 1
          },
          {
            "date": "2012-08-08",
            "count": 1
          },
          {
            "date": "2012-09-05",
            "count": 1
          },
          {
            "date": "2012-11-01",
            "count": 1
          },
          {
            "date": "2012-12-28",
            "count": 1
          },
          {
            "date": "2013-01-09",
            "count": 1
          },
          {
            "date": "2013-02-11",
            "count": 1
          },
          {
            "date": "2013-02-26",
            "count": 1
          },
          {
            "date": "2013-02-27",
            "count": 1
          },
          {
            "date": "2013-03-29",
            "count": 1
          },
          {
            "date": "2013-04-11",
            "count": 1
          },
          {
            "date": "2013-04-17",
            "count": 1
          },
          {
            "date": "2013-04-29",
            "count": 1
          },
          {
            "date": "2013-04-30",
            "count": 2
          },
          {
            "date": "2013-05-02",
            "count": 1
          },
          {
            "date": "2013-05-14",
            "count": 1
          },
          {
            "date": "2013-05-15",
            "count": 1
          },
          {
            "date": "2013-05-17",
            "count": 1
          },
          {
            "date": "2013-05-30",
            "count": 1
          },
          {
            "date": "2013-05-31",
            "count": 1
          },
          {
            "date": "2013-06-24",
            "count": 1
          },
          {
            "date": "2013-07-03",
            "count": 1
          },
          {
            "date": "2013-07-15",
            "count": 1
          },
          {
            "date": "2013-07-24",
            "count": 1
          },
          {
            "date": "2013-07-26",
            "count": 1
          },
          {
            "date": "2013-08-12",
            "count": 2
          },
          {
            "date": "2013-08-25",
            "count": 1
          },
          {
            "date": "2013-08-31",
            "count": 1
          },
          {
            "date": "2013-09-03",
            "count": 1
          },
          {
            "date": "2013-09-18",
            "count": 1
          },
          {
            "date": "2013-10-06",
            "count": 1
          },
          {
            "date": "2013-10-17",
            "count": 1
          },
          {
            "date": "2013-11-05",
            "count": 2
          },
          {
            "date": "2014-01-15",
            "count": 1
          },
          {
            "date": "2014-02-02",
            "count": 1
          },
          {
            "date": "2014-02-07",
            "count": 1
          },
          {
            "date": "2014-02-08",
            "count": 1
          },
          {
            "date": "2014-02-20",
            "count": 1
          },
          {
            "date": "2014-02-22",
            "count": 1
          },
          {
            "date": "2014-02-27",
            "count": 1
          },
          {
            "date": "2014-03-07",
            "count": 1
          },
          {
            "date": "2014-03-11",
            "count": 1
          },
          {
            "date": "2014-03-13",
            "count": 1
          },
          {
            "date": "2014-03-24",
            "count": 1
          },
          {
            "date": "2014-03-31",
            "count": 1
          },
          {
            "date": "2014-04-17",
            "count": 1
          },
          {
            "date": "2014-04-20",
            "count": 1
          },
          {
            "date": "2014-04-29",
            "count": 1
          },
          {
            "date": "2014-05-20",
            "count": 1
          },
          {
            "date": "2014-06-05",
            "count": 1
          },
          {
            "date": "2014-06-12",
            "count": 1
          },
          {
            "date": "2014-07-14",
            "count": 1
          },
          {
            "date": "2014-08-17",
            "count": 1
          },
          {
            "date": "2014-09-08",
            "count": 1
          },
          {
            "date": "2014-09-09",
            "count": 1
          },
          {
            "date": "2014-09-15",
            "count": 1
          },
          {
            "date": "2014-09-25",
            "count": 1
          },
          {
            "date": "2014-11-20",
            "count": 1
          },
          {
            "date": "2014-12-02",
            "count": 1
          },
          {
            "date": "2014-12-09",
            "count": 2
          },
          {
            "date": "2014-12-24",
            "count": 1
          },
          {
            "date": "2014-12-25",
            "count": 1
          },
          {
            "date": "2015-01-04",
            "count": 1
          },
          {
            "date": "2015-01-14",
            "count": 1
          },
          {
            "date": "2015-01-28",
            "count": 1
          },
          {
            "date": "2015-01-30",
            "count": 2
          },
          {
            "date": "2015-07-03",
            "count": 1
          },
          {
            "date": "2015-07-20",
            "count": 1
          },
          {
            "date": "2015-08-14",
            "count": 1
          },
          {
            "date": "2015-09-05",
            "count": 1
          },
          {
            "date": "2015-09-25",
            "count": 1
          },
          {
            "date": "2015-10-06",
            "count": 1
          },
          {
            "date": "2015-10-09",
            "count": 1
          },
          {
            "date": "2015-10-12",
            "count": 1
          },
          {
            "date": "2015-10-13",
            "count": 1
          },
          {
            "date": "2015-11-23",
            "count": 1
          },
          {
            "date": "2015-12-12",
            "count": 1
          },
          {
            "date": "2015-12-17",
            "count": 1
          },
          {
            "date": "2015-12-30",
            "count": 1
          },
          {
            "date": "2016-01-03",
            "count": 1
          },
          {
            "date": "2016-01-05",
            "count": 1
          },
          {
            "date": "2016-01-16",
            "count": 1
          },
          {
            "date": "2016-02-06",
            "count": 1
          },
          {
            "date": "2016-02-17",
            "count": 1
          },
          {
            "date": "2016-03-17",
            "count": 1
          },
          {
            "date": "2016-03-19",
            "count": 1
          },
          {
            "date": "2016-03-28",
            "count": 1
          },
          {
            "date": "2016-03-29",
            "count": 1
          },
          {
            "date": "2016-04-10",
            "count": 1
          },
          {
            "date": "2016-04-11",
            "count": 1
          },
          {
            "date": "2016-04-22",
            "count": 1
          },
          {
            "date": "2016-04-24",
            "count": 1
          },
          {
            "date": "2016-04-27",
            "count": 1
          },
          {
            "date": "2016-05-02",
            "count": 1
          },
          {
            "date": "2016-05-05",
            "count": 1
          },
          {
            "date": "2016-05-25",
            "count": 1
          },
          {
            "date": "2016-06-06",
            "count": 1
          },
          {
            "date": "2016-06-21",
            "count": 1
          },
          {
            "date": "2016-07-19",
            "count": 1
          },
          {
            "date": "2016-08-15",
            "count": 1
          },
          {
            "date": "2016-08-19",
            "count": 1
          },
          {
            "date": "2016-08-31",
            "count": 1
          },
          {
            "date": "2016-09-06",
            "count": 1
          },
          {
            "date": "2016-09-14",
            "count": 1
          },
          {
            "date": "2016-09-20",
            "count": 1
          },
          {
            "date": "2016-10-29",
            "count": 1
          },
          {
            "date": "2017-01-16",
            "count": 1
          },
          {
            "date": "2017-01-17",
            "count": 1
          },
          {
            "date": "2017-01-27",
            "count": 1
          },
          {
            "date": "2017-02-21",
            "count": 1
          },
          {
            "date": "2017-02-26",
            "count": 1
          },
          {
            "date": "2017-03-02",
            "count": 1
          },
          {
            "date": "2017-03-12",
            "count": 1
          },
          {
            "date": "2017-03-16",
            "count": 1
          },
          {
            "date": "2017-03-31",
            "count": 1
          },
          {
            "date": "2017-04-12",
            "count": 1
          },
          {
            "date": "2017-04-26",
            "count": 1
          },
          {
            "date": "2017-05-01",
            "count": 1
          },
          {
            "date": "2017-05-09",
            "count": 1
          },
          {
            "date": "2017-06-03",
            "count": 1
          },
          {
            "date": "2017-06-29",
            "count": 1
          },
          {
            "date": "2017-07-05",
            "count": 1
          },
          {
            "date": "2017-07-11",
            "count": 1
          },
          {
            "date": "2017-07-16",
            "count": 1
          },
          {
            "date": "2017-07-22",
            "count": 1
          },
          {
            "date": "2017-07-26",
            "count": 1
          },
          {
            "date": "2017-08-02",
            "count": 1
          },
          {
            "date": "2017-08-11",
            "count": 1
          },
          {
            "date": "2017-08-19",
            "count": 1
          },
          {
            "date": "2017-08-23",
            "count": 1
          },
          {
            "date": "2017-10-04",
            "count": 1
          },
          {
            "date": "2017-10-25",
            "count": 1
          },
          {
            "date": "2017-11-23",
            "count": 1
          },
          {
            "date": "2017-12-30",
            "count": 1
          },
          {
            "date": "2018-01-04",
            "count": 1
          },
          {
            "date": "2018-01-12",
            "count": 1
          },
          {
            "date": "2018-01-16",
            "count": 1
          },
          {
            "date": "2018-01-18",
            "count": 1
          },
          {
            "date": "2018-01-19",
            "count": 1
          },
          {
            "date": "2018-01-22",
            "count": 1
          },
          {
            "date": "2018-02-01",
            "count": 1
          },
          {
            "date": "2018-02-23",
            "count": 1
          },
          {
            "date": "2018-04-16",
            "count": 1
          },
          {
            "date": "2018-04-29",
            "count": 1
          },
          {
            "date": "2018-05-11",
            "count": 1
          },
          {
            "date": "2018-05-16",
            "count": 1
          },
          {
            "date": "2018-05-19",
            "count": 1
          },
          {
            "date": "2018-05-24",
            "count": 1
          },
          {
            "date": "2018-06-12",
            "count": 1
          },
          {
            "date": "2018-07-24",
            "count": 1
          },
          {
            "date": "2018-07-26",
            "count": 1
          },
          {
            "date": "2018-08-13",
            "count": 1
          },
          {
            "date": "2018-08-23",
            "count": 1
          },
          {
            "date": "2018-10-01",
            "count": 1
          },
          {
            "date": "2018-10-14",
            "count": 1
          },
          {
            "date": "2018-11-29",
            "count": 1
          },
          {
            "date": "2019-01-01",
            "count": 1
          },
          {
            "date": "2019-01-16",
            "count": 1
          },
          {
            "date": "2019-02-14",
            "count": 1
          },
          {
            "date": "2019-02-25",
            "count": 2
          },
          {
            "date": "2019-03-19",
            "count": 1
          },
          {
            "date": "2019-03-25",
            "count": 3
          },
          {
            "date": "2019-04-01",
            "count": 1
          },
          {
            "date": "2019-04-18",
            "count": 2
          },
          {
            "date": "2019-04-29",
            "count": 1
          },
          {
            "date": "2019-05-07",
            "count": 1
          },
          {
            "date": "2019-05-19",
            "count": 1
          },
          {
            "date": "2019-05-26",
            "count": 1
          },
          {
            "date": "2019-05-29",
            "count": 1
          },
          {
            "date": "2019-06-12",
            "count": 1
          },
          {
            "date": "2019-07-22",
            "count": 1
          },
          {
            "date": "2019-09-15",
            "count": 1
          },
          {
            "date": "2019-09-26",
            "count": 1
          },
          {
            "date": "2019-10-01",
            "count": 1
          },
          {
            "date": "2019-11-12",
            "count": 1
          },
          {
            "date": "2019-12-16",
            "count": 1
          },
          {
            "date": "2019-12-19",
            "count": 1
          },
          {
            "date": "2019-12-23",
            "count": 1
          },
          {
            "date": "2020-01-13",
            "count": 1
          },
          {
            "date": "2020-02-01",
            "count": 1
          },
          {
            "date": "2020-02-29",
            "count": 1
          },
          {
            "date": "2020-03-04",
            "count": 1
          },
          {
            "date": "2020-03-16",
            "count": 1
          },
          {
            "date": "2020-03-30",
            "count": 1
          },
          {
            "date": "2020-04-09",
            "count": 1
          },
          {
            "date": "2020-05-05",
            "count": 1
          },
          {
            "date": "2020-07-20",
            "count": 1
          },
          {
            "date": "2020-08-12",
            "count": 1
          },
          {
            "date": "2020-08-27",
            "count": 1
          },
          {
            "date": "2020-09-01",
            "count": 1
          },
          {
            "date": "2020-09-28",
            "count": 1
          },
          {
            "date": "2020-10-28",
            "count": 1
          },
          {
            "date": "2020-11-05",
            "count": 1
          },
          {
            "date": "2020-11-25",
            "count": 1
          },
          {
            "date": "2021-02-07",
            "count": 1
          },
          {
            "date": "2021-02-26",
            "count": 1
          },
          {
            "date": "2021-03-17",
            "count": 1
          },
          {
            "date": "2021-03-30",
            "count": 2
          },
          {
            "date": "2021-04-01",
            "count": 1
          },
          {
            "date": "2021-04-04",
            "count": 1
          },
          {
            "date": "2021-04-06",
            "count": 1
          },
          {
            "date": "2021-04-07",
            "count": 1
          },
          {
            "date": "2021-05-12",
            "count": 1
          },
          {
            "date": "2021-06-22",
            "count": 1
          },
          {
            "date": "2021-06-29",
            "count": 1
          },
          {
            "date": "2021-07-08",
            "count": 1
          },
          {
            "date": "2021-07-21",
            "count": 1
          },
          {
            "date": "2021-07-29",
            "count": 1
          },
          {
            "date": "2021-11-01",
            "count": 1
          },
          {
            "date": "2021-11-04",
            "count": 1
          },
          {
            "date": "2021-11-09",
            "count": 1
          },
          {
            "date": "2021-11-29",
            "count": 1
          },
          {
            "date": "2021-12-03",
            "count": 3
          },
          {
            "date": "2022-02-04",
            "count": 1
          },
          {
            "date": "2022-02-20",
            "count": 1
          },
          {
            "date": "2022-03-28",
            "count": 1
          },
          {
            "date": "2022-05-18",
            "count": 1
          },
          {
            "date": "2022-06-08",
            "count": 1
          },
          {
            "date": "2022-08-12",
            "count": 1
          },
          {
            "date": "2022-09-10",
            "count": 1
          },
          {
            "date": "2022-11-10",
            "count": 1
          },
          {
            "date": "2022-11-15",
            "count": 1
          },
          {
            "date": "2022-12-04",
            "count": 1
          },
          {
            "date": "2022-12-07",
            "count": 1
          },
          {
            "date": "2022-12-26",
            "count": 1
          },
          {
            "date": "2023-01-25",
            "count": 1
          },
          {
            "date": "2023-01-26",
            "count": 1
          },
          {
            "date": "2023-02-09",
            "count": 1
          },
          {
            "date": "2023-02-10",
            "count": 1
          },
          {
            "date": "2023-04-03",
            "count": 1
          },
          {
            "date": "2023-04-21",
            "count": 1
          },
          {
            "date": "2023-07-07",
            "count": 1
          },
          {
            "date": "2023-08-27",
            "count": 1
          },
          {
            "date": "2023-08-28",
            "count": 1
          },
          {
            "date": "2023-09-23",
            "count": 1
          },
          {
            "date": "2023-10-31",
            "count": 1
          },
          {
            "date": "2023-12-23",
            "count": 1
          },
          {
            "date": "2024-01-16",
            "count": 1
          },
          {
            "date": "2024-02-21",
            "count": 1
          },
          {
            "date": "2024-02-25",
            "count": 1
          },
          {
            "date": "2024-02-26",
            "count": 1
          },
          {
            "date": "2024-04-07",
            "count": 1
          },
          {
            "date": "2024-05-07",
            "count": 1
          },
          {
            "date": "2024-05-14",
            "count": 1
          },
          {
            "date": "2024-06-10",
            "count": 1
          },
          {
            "date": "2024-06-25",
            "count": 1
          },
          {
            "date": "2024-07-15",
            "count": 1
          },
          {
            "date": "2024-07-16",
            "count": 1
          },
          {
            "date": "2024-07-21",
            "count": 1
          },
          {
            "date": "2024-07-27",
            "count": 1
          },
          {
            "date": "2024-09-05",
            "count": 1
          },
          {
            "date": "2024-09-29",
            "count": 1
          },
          {
            "date": "2024-12-04",
            "count": 1
          },
          {
            "date": "2024-12-17",
            "count": 1
          },
          {
            "date": "2025-01-01",
            "count": 1
          },
          {
            "date": "2025-01-28",
            "count": 1
          },
          {
            "date": "2025-03-07",
            "count": 1
          },
          {
            "date": "2025-04-18",
            "count": 1
          },
          {
            "date": "2025-05-17",
            "count": 1
          },
          {
            "date": "2025-06-19",
            "count": 1
          },
          {
            "date": "2025-07-06",
            "count": 1
          },
          {
            "date": "2025-08-01",
            "count": 1
          },
          {
            "date": "2025-09-17",
            "count": 1
          },
          {
            "date": "2025-10-21",
            "count": 1
          },
          {
            "date": "2025-10-22",
            "count": 1
          },
          {
            "date": "2025-10-28",
            "count": 1
          },
          {
            "date": "2025-12-11",
            "count": 1
          },
          {
            "date": "2026-02-09",
            "count": 1
          },
          {
            "date": "2026-03-09",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-20",
            "count": 1
          },
          {
            "date": "2026-05-23",
            "count": 1
          },
          {
            "date": "2026-05-29",
            "count": 1
          },
          {
            "date": "2026-06-03",
            "count": 1
          },
          {
            "date": "2026-06-26",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 363,
        "total_stars": 365
      },
      "open_issues_and_prs": 95
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "example",
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "ocaml/forkexecd/helper/Makefile",
        "ocaml/ktls-helper/helper/Makefile",
        "ocaml/libs/vhd/Makefile",
        "ocaml/libs/xenctrl-ext/Makefile",
        "ocaml/xapi-storage/python/Makefile",
        "python3/Makefile",
        "python3/examples/Makefile",
        "scripts/Makefile",
        "unixpwd/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "doc/go.mod",
        "ocaml/sdk-gen/component-test/jsonrpc-client/go/go.mod",
        "ocaml/sdk-gen/csharp/autogen/XenServerTest/XenServerTest.csproj",
        "ocaml/sdk-gen/csharp/autogen/src/XenServer.csproj",
        "ocaml/sdk-gen/go/autogen/src/go.mod",
        "ocaml/sdk-gen/java/autogen/xen-api/pom.xml",
        "ocaml/sdk-gen/powershell/autogen/src/XenServerPowerShell.csproj"
      ],
      "largest_source_bytes": 93868,
      "source_files_sampled": 184,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "doc/go.mod",
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": false,
            "version": "2.22.0",
            "severity": "moderate",
            "ecosystem": "maven",
            "cvss_score": 6.5,
            "advisory_ids": [
              "GHSA-5gvw-p9qm-jgwh",
              "GHSA-5jmj-h7xm-6q6v"
            ],
            "fixed_version": "3.2.1",
            "advisory_count": 2,
            "oldest_advisory_days": 28
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "moderate": 1
        },
        "advisory_count": 2,
        "affected_count": 1,
        "assessed_count": 16,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 1,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go",
        "pypi"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "github.com/mcshelby/hugo-theme-relearn",
            "direct": false,
            "version": "0.0.0-20250126200037-60bb1c65c5fc",
            "ecosystem": "go"
          },
          {
            "name": "com.fasterxml.jackson.core:jackson-databind",
            "direct": false,
            "version": "2.22.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.httpcomponents.client5:httpclient5",
            "direct": false,
            "version": "5.3",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-compiler-plugin",
            "direct": false,
            "version": "3.12.1",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-javadoc-plugin",
            "direct": false,
            "version": "3.6.3",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-source-plugin",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.apache.maven.plugins:maven-surefire-plugin",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "maven"
          },
          {
            "name": "org.junit.jupiter:junit-jupiter",
            "direct": false,
            "version": "5.11.1",
            "ecosystem": "maven"
          },
          {
            "name": "coverlet.collector",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.NET.Test.Sdk",
            "direct": false,
            "version": "17.5.0",
            "ecosystem": "nuget"
          },
          {
            "name": "Microsoft.PowerShell.5.ReferenceAssemblies",
            "direct": false,
            "version": "1.1.0",
            "ecosystem": "nuget"
          },
          {
            "name": "MSTest.TestAdapter",
            "direct": false,
            "version": "2.2.10",
            "ecosystem": "nuget"
          },
          {
            "name": "MSTest.TestFramework",
            "direct": false,
            "version": "2.2.10",
            "ecosystem": "nuget"
          },
          {
            "name": "Newtonsoft.Json",
            "direct": false,
            "version": "13.0.3",
            "ecosystem": "nuget"
          },
          {
            "name": "System.Management.Automation",
            "direct": false,
            "version": "7.4.14",
            "ecosystem": "nuget"
          },
          {
            "name": "XenServer.NET",
            "direct": false,
            "version": "0.0.0",
            "ecosystem": "nuget"
          },
          {
            "name": "aiohttp",
            "direct": false,
            "version": null,
            "ecosystem": "pypi"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 17,
        "direct_count": 0,
        "indirect_count": 17
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 13,
        "merged_prs": 6210,
        "open_issues": 82,
        "closed_ratio": 0.539,
        "closed_issues": 96,
        "closed_unmerged_prs": 782
      },
      "bus_factor": 5,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "robhoes",
          "commits": 3753,
          "avatar_url": "https://avatars.githubusercontent.com/u/413005?v=4"
        },
        {
          "type": "User",
          "login": "johnelse",
          "commits": 2661,
          "avatar_url": "https://avatars.githubusercontent.com/u/112119?v=4"
        },
        {
          "type": "User",
          "login": "psafont",
          "commits": 2049,
          "avatar_url": "https://avatars.githubusercontent.com/u/5189409?v=4"
        },
        {
          "type": "User",
          "login": "edwintorok",
          "commits": 1589,
          "avatar_url": "https://avatars.githubusercontent.com/u/721894?v=4"
        },
        {
          "type": "User",
          "login": "lindig",
          "commits": 1192,
          "avatar_url": "https://avatars.githubusercontent.com/u/843617?v=4"
        },
        {
          "type": "User",
          "login": "jonludlam",
          "commits": 752,
          "avatar_url": "https://avatars.githubusercontent.com/u/210963?v=4"
        },
        {
          "type": "User",
          "login": "gaborigloi",
          "commits": 681,
          "avatar_url": "https://avatars.githubusercontent.com/u/10549240?v=4"
        },
        {
          "type": "User",
          "login": "simonjbeaumont",
          "commits": 629,
          "avatar_url": "https://avatars.githubusercontent.com/u/1125539?v=4"
        },
        {
          "type": "User",
          "login": "kc284",
          "commits": 515,
          "avatar_url": "https://avatars.githubusercontent.com/u/3705142?v=4"
        },
        {
          "type": "User",
          "login": "samoht",
          "commits": 506,
          "avatar_url": "https://avatars.githubusercontent.com/u/103693?v=4"
        }
      ],
      "contributors_sampled": 100,
      "top_contributor_share": 0.175
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "action.yml",
        "action.yml",
        "action.yml",
        "codechecker.yml",
        "docs.yml",
        "format.yml",
        "generate-and-build-sdks.yml",
        "hugo.yml",
        "main.yml",
        "other.yml",
        "release.yml",
        "shellcheck.yaml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": true
    },
    "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": 8,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "11 out of 11 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": 10,
            "reason": "all changesets reviewed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 33 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": 9,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 1 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": 10,
            "reason": "packaging workflow 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": 10,
            "reason": "SAST tool is run on all commits",
            "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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 7,
            "reason": "3 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "b08a580bbf78d2a774a065ed21b135c0af14a3cf",
        "ran_at": "2026-07-22T01:59:56Z",
        "aggregate_score": 7.2,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-21T07:29:19Z",
      "oldest_open_prs": [
        {
          "number": 7070,
          "created_at": "2026-05-14T08:53:53Z",
          "last_comment_at": "2026-05-14T10:10:20Z",
          "last_comment_author": "lindig"
        },
        {
          "number": 7080,
          "created_at": "2026-05-18T15:05:12Z",
          "last_comment_at": "2026-06-08T14:15:45Z",
          "last_comment_author": "last-genius"
        },
        {
          "number": 7101,
          "created_at": "2026-05-27T21:38:36Z",
          "last_comment_at": "2026-07-17T09:46:32Z",
          "last_comment_author": "shindere"
        },
        {
          "number": 7122,
          "created_at": "2026-06-09T21:12:34Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7137,
          "created_at": "2026-06-22T10:12:05Z",
          "last_comment_at": "2026-06-24T08:36:38Z",
          "last_comment_author": "gthvn1"
        },
        {
          "number": 7146,
          "created_at": "2026-06-28T07:49:29Z",
          "last_comment_at": "2026-07-02T20:58:44Z",
          "last_comment_author": "olivierlambert"
        },
        {
          "number": 7162,
          "created_at": "2026-07-02T15:19:03Z",
          "last_comment_at": "2026-07-16T06:51:03Z",
          "last_comment_author": "semarie"
        },
        {
          "number": 7169,
          "created_at": "2026-07-09T08:05:23Z",
          "last_comment_at": "2026-07-09T14:33:30Z",
          "last_comment_author": "MarkSymsCtx"
        },
        {
          "number": 7178,
          "created_at": "2026-07-15T06:44:22Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7179,
          "created_at": "2026-07-15T13:02:33Z",
          "last_comment_at": "2026-07-16T09:22:16Z",
          "last_comment_author": "gthvn1"
        },
        {
          "number": 7184,
          "created_at": "2026-07-21T07:29:18Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7185,
          "created_at": "2026-07-21T15:26:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7186,
          "created_at": "2026-07-21T16:14:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-21T07:27:34Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 1289,
          "created_at": "2013-06-03T21:07:05Z",
          "last_comment_at": "2013-06-04T08:21:04Z",
          "last_comment_author": "amarao"
        },
        {
          "number": 1520,
          "created_at": "2013-10-20T12:50:08Z",
          "last_comment_at": "2016-02-05T10:48:09Z",
          "last_comment_author": "FlorianHeigl"
        },
        {
          "number": 2074,
          "created_at": "2015-01-07T18:01:30Z",
          "last_comment_at": "2015-01-12T13:02:25Z",
          "last_comment_author": "jonludlam"
        },
        {
          "number": 2218,
          "created_at": "2015-05-07T21:08:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2238,
          "created_at": "2015-05-27T05:43:19Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 2718,
          "created_at": "2016-07-31T19:50:38Z",
          "last_comment_at": "2016-08-01T10:08:29Z",
          "last_comment_author": "johnkeates"
        },
        {
          "number": 3769,
          "created_at": "2018-11-20T20:48:49Z",
          "last_comment_at": "2019-11-08T13:43:55Z",
          "last_comment_author": "Fungusware"
        },
        {
          "number": 3770,
          "created_at": "2018-11-20T20:55:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 3794,
          "created_at": "2019-01-07T18:58:08Z",
          "last_comment_at": "2019-01-10T09:54:02Z",
          "last_comment_author": "olivierlambert"
        },
        {
          "number": 3805,
          "created_at": "2019-01-23T17:15:28Z",
          "last_comment_at": "2019-01-23T23:09:39Z",
          "last_comment_author": "mseri"
        },
        {
          "number": 3836,
          "created_at": "2019-03-30T22:12:18Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 3954,
          "created_at": "2019-09-15T19:47:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 4008,
          "created_at": "2019-12-30T10:25:44Z",
          "last_comment_at": "2020-01-02T10:22:39Z",
          "last_comment_author": "edwintorok"
        },
        {
          "number": 4072,
          "created_at": "2020-04-07T14:11:19Z",
          "last_comment_at": "2023-04-11T10:04:33Z",
          "last_comment_author": "psafont"
        },
        {
          "number": 4141,
          "created_at": "2020-06-22T13:49:04Z",
          "last_comment_at": "2020-06-23T08:35:45Z",
          "last_comment_author": "psafont"
        },
        {
          "number": 4145,
          "created_at": "2020-06-24T15:40:16Z",
          "last_comment_at": "2025-03-25T09:54:00Z",
          "last_comment_author": "ydirson"
        },
        {
          "number": 4159,
          "created_at": "2020-07-10T15:22:09Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 4178,
          "created_at": "2020-08-13T05:53:47Z",
          "last_comment_at": "2020-08-13T07:56:54Z",
          "last_comment_author": "cheese"
        },
        {
          "number": 4181,
          "created_at": "2020-08-13T16:07:02Z",
          "last_comment_at": "2020-08-14T13:42:45Z",
          "last_comment_author": "stormi"
        },
        {
          "number": 4231,
          "created_at": "2020-10-13T14:19:06Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/xapi-project/xen-api",
    "host": "github.com",
    "name": "xen-api",
    "owner": "xapi-project"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 84,
      "inputs": {
        "security": 78,
        "vitality": 96,
        "community": 68,
        "governance": 77,
        "engineering": 96
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 96,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "commits_last_year": 1185,
              "human_commit_share": 0.99,
              "days_since_last_push": 0,
              "active_weeks_last_year": 52
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "52/52 weeks with commits",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 52
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1185 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1185
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 1 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": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v26.1.17",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 0,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 0 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 68,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "good",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "forks": 302,
              "stars": 365,
              "watchers": 51,
              "growth_state": "organic",
              "growth_factor_pct": 100
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "365 stars",
                "points": 41.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 365
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "302 forks",
                "points": 20.7,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 302
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "51 watchers",
                "points": 9.4,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 51
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "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": "license file present, not a recognized license",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "license_custom",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "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
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 77,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "excellent",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 88,
            "inputs": {
              "bus_factor": 5,
              "contributors_sampled": 100,
              "top_contributor_share": 0.175
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "5 contributor(s) cover half of all commits",
                "points": 45.9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 18% of commits",
                "points": 18.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 18
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "100 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 33 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "merged_prs": 6210,
              "open_issues": 82,
              "closed_issues": 96,
              "issue_closed_ratio": 0.539,
              "closed_unmerged_prs": 782
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "54% of issues closed",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 54
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "6210/6992 decided PRs merged",
                "points": 34,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 6210,
                      "decided": 6992
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "followers": 53,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "xapi-project",
              "public_repos": 102,
              "account_age_days": 5866
            },
            "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": "53 followers of xapi-project",
                "points": 12.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 53,
                      "login": "xapi-project"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "102 public repos, account ~16 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 102
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "excellent",
        "name": "Engineering Quality",
        "value": 96,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": true
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "12 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "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": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 9.6,
                "status": "met",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "11 out of 11 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": 90,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://xenproject.org/projects/xapi/",
              "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://xenproject.org/projects/xapi/",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "good",
        "name": "Security",
        "value": 78,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "good",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 7.2
            },
            "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 is not maximal on development and all release branches",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "11 out of 11 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": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 33 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.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 1 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "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 run on all commits",
                "points": 5,
                "status": "met",
                "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": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "3 existing vulnerabilities detected",
                "points": 5.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 16 resolved dependencies against OSV; 1 could not be assessed (no resolved version, an unsupported ecosystem, or beyond the reported package list). This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 16
                }
              },
              {
                "code": "advisories_unassessed",
                "params": {
                  "count": 1
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 2,
              "affected_packages": 1,
              "assessed_packages": 16,
              "unassessed_packages": 1,
              "affected_by_severity": "moderate 1",
              "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": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory 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": 16,
              "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": 64,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.909,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "90 of 99 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 90,
                      "sampled": 99
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "ocaml/forkexecd/helper/Makefile",
                "ocaml/ktls-helper/helper/Makefile",
                "ocaml/libs/vhd/Makefile",
                "ocaml/libs/xenctrl-ext/Makefile",
                "ocaml/xapi-storage/python/Makefile",
                "python3/Makefile",
                "python3/examples/Makefile",
                "scripts/Makefile",
                "unixpwd/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.04,
              "toolchain_manifests": [
                "doc/go.mod",
                "ocaml/sdk-gen/component-test/jsonrpc-client/go/go.mod",
                "ocaml/sdk-gen/csharp/autogen/XenServerTest/XenServerTest.csproj",
                "ocaml/sdk-gen/csharp/autogen/src/XenServer.csproj",
                "ocaml/sdk-gen/go/autogen/src/go.mod",
                "ocaml/sdk-gen/java/autogen/xen-api/pom.xml",
                "ocaml/sdk-gen/powershell/autogen/src/XenServerPowerShell.csproj"
              ],
              "dependency_bot_commit_share": 0.01
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, ocaml/forkexecd/helper/Makefile, ocaml/ktls-helper/helper/Makefile, ocaml/libs/vhd/Makefile, ocaml/libs/xenctrl-ext/Makefile, ocaml/xapi-storage/python/Makefile, python3/Makefile, python3/examples/Makefile, scripts/Makefile, unixpwd/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, ocaml/forkexecd/helper/Makefile, ocaml/ktls-helper/helper/Makefile, ocaml/libs/vhd/Makefile, ocaml/libs/xenctrl-ext/Makefile, ocaml/xapi-storage/python/Makefile, python3/Makefile, python3/examples/Makefile, scripts/Makefile, unixpwd/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "OCaml (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "OCaml"
                    }
                  }
                ],
                "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": "4 of the last 100 commits agent-authored or agent-credited",
                "points": 8,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 4,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "1 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 1,
                      "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": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "OCaml",
              "largest_source_bytes": 93868,
              "source_files_sampled": 184,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "OCaml (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "OCaml"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/184 source files over 60KB",
                "points": 54.7,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 184,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "example",
                "examples"
              ],
              "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": "example, examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "example, examples"
                    }
                  }
                ],
                "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": [
    "Could not fetch pypi package 'xen-api' from its registry"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T02:00:32.495061Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/x/xapi-project/xen-api.svg",
  "full_name": "xapi-project/xen-api",
  "license_state": "custom",
  "license_spdx": null
}

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.26.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistiken.