Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-27 14:39 UTC

PozzettiAndrea / comfy-test

PythonMIT★ 5 estrellas⑂ 0 forksdesde ene 2026Ver en GitHub ↗

PozzettiAndrea/comfy-test tiene un índice de salud de 59 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (82/100) y la más baja, Community & Adoption (36/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

59
global / 100
Moderado

Índice de salud del software

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

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

Perfil de puntuación

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

Titularidad

Andrea PozzettiCuenta personal
408 seguidores58 repositorios públicosdesde nov 2019

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
PyPIcomfy-test0.3.1193704350hace 0 díascicomfyuigithub-actionsinstallationtesting

Métricas por categoría

Vitalidad

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

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

Comunidad y Adopción

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

36En riesgo · 18% del índice global
Cómo se puntúa
9.8/60Estrellas — 5 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars5
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
47.6/80Descargas mensuales — 3704 descargas/mes en pypi
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagescomfy-test
dependents
ecosystemspypi
total_downloads
monthly_downloads3704
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

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

58Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 6/6 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs6
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
18.8/25Alcance del propietario — 408 seguidores de PozzettiAndrea
24.9/25Trayectoria — 58 repos públicos, cuenta de ~6 años
Datos de entrada utilizados
followers408
owner_typeUser
is_verified
owner_loginPozzettiAndrea
public_repos58
account_age_days2455
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en pypi
35/35Recencia de publicación — última publicación hace 0 días
20/20Historial de versiones — 350 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagescomfy-test
ecosystemspypi
any_deprecatedno
min_days_since_publish0

Calidad de Ingeniería

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

71Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 12 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter
9.6/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_config
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

40En riesgo
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dirno
has_descriptionno

Seguridad

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

39En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,9
Excluidos de la puntuación (sin datos o no aplicable): ci_tests. Los pesos restantes se han renormalizado.

Preparación para IA

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

43En riesgo · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
24/40Historial de commits legible — 45 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,45
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato
0/11Verificación estática de tipos
10/10Entorno reproducible — Dockerfile
10/10Práctica demostrada con agentes — 25 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfile
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,25
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
0/45Código verificable por tipos — Python sin configuración de verificación de tipos
52.6/55Tamaños de archivo manejables — 4/90 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languagePython
largest_source_bytes94.832
source_files_sampled90
oversized_source_files4

Datos clave

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

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index pypi:comfy-test@0.3.119; advisories assessed against the repository dependency graph instead

Más detalle

OpenSSF Scorecard 3.9 / 10
3.9agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-27 14:39 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 6
RegistroPaqueteRestricción de versiónManifiesto
PyPItomli>=2.0.0pyproject.toml
PyPIrequests>=2.28.0pyproject.toml
PyPIwebsocket-clientpyproject.toml
PyPIpy7zr>=0.20.0pyproject.toml
PyPIpsutil>=5.9.0pyproject.toml
PyPIuv>=0.4.0pyproject.toml
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 8958,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "HTML": 60267,
        "Shell": 3930,
        "Python": 915239,
        "Dockerfile": 9571,
        "PowerShell": 23816
      },
      "pushed_at": "2026-07-27T14:36:44Z",
      "created_at": "2026-01-15T12:13:49Z",
      "owner_type": "User",
      "updated_at": "2026-07-09T13:26:36Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Python",
      "significant_languages": [
        "Python"
      ]
    },
    "owner": {
      "blog": "https://discord.gg/bcdQCUjnHE",
      "name": "Andrea Pozzetti",
      "type": "User",
      "login": "PozzettiAndrea",
      "company": null,
      "location": "Zürich",
      "followers": 408,
      "avatar_url": "https://avatars.githubusercontent.com/u/57418757?v=4",
      "created_at": "2019-11-05T21:45:10Z",
      "is_verified": null,
      "public_repos": 58,
      "account_age_days": 2455
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.3.119",
          "kind": "patch",
          "published_at": "2026-07-27T14:36:49Z"
        },
        {
          "tag": "v0.3.118",
          "kind": "patch",
          "published_at": "2026-07-09T13:25:57Z"
        },
        {
          "tag": "v0.3.117",
          "kind": "patch",
          "published_at": "2026-06-19T19:09:18Z"
        },
        {
          "tag": "v0.3.116",
          "kind": "patch",
          "published_at": "2026-06-19T11:57:59Z"
        },
        {
          "tag": "v0.3.115",
          "kind": "patch",
          "published_at": "2026-06-07T19:53:08Z"
        },
        {
          "tag": "v0.3.114",
          "kind": "patch",
          "published_at": "2026-06-07T13:23:27Z"
        },
        {
          "tag": "v0.3.113",
          "kind": "patch",
          "published_at": "2026-05-18T20:54:41Z"
        },
        {
          "tag": "v0.3.112",
          "kind": "patch",
          "published_at": "2026-05-18T18:51:57Z"
        },
        {
          "tag": "v0.3.111",
          "kind": "patch",
          "published_at": "2026-05-18T17:33:19Z"
        },
        {
          "tag": "v0.3.110",
          "kind": "patch",
          "published_at": "2026-05-18T17:24:03Z"
        },
        {
          "tag": "v0.3.109",
          "kind": "patch",
          "published_at": "2026-05-18T14:23:34Z"
        },
        {
          "tag": "v0.3.108",
          "kind": "patch",
          "published_at": "2026-05-18T14:19:09Z"
        },
        {
          "tag": "v0.3.107",
          "kind": "patch",
          "published_at": "2026-05-17T21:16:35Z"
        },
        {
          "tag": "v0.3.106",
          "kind": "patch",
          "published_at": "2026-05-15T11:02:54Z"
        },
        {
          "tag": "v0.3.105",
          "kind": "patch",
          "published_at": "2026-05-15T10:47:21Z"
        },
        {
          "tag": "v0.3.104",
          "kind": "patch",
          "published_at": "2026-05-15T09:27:20Z"
        },
        {
          "tag": "v0.3.103",
          "kind": "patch",
          "published_at": "2026-05-15T08:59:50Z"
        },
        {
          "tag": "v0.3.100",
          "kind": "patch",
          "published_at": "2026-05-15T06:36:17Z"
        },
        {
          "tag": "v0.3.99",
          "kind": "patch",
          "published_at": "2026-05-14T11:21:02Z"
        },
        {
          "tag": "v0.3.98",
          "kind": "patch",
          "published_at": "2026-05-13T17:52:21Z"
        },
        {
          "tag": "v0.3.97",
          "kind": "patch",
          "published_at": "2026-05-13T13:41:25Z"
        },
        {
          "tag": "v0.3.96",
          "kind": "patch",
          "published_at": "2026-05-13T12:56:25Z"
        },
        {
          "tag": "v0.3.95",
          "kind": "patch",
          "published_at": "2026-05-13T12:34:49Z"
        },
        {
          "tag": "v0.3.94",
          "kind": "patch",
          "published_at": "2026-05-13T11:25:55Z"
        },
        {
          "tag": "v0.3.93",
          "kind": "patch",
          "published_at": "2026-05-13T10:39:48Z"
        },
        {
          "tag": "v0.3.92",
          "kind": "patch",
          "published_at": "2026-05-13T10:34:05Z"
        },
        {
          "tag": "v0.3.91",
          "kind": "patch",
          "published_at": "2026-05-13T10:30:35Z"
        },
        {
          "tag": "v0.3.90",
          "kind": "patch",
          "published_at": "2026-05-13T10:18:24Z"
        },
        {
          "tag": "v0.3.89",
          "kind": "patch",
          "published_at": "2026-05-13T09:57:54Z"
        },
        {
          "tag": "v0.3.88",
          "kind": "patch",
          "published_at": "2026-05-13T09:23:52Z"
        },
        {
          "tag": "v0.3.87",
          "kind": "patch",
          "published_at": "2026-05-11T06:38:37Z"
        },
        {
          "tag": "v0.3.86",
          "kind": "patch",
          "published_at": "2026-05-10T14:54:24Z"
        },
        {
          "tag": "v0.3.85",
          "kind": "patch",
          "published_at": "2026-05-10T14:07:49Z"
        },
        {
          "tag": "v0.3.84",
          "kind": "patch",
          "published_at": "2026-05-10T12:20:51Z"
        },
        {
          "tag": "v0.3.83",
          "kind": "patch",
          "published_at": "2026-05-10T09:26:19Z"
        },
        {
          "tag": "v0.3.82",
          "kind": "patch",
          "published_at": "2026-05-10T08:27:20Z"
        },
        {
          "tag": "v0.3.81",
          "kind": "patch",
          "published_at": "2026-05-10T08:25:02Z"
        },
        {
          "tag": "v0.3.80",
          "kind": "patch",
          "published_at": "2026-05-10T03:29:27Z"
        },
        {
          "tag": "v0.3.79",
          "kind": "patch",
          "published_at": "2026-05-10T03:07:32Z"
        },
        {
          "tag": "v0.3.78",
          "kind": "patch",
          "published_at": "2026-05-10T02:44:08Z"
        },
        {
          "tag": "v0.3.77",
          "kind": "patch",
          "published_at": "2026-05-10T02:14:15Z"
        },
        {
          "tag": "v0.3.76",
          "kind": "patch",
          "published_at": "2026-05-10T01:46:45Z"
        },
        {
          "tag": "v0.3.75",
          "kind": "patch",
          "published_at": "2026-05-10T01:26:54Z"
        },
        {
          "tag": "v0.3.74",
          "kind": "patch",
          "published_at": "2026-05-10T01:10:14Z"
        },
        {
          "tag": "v0.3.73",
          "kind": "patch",
          "published_at": "2026-05-10T00:59:10Z"
        },
        {
          "tag": "v0.3.72",
          "kind": "patch",
          "published_at": "2026-05-10T00:42:43Z"
        },
        {
          "tag": "v0.3.71",
          "kind": "patch",
          "published_at": "2026-05-10T00:23:04Z"
        },
        {
          "tag": "v0.3.70",
          "kind": "patch",
          "published_at": "2026-05-10T00:16:38Z"
        },
        {
          "tag": "v0.3.69",
          "kind": "patch",
          "published_at": "2026-05-09T23:59:59Z"
        },
        {
          "tag": "v0.3.68",
          "kind": "patch",
          "published_at": "2026-05-09T23:03:17Z"
        },
        {
          "tag": "v0.3.67",
          "kind": "patch",
          "published_at": "2026-05-09T21:54:38Z"
        },
        {
          "tag": "v0.3.66",
          "kind": "patch",
          "published_at": "2026-05-09T21:49:31Z"
        },
        {
          "tag": "v0.3.65",
          "kind": "patch",
          "published_at": "2026-05-09T21:42:31Z"
        },
        {
          "tag": "v0.3.64",
          "kind": "patch",
          "published_at": "2026-05-09T21:28:31Z"
        },
        {
          "tag": "v0.3.63",
          "kind": "patch",
          "published_at": "2026-05-09T21:25:49Z"
        },
        {
          "tag": "v0.3.62",
          "kind": "patch",
          "published_at": "2026-05-09T21:10:39Z"
        },
        {
          "tag": "v0.3.61",
          "kind": "patch",
          "published_at": "2026-05-09T21:04:46Z"
        },
        {
          "tag": "v0.3.59",
          "kind": "patch",
          "published_at": "2026-05-09T20:38:30Z"
        },
        {
          "tag": "v0.3.58",
          "kind": "patch",
          "published_at": "2026-05-09T18:33:10Z"
        },
        {
          "tag": "v0.3.57",
          "kind": "patch",
          "published_at": "2026-05-09T18:05:55Z"
        },
        {
          "tag": "v0.3.56",
          "kind": "patch",
          "published_at": "2026-05-09T18:01:47Z"
        },
        {
          "tag": "v0.3.55",
          "kind": "patch",
          "published_at": "2026-05-09T14:50:00Z"
        },
        {
          "tag": "v0.3.54",
          "kind": "patch",
          "published_at": "2026-05-09T13:48:03Z"
        },
        {
          "tag": "v0.3.53",
          "kind": "patch",
          "published_at": "2026-05-09T13:22:24Z"
        },
        {
          "tag": "v0.3.52",
          "kind": "patch",
          "published_at": "2026-05-08T14:38:29Z"
        },
        {
          "tag": "v0.3.51",
          "kind": "patch",
          "published_at": "2026-05-08T14:05:07Z"
        },
        {
          "tag": "v0.3.50",
          "kind": "patch",
          "published_at": "2026-05-08T13:23:12Z"
        },
        {
          "tag": "v0.3.49",
          "kind": "patch",
          "published_at": "2026-05-08T12:58:26Z"
        },
        {
          "tag": "v0.3.48",
          "kind": "patch",
          "published_at": "2026-05-08T12:40:45Z"
        },
        {
          "tag": "v0.3.47",
          "kind": "patch",
          "published_at": "2026-05-08T11:10:27Z"
        },
        {
          "tag": "v0.3.46",
          "kind": "patch",
          "published_at": "2026-05-08T10:34:23Z"
        },
        {
          "tag": "v0.3.45",
          "kind": "patch",
          "published_at": "2026-05-08T10:05:48Z"
        },
        {
          "tag": "v0.3.44",
          "kind": "patch",
          "published_at": "2026-05-08T09:02:37Z"
        },
        {
          "tag": "v0.3.43",
          "kind": "patch",
          "published_at": "2026-05-08T08:48:17Z"
        },
        {
          "tag": "v0.3.42",
          "kind": "patch",
          "published_at": "2026-05-08T08:36:15Z"
        },
        {
          "tag": "v0.3.40",
          "kind": "patch",
          "published_at": "2026-05-08T04:20:37Z"
        },
        {
          "tag": "v0.3.39",
          "kind": "patch",
          "published_at": "2026-05-08T04:05:05Z"
        },
        {
          "tag": "v0.3.38",
          "kind": "patch",
          "published_at": "2026-05-08T04:02:59Z"
        },
        {
          "tag": "v0.3.37",
          "kind": "patch",
          "published_at": "2026-05-08T03:53:51Z"
        },
        {
          "tag": "v0.3.36",
          "kind": "patch",
          "published_at": "2026-05-08T03:22:36Z"
        },
        {
          "tag": "v0.3.35",
          "kind": "patch",
          "published_at": "2026-05-08T03:03:18Z"
        },
        {
          "tag": "v0.3.34",
          "kind": "patch",
          "published_at": "2026-05-07T21:19:47Z"
        },
        {
          "tag": "v0.3.33",
          "kind": "patch",
          "published_at": "2026-05-07T21:14:18Z"
        },
        {
          "tag": "v0.3.32",
          "kind": "patch",
          "published_at": "2026-05-07T19:17:28Z"
        },
        {
          "tag": "v0.3.31",
          "kind": "patch",
          "published_at": "2026-05-07T19:14:26Z"
        },
        {
          "tag": "v0.3.30",
          "kind": "patch",
          "published_at": "2026-05-07T18:56:40Z"
        },
        {
          "tag": "v0.3.29",
          "kind": "patch",
          "published_at": "2026-05-07T15:00:15Z"
        },
        {
          "tag": "v0.3.28",
          "kind": "patch",
          "published_at": "2026-05-07T14:52:03Z"
        },
        {
          "tag": "v0.3.27",
          "kind": "patch",
          "published_at": "2026-05-07T14:49:52Z"
        },
        {
          "tag": "v0.3.26",
          "kind": "patch",
          "published_at": "2026-05-07T14:38:25Z"
        },
        {
          "tag": "v0.3.25",
          "kind": "patch",
          "published_at": "2026-05-07T14:37:52Z"
        },
        {
          "tag": "v0.3.24",
          "kind": "patch",
          "published_at": "2026-05-07T14:21:51Z"
        },
        {
          "tag": "v0.3.23",
          "kind": "patch",
          "published_at": "2026-05-07T13:32:24Z"
        },
        {
          "tag": "v0.3.22",
          "kind": "patch",
          "published_at": "2026-05-07T09:06:03Z"
        },
        {
          "tag": "v0.3.21",
          "kind": "patch",
          "published_at": "2026-05-06T21:00:21Z"
        },
        {
          "tag": "v0.3.20",
          "kind": "patch",
          "published_at": "2026-05-06T07:34:28Z"
        },
        {
          "tag": "v0.3.19",
          "kind": "patch",
          "published_at": "2026-05-06T07:26:17Z"
        },
        {
          "tag": "v0.3.18",
          "kind": "patch",
          "published_at": "2026-05-05T23:46:59Z"
        },
        {
          "tag": "v0.3.17",
          "kind": "patch",
          "published_at": "2026-05-05T23:40:23Z"
        },
        {
          "tag": "v0.3.16",
          "kind": "patch",
          "published_at": "2026-05-05T23:26:28Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "a61c9d42cfe6d6c85e97b3b5482d5a55b1bb74ea",
          "body": null,
          "is_bot": false,
          "headline": "dispatcher coverage, copy settings",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-07-27T14:36:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d64cfe186972ca7e27cef93cefc382b8212121d",
          "body": null,
          "is_bot": false,
          "headline": "added coverage test level",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-07-09T13:25:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46da4217a1acb6d4581574362a607bceacb0b85a",
          "body": null,
          "is_bot": false,
          "headline": "windows persistence + extra index for pypi",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-06-19T19:09:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aecf27a12f2d65b01ebd8a6916fbd045bf82121",
          "body": null,
          "is_bot": false,
          "headline": "bump for persistence",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-06-19T11:57:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13f10a9236c4ebda59d50257cf4636f34f3d9f29",
          "body": null,
          "is_bot": false,
          "headline": "higher dev shm",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-06-07T19:52:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a115aa9318bce109690b773fcf37ab44cf82aec8",
          "body": null,
          "is_bot": false,
          "headline": "fixed click",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-06-07T13:23:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98e21779c7d006b951c162dab45b83d6c051dac1",
          "body": null,
          "is_bot": false,
          "headline": "stream handling in gpu windows portable",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-18T20:54:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32ee63ffc55d8dc015a253071ee146ebed0da42e",
          "body": null,
          "is_bot": false,
          "headline": "remove dev",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-18T18:52:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "384b5bc9a1a08ce903bf1f9c7a04e872c278a823",
          "body": null,
          "is_bot": false,
          "headline": "uuid in linux",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-18T18:51:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36508a07bb5f412d20c156939ef12730965d0c74",
          "body": null,
          "is_bot": false,
          "headline": "111",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-18T17:32:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd4091946b5cee45f666239d840dcc108265d8ee",
          "body": null,
          "is_bot": false,
          "headline": "global git setup in docker",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-18T17:23:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e759cb2a409586611bd93efd68a87f6b22d39164",
          "body": null,
          "is_bot": false,
          "headline": "add comfy test version stamp to docker images",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-18T14:23:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f6f707fe16f440ad9df4909e3fb04af9eacef3f",
          "body": null,
          "is_bot": false,
          "headline": "docker user non admin",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-18T14:18:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbceea7f1098cfe2430a4fbcc45f1fa4bf3121bb",
          "body": null,
          "is_bot": false,
          "headline": "docker context",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-17T21:16:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db168ff5557278e3e1f7778ceb96465ab182b6ea",
          "body": "…ver reaches session.log; add 'Test run' chip linking back to the GHA run; v0.3.106",
          "is_bot": false,
          "headline": "fix(secrets): redact NODE_PAT from logged git-clone commands so it ne…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-15T11:02:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25255b1acae26b392bd15bec02d621ec9b51958c",
          "body": "…28/+cpu local wheels match ==X.Y.Z; v0.3.105",
          "is_bot": false,
          "headline": "fix(install): index-strategy first-index -> unsafe-best-match so +cu1…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-15T10:46:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8cbfe5ce98a4d45fc65adab4e40e69e5c3fdee23",
          "body": "…lane silently went cpu; v0.3.104",
          "is_bot": false,
          "headline": "fix: default torch 2.11.0 -> 2.10.0; cu128 has no 2.11 wheels so gpu …",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-15T09:26:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aea26c14c440d50ce297b8662753a346bd613f77",
          "body": "- Plumb NODE_PAT through every test lane (stduser, Linux/macOS, docker)\n  via shared cli/_git_auth helpers so PRIVATE node repos clone in CI.\n- Drop unused --dry-run / --server-url / --comfyui-dir / --deps-installed\n  flags + their plumbing (manager/context/levels/platforms/base_platform);\n  delete ExternalComfyUIServer; tighten --desktop help.\n- Always pass --index-url on Linux/Windows (cu128 for GPU, /whl/cpu for\n  CPU); macOS unchanged (no /whl/* subindex exists for macOS).",
          "is_bot": false,
          "headline": "feat: private repo auth + cli pruning + explicit torch indexes; v0.3.103",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-15T08:59:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d023afaaac2a7f79894be74acf56906ecf61b14",
          "body": "…v0.3.100",
          "is_bot": false,
          "headline": "fix(macos): pin torch family (default 2.11.0) same as linux/windows; …",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-15T06:35:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58e6602bc5aaeb13a6ddeb3e45163531f627a525",
          "body": null,
          "is_bot": false,
          "headline": "pin pytorch 2.11",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-14T11:20:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "840e7c6e36a3e17b4867db1281dcb5ed47b78465",
          "body": "…11.0)\n\nBackground: torch's release cadence has pulled ahead of torchaudio's. After\ntorch 2.12.0 shipped on 2026-05-13 (with CUDA 13), uv's --index-strategy\nunsafe-best-match resolution would pull torch 2.12.0+cu130 from PyPI while\ntorchaudio (max +cu130 wheel is 2.9.1) stayed at 2.11.0+cu128 -- pro\n[…]\n ecosystem realigns: edit DEFAULT_TORCH_VERSION\n+ add entry to TORCH_TRIPLES, verify cp310/cp311/cp312/cp313 wheels exist\non PyPI.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(install): pin torch family to a configurable version (default 2.…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-14T11:17:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c1bd4cbfaed77adc3d1f355038700e049ad35d29",
          "body": "…fresh; v0.3.98",
          "is_bot": false,
          "headline": "fix(stduser): null-guard exit code + log wrapped cmd + WaitForExit re…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T17:51:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "90b154237971c216f72410e1c3093bdb6e1fecbb",
          "body": "…v0.3.97",
          "is_bot": false,
          "headline": "fix(stduser): stream output via tail job + force-kill on marker+60s; …",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T13:41:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "829a34729238f344bc3f5fa320feafd6e087f445",
          "body": null,
          "is_bot": false,
          "headline": "docker(windows-gpu): run container as ContainerUser non-admin; v0.3.96",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T12:56:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f94281cc5ecfffdeaa6f2974eac275b03dd15fd",
          "body": "…s after EXE; v0.3.95",
          "is_bot": false,
          "headline": "fix(stduser): drop Tee-Object pipeline; native *> redirect so PS exit…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T12:34:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6af3354aa20e7f742d83645e148c9e4d64ec8bb2",
          "body": "…all; v0.3.94",
          "is_bot": false,
          "headline": "fix(portable): redirect server stdout to file so PIPE buffer can't st…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T11:25:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbb0231140b51f40e626d3903276890aa389010c",
          "body": null,
          "is_bot": false,
          "headline": "ci(windows): write stduser script to disk, invoke via -File; v0.3.93",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T10:39:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b2f745fe6f60e5a8dfb2938168d9ac808aa799b6",
          "body": null,
          "is_bot": false,
          "headline": "ci(windows): use -EncodedCommand for stduser wrapper; v0.3.92",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T10:33:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c800b118e9633a393ef51d611f80d00b874423f4",
          "body": "…0.3.91",
          "is_bot": false,
          "headline": "ci(windows): forward GHA env vars + Python PATH into stduser shell; v…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T10:29:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3bdf9886137bb26bc5521955ea1a491f9afd0e2",
          "body": null,
          "is_bot": false,
          "headline": "runneradmin",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T10:17:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "676ad2641de19e89eb6920f152c4f2854e236e0a",
          "body": null,
          "is_bot": false,
          "headline": "bump ver",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T09:57:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d901307e9e2bf9a41ca56b5d5ed8b0f9e0fa08d",
          "body": null,
          "is_bot": false,
          "headline": "ci(windows): non-admin is now the default; drop parallel lane",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T09:56:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb7d9c745b79cda265bfa7b1665452fcfd364db5",
          "body": null,
          "is_bot": false,
          "headline": "run as non admin",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T09:23:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1582cf7517e9146eb40bf288751f5aae52c063fa",
          "body": null,
          "is_bot": false,
          "headline": "ci: assert non-root/non-admin identity before test execution",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T09:21:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06d335a05bb03d4117c08031b3567482ae5ff22e",
          "body": "…rd user",
          "is_bot": false,
          "headline": "ci(windows): add non-admin lane that runs install + tests as a standa…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T09:21:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "995ec0740348eb4e7aaa920298c1bf048ccde7c8",
          "body": null,
          "is_bot": false,
          "headline": "docker: run linux-gpu container as non-root comfytest",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-13T09:21:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d101478ffc99cf864d82f713bbe7dfba7d6f53c9",
          "body": null,
          "is_bot": false,
          "headline": "bump ver",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-11T06:38:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c739756c26a0714f836267c9b4957b9208564403",
          "body": null,
          "is_bot": false,
          "headline": "linux commit log",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-11T06:37:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c382162129e76894fa7417a9f9b0dad31e4a5d6",
          "body": "cli/docker/run.py builds the `docker run` command with explicit `-e VAR=...`\nforwarding for a small set of env vars (COMFY_TEST_NODE_URL,\nCOMFY_TEST_NODE_NAME, COMFY_TEST_NODE_BRANCH, COMFY_TEST_GPU,\nCOMFY_TEST_PYTHON_VERSION). COMFY_TEST_RUN_URL was missing, so when the\npython inside the container \n[…]\nlready had the env (no container boundary) but happened\nnot to have rerun since v0.3.83 was tagged, so 0/85 files showed real URLs.\nNext CI run on any platform now stamps the real GHA Actions run URL.",
          "is_bot": false,
          "headline": "v0.3.86: forward COMFY_TEST_RUN_URL into docker container",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T14:54:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ec042dd375f661e4dc847f620522449d8e591aac",
          "body": "… open\n\nArrowLeft/Right already cycle workflows within a platform; ArrowUp/Down now\ncycles platforms while keeping the same workflow open in the lightbox. Skips\nplatforms where that workflow does not exist (per cached results.json), no\nwrap-around at the boundaries.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.85: report Up/Down arrows hop between platforms keeping workflow…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T14:07:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2ce6ba330f0773de531bc78c1f5cad7736f8492e",
          "body": null,
          "is_bot": false,
          "headline": "download timer for windows iso",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T13:34:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5271459eb86be18a4440e00808a9a488d060d4c1",
          "body": null,
          "is_bot": false,
          "headline": "vm build unattended",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T13:26:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2dee42de182d047048cc98afbb0d36db81791566",
          "body": "Self-hosted Windows runner (andrew) doesn't ship Python on the SYSTEM\nPATH that GHA shells inherit -- only the user's interactive PATH has\nit. So `pip install --upgrade comfy-test` in the gpu install step\nfails with \"'pip' is not recognized\". The cpu and desktop jobs already\nuse setup-python; the gp\n[…]\n keeps sudo pip --break-system-packages against system Python\n(works because the linux-gpu runners have python3-pip preinstalled).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.84: gpu job calls actions/setup-python@v5 on Windows",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T12:20:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d8e6b142174b8dd15271124b02ebbc817ad2c38",
          "body": "dispatch-test.yml: add COMFY_TEST_RUN_URL job-level env on cpu, gpu,\ndesktop jobs. github.* expansion is valid at job-level (unlike runner.*),\nso the URL is set before any step runs.\n\nwriters (orchestration/levels/execution.py, execution_light.py,\ndesktop/cdp_driver.py): read COMFY_TEST_RUN_URL from\n[…]\nh.\n\nHub-api + dashboard read this to deep-link cells back to the GHA run\nwhen \"Goto\" mode is on (separate commit in home-cluster).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.83: stamp run_url into results.json for dashboard Goto-mode",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T09:26:02Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "634186b31c6eeba096b6bfdaf292956c714f1452",
          "body": null,
          "is_bot": false,
          "headline": "vm build",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T08:52:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00ff41004f29f5e4878f19ef6adb92a3a4694dbe",
          "body": null,
          "is_bot": false,
          "headline": "test on real mps",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T08:27:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3027afb477bf6631a31791613a302017640f320b",
          "body": "ANDREW-PC and ONDREJ-PC don't have bash on PATH. After v0.3.80 fixed\nthe powershell step, the next bash-only step (\"Pick Python version\" at\nline 167, \"Install comfy-test\" at line 177 in the GPU job) failed with\n\"bash: command not found\".\n\nSplit both per-OS:\n\n- \"Pick Python version\" -> two steps gate\n[…]\nck Python\" and \"Install comfy-test\" stay bash-only —\nthey only run on ubuntu/macos runners which have bash.\n\nbump 0.3.80 -> 0.3.81\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "dispatch-test/gpu: split bash-only steps per-OS for Windows runners",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T08:24:44Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fc33706e0ccfd39a9a4c9bdb6d53c9618227bce9",
          "body": "The portable-gpu runner doesn't have pwsh (PowerShell 7+) installed,\nonly the built-in Windows PowerShell 5.1. Step fails immediately with\n\"pwsh: command not found\".\n\nSwitch all three pwsh-shell steps in dispatch-test.yml to `shell: powershell`\nwhich uses Windows PowerShell 5.1 — present on every Wi\n[…]\nse here\n(Set-MpPreference, Add-MpPreference, Out-File) are all 5.1-compatible,\nso no syntax changes needed.\n\nbump 0.3.79 -> 0.3.80\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "dispatch-test: shell: pwsh -> shell: powershell on all Windows steps",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T03:29:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a0f1231d9f443df355266d8ad2116d8b9c63ed6e",
          "body": "Self-hosted Windows runner (andrew) has Git's bin/ removed from PATH to\navoid the sh.exe PATH leak that bit us before, so 'shell: bash' fails\nwith 'bash: command not found'. The first step in the gpu job (Set\nCOMFY_TEST_LOGS_DIR) was bash-only, so it failed -> env var unset ->\nupload-artifact path r\n[…]\nS_DIR (Linux)' [bash] and 'Set\nCOMFY_TEST_LOGS_DIR (Windows)' [pwsh, with Out-File and $env:RUNNER_TEMP].\nEach gated on runner.os.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.79: split COMFY_TEST_LOGS_DIR setter per-OS (andrew has no bash)",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T03:06:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a9b0ba84e3e585b9d6ffe68aa4dee600fdee197",
          "body": "- _desktop_runner: capture node SHA from the local main clone (already\n  used for workflow enumeration); pass via COMFY_TEST_NODE_SHA + a\n  COMFY_TEST_DESKTOP_PLATFORM ('macos_desktop' / 'windows_desktop' /\n  'windows_desktop_gpu') to cdp_driver.\n\n- cdp_driver: replace stub `{workflows: [...]}` writ\n[…]\n this, dashboard's _check_ghpages_result reads success+commit_hash\nas None and renders the cell as stale-empty even on green runs.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.78: desktop results.json matches cpu schema",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T02:43:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7b8b5b9f0f55e5022fb6067dfbc26fe14f13fda1",
          "body": null,
          "is_bot": false,
          "headline": "vm support",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-10T02:35:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7795b58f67e81cc9cb1d70d875755dc962ae5f68",
          "body": "Lockstep pin (env COMFY_TEST_VERSION literal in dispatch-test.yml) was\nforgotten on v0.3.74-76 bumps, so all three YAMLs still installed\n0.3.73 -- which had the args.branch=\"main\" override that misfiled\ndesktop results to <run>/main/<platform>/ and broke the publish step's\nfind -path glob.\n\nSwitch a\n[…]\ner-tag bookkeeping; the PyPI CDN\npropagation race (~60s after publish) becomes \"retrigger if it stales\",\nnot a structural problem.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.77: drop COMFY_TEST_VERSION lockstep; install --upgrade",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T02:14:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a17e6af1932a9c058837a629508a8ba7c9f45c63",
          "body": null,
          "is_bot": false,
          "headline": "fix for gpu runner not showing up",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T01:46:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d023b773579aa345ee83c01118a40d0e269414ab",
          "body": null,
          "is_bot": false,
          "headline": "add debug log",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T01:26:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab58f0f79da2e1412445c02b44a446fb1f0a8144",
          "body": null,
          "is_bot": false,
          "headline": "bump ver",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T01:09:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ce9410e70e5c905ddb7be014a12805aa8524f46",
          "body": null,
          "is_bot": false,
          "headline": "main--> dev in desktop",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T01:09:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cde37866e752ee429c63fc79b86790e8c927d580",
          "body": null,
          "is_bot": false,
          "headline": "even stricter defender exclusion",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-10T00:58:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75819786b2f4c3d5a0c4b67fc8f940773215ce2c",
          "body": null,
          "is_bot": false,
          "headline": "clone repo in desktop tests too",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T00:42:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9c32908c205a5210f34dc8ca2ffa8a9f90ebf29",
          "body": null,
          "is_bot": false,
          "headline": "get around ssh",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-10T00:37:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28f9ce209b39fa1667e9a73ca810fe77bb4a68a7",
          "body": null,
          "is_bot": false,
          "headline": "more log for desktop",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-10T00:22:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b11013657425935495c864d98e708ef85bab682d",
          "body": null,
          "is_bot": false,
          "headline": "python unbuffered",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-10T00:16:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3a589785a93602ece7bcb66fb571356f03f2732",
          "body": null,
          "is_bot": false,
          "headline": "log folder",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-09T23:59:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9c9ac49f4f78a50343ddd25999d4038e74d9ef45",
          "body": null,
          "is_bot": false,
          "headline": "desktop runner for windows fix",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-09T23:02:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "214b08938b2e609ca61d9e63dfca6aab62c0f6e4",
          "body": "…test')\n\nThe dockertest subcommand was renamed to 'docker run' (with the helper\nfunctions extracted to _nodelink) some commits ago, but a function-local\nimport inside run_desktop() still pointed at the old module:\n\n    from comfy_test.cli.dockertest import _clone_node, _expand_nodelink\n    ModuleNot\n[…]\nually invoked. Repointed to the live module\n(comfy_test.cli._nodelink, with clone_node / expand_nodelink — no\nleading underscore).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.67: fix _desktop_runner stale import (was 'comfy_test.cli.docker…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T21:54:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1420c4baab1d593b26a99213b4bdf40b63ce0513",
          "body": "The cdp_driver.py + merge_logs.py scripts lived at\n.github/workflows/scripts/ where they were reachable to old\n_test-{macos,windows}-desktop.yml reusables (which curl them from\nGitHub raw) but invisible after pip install. _desktop_runner.py\nresolved them via Path(__file__).parents[3] and ended up lo\n[…]\nackage; update\n_desktop_runner.py to resolve them package-relative. ASCII-sweep both\nfiles (43 occurrences). Wheel now ships them.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.66: ship desktop CDP scripts inside the package",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T21:49:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d7f725eb854b2d58ab866ca9aa87306311a52e01",
          "body": "Sweeps 119 occurrences of 9 non-ASCII chars across 23 source files to\nASCII equivalents (-> ... -- * >= > OK FAIL). Default Windows Python\nstdout encoding is cp1252; printing chars outside that codepage raises\nUnicodeEncodeError and exit-1s the CI step.\n\nLoad-bearing line was cli/_nodelink.py:49 (cl\n[…]\n prints can't regress.\n\nAdds tests/test_ascii_clean.py as a regression guard: scans\nsrc/comfy_test/**/*.py and asserts pure ASCII.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.65: ASCII-clean source — fixes Windows cp1252 charmap crashes",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T21:42:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9e8631145e3d632b69fc3877b675f500c28a1abc",
          "body": "…stalls\n\nThe Linux + Windows platform implementations shell out to a bare `uv`\non PATH (e.g. `uv venv .venv`, `uv pip install`). When comfy-test is\npip-installed into a fresh env that doesn't already have uv (e.g.\nGitHub-hosted runners after the dispatch-test.yml CPU job collapse),\nthe install level\n[…]\nich ships the\nbinary) into the same env. The `uv` script then lives in pip's scripts\ndir, which actions/setup-python puts on PATH.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.64: add uv as runtime dep — fixes 'uv: not found' in fresh CI in…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T21:28:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "61a82d7384d6abf92fdd032be1f1236426d933c8",
          "body": "…er end-to-end\n\nDrops cache, ComfyUI clone, venv setup, validate-endpoint clone, and the\npre-spawned ComfyUI server. comfy-test run already does all of that\ninternally (clone node, uv venv, ComfyUI clone, deps, server lifecycle).\nCPU job: 156 lines deleted, 15 lines kept.\n\nEach cold run is ~3-5 min \n[…]\nOMFY_TEST_LOGS_DIR — would have triggered the interactive setup\nwizard); platform-list comments updated to -cpu suffix convention.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "v0.3.63: collapse CPU job — let comfy-test run handle clone/venv/serv…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T21:25:18Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "189300849eb657db97caf83282aa376058c2750b",
          "body": "…omfy-test",
          "is_bot": false,
          "headline": "v0.3.62: drop fragile workflow_ref grep; just pip install --upgrade c…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T21:10:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "400690feaa98b87bd0d89ac0b6f79575d312496c",
          "body": null,
          "is_bot": false,
          "headline": "v0.3.61: tag for stable dispatch-test pin",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T21:04:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "034e68c166cd0ea5243d6c6c8bf90ebb43320581",
          "body": null,
          "is_bot": false,
          "headline": "clean",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T20:38:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00f33eb027e6e89bd53151fd2e31f86f4b425ed5",
          "body": "…obs (forwarded via COMFY_TEST_PYTHON_VERSION env)",
          "is_bot": false,
          "headline": "dispatch-test.yml: add desktop variants + random Python pick on GPU j…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T20:26:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2465f83b818a7412a3a283a66d9dc1232225820",
          "body": "…on self-hosted (docker)",
          "is_bot": false,
          "headline": "dispatch-test.yml: unified reusable, CPU on hosted (with cache), GPU …",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T20:18:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe30d0d21db8359a0311a8989c2b2a3e3faf9738",
          "body": "…st OS implicit)",
          "is_bot": false,
          "headline": "comfy-test docker run: rename from 'docker test'; drop --platform (ho…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T20:10:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7a79e229c16b2ea5ef4d76ad809697f60117ef2",
          "body": "…t OS implicit)",
          "is_bot": false,
          "headline": "comfy-test run: accept <url-or-path> positional; drop --platform (hos…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T20:05:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f81491794e00035ef355c9c0c3bc9a3c8899ae86",
          "body": "… test)",
          "is_bot": false,
          "headline": "drop legacy GPU bare-metal reusables (superseded by comfy-test docker…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T19:43:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c72aee19665c446873aa9e684dcbe3101ae52275",
          "body": "… 'enum'",
          "is_bot": false,
          "headline": "docker root: use per-drive fsutil devdrv query instead of nonexistent…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T19:01:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9785e84ac3bee1b88a14e7c5be973c378cd3866e",
          "body": null,
          "is_bot": false,
          "headline": "docker build: prompt-before-download + live progress bar",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T18:48:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b324a9e43dad24337ab2715df936f7504964492c",
          "body": "…/workspaces",
          "is_bot": false,
          "headline": "docker: unified Dev-Drive-aware docker root for logs/stage/installers…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T18:45:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26445068b9b69cf5b1d8bade2af48df1560481a1",
          "body": null,
          "is_bot": false,
          "headline": "defender warning: also emit cmd.exe one-liner alongside PowerShell",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T18:37:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da138d3ca91c8bc18cf66c990ecaa8105285fc75",
          "body": null,
          "is_bot": false,
          "headline": "docker image list",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T18:32:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30aa1690c8e219b7dddfa1b3b222ddad4fe91eaf",
          "body": null,
          "is_bot": false,
          "headline": "docker image list",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T18:05:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7cc5c2e92c35774a5bcb3b3fe61216abd0113d7b",
          "body": null,
          "is_bot": false,
          "headline": "cleaner cli, dropped stale templates",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T18:01:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc43d4fbd68aa4ba9116641c6e8f5a7ccf119e2a",
          "body": null,
          "is_bot": false,
          "headline": "windows docker image stripped",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-09T17:45:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf19d8000bc4a271a527b7ae0cd89aca762ea0ca",
          "body": null,
          "is_bot": false,
          "headline": "add gpu stuff",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-09T16:00:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89a27a342c10b02560f937b4125ac81375a5c600",
          "body": null,
          "is_bot": false,
          "headline": "multiple workflows working",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-09T14:49:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36537f73576576436553fde352ed46843baa69dc",
          "body": null,
          "is_bot": false,
          "headline": "no more hardcoding on macos",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-09T13:47:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d256b850b3bd1b92394258ab4cae7f15ce89429",
          "body": null,
          "is_bot": false,
          "headline": "latest",
          "author_name": "comfy-gpu-ci",
          "author_login": null,
          "committed_at": "2026-05-09T13:22:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d9a69756a914dfbe46148f3a406f3da929980b1a",
          "body": "…oads\n\nThree fixes from running --desktop_mac on the user's mac-mini-via-SSH:\n\n1. bundle copy:\n   shutil.copytree(symlinks=False) dereferences the framework symlinks\n   inside ComfyUI.app (Versions/Current -> A; top-level binary ->\n   Versions/Current/...). The result is a bundle Gatekeeper rejects \n[…]\n or `sudo launchctl asuser <uid> ...`.\n   Replaces a confusing 60s CDP-poll timeout with an immediate exit.\n\nbump 0.3.51 -> 0.3.52\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "desktop_runner: cp -R for app bundle + SSH-session guard + curl downl…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T14:37:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "632f81e47c90c19b58f46d41e966ec0533094292",
          "body": "…rity\n\nWe've been round-tripping through GHA dispatches all day to iterate on\ndesktop CI behavior (~10 min per loop). Add a local entry point that\nmirrors the _test-{macos,windows}-desktop.yml flow on the host so we\ncan iterate on cdp_driver in seconds.\n\nUsage:\n\n    comfy-test dockertest PozzettiAnd\n[…]\neflight and\nclone-and-bind-mount path. Mutual exclusion enforced via argparse\nadd_mutually_exclusive_group.\n\nbump 0.3.50 -> 0.3.51\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "dockertest: add --desktop_mac/--desktop_windows[_gpu] for local CI pa…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T14:04:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0de5675467d5d3f6e0d57285c1a0747417b99564",
          "body": "…5 iters\n\nFrames from CADabra-1248 macos-desktop run showed the panel state was\nvisually IDENTICAL across the entire 33-second scroll loop — Getting\nStarted highlighted at top, Partner Nodes at bottom, no movement.\nThe scroll was a silent no-op. Two reasons:\n\n1. Selector picked .first match of overf\n[…]\nes prior behavior for unusual DOMs).\n- Logs scrollTop on success/exit so we can see where it actually went.\n\nbump 0.3.49 -> 0.3.50\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "cdp_driver: scroll Templates sidebar to actual floor, not arbitrary 2…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T13:22:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f4301099a69916ab82544ba1317f073c0629cbb1",
          "body": "linux-gpu publishes via cli/publish.py:122-128 which iterates\n<RunId>/<platform>/ contents and copies them flat into\ngh_pages/<branch>/<platform>/. cpu and desktop publish via\n_publish-results.yml which was uploading $COMFY_TEST_LOGS_DIR/* and\nrunning cp -r artifact/* gh-pages/<platform>/, preservin\n[…]\njson + videos/.\n- crash_dump.log + session.log emitted at $COMFY_TEST_LOGS_DIR root\n  to match gpu's shape.\n\nbump 0.3.48 -> 0.3.49\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "gh-pages: flatten cpu + desktop layouts to match linux-gpu",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T12:57:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "adfa8e96a7ee8e46cb4be16dfeaf31f46ecae72c",
          "body": "cpu's gh-pages layout under each platform is:\n\n  dev/<platform>/<RunId>/<platform>/\n  ├── crash_dump.log\n  ├── index.html\n  ├── results.json\n  ├── session.log\n  ├── logs/\n  ├── screenshots/\n  └── videos/<workflow>/{frame_NNN.jpg, metadata.json}\n\nThe framework's `comfy-test run` builds <RunId> as\n<sh\n[…]\nOT — same call cpu's\n  framework makes internally, so the rendered report sits at the same\n  relative path.\n\nbump 0.3.47 -> 0.3.48\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "desktop: mirror cpu's nested run-dir layout on gh-pages",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T12:40:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7a051c91b67d512059336352aa4b3cebe3bb3778",
          "body": "…ling\n\nCDP Page.startScreencast in v0.3.46 captured ~318 frames then stalled:\nthe ack flow has to run on Playwright's CDP-event dispatcher thread,\nwhich is the same thread that needs to read the ack response off the\nWebSocket. Acks lag, chromium's send buffer fills, screencast pauses\nindefinitely. R\n[…]\ncreencast_frame, start_screencast,\nPage.stopScreencast, base64 import. JPEG encoding is gone (back to PNG).\n\nbump 0.3.46 -> 0.3.47\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "cdp_driver: revert to polling capture, fix detached-page silently fai…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T11:10:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0a079cfb488f347e54f42b1a632c96b020afa0d0",
          "body": "Polling page.screenshot() in sleep_capturing died silently after\nbrowser.close()+connect_over_cdp at the Apply Changes restart: the\nnew page was attached to a different CDP target than screenshot()\nwas firing against, and the bare except: pass in frame() swallowed\nthe error. Result: published driver\n[…]\n Page.stopScreencast issued before encode so chromium isn't still\n  streaming during the ffmpeg invocation.\n\nbump 0.3.45 -> 0.3.46\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "cdp_driver: capture frames via CDP Page.startScreencast",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T10:33:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0330a5dbacd1ed1191fa9510c4daf9e00edc33ea",
          "body": "…imeout\n\nThe post-restart relaunch can show a \"Node Pack Issues Detected!\" Vue\nmodal warning about extension conflicts (visible on CADabra macos-desktop\nv0.3.44 run at frame 0048). It overlays the canvas and intercepts clicks\non the Templates sidebar button, causing:\n\n  ext: Templates click failed: \n[…]\n conflict modal, the button settles into its hit area only\n  after a brief layout pass on a fresh relaunch.\n\nbump 0.3.44 -> 0.3.45\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "cdp_driver: dismiss \"Node Pack Issues\" modal + bump Templates click t…",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T10:05:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "07f8b1ccd21e9f725173a97b0049ba5013687f1e",
          "body": "CADabra macos-desktop run on v0.3.43 showed driver got past wizard +\nserver-up, then \"Continue Locally not found, skipping\" → couldn't reach\nExtensions → \"tile not found, ending capture\". The cloud upsell modal\neither takes >8s to render or its button copy varies across Desktop\nversions. Either way,\n[…]\ninsert one with hardware\nmetadata. Two inserts produced two 'system' entries in the published\nresults.json.\n\nbump 0.3.43 -> 0.3.44\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "cdp_driver: robust cloud-upsell dismiss + drop dup system row",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T09:02:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aec9b3e3eb25978ad5dede803e0de5a31e19af66",
          "body": "The merged system.log on gh-pages was 12k+ lines for the windows-desktop\nCADabra run, of which the first ~12,000 were Electron main-process noise:\ndirectory-creation enumeration (every model subfolder logged on each\nboot), IPC chatter, renderer-ready messages, and PowerShell prompt ANSI\nrendering. T\n[…]\nwere slurping both the prior session's\n  rotated log (one previously seen at 336k lines) and the fresh log.\n\nbump 0.3.42 -> 0.3.43\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "merge_logs: skip main.log* and rotated session logs",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T08:47:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "065259210a9d22c1948fbca578a6291d50e3fcd4",
          "body": "The Apply Changes toast wait had a 20s deadline, then unconditionally\npkill'd the app. For nodes whose install.py runs `pixi install --all`\nover several isolation envs (CADabra: 1, GeometryPack: 4), pixi takes\nminutes; the toast never appears within 20s, the kill fires while pixi\nis still resolving,\n[…]\nkflow row so logs/system.log renders\n  under the system card on the gh-pages report (carried-forward edit).\n\nbump 0.3.41 -> 0.3.42\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "cdp_driver: stop killing app mid-pixi-install",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T08:35:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e9b226a916c46498c813d3bb1e02242211751ef7",
          "body": "Rename from comfy_logs/ to logs/ so html_report.generate_html_report\npicks the dir up automatically (it scans logs/ for *.log files keyed\nby stem; opening the system workflow card now shows logs/system.log\nin the lightbox).\n\nAdd merge_logs.py that walks all log files, splits on the\n'[YYYY-MM-DD HH:M\n[…]\nonologically-sorted\nstream tagged with [MAI]/[SRV]/[UI ] so install + Apply Changes +\npost-restart land in one ordered file. Both YML Collect steps run\nthe merge after copying.\n\nBump 0.3.39 -> 0.3.40.",
          "is_bot": false,
          "headline": "logs: collect into logs/ + merge into chronological logs/system.log",
          "author_name": "PozzettiAndrea",
          "author_login": "PozzettiAndrea",
          "committed_at": "2026-05-08T04:20:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 289,
      "latest_release_at": "2026-07-27T14:36:49Z",
      "latest_release_tag": "v0.3.119",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 17,
      "days_since_latest_release": 0,
      "mean_days_between_releases": 7.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 28,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "comfy-test",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "ci",
            "comfyui",
            "github-actions",
            "installation",
            "testing",
            "Development Status :: 3 - Alpha",
            "Intended Audience :: Developers",
            "License :: OSI Approved :: MIT License",
            "Programming Language :: Python :: 3.10",
            "Programming Language :: Python :: 3.11",
            "Programming Language :: Python :: 3.12",
            "Programming Language :: Python :: 3.13"
          ],
          "ecosystem": "pypi",
          "matches_repo": true,
          "registry_url": "https://pypi.org/project/comfy-test/",
          "is_deprecated": false,
          "latest_version": "0.3.119",
          "repository_url": "https://github.com/PozzettiAndrea/comfy-test",
          "versions_count": 350,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 3704,
          "first_published_at": "2026-01-15T12:33:35.370555Z",
          "latest_published_at": "2026-07-27T14:37:04.666099Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 5,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 94832,
      "source_files_sampled": 90,
      "oversized_source_files": 4,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "pyproject.toml"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "pypi"
      ],
      "dependencies": [
        {
          "name": "tomli",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.0.0"
        },
        {
          "name": "requests",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=2.28.0"
        },
        {
          "name": "websocket-client",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": null
        },
        {
          "name": "py7zr",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.20.0"
        },
        {
          "name": "psutil",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=5.9.0"
        },
        {
          "name": "uv",
          "manifest": "pyproject.toml",
          "ecosystem": "pypi",
          "version_constraint": ">=0.4.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 6,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "PozzettiAndrea",
          "commits": 266,
          "avatar_url": "https://avatars.githubusercontent.com/u/57418757?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "_publish-results.yml",
        "_test-linux.yml",
        "_test-macos-desktop.yml",
        "_test-macos.yml",
        "_test-windows-desktop-gpu.yml",
        "_test-windows-desktop.yml",
        "_test-windows-portable.yml",
        "_test-windows.yml",
        "dispatch-test.yml",
        "pr-gate.yml",
        "publish.yml",
        "test-matrix.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "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": 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": null,
            "reason": "no pull request found",
            "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/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "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": 10,
            "reason": "30 commit(s) and 0 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": 0,
            "reason": "no SAST tool detected",
            "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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a61c9d42cfe6d6c85e97b3b5482d5a55b1bb74ea",
        "ran_at": "2026-07-27T14:39:10Z",
        "aggregate_score": 3.9,
        "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-27T14:37:08Z",
      "oldest_open_prs": [
        {
          "number": 7,
          "created_at": "2026-05-10T22:51:29Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-05-05T15:18:13Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/PozzettiAndrea/comfy-test",
    "host": "github.com",
    "name": "comfy-test",
    "owner": "PozzettiAndrea"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 39,
        "vitality": 82,
        "community": 36,
        "governance": 58,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 82,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 289,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 17
            },
            "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": "17/52 weeks with commits",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 17
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "289 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 289
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 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": "v0.3.119",
              "releases_from_tags": false,
              "days_since_latest_release": 0,
              "mean_days_between_releases": 7.8
            },
            "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.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 7.8
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Community & Adoption",
        "value": 36,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "forks": 0,
              "stars": 5,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "5 stars",
                "points": 9.8,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 60,
            "inputs": {
              "packages": [
                "comfy-test"
              ],
              "dependents": null,
              "ecosystems": "pypi",
              "total_downloads": null,
              "monthly_downloads": 3704
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,704 downloads/month across pypi",
                "points": 47.6,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3704,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 58,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": 6,
              "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": "6/6 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 6,
                      "decided": 6
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 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": 67,
            "inputs": {
              "followers": 408,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "PozzettiAndrea",
              "public_repos": 58,
              "account_age_days": 2455
            },
            "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": "408 followers of PozzettiAndrea",
                "points": 18.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 408,
                      "login": "PozzettiAndrea"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "58 public repos, account ~6 yr old",
                "points": 24.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 58
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "comfy-test"
              ],
              "ecosystems": "pypi",
              "any_deprecated": false,
              "min_days_since_publish": 0
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on pypi",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "pypi"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 0 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "350 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 350
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 92,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "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": null,
                "points": 16,
                "status": "met",
                "details": [],
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": false
            },
            "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": 0,
                "status": "missed",
                "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": "at_risk",
        "name": "Security",
        "value": 39,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 39,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.9
            },
            "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "30 commit(s) and 0 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": "no SAST tool detected",
                "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "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": 2
            },
            "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": "at_risk",
        "name": "AI Readiness",
        "value": 43,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 24,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.45,
              "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": "45 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 24,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 45,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.25,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 11,
                "status": "met",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "25 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 25,
                      "sampled": 100
                    }
                  }
                ],
                "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": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "primary_language": "Python",
              "largest_source_bytes": 94832,
              "source_files_sampled": 90,
              "oversized_source_files": 4
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Python without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "Python"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "4/90 source files over 60KB",
                "points": 52.6,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 90,
                      "oversized": 4
                    }
                  }
                ],
                "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",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index pypi:comfy-test@0.3.119; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T14:39:15.920397Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/p/PozzettiAndrea/comfy-test.svg",
  "full_name": "PozzettiAndrea/comfy-test",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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