原始 JSON 报告 机器可读
{
"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
}