Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [
"fleeting",
"gitlab",
"gitlab-runner",
"vcd",
"vcloud-director",
"vmware-cloud-director",
"fleeting-plugin-vcd",
"gitlab-fleeting"
],
"is_fork": false,
"size_kb": 118,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 161674,
"Makefile": 406
},
"pushed_at": "2026-07-16T14:25:33Z",
"created_at": "2024-08-13T14:05:13Z",
"owner_type": "User",
"updated_at": "2026-03-17T13:40:22Z",
"description": "GitLab Fleeting plugin for VMware Cloud Director",
"is_archived": false,
"is_disabled": false,
"license_spdx": "BSD-3-Clause",
"default_branch": "main",
"license_spdx_raw": "BSD-3-Clause",
"primary_language": "Go",
"significant_languages": [
"Go"
]
},
"owner": {
"blog": "font.eu",
"name": "Juan Font",
"type": "User",
"login": "juanfont",
"company": "European Space Agency",
"location": "Leiden, Netherlands",
"followers": 818,
"avatar_url": "https://avatars.githubusercontent.com/u/181059?v=4",
"created_at": "2010-01-12T23:37:23Z",
"is_verified": null,
"public_repos": 44,
"account_age_days": 6038
},
"license": {
"state": "standard",
"spdx_id": "BSD-3-Clause",
"raw_spdx": "BSD-3-Clause",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.3.3",
"kind": "patch",
"published_at": "2026-07-16T14:26:31Z"
},
{
"tag": "v0.3.2",
"kind": "patch",
"published_at": "2026-03-17T13:41:34Z"
},
{
"tag": "v0.3.1",
"kind": "patch",
"published_at": "2026-03-17T13:14:05Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2026-03-14T12:16:11Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2026-03-14T11:04:00Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2026-02-08T19:46:18Z"
},
{
"tag": "v0.0.5",
"kind": "patch",
"published_at": "2026-01-30T11:14:34Z"
},
{
"tag": "v0.0.3",
"kind": "patch",
"published_at": "2026-01-28T18:25:52Z"
}
],
"recent_commits": [
{
"oid": "6c0f0585816fa840758e8dfd2b9fbb437e431e6e",
"body": null,
"is_bot": false,
"headline": "Refactor compute policy handling in createInstance method",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-03-17T13:40:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3bda18cc9291bbca020331b0e29ccf32bb21bb12",
"body": null,
"is_bot": false,
"headline": "Add compute policy retrieval and usage in createInstance method",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-03-17T13:12:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "deea27b49cfa4964f9e22bc02b550bf00fcc94dd",
"body": "Every govcd library call now goes through safeVCDCall/safeVCDCallVoid\nwhich provides panic recovery and exponential backoff retry. This\nprevents any single govcd nil pointer dereference from crashing the\nentire plugin process.\n\nConverted waitForVMCreation, waitForTasksCompletion, and changeVMTpm\nfrom standalone functions to InstanceGroup methods to access the\nlogger and instance group name required by safeVCDCall.",
"is_bot": false,
"headline": "Wrap all VCD API calls with safeVCDCall for panic safety",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-03-14T12:15:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "610a799246fde54c0b031b0e4e210db9a3fa85f6",
"body": "The cleanup goroutine spawned by createInstance's defer had no panic\nrecovery. When govcd's VApp.PowerOff() hit a nil pointer dereference,\nthe unrecovered panic killed the entire plugin process.\n\nFix: wrap the cleanup goroutine with defer/recover, and wrap all VCD\ncalls in deleteInstance (PowerOff, Undeploy, Delete) with safeVCDCall\nfor both panic recovery and retry.",
"is_bot": false,
"headline": "Fix panic crash in createInstance cleanup goroutine",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-03-14T11:01:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cae8d861594ec06b54e9e9f280862f66b9bb9009",
"body": "Added error and info logging statements in the createInstance method to track the retrieval of the vApp template and the addition of network configuration and VM to the vApp. This improves visibility into the instance creation process and aids in troubleshooting.",
"is_bot": false,
"headline": "Enhance logging in createInstance method for better debugging",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-03-14T09:07:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "769b476882d9f9a89d1df4f1df19ff082708fa68",
"body": "After powering on a VM, perform a full SSH handshake using the same\ncredentials the runner will use (from ConnectorConfig) before declaring\nthe instance as created. This catches VMs that boot but have broken\nnetworking, sshd not starting, or other issues that would cause every\njob sent to the VM to fail.\n\nRetries every 5s for up to 5 minutes. If the check fails, the existing\ncleanup defer deletes the vApp and the reconciler retries with backoff.",
"is_bot": false,
"headline": "Add SSH readiness check after VM power-on",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-02-17T15:04:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9cb241ba92f6de2920f8f518e61809c80ccd21dc",
"body": "Reconciliation-based architecture with orphan prevention",
"is_bot": false,
"headline": "Merge pull request #3 from juanfont/reconciliation",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-02-08T19:35:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "26cf300feee967aed3c0f640e2be20415fd9c0d8",
"body": null,
"is_bot": false,
"headline": "Document max_concurrent_creates and max_concurrent_deletes options",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-02-08T19:31:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "36d69b6d7f2a4f7cfc1334068e5ecd28df884baf",
"body": "Adapt tests to new createInstance return type (*createResult), initialize\nstore+reconciler in instance group test, add password to SSH key test for\nproper credential injection, add TestScaleLimits provider-level test, and\nreduce scale target to 2 VMs to fit VDC storage quota.",
"is_bot": false,
"headline": "Update provider integration tests for reconciliation architecture",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-02-08T16:02:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4155bc03f874a6509f38dd262720a9c2df0cb2a8",
"body": "- Circuit breaker: dispatch blocking when active, threshold behavior,\n cooldown expiry, reset on success, log dedup flag\n- GC: marks old instances, ignores non-running/recent/no-timestamp\n- Permanent errors: storage quota, entity not found, unable to perform\n action — all skip retries (single call only)",
"is_bot": false,
"headline": "Add unit tests for circuit breaker, GC, and permanent error detection",
"author_name": "Juan Font Alonso",
"author_login": "juanfont",
"committed_at": "2026-02-08T11:20:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e39cf3bdd7216ea6c7de2688d76a6d312706b677",
"body": "…on tests\n\n- Circuit breaker stops dispatching creates after 3 consecutive failures,\n resumes after 5-minute cooldown. Prevents wasting VCD API calls when\n the VDC is out of capacity (RAM, storage, compute).\n- Auto-delete preexisting vApps (leftovers from previous runs) via\n fire-and-forget gorou\n[…]\n/down, scale to\n zero, reconciliation, shutdown, orphan cleanup, rapid scale-down,\n concurrent groups, shutdown mid-create, and scale limits.\n- Add unit tests for store, vcd_safe, and instancegroup.",
"is_bot": false,
"headline": "Add circuit breaker, auto-delete preexisting instances, and integrati…",
"author_name": "Juan Font Alonso",
"author_login": "juanfont",
"committed_at": "2026-02-08T11:12:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ae7ac1d8c1d9c3d8d4952ae237343a5921450f84",
"body": "Replace the old state manager with a reconciliation loop:\n- desiredStateStore for thread-safe instance state tracking\n- Single-goroutine reconciler that polls VCD and dispatches creates/deletes\n- Phase-based instance lifecycle (PendingCreate → Creating → Running → PendingDelete → Deleting → Deleted)\n[…]\nor empty vApps found in VCD but not tracked in store\n- VCD outage resilience: skip MarkDisappeared when poll returns empty but store has instances\n- Prometheus metrics per instance group and operation",
"is_bot": false,
"headline": "Refactor to reconciliation-based architecture with orphan prevention",
"author_name": "Juan Font Alonso",
"author_login": "juanfont",
"committed_at": "2026-02-07T16:21:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "49158066ae8c86d2a8f052850b0504f51a8b2ada",
"body": null,
"is_bot": false,
"headline": "Add missing file",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-01-30T11:13:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e9a6798a2712b978fe45276081ea81cb407e7337",
"body": "Enhanced the instance management functionality by integrating Prometheus metrics to track instance creation, deletion, and state management. Updated the instanceStateManager to include metrics for total instances, preexisting instances, and instances by state. Modified the createInstance and deleteInstance methods to record duration and success/failure metrics. Additionally, added a metrics endpoint to the debug server for monitoring purposes.",
"is_bot": false,
"headline": "Add Prometheus metrics integration for instance management",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-01-30T11:07:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "683478a393aebf45dc9243dcc1bbbedcb2e93704",
"body": null,
"is_bot": false,
"headline": "Update README with proper configuration docs",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-01-28T18:25:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "36ac3bd222b8ddeae98c8e172a18e3c627b2fb7a",
"body": null,
"is_bot": false,
"headline": "Add write permissions for releases",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-01-28T18:20:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8de4c6a8843b6aed691f394b13e935d3fa8c223e",
"body": null,
"is_bot": false,
"headline": "Update Go version in releaser workflow from 1.24 to 1.25",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-01-28T18:15:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "28fbef4ff584aa74bebf9ede772ba387879109ec",
"body": "Enhanced the createInstance method by implementing a combined defer for panic recovery and cleanup on failure. Updated logging to provide clearer context, including the use of vApp names instead of hrefs. Marked instance creation as complete to prevent unnecessary cleanup calls. Improved error messages for better debugging during VM creation and IP address retrieval.",
"is_bot": false,
"headline": "Refactor createInstance method for improved error handling and logging",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-01-25T20:43:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "df4d5130cfb9bc230609313fbedfbec2c00f4737",
"body": "Added a background garbage collection process to periodically clean up instances that have exceeded their maximum age. Enhanced logging for better visibility during instance creation, deletion, and garbage collection operations. Updated instance state management to track garbage collection timestamps.",
"is_bot": false,
"headline": "Implement garbage collection for instances in InstanceGroup",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-01-24T14:19:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aa18c33274f9ff809ae7e4ffe1408f9a15067644",
"body": "…column for improved instance state tracking",
"is_bot": false,
"headline": "Enhance debug server instance table by adding 'Garbage Collected At' …",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2026-01-24T14:19:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "622fe0a8f94de76caa5ad62cbbd33bdb69356f1b",
"body": null,
"is_bot": false,
"headline": "Add configuration example for VCD autoscaler",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-11-20T18:31:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ff49af93f0265ea00753a22d075afc478024e1cb",
"body": "…ialize the debug server based on a configurable address.",
"is_bot": false,
"headline": "Refactor debug server Updated the InstanceGroup to conditionally init…",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-11-20T18:30:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1ceb1d4e34dbf7b9e6c62bfc15edd5d8248a878a",
"body": "Added a semaphore to limit concurrent deletion operations in the InstanceGroup, improving resource management. Implemented panic recovery in the createInstance method to handle potential runtime errors gracefully. Updated logging to provide more detailed information during instance creation and deletion processes, enhancing debugging capabilities.",
"is_bot": false,
"headline": "Enhance InstanceGroup with concurrency control and error handling",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-11-20T15:46:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ee741aa582602cf7c978cfd8557ec717251a10a5",
"body": "Introduced a new DebugServer to handle HTTP requests for displaying instance states. Implemented an instanceStateManager to track and manage the lifecycle of instances, including soft-deletion and state transitions. Updated the InstanceGroup to initialize and run the debug web server, enhancing the overall functionality and debugging capabilities of the VCD plugin.",
"is_bot": false,
"headline": "Add debug server and instance state management",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-11-13T22:02:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be59bdca7e04512004312237898fc72f02357bbb",
"body": null,
"is_bot": false,
"headline": "Added working goreleaser",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-08-27T21:42:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ea317e69c720a17ab8282193ea31062dc3b1b054",
"body": null,
"is_bot": false,
"headline": "Minor changes here and there",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-08-27T20:17:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d39f75a073eeca104032f10fa758ad7721ffd549",
"body": null,
"is_bot": false,
"headline": "Update dependencies + some random stuff + vcd bump to 10.5.1",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-06-16T09:10:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7ae1b39f65b417d1f96fe1542c0a34942bde1293",
"body": null,
"is_bot": false,
"headline": "Added testing cases",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-02-12T08:48:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f71d7d3feca1542a63c8ffeb05c2f0eae0d254b",
"body": null,
"is_bot": false,
"headline": "Instance group working for vcd",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-02-12T08:47:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "127fe639c747c4b8d87f59b0331c0fa57529894b",
"body": "Use metadata tags to simulate instance groups",
"is_bot": false,
"headline": "Merge pull request #2 from juanfont/use-metadata",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-01-30T22:30:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7f3daf04d82470b20665e0413cf604761cc52904",
"body": null,
"is_bot": false,
"headline": "Seems to be working",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2025-01-30T22:28:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60d998df82738c9a5e93d5bd76a7c25e925519fd",
"body": "Use metadata tags to emulate instance groups",
"is_bot": false,
"headline": "Merge pull request #1 from juanfont/use-metadata",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2024-11-01T13:12:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9db5ca4abf28602bf765b6958f9e1eb1e4cf7a71",
"body": null,
"is_bot": false,
"headline": "Use metadata tags to emulate instance groups",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2024-11-01T12:59:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9224c284450e03f4395bc11da56ffd7a37a1a2de",
"body": null,
"is_bot": false,
"headline": "More progress",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2024-10-04T08:31:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1a8b3c89e3c7eef32681bc7611bd0bc6129f6a9c",
"body": null,
"is_bot": false,
"headline": "Added support files",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2024-09-04T08:08:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9f8d938baa8443d3b4fbb8a63a9256c5e82ca837",
"body": null,
"is_bot": false,
"headline": "Initial working-ish version",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2024-09-04T08:03:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ae7f3974134123539966118bf173f09eb2d8c488",
"body": null,
"is_bot": false,
"headline": "Initial commit",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2024-08-20T20:58:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "281ebf015bd8df10cde34eb04d405e02c5b10e39",
"body": null,
"is_bot": false,
"headline": "Initial commit",
"author_name": "Juan Font",
"author_login": "juanfont",
"committed_at": "2024-08-13T14:05:13Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 8,
"commits_last_year": 26,
"latest_release_at": "2026-07-16T14:26:31Z",
"latest_release_tag": "v0.3.3",
"releases_from_tags": false,
"days_since_last_push": 10,
"active_weeks_last_year": 10,
"days_since_latest_release": 10,
"mean_days_between_releases": 24.1
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/juanfont/fleeting-plugin-vcd",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/juanfont/fleeting-plugin-vcd",
"is_deprecated": false,
"latest_version": "v0.3.3",
"repository_url": "https://github.com/juanfont/fleeting-plugin-vcd",
"versions_count": 12,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-16T14:25:17Z",
"latest_version_yanked": null,
"days_since_latest_publish": 10
}
]
},
"popularity": {
"forks": 3,
"stars": 2,
"watchers": 1,
"fork_history": {
"days": [
{
"date": "2025-10-28",
"count": 1
},
{
"date": "2026-01-31",
"count": 1
},
{
"date": "2026-06-07",
"count": 1
}
],
"complete": true,
"collected": 3,
"total_forks": 3
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"Makefile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"go.mod"
],
"largest_source_bytes": 37692,
"source_files_sampled": 19,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"go.mod"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "golang.org/x/crypto",
"direct": true,
"version": "v0.44.0",
"severity": "critical",
"ecosystem": "go",
"cvss_score": 10,
"advisory_ids": [
"GHSA-45gg-vh54-h5m9",
"GHSA-5cgq-3rg8-m6cv",
"GHSA-78mq-xcr3-xm33",
"GHSA-89gr-r52h-f8rx",
"GHSA-9m57-25v3-79x9",
"GHSA-f5wc-c3c7-36mc",
"GHSA-f6x5-jh6r-wrfv",
"GHSA-j5w8-q4qc-rx2x",
"GHSA-jppx-rxg9-jmrx",
"GHSA-q4h4-gmj2-qvw2"
],
"fixed_version": "0.52.0",
"advisory_count": 31,
"oldest_advisory_days": 248
},
{
"name": "google.golang.org/grpc",
"direct": false,
"version": "v1.75.0",
"severity": "critical",
"ecosystem": "go",
"cvss_score": 9.1,
"advisory_ids": [
"GHSA-hrxh-6v49-42gf",
"GHSA-p77j-4mvh-x3m3",
"GO-2026-4762"
],
"fixed_version": "1.82.1",
"advisory_count": 3,
"oldest_advisory_days": 129
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "v0.46.0",
"severity": "moderate",
"ecosystem": "go",
"cvss_score": 6.5,
"advisory_ids": [
"GHSA-5cv4-jp36-h3mw",
"GO-2026-4918",
"GO-2026-5025",
"GO-2026-5026",
"GO-2026-5027",
"GO-2026-5028",
"GO-2026-5029",
"GO-2026-5030",
"GO-2026-5942"
],
"fixed_version": "1.26.3",
"advisory_count": 9,
"oldest_advisory_days": 79
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "v0.38.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5024"
],
"fixed_version": "0.44.0",
"advisory_count": 1,
"oldest_advisory_days": 65
},
{
"name": "golang.org/x/text",
"direct": false,
"version": "v0.31.0",
"severity": "unknown",
"ecosystem": "go",
"cvss_score": null,
"advisory_ids": [
"GO-2026-5970"
],
"fixed_version": "0.39.0",
"advisory_count": 1,
"oldest_advisory_days": 12
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"unknown": 2,
"critical": 2,
"moderate": 1
},
"advisory_count": 45,
"affected_count": 5,
"assessed_count": 77,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 1
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "github.com/cenkalti/backoff/v4",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v4.3.0"
},
{
"name": "github.com/gorilla/mux",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.8.1"
},
{
"name": "github.com/hashicorp/go-hclog",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.6.3"
},
{
"name": "github.com/prometheus/client_golang",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.23.2"
},
{
"name": "github.com/puzpuzpuz/xsync/v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.5.1"
},
{
"name": "github.com/stretchr/testify",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v1.11.1"
},
{
"name": "github.com/vmware/go-vcloud-director/v3",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v3.0.0"
},
{
"name": "gitlab.com/gitlab-org/fleeting/fleeting",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.0.0-20250910083154-db769f38ab21"
},
{
"name": "golang.org/x/crypto",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.44.0"
},
{
"name": "golang.org/x/sync",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.18.0"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "github.com/cenkalti/backoff/v4",
"direct": true,
"version": "v4.3.0",
"ecosystem": "go"
},
{
"name": "github.com/gorilla/mux",
"direct": true,
"version": "v1.8.1",
"ecosystem": "go"
},
{
"name": "github.com/hashicorp/go-hclog",
"direct": true,
"version": "v1.6.3",
"ecosystem": "go"
},
{
"name": "github.com/prometheus/client_golang",
"direct": true,
"version": "v1.23.2",
"ecosystem": "go"
},
{
"name": "github.com/puzpuzpuz/xsync/v3",
"direct": true,
"version": "v3.5.1",
"ecosystem": "go"
},
{
"name": "github.com/stretchr/testify",
"direct": true,
"version": "v1.11.1",
"ecosystem": "go"
},
{
"name": "github.com/vmware/go-vcloud-director/v3",
"direct": true,
"version": "v3.0.0",
"ecosystem": "go"
},
{
"name": "gitlab.com/gitlab-org/fleeting/fleeting",
"direct": true,
"version": "v0.0.0-20250910083154-db769f38ab21",
"ecosystem": "go"
},
{
"name": "golang.org/x/crypto",
"direct": true,
"version": "v0.44.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sync",
"direct": true,
"version": "v0.18.0",
"ecosystem": "go"
},
{
"name": "github.com/araddon/dateparse",
"direct": false,
"version": "v0.0.0-20210429162001-6b43995a97de",
"ecosystem": "go"
},
{
"name": "github.com/azure/go-ntlmssp",
"direct": false,
"version": "v0.0.0-20221128193559-754e69321358",
"ecosystem": "go"
},
{
"name": "github.com/beorn7/perks",
"direct": false,
"version": "v1.0.1",
"ecosystem": "go"
},
{
"name": "github.com/bodgit/ntlmssp",
"direct": false,
"version": "v0.0.0-20240506230425-31973bb52d9b",
"ecosystem": "go"
},
{
"name": "github.com/bodgit/windows",
"direct": false,
"version": "v1.0.1",
"ecosystem": "go"
},
{
"name": "github.com/cespare/xxhash/v2",
"direct": false,
"version": "v2.3.0",
"ecosystem": "go"
},
{
"name": "github.com/christrenkamp/goxpath",
"direct": false,
"version": "v0.0.0-20210404020558-97928f7e12b6",
"ecosystem": "go"
},
{
"name": "github.com/davecgh/go-spew",
"direct": false,
"version": "v1.1.2-0.20180830191138-d8f796af33cc",
"ecosystem": "go"
},
{
"name": "github.com/fatih/color",
"direct": false,
"version": "v1.18.0",
"ecosystem": "go"
},
{
"name": "github.com/fxamacker/cbor/v2",
"direct": false,
"version": "v2.9.0",
"ecosystem": "go"
},
{
"name": "github.com/go-logr/logr",
"direct": false,
"version": "v1.4.3",
"ecosystem": "go"
},
{
"name": "github.com/gofrs/uuid",
"direct": false,
"version": "v4.4.0+incompatible",
"ecosystem": "go"
},
{
"name": "github.com/gogo/protobuf",
"direct": false,
"version": "v1.3.2",
"ecosystem": "go"
},
{
"name": "github.com/golang/protobuf",
"direct": false,
"version": "v1.5.4",
"ecosystem": "go"
},
{
"name": "github.com/hashicorp/go-cleanhttp",
"direct": false,
"version": "v0.5.2",
"ecosystem": "go"
},
{
"name": "github.com/hashicorp/go-plugin",
"direct": false,
"version": "v1.7.0",
"ecosystem": "go"
},
{
"name": "github.com/hashicorp/go-uuid",
"direct": false,
"version": "v1.0.3",
"ecosystem": "go"
},
{
"name": "github.com/hashicorp/go-version",
"direct": false,
"version": "v1.7.0",
"ecosystem": "go"
},
{
"name": "github.com/hashicorp/yamux",
"direct": false,
"version": "v0.1.2",
"ecosystem": "go"
},
{
"name": "github.com/jcmturner/aescts/v2",
"direct": false,
"version": "v2.0.0",
"ecosystem": "go"
},
{
"name": "github.com/jcmturner/dnsutils/v2",
"direct": false,
"version": "v2.0.0",
"ecosystem": "go"
},
{
"name": "github.com/jcmturner/gofork",
"direct": false,
"version": "v1.7.6",
"ecosystem": "go"
},
{
"name": "github.com/jcmturner/goidentity/v6",
"direct": false,
"version": "v6.0.1",
"ecosystem": "go"
},
{
"name": "github.com/jcmturner/gokrb5/v8",
"direct": false,
"version": "v8.4.4",
"ecosystem": "go"
},
{
"name": "github.com/jcmturner/rpc/v2",
"direct": false,
"version": "v2.0.3",
"ecosystem": "go"
},
{
"name": "github.com/json-iterator/go",
"direct": false,
"version": "v1.1.12",
"ecosystem": "go"
},
{
"name": "github.com/kr/pretty",
"direct": false,
"version": "v0.3.1",
"ecosystem": "go"
},
{
"name": "github.com/kr/text",
"direct": false,
"version": "v0.2.0",
"ecosystem": "go"
},
{
"name": "github.com/masterzen/simplexml",
"direct": false,
"version": "v0.0.0-20190410153822-31eea3082786",
"ecosystem": "go"
},
{
"name": "github.com/masterzen/winrm",
"direct": false,
"version": "v0.0.0-20250819055755-20c0798bc988",
"ecosystem": "go"
},
{
"name": "github.com/mattn/go-colorable",
"direct": false,
"version": "v0.1.14",
"ecosystem": "go"
},
{
"name": "github.com/mattn/go-isatty",
"direct": false,
"version": "v0.0.20",
"ecosystem": "go"
},
{
"name": "github.com/modern-go/concurrent",
"direct": false,
"version": "v0.0.0-20180306012644-bacd9c7ef1dd",
"ecosystem": "go"
},
{
"name": "github.com/modern-go/reflect2",
"direct": false,
"version": "v1.0.2",
"ecosystem": "go"
},
{
"name": "github.com/munnerz/goautoneg",
"direct": false,
"version": "v0.0.0-20191010083416-a7dc8b61c822",
"ecosystem": "go"
},
{
"name": "github.com/oklog/run",
"direct": false,
"version": "v1.2.0",
"ecosystem": "go"
},
{
"name": "github.com/oklog/ulid/v2",
"direct": false,
"version": "v2.0.2",
"ecosystem": "go"
},
{
"name": "github.com/peterhellberg/link",
"direct": false,
"version": "v1.2.0",
"ecosystem": "go"
},
{
"name": "github.com/pmezard/go-difflib",
"direct": false,
"version": "v1.0.1-0.20181226105442-5d4384ee4fb2",
"ecosystem": "go"
},
{
"name": "github.com/prometheus/client_model",
"direct": false,
"version": "v0.6.2",
"ecosystem": "go"
},
{
"name": "github.com/prometheus/common",
"direct": false,
"version": "v0.66.1",
"ecosystem": "go"
},
{
"name": "github.com/prometheus/procfs",
"direct": false,
"version": "v0.16.1",
"ecosystem": "go"
},
{
"name": "github.com/rogpeppe/go-internal",
"direct": false,
"version": "v1.14.1",
"ecosystem": "go"
},
{
"name": "github.com/sebest/xff",
"direct": false,
"version": "v0.0.0-20210106013422-671bd2870b3a",
"ecosystem": "go"
},
{
"name": "github.com/sirupsen/logrus",
"direct": false,
"version": "v1.9.3",
"ecosystem": "go"
},
{
"name": "github.com/tidwall/transform",
"direct": false,
"version": "v0.0.0-20201103190739-32f242e2dbde",
"ecosystem": "go"
},
{
"name": "github.com/x448/float16",
"direct": false,
"version": "v0.8.4",
"ecosystem": "go"
},
{
"name": "gitlab.com/gitlab-org/go/reopen",
"direct": false,
"version": "v1.0.0",
"ecosystem": "go"
},
{
"name": "gitlab.com/gitlab-org/labkit",
"direct": false,
"version": "v1.28.1",
"ecosystem": "go"
},
{
"name": "go.yaml.in/yaml/v2",
"direct": false,
"version": "v2.4.2",
"ecosystem": "go"
},
{
"name": "golang.org/x/exp",
"direct": false,
"version": "v0.0.0-20250819193227-8b4c13bb791b",
"ecosystem": "go"
},
{
"name": "golang.org/x/mod",
"direct": false,
"version": "v0.29.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/net",
"direct": false,
"version": "v0.46.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/sys",
"direct": false,
"version": "v0.38.0",
"ecosystem": "go"
},
{
"name": "golang.org/x/text",
"direct": false,
"version": "v0.31.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/genproto/googleapis/rpc",
"direct": false,
"version": "v0.0.0-20250826171959-ef028d996bc1",
"ecosystem": "go"
},
{
"name": "google.golang.org/grpc",
"direct": false,
"version": "v1.75.0",
"ecosystem": "go"
},
{
"name": "google.golang.org/protobuf",
"direct": false,
"version": "v1.36.8",
"ecosystem": "go"
},
{
"name": "gopkg.in/inf.v0",
"direct": false,
"version": "v0.9.1",
"ecosystem": "go"
},
{
"name": "gopkg.in/yaml.v3",
"direct": false,
"version": "v3.0.1",
"ecosystem": "go"
},
{
"name": "k8s.io/apimachinery",
"direct": false,
"version": "v0.33.4",
"ecosystem": "go"
},
{
"name": "k8s.io/klog/v2",
"direct": false,
"version": "v2.130.1",
"ecosystem": "go"
},
{
"name": "k8s.io/utils",
"direct": false,
"version": "v0.0.0-20250820121507-0af2bda4dd1d",
"ecosystem": "go"
},
{
"name": "sigs.k8s.io/json",
"direct": false,
"version": "v0.0.0-20250730193827-2d320260d730",
"ecosystem": "go"
},
{
"name": "sigs.k8s.io/randfill",
"direct": false,
"version": "v1.0.0",
"ecosystem": "go"
},
{
"name": "sigs.k8s.io/structured-merge-diff/v4",
"direct": false,
"version": "v4.7.0",
"ecosystem": "go"
},
{
"name": "sigs.k8s.io/yaml",
"direct": false,
"version": "v1.6.0",
"ecosystem": "go"
}
],
"collected": true,
"truncated": false,
"total_count": 77,
"direct_count": 10,
"indirect_count": 67
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 3,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "juanfont",
"commits": 38,
"avatar_url": "https://avatars.githubusercontent.com/u/181059?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"releaser.yml"
],
"has_docs_dir": false,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 0,
"reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"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": 0,
"reason": "Found 0/25 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 3 contributing companies or organizations -- score normalized to 10",
"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": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 0,
"reason": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"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": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 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": 0,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "29 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "6c0f0585816fa840758e8dfd2b9fbb437e431e6e",
"ran_at": "2026-07-26T18:36:20Z",
"aggregate_score": 2.6,
"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-03-17T13:41:42Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-02-08T19:35:43Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/juanfont/fleeting-plugin-vcd",
"host": "github.com",
"name": "fleeting-plugin-vcd",
"owner": "juanfont"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 49,
"inputs": {
"security": 31,
"vitality": 65,
"community": 24,
"governance": 61,
"engineering": 53
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 65,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "at_risk",
"name": "Development activity",
"note": null,
"notes": [],
"value": 49,
"inputs": {
"commits_last_year": 26,
"human_commit_share": 1,
"days_since_last_push": 10,
"active_weeks_last_year": 10
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 10 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 10
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "10/52 weeks with commits",
"points": 6.9,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 10
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "26 commits in the last year",
"points": 12.9,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 26
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 8,
"latest_release_tag": "v0.3.3",
"releases_from_tags": false,
"days_since_latest_release": 10,
"mean_days_between_releases": 24.1
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "8 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 8
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 10 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 10
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~24.1 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 24.1
}
}
],
"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": 131,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 131 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 131
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 24,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 2,
"inputs": {
"forks": 3,
"stars": 2,
"watchers": 1,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "2 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 2
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "3 forks",
"points": 2.5,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 3
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "1 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 1
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (BSD-3-Clause)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "BSD-3-Clause"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 61,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 20,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 1,
"top_contributor_share": 1
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 100% of commits",
"points": 0,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 3 contributing companies or organizations -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 72,
"inputs": {
"merged_prs": 3,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 0
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "3/3 decided PRs merged",
"points": 38.2,
"status": "met",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 3,
"decided": 3
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/25 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 69,
"inputs": {
"followers": 818,
"owner_type": "User",
"is_verified": null,
"owner_login": "juanfont",
"public_repos": 44,
"account_age_days": 6038
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "818 followers of juanfont",
"points": 20.9,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 818,
"login": "juanfont"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "44 public repos, account ~16 yr old",
"points": 24,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 44
}
},
{
"code": "account_age_years",
"params": {
"years": 16
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/juanfont/fleeting-plugin-vcd"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 10
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on go",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "go"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 10 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 10
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "12 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 12
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "moderate",
"name": "Engineering Quality",
"value": 53,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "at_risk",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 48,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "moderate",
"name": "Documentation",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"topics": [
"fleeting",
"gitlab",
"gitlab-runner",
"vcd",
"vcloud-director",
"vmware-cloud-director",
"fleeting-plugin-vcd",
"gitlab-fleeting"
],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": false,
"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": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"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": "8 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 8
}
}
],
"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": "at_risk",
"name": "Security",
"value": 31,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": null,
"notes": [],
"value": 26,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 18,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 0,
"scorecard_aggregate": 2.6
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/25 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 3 contributing companies or organizations -- score normalized to 10",
"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": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
"points": 0,
"status": "missed",
"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 not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "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": "detected GitHub workflow tokens with excessive permissions",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "29 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "moderate",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 77 resolved dependencies against OSV. 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"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 77
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 52,
"inputs": {
"source": "osv",
"advisories": 45,
"affected_packages": 5,
"assessed_packages": 77,
"unassessed_packages": 0,
"affected_by_severity": "critical 2, moderate 1, unknown 2",
"direct_affected_packages": 1
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "1 affected: golang.org/x/crypto v0.44.0 (critical 10.0)",
"points": 7,
"status": "partial",
"details": [
{
"code": "advisories_affected",
"params": {
"count": 1,
"packages": "golang.org/x/crypto v0.44.0 (critical 10.0)"
}
}
],
"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": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 248 days ago",
"points": 32,
"status": "partial",
"details": [
{
"code": "advisories_stale",
"params": {
"days": 90,
"count": 1,
"oldest": 248
}
}
],
"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": 77,
"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": 4
},
"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": 54,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 22,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.421,
"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": "16 of 38 human commits state their intent (structured subject or explanatory body)",
"points": 22.5,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 16,
"sampled": 38
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 61,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [
"Makefile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0,
"toolchain_manifests": [
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Makefile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "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": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 38",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 38
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"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": "Go",
"largest_source_bytes": 37692,
"source_files_sampled": 19,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/19 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 19,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-26T18:36:27.608890Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/j/juanfont/fleeting-plugin-vcd.svg",
"full_name": "juanfont/fleeting-plugin-vcd",
"license_state": "standard",
"license_spdx": "BSD-3-Clause"
}