Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-27 14:39 UTC

PozzettiAndrea / comfy-test

PythonMIT★ 5 Sterne⑂ 0 Forksseit Jan. 2026Auf GitHub ansehen ↗

PozzettiAndrea/comfy-test erreicht einen Gesundheitsindex von 59 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Vitality (82/100) ab, am schwächsten bei Community & Adoption (36/100). Zuletzt heute aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

59
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

59
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Andrea PozzettiPersönliches Konto
408 Follower58 öffentliche Reposseit Nov. 2019

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
PyPIcomfy-test0.3.1193.704350vor 0 Tagencicomfyuigithub-actionsinstallationtesting

Metriken nach Kategorie

Vitalität

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

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

Community & Verbreitung

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

36Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
9.8/60Stars — 5 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars5
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
47.6/80Downloads pro Monat — 3.704 Downloads/Monat über pypi
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagescomfy-test
dependents
ecosystemspypi
total_downloads
monthly_downloads3.704
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

58Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
38.2/38.3PR-Annahme — 6/6 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs6
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
18.8/25Reichweite des Inhabers — 408 Follower von PozzettiAndrea
24.9/25Kontohistorie — 58 öffentliche Repos, Kontoalter ca. 6 Jahre
Verwendete Eingangsdaten
followers408
owner_typeUser
is_verified
owner_loginPozzettiAndrea
public_repos58
account_age_days2.455
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf pypi
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 0 Tagen
20/20Versionshistorie — 350 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagescomfy-test
ecosystemspypi
any_deprecatednein
min_days_since_publish0

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

71Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 12 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration
9.6/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_configja
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.

Dokumentation

40Gefährdet
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
0/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirnein
has_descriptionnein

Sicherheit

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

39Gefährdet · 16 % des Gesamtindex

Sicherheitslage

39Gefährdet
Wie die Bewertung erfolgt
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 — keine Daten
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.5Lizenz — 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
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,9
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

43Gefährdet · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
24/40Lesbare Commit-Historie — 45 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,45
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration
0/11Statische Typprüfung
10/10Reproduzierbare Umgebung — Dockerfile
10/10Belegte Agentenpraxis — 25 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfileja
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0,25
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — Python ohne Typprüfungs-Konfiguration
52.6/55Handhabbare Dateigrößen — 4/90 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePython
largest_source_bytes94.832
source_files_sampled90
oversized_source_files4

Eckdaten

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

Warnungen zur Datenerhebung

  • 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

Weitere Details

OpenSSF Scorecard 3.9 / 10
3.9Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-27 14:39 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-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
Direkte Abhängigkeiten 6
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "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"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPyPI.