Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 02:00 UTC

xapi-project / xen-api

The Xapi Project's XenAPI Server

OCamlLicencia propia★ 365 estrellas⑂ 302 forksdesde oct 2010Ver en GitHub ↗

xapi-project/xen-api tiene un índice de salud de 84 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Vitality (96/100) y la más baja, AI Readiness (64/100). Se actualizó por última vez hoy. 5 personas concentran la mayor parte del trabajo reciente.

84
global / 100
Bueno

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

84
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Xapi ProjectOrganización
53 seguidores102 repositorios públicosdesde jun 2010

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

96Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
36/36Cadencia de commits — 52/52 semanas con commits
18/18Volumen de commits — 1185 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year1185
human_commit_share0,99
days_since_last_push0
active_weeks_last_year52
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 0 días
27/27Cadencia de publicación — una versión cada ~7 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count100
latest_release_tagv26.1.17
releases_from_tagsno
days_since_latest_release0
mean_days_between_releases7

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

68Moderado · 18% del índice global
Cómo se puntúa
41.5/60Estrellas — 365 estrellas
20.7/25Forks — 302 forks
9.4/15Observadores — 51 observadores
Datos de entrada utilizados
forks302
stars365
watchers51
growth_stateorganic
growth_factor_pct100
Cómo se puntúa
22.5/22.5README
16.9/22.5Licencia — archivo de licencia presente, no es una licencia reconocida
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

77Bueno · 24% del índice global
Cómo se puntúa
45.9/54Factor bus — la mitad de los commits recae en 5 contribuyente(s)
18.6/22.5Distribución de commits — el principal contribuyente firma el 18% de los commits
13.5/13.5Amplitud de contribuyentes — 100 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 33 contributing companies or organizations
Datos de entrada utilizados
bus_factor5
contributors_sampled100
top_contributor_share0,175
Cómo se puntúa
25.2/46.8Resolución de issues — 54% de issues cerradas
34/38.3Aceptación de PR — 6210/6992 PR decididos fusionados
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Datos de entrada utilizados
merged_prs6210
open_issues82
closed_issues96
issue_closed_ratio0,539
closed_unmerged_prs782
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
12.5/25Alcance del propietario — 53 seguidores de xapi-project
25/25Trayectoria — 102 repos públicos, cuenta de ~16 años
Datos de entrada utilizados
followers53
owner_typeOrganization
is_verified
owner_loginxapi-project
public_repos102
account_age_days5866

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

96Excelente · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 12 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .golangci.yml
9.6/9.6Hooks de pre-commit
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
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://xenproject.org/projects/xapi/
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepagehttps://xenproject.org/projects/xapi/
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

78Bueno · 16% del índice global
Cómo se puntúa
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.5Licencia — 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
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate7,2
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories2
affected_packages1
assessed_packages16
unassessed_packages1
affected_by_severitymoderate 1
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos, Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejaron 16 dependencias resueltas con OSV. 1 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido o fuera de la lista de paquetes informada. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. No se analiza la alcanzabilidad.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

64Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 90 de 99 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,909
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — 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/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — OCaml (tipado estático)
0/10Entorno reproducible
8/10Práctica demostrada con agentes — 4 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 1 de los últimos 100 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_language
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_devcontainerno
has_linter_config
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
Cómo se puntúa
45/45Código verificable por tipos — OCaml (tipado estático)
54.7/55Tamaños de archivo manejables — 1/184 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageOCaml
largest_source_bytes93.868
source_files_sampled184
oversized_source_files1
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — example, examples
Datos de entrada utilizados
example_dirsexample, examples
has_mcp_signalno
api_schema_files

Datos clave

365estrellas de GitHub
100contribuidores
1185commits en los últimos 12 meses
0días desde el último push
100versiones publicadas
5factor bus
82issues abiertas
Go, PyPIecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

Historial de estrellas y forks 365 ★ / 302 ⇿
365Estrellas
302Forks
93Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

0125250375363284392010-102018-082026-06
Mayor 2Menor 73Parche 18

Cada punto abarca 15 días.

OpenSSF Scorecard 7.2 / 10
7.2agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
Todas las dependencias 17

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 0 paquetes directos y 17 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
Gogithub.com/mcshelby/hugo-theme-relearn0.0.0-20250126200037-60bb1c65c5fcindirecta
Mavencom.fasterxml.jackson.core:jackson-databind2.22.0indirecta
Mavenorg.apache.httpcomponents.client5:httpclient55.3indirecta
Mavenorg.apache.maven.plugins:maven-compiler-plugin3.12.1indirecta
Mavenorg.apache.maven.plugins:maven-javadoc-plugin3.6.3indirecta
Mavenorg.apache.maven.plugins:maven-source-plugin3.3.0indirecta
Mavenorg.apache.maven.plugins:maven-surefire-plugin3.5.0indirecta
Mavenorg.junit.jupiter:junit-jupiter5.11.1indirecta
NuGetcoverlet.collector3.2.0indirecta
NuGetMicrosoft.NET.Test.Sdk17.5.0indirecta
NuGetMicrosoft.PowerShell.5.ReferenceAssemblies1.1.0indirecta
NuGetMSTest.TestAdapter2.2.10indirecta
NuGetMSTest.TestFramework2.2.10indirecta
NuGetNewtonsoft.Json13.0.3indirecta
NuGetSystem.Management.Automation7.4.14indirecta
NuGetXenServer.NET0.0.0indirecta
PyPIaiohttpindirecta
Avisos de dependencias 1

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 16 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 1 tienen avisos conocidos, de los cuales 0 son directas. 1 no pudieron evaluarse: sin versión resuelta, ecosistema no admitido, o fuera de la lista de paquetes informada.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
com.fasterxml.jackson.core:jackson-databind2.22.0indirectamoderada23.2.1

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "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
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.26.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadas.